UNIX操作系统课件_第1页
UNIX操作系统课件_第2页
UNIX操作系统课件_第3页
UNIX操作系统课件_第4页
UNIX操作系统课件_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UNIX操作系统图9-1UNIX的发展历史§1UNIX操作系统的历史和基本结构图9-2UNIX操作系统的基本结构§2系统活动与系统调用UNIX的内核为用户态程序提供服务。每一次进入内核叫做一次系统活动,按引发这些活动的事件或动作,可分为以下几类:

·系统调用;

·硬件中断;

·硬件自陷;

·软件引起的自陷或中断。图9-3系统调用是用户态程序与系统内核的接口§3进程管理3.1UNIX进程的两种运行状态

在某些操作系统中,进程分成两大类:一类是系统进程;另一类是用户进程。系统进程执行操作系统程序,用户进程执行用户程序。UNIX进程在处理上既可执行操作系统程序(内核程序),也可执行用户程序,按照需要在一定时机进行切换。由于操作系统要管理系统中的各种资源和各种活动,而用户程序却只应在操作系统的管理和控制下,在一定的范围内活动,所以进程在执行操作系统程序和用户程序时所处的环境和特权应有所区别。3.2进程映象和进程结构图9-4UNIX进程映象(1)进程控制块PCB在UNIX中可以包括两部分信息。一部分是不管进程是否正在处理机上运行,系统都需要查询和修改的一些控制信息,这部分信息就是proc数据结构,可称其为进程基本控制块,另一部分则相反,当进程不在处理机上运行时,系统不会对这部分信息进行查询和处理,这部分信息就构成了另外一个称为进程扩充控制块的user数据结构。

(2)共享正文段进程执行的程序若用纯代码形式的程序和常数编写,则可为若干个进程共享执行,构成共享正文段。

(3)数据段进程执行程序时用到的数据构成数据段。

(4)工作区(即栈区)进程在核心态下运行时的工作区为核心栈,在用户态下运行的工作区为用户栈。图9-54.3BSDUNIX进程结构表9-1进程的proc结构3.3进程状态表9-2UNIX进程状态图9-6进程状态的变迁fork-建立一个子进程,其主要任务是建立进程映象。

swtch-其主要功能是选择一个处于SRUN可运行状态、映象在内存、并且优先级最高的进程,准备将处理机占用权交给它。

exit-一个进程在执行结束时可调用exit使自己终止,同时通知父进程。

wakeup-其功能是扫描整个proc表,把同一等待原因上的所有进程唤醒,使它们变为SRUN可运行状态。

sleep-它可使当前执行的进程放弃处理机,变成等待睡眠状态。

stop-调用stop使处于执行状态的进程进入暂停状态。

setrun-其主要功能是激活处于SSTOP暂停状态的进程置为SRUN可运行状态。3.4进程环境切换及进程调度

为实现CPU的有效共享,内核在进程之间进行切换,称为进程环境切换。切换方式有二种:当进程由于请求一个紧缺资源而被暂停时,便发生自愿环境切换(如当进程向诸如终端一类的低速输入设备请求数据时,一般该进程就要被暂停);当进程用完了时间片或系统发现一个较高优先级进程要执行时,便会发生不自愿的环境切换。每一种切换将通过不同的进程控制原语实现。调用sleep()产生自愿环境切换,而通过直接调用swtch()可导致不自愿环境切换。sleep()将按下列步骤进行操作:

(1)提高处理器优先级,以防止可能产生进程状态变迁的那些中断;

(2)确定该进程应进入的睡眠队列;

(3)设置进程优先级作为该进程唤醒时的优先级;

(4)把进程放入上述选中的睡眠队列的末端(见图9-7(b));(5)调用swtch()以请求调度一个新进程。

swtch()将按下列步骤进行操作:

(1)寻找一个非空运行队列;

(2)如果有一个非空运行队列,则取出该队列的第1个进程(见图9-7(a));

(3)设置切换标志;

(4)调用resume()使新进程执行。

一个进程的调度优先级直接由proc结构中的p-cpu和p-nice两个数值决定。P-cpu提供了进程最近使用CPU的估算值。P-nice值是用户可设置的加权因子,数值范围在-20到20之间,p-nice的正常值是0,负值增大一个进程的优先级,正值则减小进程的优先级。

VAX机每隔40s按下述的等式计算一次优先级值,以进行进程的调度:3.5进程的创建及终止fork()将按下列步骤进行操作:

(1)为子进程分配一个新的proc结构并初始化;

(2)复制父进程的环境给子进程(为了复制进程,需要请求内核的存储管理机构为之服务,以分配子进程运行时所需的全部资源)。

(3)调度子进程运行,把新的子进程放在运行队列中。

进程可以通过exit系统调用而自愿终止,也可以由于一个信号而不自愿终止。在这两种情况中,进程终止都将产生一个状态标识码返回给终止进程的父进程。在内核中,一个进程通过调用exit()终止时,首先要按下列步骤清除该进程在核心态下的执行状态:

(1)取消任一正在进行的计时器;

(2)释放虚存资源;

(3)关闭所有打开的文件;

(4)处理所有停止的或被跟踪的子进程。3.6进程通讯(1)利用基本通讯工具sleep和wakeup等来实现系统进程之间的同步。

(2)利用内核提供的“软中断”来实现同一用户的诸进程之间信息的传输和同步,这也是一种有效的通讯方式,可以按照预先规定好的信号或动作实行进程之间通讯,但只是传递少量信息。

(3)利用文件系统生成pipe机构来实现进程通讯(即管理通讯),它可为进程之间提供大量信息的传输。

(4)提供跟踪功能。

(5)提供网络通讯。图9-8管套模型§4存储管理1.VAX虚地址空间图9-9VAX虚地址空间布局4.1VAX存储管理硬件2.系统地址转换图9-10系统虚地址转换3.用户地址转换图9-11用户虚地址转换4.2请页系统

一个内存映象结构具有如下功能:

(1)记录一个页组的当前使用信息,该信息可用于地址转换。

(2)用空闲页的内存映射表项链接在一起形成内存空闲链表,这个空闲链保持LRU顺序。

(3)通过内存映象表结构进行以页组为单位的封锁和同步。如缺页处理中正在进行I/O时要封锁内存页,又如进行I/O操作直接读写进程页时也要封锁内存页。

(4)通过内存映象表结构可找出内容有用的空闲页。2存储管理程序

在请页存储管理技术中将使用到一些系统调用及存储分配程序。在调用系统调用fork时,内核复制父进程所有页的物理副本。紧接着调用系统调用exec,当内核从文件系统中将可执行文件读入内存时,首先分配页表和磁盘块描述项,然后用系统调用read读入。内存实际的分配是通过memall()来分配的。新分配的内存当映射到某些虚地址后才能使用,即本程序将通过填入一个虚地址范围来实现。调用memall()的参数为指向该虚址范围首址的相应PTE的指针、页数、建立内存映象表用的进程和类型。对该范围的每一页组,memall()通过摘出空闲内存链的第一项来为其找到内存。

内存还可以通过vmemall()来分配,它与memall()的区别:若没有足够内存可用时memall()返回失败,而vmemall()则等待内存被释放。释放内存的程序也有两个:memfree()回收分配给一个虚地址空间的所有内存,它假定所有的页都在内存;而vmemfree()只回收一个虚地址范围内在内存的那些页,忽略不在内存的页。

缺页处理将执行pagein()程序,它负责所有的缺页服务。每次调用pagein()时要给出产生缺页的虚地址。pagein()首先找出缺页地址的PTE并区分该页是正文、数据,还是栈,然后确定该页可能的状态:①请求填入;②在内存但无效;③被换出。确定页的类型及状态后,pagein()必须取出所需的数据,把相应的PTE置为有效,然后返回以重新执行进程。

缺页服务和其它内存要求有时可从空闲链中满足,但渐渐地需要内存的回收,因为,计算机没有足够的内存来存放所有页,因此有必要把某些页移到外存-对换空间上。43BSD采用LRU算法实现页淘汰,进程的全部地址空间都可换页,即使它保持着UNIX的正文、数据、栈段的结构。4.3对换

发生下列情况之一就进行对换:

(1)系统内存严重短缺,换页速度已跟不上内存要求。

(2)系统页表变为碎片,无法为新进程或扩展进程分配页表空间。

(3)进程已超过20s未活动。

就对换操作来说,主要挑选一个进程对换进来和选择要对换出去的进程。若有一个以上的被对换出去的进程可运行,则由swapper对换策略来确定要把哪个进程对换进来。这将按下列原则赋予一个优先级:

(1)已对换出去的时间;

(2)对换出去的长度;

(3)它的p-nice值,以及自上次运行以来的睡眠时间。§5I/O系统5.1内核I/O结构图9-12内核I/O结构5.2块设备缓冲区(快速缓存)管理及对盘块的读写图9-13缓冲区(快速缓存)格式图9-14缓冲池结构及瞬间映像5.3字符设备管理图9-15字符缓冲区cblock图9-16clist结构

对字符缓冲区队列可有如下几种操作:

(1)可从空闲链表中分配一个cblock给一个驱动程序。

(2)可以释放一个cblock归还给空闲表。

(3)取字符:移出队列中第一个字符,调正clist的计数值和首指针。如相应的cblock已被取空,则释放它。

(4)存字符:把一个字符放入该队列的末尾,调正clist的计数值和尾指针。如果队列中的最后一块cblock已满,则应先分配一个新的cblock,将之链入该clist的末尾,并把字符放入新的cblock中去。

(5)内核可以从队列的开头一次移走一组字符,即把首块cblock中的字符全部移走。

(6)内核可以把放有字符的一块cblock链入该链的末尾。§6文件管理6.1目录项与i节点

UNIX系统V的目录项占用16字节:前14个字节为文件名,后二个字节是i节点号。i节点(索引节点)的各项内容就是本书第六章中讲的文件控制块的主要内容,它与目录项分别驻在磁盘中不同的空间。若干目录项组成目录文件,若干i节点(每个节点有64个字节)的集合是i节点区。如图9-17所示。图9-17目录项与i节点图9-184.3BSD目录项格式6.2文件存储空间的管理1.空白块成组链接法图9-19空白块成组链接法

只有在下述两种情况下,要求访盘操作:(1)分配空白块时,当内存专用区中索引表只剩下一个空白块的情况。因该空白块中存放了下一组各块的块号,因此不能立刻将该块分配掉。这时必须将该块中存放的下组块号全部复制到内存专用块的索引表区之后,再分配该块。(2)在释放空白块时,如果内存专用区中索引表已存满规定的块数(如50块),这时应先把索引表的内容存入被释放的空白块中,并清除索引表,将索引表块计数器置1,然后将被释放的空白块的块号记入内存专用区的索引表中。

2.位示图法

在4.3BSD文件系统结构中,每个磁盘上包含一个或多个文件系统。而磁盘分区划分为一个或多个区域,每一区域称为一个柱面组,每个柱面组的块位示图以段为单位记录柱面组可用空间。4.3BSD为确保文件在二次间接情况下创建文件可达232字节,则确定一个文件可由多个4096字节的块组成,这样做与512或1024字节的块长相比,每一次磁盘操作传输的数据就增加了若干倍。图9-204096/1024文件系统块和段分布的例子6.3打开文件

UNIX在系统内存区设置了一个含有100个表目的活动i节点表并由系统动态分配。每个打开文件都占有一个表目,用来存放相应的活动(内存)i节点。一个活动i节点的主体是从对应的盘i节点中复制而来。系统还在内存设置了一个含有100个表目的系统打开文件表,表目项包含:活动i节点指针、文件操作方式、读/写位移量。多个系统打开文件表表目可对应同一个活动i节点。UNIX为每个进程在user结构中设置了一个进程打开文件表u-ofile[15],它含有15个表目,即允许一个进程最多打开15个文件。表目内容为文件指针fp,它指向系统打开文件表中的相应表目。6.4文件卷的动态装卸

UNIX允许文件卷动态装卸,并允许将卷装在任意一级文件目录上,这给用户提供了很大的灵活性。一个卷(存贮设备)可由高级用户用系统调用命令为卷装入文件目录的某一级上建立一个特殊空文件,用来存放卷的根目录。然后用户就可以用mount系统调用将某个卷安装于此空文件处,以后此卷就与文件系统融为一体。文件系统可以像在目录的其他任何地方一样在卷内建立和撤销文件。当用户不再使用此卷或要换上新卷时,可用系统调用umount将此卷卸掉。卷内目录上的所有文件都同时被卸下。文件系统内不再有这些文件。用户还可以再将新卷安装于此处。因此,在使用卷内文件前,用户必须知道当前安装卷的内容,装错了卷会找不到所需文件。图9-21卷的安装6.5文件保护

1.两种用户

UNIX把使用系统的人分成两种用户。一种是特权用户,他们是用root名注册进入系统的人,或者用su命令从普通用户转为特权用户的人。由于根目录一般都有口令,因此,特权用户应当知道根目录的口令,而不准他人进入根目录或改变其身份。特权用户在屏幕上的提示符是“#”。系统的另一种用户是普通用户,他们是用自己定义的名字注册进入系统的,是在“/usr”目录下各自的目录中工作的人。普通用户和终端不是一一对应的,他们可以使用任意一台终端,即普通用户的数量不受终端数量的限制。

2.文件的存取权及其改变所属权的命令

UNIX系统对一个文件的操作规定有三种不同的存取权,系统又把使用者分成三个等级。于是每个文件就能出现九种存取权:§7系统初启

1.系统自举

图9-22boot程序在内存中的位置

2.内核初始化

(1)初始化期间系统采取的第一步是由汇编语言代码来实现的,这一工作与机器密切相关,它包括:

·建立运行栈;

·标识执行系统的CPU类型;

·计算物理内存总量;

·使虚拟地址转换硬件成为可用;

·初始化存储管理硬件;

·初始化0#进程的硬件环境;

·调用系统的C程序初始入口。

(2)与机器相关的初始化。在汇编语言代码完成它的工作之后,它调用第一个用C语言写的内核程序main()。它的主要功能是清理内存空间,对某些系统数据结构进行初始化处理,创建0#、1#进程。

main()程序立即调用startup()程序去做与机器相关的初始化,其任务包括:

·信息缓冲区的初始化;

·为系统数据结构分配内存;

·系统的内存分配程序的初始化;

·I/O设备的自动配置和初始化。在调用startup()返回以后,还要对机器的几个专用硬件部分进行初始化。

(3)与机器无关的初始化。经过以上几步,就为系统结束初始化过程并启动某些进程做好了准备工作。上面提到的startup()程序,在其返回后,main()的第一个动作就是建立0#进程的环境。UNIX操作系统是否能正常运行在很大程度上依仗于0#和1#进程的工作,它们与其它进程不同,不是用系统调用fork,而是在本阶段由核心创建的。0#进程最终将实现虚存系统的对换策略,proc表中的第一项分配给0#进程,并把该进程标记为可运行,然后把它安装为当前运行进程(执行状态)。

0#进程建立好以后,调用有关程序去初始化每个系统数据结构:如用vminit()子程序建立请页系统使用的各个参数;磁盘限量资源控制系统初始化(如快速缓存的初始化);通过调用startrtclock()进行时钟初始化(43BSD按100Hz实时时钟运行);通过调用mbinit()来初始化网络存储管理系统等等。最后,系统为执行用户态程序做准备,将通过调用newproc()创建1#进程,然后系统把控制转向1#进程。为了使操作系统编制得比较紧凑,1#进程被设计成一个一般的用户进程,在用户态下运行。3.各终端进程的初启

(1)执行/etc/init程序。1#进程生成时,它基本上复制了0#进程的映象,没有在用户态下的运行部分。现在既然设计成用户进程,所以借助系统调用改变其映象,增加在用户态下运行部分。转而执行/etc/init程序,为每个终端创建一个子进程,使用户能获得系统对他的服务。1#进程执行/etc/init时,先从/etc/ttys中读出一个有效终端设备名,然后为其生成一个子进程。这一子进程打开了该终端设备,并形成了该进程的标准输入、标准输出和出错信息输出文件。

(2)执行/etc/geffy程序。子进程接着也要改换自己的映象转而执行/etc/getty。该程序主要功能是按照相应终端的特性设置终端设备表中有关部分。(3)执行/etc/login。getty最后读入注册名,并调用/etc/login程序完成注册的一系列工作。login程序负责用户登入系统,它由/etc/getty调用,调用时带有用户的注册名。login程序提示用户打入口令,如果由用户提供的口令加密后与记录在总口令文件/etc/passwd中的值相同,login就在记帐文件中写一个报到记录,按照口令文件和/etc/group文件中所指定的内容初始化用户和组标识符(uid和gid)。

(4)最后终端进程又改换映象转而执行shell命令语言解释程序,开始用户和系统在键盘命令级上的对话过程。至此,完成了UNIX系统的初启过程。一旦有某个用户输入一个命令后,则引起键盘输入中断,激活对应的终端进程。终端进程再通过建立命令处理子进程来执行命令。这样,整个系统就活动起来了。图9-23UNIX初启后进程族§8shell(外壳)8.1shell命令的使用方式

shell命令行的一般格式是:commandarg1,arg2,…,argn其中,command是命令名,其后是参数表。有些命令是带参数的,有些命令是可不带参数的或参数是可选的。

用户也可将若干shell命令编辑成一个命令文件,称作shell过程。一个shell过程可被随时调用执行,当需要执行该过程时,使用命令行:$sh

comfile

或%csh

comfile其中,sh或csh是命令名,表示执行shell过程,comfile是shell过程名。shell语言的一大特点是,它具有程序设计语言的一些基本特性,例如,shell支持if、then、case、while、for等控制流,还具有参数传递、变量和字符串替换等功能。

8.2shell命令的处理

UNIX采用生成子进程的方法执行shell命令。在系统初启后,系统为每个用户终端建立一个shell进程,这个进程的任务就是接收用户键入的shell命令并执行该命令。具体处理是,接收键入命令后,这个shell进程将根据命令码和参数,建立一个子进程。然后把自身挂起等待子进程执行结束。当子进程完成后,返回主进程。以后主进程又可接收下一条键入命令,再建立子进程。一般情况下,整个对话过程都是按照这种方式进行。在这种方式下,当前命令未执行结束之前,系统不能接收下一条命令。由于UNIX用建立子进程代替一般系统转入子程序的方法,因此,UNIX很容易实现命令并行处理。即主进程建立子进程后,不再挂起等待,而是立刻继续运行,接收下一条命令。子进程转入后台继续执行。8.3shell的高级功能

具有转入后台执行功能的命令称为后台命令。后台命令的标记是在一般shell命令的末尾,加上符号“&”。shell在处理中,遇到“&”字符时,主进程不再挂起等待,并立刻输出提示符(‘$’或‘%’)准备接收下一条键入命令。实现了后台命令和shell并发运行。例如,我们希望在编译C语言源程序pgm.c时,又希望编辑letter文件。可打入ccpgm.c&$edletter2.标准I/O重新定向

(1)输出改向。在shell命令行中,加入‘>filename’时,可把输出标准设备改为filename所定义的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论