操作系统_第7章_实例分析UNIX操作系统.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:108 大小:2.1MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

操作系统_第7章_实例分析UNIX操作系统.ppt

操作系统_第7章_实例分析UNIX操作系统.ppt

预览

免费试读已结束,剩余 98 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第7章实例分析:UNIX操作系统UNIX是一个通用、多用户的分时操作系统。本章主要从实现的角度出发,讲述四个方面的内容:(1)UNIX的进程以及进程调度;(2)UNIX采用的存储管理策略;(3)UNIX目录结构的特点以及对磁盘存储空间的管理;(4)UNIX对块设备及字符设备的管理以及缓冲技术。7.1UNIX的处理机管理7.2UNIX的存储管理7.3UNIX的文件管理7.4UNIX的设备管理7.1UNIX的处理机管理2.数据段进程运行时用到的数据以及工作区,构成了一个进程的数据段。要注意的是,如果进程执行的程序是不能被共享的,那么也把它归入到数据段中。这样,UNIX进程的数据段分成三个部分:系统数据区、用户数据区和用户栈区。如在基本控制块proc结构中所述,在进程的proc结构中,由p_addr指向该进程数据段的首地址,由p_size给出数据段的长度。其联系如图7-1所示。3.共享正文段为了管理好进程的共享正文段,UNIX在内存专门开辟了一个text结构区域,形成正文段表text[]。其中每一个text结构对应一个共享正文段,主要记录关于这个正文段的有关信息,比如共享正文段在磁盘对换区的地址(x_daddr),共享正文段在内存的地址(x_caddr),共享正文段的长度(x_size),共享本正文段的所有进程数目(x_count)等。综上所述,一个进程的基本控制块proc结构、数据段(包含扩充控制块user结构)以及共享正文段三者之间的关系,可以用图7-2勾画出来。在那里一根虚线把图分成两个部分。标有①的部分表示proc[]表中进程的proc结构以及text[]表中的text结构总是常驻内存。通过proc结构中的p_addr,就能够得到该进程的数据段;通过p_textp,就能够得到该进程共享正文段的text结构,再由这个text结构中的x_caddr或x_daddr就能够得到共享正文段在内存或在磁盘对换区的位置。标有②的部分表示进程的数据段和共享正文段是非常驻内存部分,根据需要和可能,数据段和共享正文段会在内存和磁盘对换区之间换进和换出。另外,通过user结构中的u_procp,可以得到该进程的proc结构的位置。7.1.2UNIX的进程状态UNIX进程在其生命期内,可以处于多种不同的状态,并记录在进程的proc结构中。图7-3给出了进程状态的变迁图。当父进程执行系统调用fork创建一个子进程时,被创建进程处于“创建”状态。如果能够为该进程分配到足够的内存空间,则它变为“在内存就绪”状态;如果当前没有足够的内存空间,则它变为“换出并就绪”状态,被安置在磁盘的对换区。另外,原来已在内存的就绪进程,也可能因为内存紧张而被换出,同样成为“换出并就绪”状态。处于这两种状态的进程,从原则上说都是“就绪”的,都可以参与处理机调度。只是处于“换出并就绪”状态的进程被调度到时,由于它的非常驻内存部分并不在内存,因此要先被换进,才能够真正占用处理机投入运行。一个进程被调度到时,就成为“用户态运行”状态。进程在“用户态运行”状态下时,若程序中使用了系统调用或请求输入/输出,就会使进程从“用户态运行”状态改变为“核心态运行”状态。在“核心态运行”状态下的进程是不能被剥夺的。当系统调用执行完毕,就返回到“在内存就绪”状态。如果要等待输入/输出完成,则变成“在内存睡眠”状态;如果是调用了exit而进入“核心态运行”状态,则意味着进程运行结束,于是进入“僵死”状态,所占用的一切资源被释放。如果在“用户态运行”状态下,由于时间片到等原因,就会直接变成“在内存就绪”状态。一个进程处于“在内存睡眠”状态时,如果内存使用紧张,就会被从内存换出到磁盘的对换区。这时,该进程处于“睡眠并换出”状态。无论是处于“在内存睡眠”状态还是处于“睡眠并换出”状态,都表明这个进程在等待某个事件的发生。当处于“在内存睡眠”状态下等待的事件发生时,进程状态就变为“在内存就绪”;当处于“睡眠并换出”状态下等待的事件发生时,进程状态就变为“换出并就绪”。以上就是一个UNIX进程从被创建开始到被撤消为止的整个生命期内的变化过程。7.1.3UNIX的进程调度与换进换出为了把处理机分配给一个进程使用,UNIX的进程调度程序总去查看系统proc[]表中登记的所有进程。在处于就绪、且全部在内存的进程中,挑选一个优先数最小(即优先权最大)的进程作为分配对象。如果暂时没有这种进程存在,那么进程调度程序就处于“在内存睡眠”的等待状态。直到发生中断请求,被唤醒再次去搜索proc[]表。UNIX赋予进程调度进程极高的优先权,以保证系统能以最快的速度找到可运行的进程,提高CPU的使用效率。为了改变一个进程的优先数,