【生意多】-免费发布分类信息
当前位置: 首页 » 新闻 » 教程 » 正文

linux操作系统培训资料

放大字体  缩小字体 发布日期:2020-06-25 19:53:30    浏览次数:4
导读

  Linux操作系统培训 内容摘要 ? Linux基础 ? Linux常用操作命令 ? Linux设备管理 ? Linux文件管理 ? Linux进程调度 ? Linux多线程编程 ? Linux进程间通信 Linux基础 ? 操作系统的概念 操作系统是管理计算机系统资源(软件和硬件)资源 的系统软件,它为计算机提供方便,有效,安全,可靠 的工作环境。主要包括:进程管理

  Linux操作系统培训 内容摘要 ? Linux基础 ? Linux常用操作命令 ? Linux设备管理 ? Linux文件管理 ? Linux进程调度 ? Linux多线程编程 ? Linux进程间通信 Linux基础 ? 操作系统的概念 操作系统是管理计算机系统资源(软件和硬件)资源 的系统软件,它为计算机提供方便,有效,安全,可靠 的工作环境。主要包括:进程管理,存储器管理,设备 管理,文件管理,作业管理等。 ? 操作系统的分类。 操作系统分为实时操作系统和非实时操作系统,又可 以分为嵌入式操作系统和非嵌入式操作系统等。 linux操作系统即可以作为准实时的操作系统使用,也 可作为非实时操作系统使用,并且可以满足服务器操作 系统的要求,在桌面操作系统领域也得到较大的发展。 所以,linux操作系统已经渗透到嵌入式领域、服务器 领域、个人pc领域,成为目前应用领域最广的一种操作 系统。 Linux基础 ? Linux系统的组成 应整用个程li序nu等x系组统成由。内核、设备驱动、各种运行时的库、shell及 ? Linux的启动过程。 (后在自在硬举嵌件程入上序式电在领之初域后始成,化为首必lo先a要d会e的有r,硬在一件p个c(中自例成举如为程内b序io存运s)),行然 之核后的将开l始in位ux置内运核行读l取inu到x内内存核中. ,然后跳转到内 挂载l根inu文x内件核系在统进之行后必,要会的启初动始文化件设系置统工中作的和一 个是etc大程目名序录鼎作下鼎为的的系对i统n应i中t的进的s程h第e,l一li脚n个i本t进进文程程件,会。这,个然进后程运就行 Linux基础 ? Linux内核的作用 文网内件络核管协是理 议L、 ,in设 直ux备 接操管决作理定系、着统进系的程统核管的心理性,、能它存和负储稳责管定系理性统、的。 ? linux的版本号 内通核常的我版们本所号说。的版lin本u号x的由版三本部号分,组指成的主就版是本li号nu、x 次号过发版、版版6本本本为号 号 (次、 来 次版末 确 版本版 定 本号本号li、n号奇u1x。数9的为例为版末如开本版:发是本版2稳.号6本定.。1,版9同偶2本时为数还可主为是以版稳开通本 定版本)。 Linux常用操作命令 命令 ls cd pwd rm mkdir cp du rmdir find 功能 列出当前目录下有哪些文件和目录。(ls –l 为列出一个目录下的 详细信息) 进入一个目录。(cd .. 为进入上一级目录) 显示当前目录。 删除一个文件或目录。(rm –r 为删除一个目录及该目录下的所 有文件) 创建一个目录。 拷贝一个文件。(cp a b 把a文件拷贝成b文件) 列出目录占用磁盘空间的大小 删除一个目录 在指定路径查找文件 Linux常用操作命令 命令 grep mv chmod man top ps pstree 功能 在指定文件查找指定字符串 移动文件或目录 改变文件权限指令 命令或函数帮助查询指令 查看cpu和内存使用情况的指令 查看当前运行的进程的指令 查看进程树的指令 Linux设备管理 ? Linux上层应用与实际设备的关联 Linux对于设备的管理是通过设备驱动程序来进行管 理,采用设备文件的方式进行关联。每个设备文件 都有设备类型,主设备号、次设备号,在驱动程序 中会注册这些设备号。这样当上层应用程序操作设 备文件时,就会将请求通过Linux操作系统调用传递 到驱动程序中,驱动程序控制硬件设备完成相应的 操作。 Linux设备文件一般在/dev目录下面。例如如下设备文件: crw-rw---- 1 root uucp 4, 64 12月 8 09:57 /dev/ttyS0 是指/dev/ttyS0为字符型设备,主设备号为4,次设备号为 64。其实这就是linux系统中的串口1的设备文件。我们打开这 个设备文件,然后写入数据,我们写入的数据就会从串口发 送出去,我们读入数据,就会读取到从串口收到的数据。 如果我们想控制串口的速率、校验位、码位的长度,我们只 需要调用ioctl函数,然后传入相应的数据就可以了。 Linux文件管理 ? Linux系统中使用的文件类型 目前linux采用的文件系统有ext3文件系统,但是在嵌入式linux操作系统中 更多的使用的是jffs2,yaffs和nfs网络文件系统。 Jffs2文件系统是专为nor flash设计的文件系统,考虑到了nor flash的许多特 性,同时具有压缩性能,一般可以达到2:1的压缩效果,但是在用于大于 128Mbytes的flash时,效果不是太好。 Yaffs文件系统是专为nand flash设计的文件系统,考虑到了nand falsh的许 多的特性,但是不具有压缩性能,但其加载速度较快,使用于大容量存储的 场合。 除去以上文件类型的不同之外,linux提供统一的api操作函数,来实现对文 件系统的管理。另外,在linux中,在对一个设备上的文件进行操作时,需要 首先挂载这个设备到文件系统中,才能操作这个设备上的文件。 在linux内核启动时,会默认挂载一个文件系统,这个就是根文件系统,此后 所有的文件系统都是基于这个文件系统进行挂载,同时也可以卸载,但是根 文件系统是不能卸载的。 挂载一个文件系统的命令如下: mount –t yaffs /dev/mtdblock0 /mnt 意思是说,把文件类型为yaffs的mtdblock0上的文件系统挂载到/mnt目录下 Linux进程调度 ? Linux 调度算法 (一期Lie个的npu指开oxc定 始调h)的 计度。时 算算在间 。法一片一把个,般C单P时情U独间况的的片下时时持,间期续不划内时同分,间的为每从进时个这程期进个有程时不有 同分完配大它给小的进的 时程间时的片间最时片大,。这C时P个间U时进片间程的部被值分抢是。占在当,一一并个个用时进另期程一内用, 个一可个运进行 程进 可程 以代 几替次它被。调当度然程,序在选同中一(时只期要内它,的 时等在程在待同间都这I一片用种/O时还 完 情,期它 况没那内们 下用么再的 ,完,度时调)它被间度,还选片程例剩中时序如余。,的,一当一算如些所个法果时有时重进间的期新程片可才计挂,运结算起并行束所自可进;有己以, 进程的时间片,然后,一个新的时期开始。 Linux进程管理 ? Linux进程的优先级 静态优先级(Static priority),这种优先级由用户赋给实 时进程,范围从1 到99,调度程序从不改变它。 动态优先级(Dynamic prority),这种优先级只应用于普 通进程。实质上它是基本时间片[由此也叫进程的基本优 先级(base priority)]与当前时期内的剩余时间片之和。 当然,实时进程的静态优先级总是高于普通进程的动态优 先级,只有当TASK_RUNNING 状态没有实时进程时,调度 程序才开始运行普通进程。 Linux进程管理 ? Linux进程的创建 在Linux中要使用exec函数族。系统调用execve()对当前进程进行 替换,替换者为一个指定的程序,其参数包括文件名(filename)、 参数列表(argv)以及环境变量(envp)。exec函数族当然不止一个, 但它们大致相同,在Linux中,它们分别是:execl,execlp,execle, execv,execve和execvp,下面我只以execlp为例,其它函数究竟与 execlp有何区别,请通过manexec命令来了解它们的具体情况。 一个进程一旦调用exec类函数,它本身就死亡了,系统把代码段替 换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配 新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统 而言,还是同一个进程,不过已经是另一个程序了。(不过exec类函 数中有的还允许继承环境变量之类的信息。) Linux线程管理 ? 使用线程的优点 和进程相比,它是一种非常“节俭”的多任务 操作方式 (内存占用,启动时间,切换时间) 和进程相比,线程间的通信更加方便。 提高应用程序响应 使多CPU系统更加有效 改善程序结构,复杂问题简单化 Linux线程管理 ? 多线程的例子 #include stdio.h #include stdlib.h #include unistd.h #include pthread.h void thread(void) { int i; for(i=0;i3;i++){ printf(This is a pthread\n); usleep(100*1000); } } int main(void) { pthread_t id; int i,ret; ret=pthread_create(&id,NULL,(void *) thread,NULL); if(ret!=0){ printf (Create pthread error!n); exit (1); } for(i=0;i3;i++){ printf(This is the main process\n); usleep(100*1000); } pthread_join(id,NULL); return (0); } Linux线程管理 ? 多线程的编译 APP=threadTest $(APP):$(APP).c gcc -Wall -o $(APP) $(APP).c -lpthread clean: rm $(APP) Linux进程间通信 ? Linux进程间通信的方法 管道、消息队列、共享内存、信号量、套接口、信号 Linux进程间通信 ? 管道 管道包括无名管道和有名管道两种,前者 用于父进程和子进程间的通信,后者用于运 行于同一台机器上的任意两个进程间的通信 ? 无名管道 无名管道由pipe()函数创建: int pipe(int filedis[2]); 参数filedis返回两个文件描述符:filedes[0] 为读而打开,filedes[1]为写而打开。 filedes[1]的输出是filedes[0]的输入。 Linux进程间通信 ? 无名管道的例子 #include stdio.h #include stdlib.h #include unistd.h #include sys/types.h #include string.h #define INPUT 0 #define OUTPUT 1 int main() { int file_descriptors[2]; pid_t pid; char buf[256]; int returned_count; pipe(file_descriptors); if((pid = fork()) == -1) { printf(Error in fork\n); exit(1); } Linux进程间通信 ? 无名管道的例子 if(pid == 0) { printf(child process...\n); close(file_descriptors[INPUT]); write(file_descriptors[OUTPUT], test data, strlen(test data)); exit(0); } else { printf(parent process...\n); close(file_descriptors[OUTPUT]); returned_count = read(file_descriptors[INPUT], buf, sizeof(buf)-1); if(returned_count0){ printf(receive data from child is error\n); return -1; } buf[returned_count]=\0; printf(%d bytes of data received from child process: %s\n, returned_count, buf); } return 0; } Linux进程间通信 ? 命名管道 有名管道可由两种方式创建:命令行方 式mknod系统调用和函数mkfifo。下面 的两种途径都在当前目录下生成了一个 名为myfifo的有名管道: 方式一:mkfifo(myfifo,rw); 方式二:mknod myfifo p 生成了有名管道后,就可以使用一般的 文件I/O函数如open、close、read、 write等来对它进行操作 Linux进程间通信 ? 消息队列 消息队列用于运行于同一台机器上的进程间通信。 同一台机 器 送中 消运 息行。的用所于有消进息程对都列可 通以 信通 的过 函此 数消 有息 以对 下列 几向 个另 :一个进程发 int msgget(key_t key,int msgflg); int msgsnd(int msgid,struct msgbuf *msgp,int msgsz,int msg flg); int msgrcv(int msgid,struct msgbuf *msgp,int msgsz,long ms gtype,int msgflg); int msgctl(Int msgid,int cmd,struct msqid_ds *buf); 其中用于消息传递的消息数据的格式需要符合以下各式: struct msgbuf { long msgtype; ....... } Linux进程间通信 ? 共享内存 共享内存是运行在同一台机器上的进程间通信最快的方式, 因为数据不需要在不同的进程间复制。通常由一个进程创建 一块共享内存区,其余进程对这块内存区进行读写。得到共 享内存有两种方式:映射/dev/mem设备和内存映像文件。前 一种方式不给系统带来额外的开销,但在现实中并不常用, 因为它控制存取的将是实际的物理内存,在Linux系统下,这 只有通过限制Linux系统存取的内存才可以做到,这当然不太 实际。常用的方式是通过shmXXX函数族来实现利用共享内存 进行存储的。 首先要用的函数是shmget,它获得一个共享存储标识符。 int shmget(key_t key, int size, int flag); 这个函数有点类似大家熟悉的malloc函数,系统按照请求分 配size大小的内存用作共享内存。Linux系统内核中每个IPC结 构都有的一个非负整数的标识符,这样对一个消息队列发送 消息时只要引用标识符就可以了。这个标识符是内核由IPC结 构的关键字得到的,这个关键字,就是上面第一个函数的key Linux进程间通信 ? 共享内存 (当)共将享其内连存接创到建自后身,的其地余址进空程间可中以。调用shmat void *shmat(int shmid, void *addr, int flag); a地sdh址dmr,和id函f为la数sgh参m的数g返e决t回函定值数了即返以是回什该的么进共方程享式数存来据储确段标定所识连连符接接,的 的实际地址,进程可以对此进程进行读写操作。 使用共享存储来实现进程间通信的注意点是对 数数据据存时取 ,的 它同 所步 想,要必的须数确据保已当经一写个好进了程。去通读常取, 信另内等外存来号,的实量可 某 现被以 些要通 标来过 志实使位现用如对sS共hHm享Mc_存tLlO函储C数数K、设据S置存HM共取_享的UN存同LO储步C,K Linux进程间通信 ? 信号量 信号量又称为信号灯,它是用来协调不同进程间的数 据对象的,而最主要的应用是前一节的共享内存方式的 进程间通信。本质上,信号量是一个计数器,它用来记 录对某个资源(如共享内存)的存取状况。一般说来, 为了获得共享资源,进程需要执行下列操作: (1) 测试控制该资源的信号量。 (2) 若此信号量的值为正,则允许进行使用该资源。 进程将进号量减1。 (3) 若此信号量为0,则该资源目前不可用,进程进 入睡眠状态,直至信号量值大于0,进程被唤醒,转入 步骤(1)。 (4) 当进程不再使用一个信号量控制的资源时,信号 量值加1。如果此时有进程正在睡眠等待此信号量,则 唤醒此进程。 Linux进程间通信 ? 信号量 要信调号用量的是第一一个个数函据数集是合se,m用ge户t,可用以以单获独得使一用个这信一号集量合ID的。每个元素。 int semget(key_t key, int nsems, int flag); 集数果为k合。是0e。y,如引是还果用前是是一面引创个讲用建现过一新有的个集的IPC现合信结有(号构的一量的信般集关号在合键量服(字集务一,合器般它。中在将)客ns来e,户m决则机s定是必中是该须)创集指则建合定将新中nnss的的eemm信信ss号号;指量量如定 semctl函数用来对信号量进行操作。 int semctl(int semid, int semnum, int cmd, union semun arg); 不不同同的的操操作作,是实通际过编c程md时参可数以来参实照现使的用,。在头文件sem.h中定义了7种 semop函数自动执行信号量集合上的操作数组。 nt semop(int semid, struct sembuf semoparray[], size_t nops); 数s组em中op操a作rra的y是数一量个。指针,它指向一个信号量操作数组。nops规定该 Linux进程间通信 ? 信号 信号是在软件层次上对中断机制的一种模 拟,在原理上,一个进程收到一个信号与处 理器收到一个中断请求可以说是一样的。信 号是异步的,一个进程不必通过任何操作来 等待信号的到达,事实上,进程也不知道信 号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信 机制,可以看作是异步通知,通知接收信号 的进程有哪些事情发生了。信号机制经过 POSIX实时扩展后,功能更加强大,除了基 本通知功能外,还可以传递附加信息。 Linux进程间通信 ? 信号的例子 #include stdio.h #include stdlib.h #include unistd.h #include signal.h void signalCtrlC(int sig) { printf(Got CTRL+C key\n); exit(0); } int main() { signal(SIGINT,signalCtrlC); while(1){ sleep(1); } return 0; } Linux进程间通信 ? 套接字接口 套接字接口(socket)编程是实现Linux 系统和其他大多数操作系统中进程间通 信的主要方式之一。我们熟知的务、FTP服务、TELNET服务以及我们现 在正在做宽带网络信息服务等都是基于 套接口编程来实现的。除了在异地的计 算机进程间以外,套接口同样适用于本 地同一台计算机内部的进程间通信。 关于这部分的编程开发,会在以后的工 作更多的接触到。

 
关键词: linux培训资料
(文/小编)
打赏
免责声明
• 
本文为小编原创作品,作者: 小编。欢迎转载,转载请注明原文出处:https://www.31duo.com/news/show-320806.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们。
 

(c)2016-2019 31DUO.COM All Rights Reserved浙ICP备19001410号-4

浙ICP备19001410号-4