版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/8/20,1,第8章 Linux系统简介,最近几年,操作系统市场上出现了一个新生力量,成为各操作系统的强劲对手,它就是Linux。它与传统的操作系统有着完全不同的开发模式和发展历史,并且,随着网络的不断普及,Linux也必将发挥出越来越大的作用。,2020/8/20,2,1.Linux概述 2.Linux文件系统 3.Linux内存管理 4.Linux中的进程管理 5.Linux中的设备管理 6.Linux的shell简介,2020/8/20,3,从70年代中期发展起来的UNIX操作系统,一直是世界上普遍使用的操作系统之一。 然而由于UNIX版本的价格昂贵且操作复杂,普通用户难以接受
2、和使用。Linux的出现对那些个人用户来说,无疑是一个福音,因为它是一个完全免费的UNIX操作系统。,8.1 Linux概述 8.1.1 Linux 的发展,2020/8/20,4,Linux最早是在1991年由芬兰赫尔辛基大学的一位年轻人Linus Benedict Torralds开发的一个UNIX免费版本。刚开始,Linux只是Linus的个人爱好产物,其灵感来自于Minix(一种小型的用于操作系统教学的UNIX系统)。,2020/8/20,5,Linus首先在赫尔辛基大学的FTP服务器放置了这个操作系统,让人们下载Linux操作系统的第一个公开版本。 到1992年1月份,只有100个左
3、右的用户使用Linux,但网络上的任何人在任何地方都可以得到基本的Linux文件。 此后,网上的使用者们发送来许多修改代码问题的补丁程序将Linux不断完善。,2020/8/20,6,1994年3月,正式的Linux 1.0出现,此时,它的用户数已经非常庞大,而且也建立了Linux核心开发队伍。随着开发队伍的增长,Linus开始有计划地选择并依赖一些用户,Linus从他们那里得到大量的补丁程序并且相信这些补丁的功能,结果这些补丁程序成为内核中较大的部分。正是这种自由的氛围,使得Linux快速地成长起来,成为一个具有生命力的可供选择的桌面计算机的UNIX系统。,2020/8/20,7,Linux
4、是继Space War、Ewacs之后风靡全球的最成功的免费软件之一,它已迅速发展成为商业、教育及个人产品的操作系统。现在,Linux正在进入一个独立的发展阶段,而不是当初那样跟在UNIX的后面亦步亦趋。,2020/8/20,8,因为Linux是完全公开的,每个人都可以得到它的源代码,而且Linux的许多应用程序也可以免费从Internet上获得,这就使得越来越多的爱好者加入了Linux的开发行列,施展着各自的才华。 在中国,随着网络的普及,Linux爱好者的队伍也在不断壮大,相信不久的将来,Linux这种免费而性能优异的操作系统必将发挥越来越大的作用。,2020/8/20,9,Linux与U
5、NIX一样是一个多用户、多任务的操作系统。它除了具备UNIX的优点外,还具有许多自身的特点。,8.1.2 Linux的特性,2020/8/20,10,Linux是一个多任务系统,它支持的是抢占调度多任务,即每个程序都一直运行到操作系统抢占CPU让其他程序运行为止。Linux的多任务性可以大大地方便用户,你可以一边欣赏音乐,一边编辑文件,这样用户可以充分地利用计算机资源。,1多任务,2020/8/20,11,多用户是指多个用户可以在同一时间内使用同一台机器。这是UNIX的重要特性,也是Linux的一个重要特性。在实际应用中,尤其是在大的公司或者大学,多个用户同时访问同一资源,可以使某些昂贵的资源
6、得到更充分的利用。例如一个普通的BBS(电子公告牌)站使用了操作系统为Linux的普通微机,同时上线人数可达200人以上。,2多用户,2020/8/20,12,Linux是一个应用软件非常丰富的操作系统。下面是一些常用的应用软件。 基本命令 ls,tr,sed,awk等。 编辑器 vi,ez,pico,jed,jove,GNU Emacs等等。,3丰富的软件,2020/8/20,13, 编程语言和环境 C,C+,Objective C,Java,Pascal,Fortran,Lisp,Tcl/tk,Perl等等。 图形用户界面 X11R6.3(Xfree86 3.x),lesstif,qt,f
7、vwm,openwin,KDE等等。 还有许多其他的应用程序,2020/8/20,14,Linux可以支持多种类型的文件系统,其中主要有: (1)Minix。这是Linux的第一个文件系统。Minix的限制较死板、严格,如文件名不得长于14个字符,而且只支持64M的磁盘空间。,4多文件系统,2020/8/20,15,(2)EXT。扩展文件系统(或称EXT)是专门为Linux设计的文件系统,这个系统于1992年4月首次设计出来,克服了Minix的不少缺陷,最大支持2GB的磁盘空间,并允许使用长达255个字符的文件名,但这个系统在功能上仍有欠缺。因此,在1993年2月加入了第二个扩展文件系统,或称
8、为EXT2。,2020/8/20,16,(3)EXT2。EXT2几乎已成为Linux的标准文件系统。它可以移植到其它系统上,既可以用于固定盘,也可以用于可拆装介质。此系统允许盘分区的容量达到4T,文件名长达255个字符。,2020/8/20,17,(4)System V。这是UNIX系统早期支持的文件系统,现在仍可以在Linux系统中使用,这是因为要与已有的system V系统兼容。它也有minix文件系统同样的限制。 (5)NFS。这是由SUN公司开发的网络文件系统,它允许将一台机器上的文件系统装配到网上另一台计算机的目录结构中。尽管有少量的速度损失,网络连接是透明的,并允许整个网络共享磁盘
9、分区和文件。,2020/8/20,18,(6)vfat。这是微软的Windows 95和Windows NT使用的扩展的DOS文件系统。它在MSDOS文件系统下增加了对长文件名的支持。 (7)umsdos。这是Linux使用的扩展的DOS文件系统。它在保持了与DOS兼容的前提下,又增加了对长文件名,UID/GID,POSIX文件保护和特殊文件的支持。,2020/8/20,19,(8)hpfs。是OS/2使用的高性能文件系统。由于缺乏应有的文档,在Linux下这种文件系统是只读的。 (9)proc。这是建立在Linux内核中的特殊文件系统类型,是一种伪文件系统,它被用来作为连接内核数据结构的界面
10、。它允许对系统的不同部分和它的进程进行访问。查看/proc目录时,我们会发现其中有一些目录和文件随着时间在变化,,2020/8/20,20,内核通过/proc文件系统提供系统统计数据和进程信息。当用户访问/proc中的文件时,内核可以识别并产生满足用户读请求的某些数据。这些目录和文件都不在磁盘上,它们是由内核动态地释放出来的,以方便ps和top等程序访问这些数据。,2020/8/20,21,(10)Msdos。Dos、Windows和某些OS/2计算机使用的文件系统。标准的DOS磁盘和分区可以装配到Linux系统中,并可以对它们进行访问。系统力图使它的外在表现类似UNIX,但还受到一定限制。如
11、文件格式和名称等。 Linux支持的文件系统还有好多。在这些文件系统中,Linux使用最普遍的文件系统是ext2,它可以支持到4T的硬盘,文件名最长可达255个字符。,2020/8/20,22,Linux支持的硬件相当广泛,只要不是太冷僻的设备,在Linux中都可以找到相应的驱动程序。 除了上述特性之外,Linux还有许多其它特性,如:对应用程序使用的内存进行保护,共享内存页面,使用分页技术的虚拟内存,优秀的磁盘缓冲调度功能,动态链接共享库,支持伪终端设备,支持多个虚拟控制台,具有强大的网络和通信功能,良好的软件移植性等。,5支持的硬件多,2020/8/20,23,Linux的文件系统设计思想
12、与UNIX系统的设计思想一样,完整、一致、统一,具有很大的灵活性。Linux的一个非常重要的特点是它采用了VFS(Virtual Filesystem Switch)机制,这使得Linux支持的文件系统类型非常多。,8.2 Linux文件系统 8.2.1 概述,2020/8/20,24,Linux采取的是单一的目录层次结构。 Linux系统中,使用fdisk命令将物理磁盘划分为许多逻辑分区,每个分区都可以是一个文件系统。每个文件系统有自己的顶层目录和下面的目录层次结构。,2020/8/20,25,系统将这些单独的文件系统组成一个系统的总的目录层次结构,也就是说,将一个文件系统的顶层目录装配到另
13、一个文件系统的子目录上,形成一个树状的文件系统结构。该目录树的顶部是一个单独的根目录,用“/”表示。根目录是一些标准的子目录和文件。 在图8-1的Linux目录树中,文件系统 usr和home挂到根目录下,形成统一的树形目录结构。,2020/8/20,26,bin,lib,etc,dev,proc,tmp,home,sxj,lzw,xyf,hda1,user,x386,bin,图 8-1 Linux的目录树,2020/8/20,27,这样,在用户看来,Linux系统的文件空间是由基于树状结构的文件和目录组成的,它的根在顶部,就是顶层的根目录“/”,其它的各种目录和文件都作为根目录向下的分支。
14、虽然每种文件系统存储数据的基本格式都是不一样的,但在Linux中,系统会把任何被访问文件的数据整理成一个在目录树下的文件。,2020/8/20,28,Linux的文件分为常规文件和特殊文件两类 常规文件又分为文本文件、数据文件、二进制可执行文件等。 在/dev目录下的设备文件叫做特殊文件,利用这些文件用户可以像访问普通文件一样方便地访问系统资源和设备。,2020/8/20,29,例如,读取/dev/mouse文件就是从鼠标器读取输入信息。 Linux提供的设备文件,为用户使用设备提供了一致的访问接口。 Linux中的目录也可看成是一种特殊文件,其中保存着目录中文件的名称、文件在磁盘上的存储位置
15、等信息。 另外,在Linux中文件名和目录名都区分大小写。,2020/8/20,30,Linux环境中,最成功的文件系统是第二个扩展文件系统EXT2。现在,EXT2文件系统作为所有Linux版本的基本文件系统。,8.2.2 Ext2文件系统,2020/8/20,31,EXT2文件系统中的数据保存在数据块中,这些数据块的长度相等。实际上,数据块的长度在不同的EXT2文件系统中可以不同,数据块的大小可以在用mke2fs创建一个特定的EXT2文件系统时设定。 每个文件保存在整数个数据块上。若一个块长为1024字节,则一个1025字节的文件会占2个1024字节大小的块,这就意味着每个文件大体上要浪费半
16、个块。 数据块中保存的并不全是数据,有些块用来定义文件系统使用的数据结构。,2020/8/20,32,EXT2用一个inode节点(也叫索引节点)数据结构描述每一个文件,该节点记录了相应文件的数据地址,占用的数据块以及该文件的文件类型、访问权限、修改时间等。 EXT2文件系统中的每个文件inode节点有唯一的整数标识号,文件系统的inode节点全部保存在节点表中。 EXT2文件目录只是一些简单的文件名和指向该文件节点的指针。,2020/8/20,33,图8-2指出EXT2文件系统保存在块结构的设备中。文件系统不必考虑在物理介质上的具体存放位置,而只需记住逻辑块的编号。 实际上,块设备驱动程序完
17、成逻辑块到物理存放位置的转换。每当文件系统需要从保存信息或数据的块设备中读取写入数据时,便要求它支持的设备驱动程序读入整数个块。,2020/8/20,34,EXT2文件系统将其占用的逻辑分区划分为“块组”(Block Group),每个块组重复保存着文件系统中的重要信息,万一有重大问题出现,需要恢复文件系统时,就会用到这些备份信息。同时,这些块组也用来保存实际的文件和目录数据。,2020/8/20,35,图 8-2 EXT2文件系统的物理布局,2020/8/20,36,在Linux系统中,inode节点是基本的数据块。文件系统中的每个文件或目录由一个inode节点描述,每个块组的EXT2 in
18、ode节点保存在inode节点表中,同时也保存节点位图,通过位图可找到分配或未分配的inode节点。图8-3表示了EXT2 inode节点的结构。,1、EXT2中inode节点,2020/8/20,37,数据,数据,数据,数据,数据,数据,数据,数据,数据,图 8-3 EXT2的inode节点,2020/8/20,38,在EXT2中,一个inode节点可描述一个文件、目录、符号链接、块设备、字符设备或FIFO。它包含以下信息: (1)模式(mode):包含inode节点的内容和用户权限两项信息。 (2)所有者信息(Owner Information):该文件或目录所有者的身份辨认,允许文件系统
19、正确地设定访问权限。,2020/8/20,39,(3)大小(Size):该文件或目录占用的字节数。 (4)时间戳(Timestamps inode):节点的建立时间及最后一次修改时间。 (5)数据块(datablocks):定义了指向保存inode节点描述的数据块。,2020/8/20,40,前12个数据块指针直接指向包含文件数据的数据块,后3个数据块则是间接指针。 利用前12个直接指针,可以保存的文件最大为12KB。如果文件大小超过了12KB,则用到了单级间接指针,这一指针指向保存着一组数据块指针的数据块,这些指针指向包含实际数据的数据块。,2020/8/20,41,超级块中描述了文件系统基
20、本大小与形状。其中的信息主要用来进行文件系统的维护。虽然在每个块组中都有一个超级块的备份,一般情况下,EXT2文件系统只需读取块组0中的超级块,其它块组中的超级块在块组0中的超级块损坏时使用。 超级块中主要包含的信息有:文件系统的标识信息、安装统计信息、数据块的信息(如大小、数据块数、空闲数据块数)、inode信息等。,2、EXT2超级块,2020/8/20,42,Linux文件系统的每个块组都有一个描述块组情况的数据结构。它主要描述的信息有:数据块的分配信息(即块位图)、节点表、节点的分配信息等。 所有的块组的描述形成一个块组描述表,每个块组也像超级块一样,在其超级块的副本之后,也包含块组描
21、述的整个列表。但只有第一个副本(保存在块组0中)真正被EXT2文件系统使用,其余副本像超级块副本一样,在主副本破坏时使用。,3、EXT2的块组描述,2020/8/20,43,在EXT2中,目录是一种特殊文件,用于创建和保存文件系统、访问文件路径。目录文件中包含了目录项的列表,每个目录项中的信息非常简单,主要是文件名及其长度以及索引节点号。如图8-4所示:,4、EXT2目录,2020/8/20,44,Inode节点号,图 8-4 文件目录,2020/8/20,45,在Linux中,不注重文件名的格式和长度。查找文件时,先在超级块中找到根目录的inode编号,然后从根目录起查找各级目录,直到找到要
22、查找的文件的inode节点,从inode节点中可找到文件所在的物理块,进而可读出文件中的数据。,2020/8/20,46,在EXT文件系统的开发过程中,引入了一个非常重要的概念,即虚拟文件系统(VFS)。 VFS作为实际文件系统(EXT)和操作系统之间的接口,将实际的文件系统和操作系统隔离开来。VFS允许Linux可以支持除EXT之外的许多文件系统类型。各文件系统为VFS提供一致的接口,文件系统的所有细节由软件转换,因此对Linux的内核以及运行在Linux上的程序而言,所有的文件系统都是一样的。,8.2.3 Linux的虚拟文件系统,2020/8/20,47,如图8-5所示,是虚拟文件系统和
23、实际文件系统之间的关系。虚拟文件系统必须管理所有可在任意时刻挂装的不同文件系统。为此,Linux虚拟文件系统维护一些数据结构,用以描述整个虚拟文件系统以及实际已挂装的文件系统。VFS利用超级块和inode节点描述整个文件系统,这与EXT2文件系统使用的超级块和inode 节点方式没什么不同。,2020/8/20,48,但是在VFS中,超级块是用来描述文件系统整体情况的数据结构,主要内容包括文件系统所在的设备、指向文件系统的inode节点指针、块尺寸、指向文件系统超级块例行程序的指针等。像在EXT2文件系统中一样,VFS中的文件、目录等均由对应的inode节点代表,每个VFS inode中的信息
24、来源于基本文件系统,由文件特定的子程序创建。VFS inode只存在于内核内存中,实际保存于VFS的inode cache中。,2020/8/20,49,目录chache,VFS,Minix,EXT2,缓冲区cache,磁盘驱动程序,Inode cache,图 8-5 虚拟文件系统与实际文件系统之间的关系示意图,2020/8/20,50,每个文件系统在初始化时,首先在VFS中进行注册。 如果文件系统内建于内核中,则初始化过程发生在系统引导时;如果文件系统作为内核可装卸的模块,则实际挂装某个文件系统时进行初始化。 当某种基于块设备的文件系统(包括root文件系统)被挂装,VFS必须读取其超级块。
25、,2020/8/20,51,不同类型的文件系统所对应的超级块读取例程必须能理解实际文件系统的拓扑结构,并且能够将实际的超级块结构映射为VFS超级块结构。 每个VFS超级块包含了文件系统信息,并且还包含一些完成特定功能的函数指针。例如,某个超级块代表一个已挂装的EXT2文件系统,则超级块中包含有专门读取EXT2文件系统inode的函数地址。每个VFS超级块中包含指向实际文件系统第一个VFS inode的指针。对于root文件系统来说,第一个inode就是代表“/”目录的inode。,2020/8/20,52,Linux是一个多任务的操作系统,也就是多个进程可以并发执行,为了保证能有更多的进程正确
26、运行,Linux采用了段页式虚拟存储管理技术。这样,用户就不用担心内存是否够用。 Linux将一个进程中的程序、数据分成若干“段”来处理,每段有一个段描述符,这些段描述符组合形成段表。段表中的一个表项指出某一个段的起始地址、长度和存取权限等,而段表的起始位置则记录在一个寄存器中。,8. 3. Linux内存管理,2020/8/20,53,Linux内存管理采用请求页式技术实现,每段被分为若干页,为保证需求内存比实际内存大得多的多个进程同时运行,系统只将要用的内容以页面为单位调入内存块中,而暂不需要的页面仍留在外存交换区内。 一旦可执行文件进入程序的虚地址空间,便可开始执行。,2020/8/20
27、,54,这里的进入并非是指文件的全部进入,只要开始部分装入内存,该可执行文件就可以开始执行。在执行过程中,若系统发现要执行的内容不在内存时,就发出缺页请求信号,请求内存页块将所需内容调入。 在Linux中,实现页面的交换和淘汰的是核心交换保护程序。,2020/8/20,55,核心保护程序是一个没有虚存的核心线程,它以核心的方式在内存中运行, 不仅可以把换出去的页面写到交换区,而且确保系统中有足够的空闲块,以保证存储管理程序的有效运行。 交换保护程序在系统初始化时便开始运行,按核心交换时钟工作或停止。它轮流查看系统中哪一个进程的页面适合换出或淘汰。,2020/8/20,56,因正文段不能被修改,
28、这些页不必写回交换区,淘汰即可,需要时还可以将原副本重新装入内存。当确定某进程的某页要被换出或淘汰时,还要检查它是否还有共享者或被锁定,如果是,就不能淘汰或换出。 Linux淘汰页的依据是页的年龄。每页一个计数器,初值为3,每访问一次年龄加3,最大值为20,如果年龄为0,交换保护程序将把它交换出或淘汰。,2020/8/20,57,当某页曾被修改过后重放在交换区中,某进程再次需要使用该页时,它已不在内存(由页表知道)中,请求者进程便发出缺页请求。这时操作系统的缺页中断处理程序被执行。 它首先进行定位,找到缺页进程的虚地址,如果找到的是曾被换出的页表项,便把它再换入内存,并把换入找到的内存页填到页
29、表项中,若引起调页处理的访问,则在页表中要标明“可写”标志, cache并标明“修改过”。再次换出时要写入交换区;若不曾修改过,就不写入交换区了。,2020/8/20,58,在Linux中,一个进程主要由三部分组成: (1)程序部分,也叫正文段。它是对进程要完成任务的描述。为了便于共享,正文段是可再入程序,即只能使用,不能修改。另外,它可以为不同的用户调用,不同的用户调用同一正文段时,就是不同的进程。,8. 4. Linux中的进程管理,2020/8/20,59,(2)数据部分,它是进程要加工的对象。Linux进程的数据段,除普通数据外,还有系统保留区,也称核心域。 (3)任务描述结构,即通常
30、所谓的PCB(进程控制块)。,2020/8/20,60,在Linux系统中,每个进程在自己的虚拟地址空间运行。为了便于管理Linux系统中的进程,系统为每个进程都设有一个task-struct数据结构,以此来识别进程的存在与否。这个task-struct的数据结构,就是Linux进程的进程控制块。 还有一个task矢量表,由它给出指向每一个task-struc的指针。,8.4.1 Linux的进程控制块,2020/8/20,61,task矢量表512个入口,每创建一个进程,建立一个task-struct结构,并加入task矢量表中,矢量表的容量限制了进程数量,此外还有一个当前指针,可以指向当前
31、正在运行的进程的task-struct。,2020/8/20,62,Linux中的进程控制块中主要包括以下信息: (1)Linux进程的状态。记录Linux进程的此时所处的状态。 (2)调度信息。用于进程调度,决定调度的次序,即优先级别。 (3)进程标识。Linux进程标识为数字,有进程标识PID,组织标识GID,用于访问系统文件和设备时使用。,2020/8/20,63,(4)内部通信信息。Linux支持IPC通信、管道和信号量通信。 (5)家族关系。Linux中除初始化进程外,其他进程都被创建,所以进程都有父进程和子进程之间连接关系问题。 (6)时钟信息。为追踪进程使用CPU时间和创建时间等
32、,需要时钟信息。,2020/8/20,64,(7)文件系统。进程可以随时打开和关闭文件,使用程序和数据,所以要有与文件系统相关的信息。 (8)虚存信息。进程虚存空间信息及其与物理存储有关信息。 (9)处理机的特殊环境,相当于通常CPU现场保留区。,2020/8/20,65,Linux进程之间是一个树形的结构关系,每一个进程都有唯一的标识号PID,每一个进程都有一个创建该进程的父进程,每一个进程都属于一个进程组,所以还有一个组标识号GID。 为解决进程访问不同文件拥有不同权限的问题,又增加了“有效用户标识”和“有效组标识”两个标识号。,2020/8/20,66,Linux进程有如下几种状态: 运
33、行状态:一个进程正在运行或已准备好了,就要运行。 等待状态:进程正在等待一事件或一种资源。 Linux分两种等待状态:即可中断等待和不可中断等待。可中断等待能被信号中断;不可中断等待直接在硬件环境中等待,不能被中断。,2020/8/20,67,暂停状态:通常是由于进程接收一个信号后,处于停止状态。 僵死状态:一个进程已停止运行,但在进程指针数组中仍占据着一个位置,因此,可将处于这种状态的进程看作是一个死进程。,2020/8/20,68,Linux发生进程调度的情况一般有如下几种: (1)当某个进程因为系统调用运行在内核模式下时,系统可以调度其它进程运行。 (2)在运行进程用完自己的时间片时,系
34、统需选择一个新的进程运行。 (3)当当前运行进程因中断或异常进入等待状态时,系统也应运行调度程序来选择下一个执行进程。,8.4.2 Linux中的进程调度,2020/8/20,69,在Linux中,进程分为普通进程和实时进程。 实时进程的优先级高于普通进程,一旦有实时进程请求运行,系统便将处理机分配给它。 进程的优先级可以通过系统调用改变。 实时进程的调度策略有两种:一种是先进先出调度算法;另一种是轮转调度算法。 对于一般进程,Linux采用一般的分时调度策略。,2020/8/20,70,Linux系统中,主要的并行操作单位是进程。 进程切换时,首先需要保护离开CPU进程的现场信息,恢复CPU
35、进程的现场信息。 因为每个进程有自己独立的程序段、数据区、内存区、时间片等,这样就导致进程切换的开销较大,此外进程通信也需要开销。,2020/8/20,71,前面我们已经知道了线程的概念,为了减少这些不必要的开销,Linux可以通过软件包实现线程。 不过,Linux的线程支持不像Windows 2000那样典型,Linux支持内核级的多线程。 有了线程后,每个进程又可由若干并行的线程共享进程的时间片和其他资源。 同一个进程内的线程可以作为调度单位竞争使用CPU。,2020/8/20,72,因为进程内的线程共享进程的正文、数据、内存、及数据结构,因此在同一进程中的线程之间的环境切换的工作量,远远
36、小于进程之间的环境切换的工作量。所以,不需为重新安排这些事情而付出代价。所以,有时也把线程叫做轻量级进程。,2020/8/20,73,在Linux系统中,进程的控制主要是使用系统调用来实现的,主要有以下几种。 1进程的建立 在Linux系统中,除1#进程是在系统初始化时由系统创建的之外,其他进程都是通过fork()系统调用建立的。使用fork()的进程为父进程,通过fork()建立的新进程叫子进程父子进程除进程标识号PID不同外,子进程的正文段和用户数据段与父进程完全相同,系统数据段的内容也几乎相同。另外,凡是父进程打开的文件,子进程全部可以使用。,8.4.3 Linux中的进程控制,2020
37、/8/20,74,在Linux中,要使进程执行新文件的唯一方法是使用exec()系统调用。具体的做法是:在使用exec()系统调用时,将要执行的文件名设为它的参数。,2进程的执行,2020/8/20,75,将exec()放在程序中,其中的文件就是要执行的正文和数据,它将取代父进程的正文和数据。我们知道,在UNIX中,子进程被创建时,从父进程那里拷贝了正文和数据,子进程为了和父进程完成不同的任务,利用exec()系统调用可执行其他指定的文件,取代从父进程那里拷贝过来的内容。,2020/8/20,76,而在Linux中则有所不同,它采用了一种“写时拷贝”(copy on write)方法,即for
38、k()命令建立子进程时,只有少量的共享内容被复制,而执行exec()时,如果需要用父进程的程序和数据,这时才会拷贝。这样就可节省不少内存空间和拷贝时间。,2020/8/20,77,3等待进程结束,当父进程用fork()创建子进程后,子进程转去执行指定文件,而父进程可通过wait()等待子进程结束。其中的参数就是所等的子进程。等到子进程结束,父进程再做其他工作。其返回值就是结束的子进程的标识号PID。,2020/8/20,78,在Linux系统中,进程的终止可通过调用exit()来实现。exit()没有返回值,但它取一个状态参数,可以使等待子进程结束的父进程恢复执行,也可将所指状态传递给父进程。
39、,4进程的终止,2020/8/20,79,为了协调进程之间的活动,进程间以及进程与核心之间要进行通信。 Linux支持流行UNIX系统所有的进程通信机制(IPC),常用的有信号、管道、消息传递、信号量和共享内存等机制。,8.4.4 Linux进程通信,2020/8/20,80,信号是UNIX系统中最古老的一种通信机制,进程通过信号了解系统中正在出现的事件。信号是随机产生的,进程必须随时做好响应信号的准备,发信号的进程将信号送给接收者进程的pcb中,接收者进程调度运行时,才能转入处理信号引起的事件。这种现象类似中断,为了和硬件中断相区分,有时也把信号的处理叫“软中断”。,1信号,2020/8/2
40、0,81,在Linux中,内核用一个字表示所有信号,字长就是信号的最多种类,而不同的平台字长也不同,所以说,信号的种类和具体的平台有关。Linux内核定义的最常见的信号、C语言宏名及其用途如表8-1所示。,2020/8/20,82,表 8- 1 常见信号及用途,2020/8/20,83,管道,原来是UNIX中的通信机制,是用于进程通信的一种共享文件,(也叫pipe文件),进程之间以比特流的方式传送数据。系统允许一进程从管道一端写入数据,另一进程从管道的另一端读出数据。,2“管道”,2020/8/20,84,在Linux中,管道用两个文件表数据结构来实现,二者都指向同一暂时的VFS(虚拟文件系统
41、)的inode节点,由inode节点再指向内存的物理页,如图8-6所示。,2020/8/20,85,进程1的文件表,进程2的文件表,某个搜索节点,数据页,Inode节点,图 8-6两个文件指向同一个数据块,2020/8/20,86,当写进程要写管道时,内容被复制到共享的数据页;当读进程要读管道时,再将内容从共享数据页复制下来,Linux必须同步访问管道,为此,采用了锁等待队列和信号,具体工作过程与UNIX系统中的管道工作原理类似,这里不再多讲。,2020/8/20,87,为了与其他系统兼容,Linux也支持system V三种通信机制,它们是:共享内存、消息队列和信号量。,3System v的
42、进程通信机制,2020/8/20,88,共享内存是指允许出现在一个或多个进程的虚地址空间中的一个共享区域。当进程要通信时,首先在内存中建立一个共享区,然后将它附接到自己的虚地址空间中,而实际的内存页面可以通过共享的进程页表给出。当进程把信息写入这一内存块时,其它可共享这一内存块的进程便使用这些信息。当然,对共享内存的访问需要有相应的同步机制。 信号量和消息队列的相关知识我们在前面已经介绍过,这里不再赘述。,2020/8/20,89,在Linux的设备管理中,最基本的一个特点就是它抽象了设备的处理过程。系统中的每一台设备用一个特殊设备文件来表示。 例如,/dev/hda就代表系统中的第一个IDE
43、硬盘。所有对硬件设备的操作都可以像操作普通文件一样,利用系统提供的系统调用来进行打开、关闭、读、写等操作。,8.5 Linux中的设备管理 8. 5. 1 概述,2020/8/20,90,同一设备驱动程序所控制的所有设备具有相同的主设备号,次设备号用来区分同类设备中的不同设备。例如,系统中第一个IDE硬盘中的每个分区都有一个次设备号 ,/dev/hda1代表的就是该硬盘的第一分区。 Linux支持三种类型的硬件设备,即字符设备,块设备和网络设备。,2020/8/20,91,字符设备是Linux中最简单的设备,可以作为文件访问,应用程序可用标准的系统调用对字符设备进行打开、关闭、读、写等操作。字
44、符设备可以直接进行读写,不经过缓冲区。 块设备的操作也与普通文件类似,不过与字符设备不同,块设备又分为几种类型,如IDE类型、SCSI类型等,每类块设备驱动程序提供用于该类设备的特殊接口。,2020/8/20,92,就像提供正常的文件操作接口一样,每个块设备驱动程序还必须提供与高速缓存的接口。块设备按块的大小进行读写操作,一般一个为512字节或1024字节为一块。块设备可通过高速缓存随时都可以对它进行读写。块设备一般是通过文件系统对其设备文件进行访问的,只有网络设备是通过BSD sockil和网络子系统访问。,2020/8/20,93,Linux系统中的网络设备的主要功能是发送和接收数据,与一
45、般的硬件设备不同,Linux中的某些网络设备是硬件设备,而有些则是软件设备,不存在与之对应的实际硬件设备,如回环设备等。另外,一般的块设备或字符设备的特殊文件可以通过mknod命令建立,而网络设备只有在系统引导时发现和初始化之后才存在。,2020/8/20,94,由于Linux支持设备较多,每一类设备对应一个设备驱动程序,因此系统便有许多不同的驱动程序,这些驱动程序在某些方面具有共性。,8.5.2 Linux中的设备驱动程序,2020/8/20,95,比如: (1)设备驱动程序是操作系统内核的一部分,和系统中其他代码一样,一旦出错,则严重破坏系统。 (2)设备驱动程序提供Linux内核或子系统
46、的接口。 (3)设备驱动程序用标准的内核服务,如内存分配、中断传输等队列进行操作。,2020/8/20,96,(4)Linux设备驱动程序在需要时可以作为内核模块被请求装入;当不再需要时,可以被卸载,这样有利于内核高效使用系统资源。 (5)Linux设备驱动程序可以进入内核中,当内核编译时,要建立哪一个设备是可以配置的。,2020/8/20,97,(6)系统自举时,要对每个设备驱动程序进行初始化,以管理文件控制的硬件设备。即使受特殊设备驱动程序控制的设备不存在,也不会造成其他任何危害。 设备驱动程序是操作系统内核与外设之间的接口,设备驱动程序中包括与设备相关的代码。设备驱动程序的功能是从与设备
47、无关的软件中接收抽象的请求。但当它正在处理另一个请求时,会将该请求放在等待队列中。,2020/8/20,98,Linux设备驱动程序的主要功能有: (1)将数据在内核和设备之间接收和发送; (2)对设备进行初始化; (3)使设备投入运行和退出服务; (4)检测和处理设备出现的错误。,2020/8/20,99,在Linux中,每一个驱动程序都是一个完整的进程,每个这样的进程都有自己的状态寄存器、堆栈等,进程之间可以相互通信,也可与文件系统通信。 设备驱动程序进程与其他进程不同的是,这些进程全部链入核心,它们都共享一个公用的地址空间。若几个设备驱动程序共用一个过程,则在执行代码过程中,只有一个过程
48、的拷贝。这样做可使操作系统设计更模块化,并能提高效率。,2020/8/20,100,shell的种类有很多,RedHat Linux提供了下面的shell:sh、bash(Bourne Again shell)、tcsh、csh、pdksh(Public Domain Kom Shell)、zsh、ash和mc等。你可以选择你喜欢的shell来使用而不必担心别的。,8.6 Linux的shell简介 8.6.1 了解Linux的shell,2020/8/20,101,在众多的shell中,sh是最早出现的一种,它也是最初的UNIX shell,它使用的语法类似于早期的UNIX系统III的原始s
49、hell的语法。 在UNIX系统中sh的可执行程序在文件bin/sh中。事实上,Linux使用了sh的一种变种(即bash shell)作为它的默认shell。 因为bash支持sh语法的超集,所以用标准sh写的任何一个shell脚本都可以在bash下运行。,2020/8/20,102,shell脚本就是在一个文件中包含一个或多个shell命令的集合,它是一种功能非常强大的工具,用它可以扩展UNIX/Linux的用途。对于交互式用户来说,sh缺少一些如任务控制等特性,但它提供了一个书写绝大多数shell程序的很好的基础。 虽然UNIX和Linux版本中包括多种shell,但它们的工作方式都基本
50、相同,shell在用户和内核之间起着桥梁作用。各种shell之间的主要区别在于命令行语法。,2020/8/20,103,我们只对常用的命令做以下讲解,读者可以通过man命令来获得更详细的说明,或通过使用“help”参数查询其他命令的帮助信息。,8.6.2 shell 的一般用法,2020/8/20,104,作用是建立一个新的帐号。当用户完成Linux的安装后,只有一个Username(即root)可以登录。使用adduser可以建立另一个Username(也就是建立一个新帐号),以便将Linux提供给其他使用者使用。,1adduser,2020/8/20,105,作用是安排、检查、删除队列中的
51、作业。 at系列的命令有: at 在设定的时间执行作业 atq 列出用户排在队列中的作业 atrm 删除队列中的作业 batch 用低优先级运行作业,2at系列,2020/8/20,106,超级用户可以在任何情况下使用at系列的命令,一般用户使用at系列命令的权利由文件/etc/at.allow,/etc/at.deny控制。 例:at -f f1 6pm+3days 表示:在三天后下午六点执行文件f1中的作业。,2020/8/20,107,作用是连接文件并送到标准输出。cat是传统UNIX系统所使用的命令,和DOS下的TYPE命令相似。 例:cat test.txt 表示在屏幕上显示test
52、.txt文件的内容。,3cat,2020/8/20,108,作用是改变当前目录。 例:cd/ 返回根目录 cd/home/xyf 进入home目录下的子目录xyf.,4cd,2020/8/20,109,作用是压缩文件。 compress利用LZW原理来压缩文件,原文件将被替代为扩张名为.z的新文件uncompress用来展开压缩文件。 例:compress file1 压缩文件file1 uncompress file1.z 还原文件file1,5compress,2020/8/20,110,6cp,作用是拷贝文件,拷贝时可以使用通配符“*”和“?”。 例:cp * /home/xyf 将当前
53、目录下的所有文件拷贝到/home/xyf下,2020/8/20,111,7df 作用是报告磁盘剩余空间。 例:df -T 列出磁盘的使用情况,并将每个文件系统的类型输出。 8diff 作用是比较两个文件的不同。 例:diff file1 file1 比较file1和file2两个文件,2020/8/20,112,9ed 文本编辑器,用来编辑文本。 例:ed file1 编辑一个文件file1 10fdformat 作用是低级格式化一张软盘。 11id 显示当前用户的用户名和组。,2020/8/20,113,12kill 作用是终止一个正在执行的进程。kill向指定的进程发出特定的信号,如果没有
54、指定的信号则送出TERM信号,TERM信号将杀死没有捕捉到这个信号的进程。 例:kill 101 将进程号是101的进程杀死。 13last 作用是显示过去多少个用户或终端登录到这台机器。 例:last 5 xyf 显示用户xyf过去5次登录的情况。,2020/8/20,114,14less 用来按页显示文件,作用类似于more,但是与more不同的是,less允许向前或向后浏览文件。 例:less file1 按页显示文件file1 15logname 作用是输出用户登录时的用户名。,2020/8/20,115,16ls 作用是列出目录下的文件。若只执行ls而不带参数,则显示效果与DOS下的
55、dir/w命令一样,只显示目录和文件名称。 例:ls -al 输出当前目录下所有文件的详细信息 17man 作用是访问联机手册。man对于所有用户来说都是非常有用的一个工具,利用它可以快速查询命令和程序的使用方法和参数。,2020/8/20,116,例:man less 查询less的参数及用法 18mesg 选择是否接收其他用户利用talk或write发来的信息。 mesg n 不接收其他的用户发来的信息 mesg y 恢复接收其他的用户发来的信息 19mkdir 该命令是建立目录,与DOS下的md类似。,2020/8/20,117,20mv 该命令是更改或移动文件。注意一点,在执行该命令后
56、,源文件就不存在了,而产生了新的目标文件。 例:mv file1 file2 将文件file1改名为file2 mv file2 /xyf 将文件file2移到目录/xyf下,2020/8/20,118,21nice 该命令用来为要运行的程序设定优先权。其中,优先权缺省值为10,最高为-20(优先权最高),最低为19(优先权最低)。 例:nice 18 /usr/xyf/file2 以优先权-18运行程序/usr/xyf/file2 22passwd 该命令用来设置或更改用户密码。一般用户只能更改自己的密码,而超级用户可以更改其他所有用户的密码。,2020/8/20,119,23ps 该命令用来查看进程状态。 例:ps c 从task-struct中给出当前的进程名 24pwd 该命令用来显示当前的工作目录。 例:pwd 列出当前工作目录,2020/8/20,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理用车:汽车租赁合同协议
- 公路绿化带改造工程合同范本
- 建筑设计加班图纸审核
- 美妆教师聘任合同范例
- 2024土地租赁合同协议书
- 美容美发展位租赁合同范本
- 企业员工保姆聘用协议样本
- 环保工程师聘用合同范例
- 个人简历求职自荐信(10篇)
- 教师个人考核总结8篇
- 2024年贵州贵阳市信访局招聘历年高频难、易错点500题模拟试题附带答案详解
- 2024年人教版六年级数学上册《第5单元第7课时 扇形的认识》单元整体教学课件
- 2023湖南文艺出版社五年级音乐下册全册教案
- 创作志愿者文化衫
- 国开2024秋《形势与政策》专题测验1-5参考答案
- 【PPP项目风险评估与控制探究的国内外文献综述3900字】
- 异常情况报告制度-异常情况处理制度
- 《新课标引领、新教材启航》初中化学讲座 课件
- 人教版初中化学九年级上册第六单元课题1 碳单质的多样性(第一课时)
- 综合实践活动《社会公益活动我参与》-四年级下册课件
- 2024体育赛事承办转委托合同
评论
0/150
提交评论