UNIX系统内核结构.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第九章UNIX系统内核结构第九章UNIX系统内核结构10.1UNIX系统概述10.2进程的描述和控制10.3进程的同步与通信10.4存储器管理10.5设备管理10.6文件管理第九章UNIX系统内核结构10.1UNIX系统概述10.1.1UNIX系统的发展史1.UNIX2.两大集团对峙3.网络操作系统UNIX第九章UNIX系统内核结构10.1.2UNIX系统的特征1)开放性2)多用户、多任务环境3)功能强大,实现高效4)提供了丰富的网络功能5)支持多处理器功能第九章UNIX系统内核结构10.1.3UNIX系统的内核结构字符设备块设备设备驱动程序硬件控制高速缓存文件子系统系统调用接口进程间通信调度存储管理进程控制子系统核心级硬件级硬件核心级用户级库函数用户程序捕俘图10-1UNIX核心的框图第九章UNIX系统内核结构1.(1)进程控制。(2)进程通信。(3)存储器管理。(4)进程调度。第九章UNIX系统内核结构2.文件子系统(1)文件管理。(2)高速缓冲机制。(3)设备驱动程序。第九章UNIX系统内核结构10.2进程的描述和控制10.2.1进程控制块PCB在UNIX系统Ⅴ中,(1)(2)U区。(3)进程区表。(4)系统区表。第九章UNIX系统内核结构1.进程表项(ProcessTableEntry)(1)进程标识符(PID)。(2)用户标识符(UID)。(3)进程状态。(4)事件描述符。(5)进程和U区在内存或外存的地址。(6)软中断信息。(7)计时域。(8)进程的大小。(9)偏置值nice。(10)P-Link指针。(11)指向U区进程正文、数据及栈在内存区域的指针。第九章UNIX系统内核结构2.U区(UArea)(1)进程表项指针。(2)真正用户标识符u-ruid(realuserID)。(3)有效用户标识符u-euid(effectiveuserID)。(4)用户文件描述符表。(5)当前目录和当前根。(6)计时器。(7)内部I/O参数。(8)限制字段。(9)差错字段。(10)返回值。(11)信号处理数组。第九章UNIX系统内核结构3.系统区表(SystemRegionTable)(1)区的类型和大小。(2)区的状态。(3)区在物理存储器中的位置。(4)引用计数。(5)指向文件索引结点的指针。第九章UNIX系统内核结构4.本进程区表(PerProcessRegionTable)正文数据栈正文数据栈abcdeabcde系统区表A进程区表B进程区表图10-2进程区表项、系统区表项和区的关系第九章UNIX系统内核结构图10-3进程的数据结构U区进程表abcabc本进程区表系统区表第九章UNIX系统内核结构10.2.2进程状态与进程映像1.进程状态62379845唤醒换出换出换入内存中睡眠睡眠且换出睡眠调度核心态执行1抢夺被抢夺内存中就绪内存足内存不足创建fork用户态执行返回到用户态系统调用中断中断中断返回返回僵死唤醒就绪且换出图10-4进程的状态转换第九章UNIX系统内核结构2.进程映像1)用户级上下文2)寄存器上下文(1)程序寄存器。(2)处理机状态寄存器(PSR)。(3)栈指针。(4)通用寄存器。3)系统级上下文(1)静态部分。(2)动态部分。第九章UNIX系统内核结构10.2.3进程控制1.fork系统调用(1)为新进程分配一个进程表项和进程标识符。(2)检查同时运行的进程数目。(3)拷贝进程表项中的数据。(4)子进程继承父进程的所有文件。(5)为子进程创建进程上下文。(6)子进程执行。第九章UNIX系统内核结构2.exec系统调用trappathargvarg2parg1parg0p0文件名字符串参数字符串图10-5execⅤ的参数组织方式第九章UNIX系统内核结构3.exit系统调用通常,父进程在创建子进程时,应在进程的末尾安排一条exit,使子进程能自我终止。内核须为exit完成以下操(1)关闭软中断。(2)回收资源。(3)写记账信息。(4)置进程为“僵死”状态。第九章UNIX系统内核结构4.wait系统调用wait系统调用用于将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。如果在wait调用前,已有子进程暂停或终止,则调用进程做适当处理后便返回。核心对wait调用做以下处理:核心查找调用进程是否还有子进程,若无,便返回出错码;如果找到一个处于“僵死”状态的子进程,便将子进程的执行时间加到其父进程的执行时间上,并释放该子进程的进程表项;如果未找到处于“僵死”状态的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。第九章UNIX系统内核结构10.2.4进程调度与切换1.首先,由于UNIX系统是分时系统,因而其时钟中断处理程序须每隔一定时间,便对要求进程调度程序进行调度的标志runrun予以置位,以引起调度程序重新调度。其次,当进程执行了wait、exit及sleep等系统调用后要放弃处理机时,也会引起调度程序重新进行调度。此外,当进程执行完系统调用功能而从核心态返回到用户态时,如果系统中又出现了更高优先级的进程在等待处理机时,内核应抢占当前进程的处理机,这也会引起调度。第九章UNIX系统内核结构2.调度算法进程调度,在此是采用动态优先数轮转调度算法。调度程序在进行调度时,首先从处于“内存就绪”或“被抢占”状态的进程中,选择一个其优先数最小(优先级最高)的进程。若此时系统中(同时)有多个进程都具有相同的最高优先级,则内核将选择其中处于就绪状态或被抢占状态最久的进程,将它从其所在队列中移出,并进行进程上下文的切换,恢复其运行。第九章UNIX系统内核结构3.UNIX系统把进程的优先级分成两类,第一类是核心优先级,又可进一步把它分为可中断和不可中断两种。当一个软中断信号到达时,若有进程正在可中断优先级上睡眠,该进程将立即被唤醒;若有进程处于不可中断优先级上,则该进程继续睡眠。对诸如“对换”、“等待磁盘I/O”、“等待缓冲区”等几个优先级,都属于不可中断优先级;而“等待输入”、“等待终端输出”、“等待子进程退出”的几个优先级,都是可中断优先级。另一类是用户优先级,它又被分成n+1级,其中第0级为最高优先级,第n级的优先级最低。第九章UNIX系统内核结构4.进程优先数的计算基本用户优先数的时间最近使用优先数2CPU其中,基本用户优先数即proc结构中的偏移值nice,可由用户将它设置成0~40中的任一个数。一旦设定后,用户仅能使其值增加,特权用户才有权减小nice的值。而最近使用CPU的时间,则是指当前占有处理机的进程本次使用CPU的时间。内核每隔16.667ms,便对该时间做加1操作,这样,占有CPU的进程其优先数将会随着它占有CPU时间的增加而加大,相应地,其优先级便随之降低。第九章UNIX系统内核结构5.进程切换在OS中,凡要进行中断处理和执行系统调用时,都将涉及到进程上下文的保存和恢复问题,此时系统所保存或恢复的上下文都是属于同一个进程的。而在进程调度之后,内核所应执行的是进程上下文的切换,即内核是把当前进程的上下文保存起来,而所恢复的则是进程调度程序所选中的进程的上下文,以使该进程能恢复执行。第九章UNIX系统内核结构10.3进程的同步与通信10.3.1sleep与wakeup同步机制1.sleep进入sleep过程后,核心首先保存进入睡眠时的处理机运行级,再提高处理机的运行优先级,来屏蔽所有的中断,接着将该进程置为“睡眠”状态,将睡眠地址保存在进程表项中,并将该进程放入睡眠队列中。如果进程的睡眠是不可中断的,做了进程上下文的切换后,进程便可安稳地睡眠。当进程被唤醒并被调度执行时,将恢复处理机的运行级为进入睡眠时的值,此时允许中断处理机。第九章UNIX系统内核结构2.wakeup过程该过程的主要功能,是唤醒在指定事件队列上睡眠的所有进程,并将它们放入可被调度的进程队列中。如果进程尚未被装入内存,应唤醒对换进程;如果被唤醒进程的优先级高于当前进程的优先级,则应重置调度标志。最后,在恢复处理机的运行级后返回。第九章UNIX系统内核结构10.3.2信号(signal)机制1.信号机制的基本概念信号机制主要是作为在同一用户的诸进程之间通信的简单工具。信号本身是一个1~19中的某个整数,用来代表某一种事先约定好的简单消息。信号机制是对硬中断的一种模拟。第九章UNIX系统内核结构信号机制与中断机制之间的相似之处表现为:信号和中断都同样采用异步通信方式,在检测出有信号或有中断请求时,两者都是暂停正在执行的程序而转去执行相应的处理程序,处理完后都再返回到原来的断点;再有是两者对信号或中断都可加以屏蔽。信号与中断两机制之间的差异是:中断有优先级,而信号机制则没有,即所有的信号都是平等的;再者是信号处理程序是在用户态下运行的,而中断处理程序则是在核心态下运行;还有,中断响应是及时的,而对信号的响应通常都有较长的时间延迟。第九章UNIX系统内核结构2.信号机制的功能1)发送信号2)(1)func=1时,进程对sig类信号不予理睬,亦即屏蔽了(2)func=0,即为缺省值时,进程在收到sig信号后应自(3)func为非0、非1类整数时,就把func的值作为指向某3)对信号的处理第九章UNIX系统内核结构10.3.3管道机制1.管道的类型1)无名管道(UnnamedPipes)2)有名管道(NamedPipes)第九章UNIX系统内核结构2.对无名管道的读写1)对pipe文件大小的限制2)3)进程写管道4)进程读管道第九章UNIX系统内核结构10.3.4消息机制1.1)消息(message)图10-6消息机制中的数据结构…队列i…队列n…消息首部msgh0消息首部msgh3消息首部msgh2消息缓冲区消息缓冲区消息缓冲区消息首部m消息缓冲区消息队列头表032第九章UNIX系统内核结构2)消息队列当一个进程收到由其它多个进程发来的消息时,可将这些消息排成一个消息队列,每个消息队列有一个称为关键字key的名称,它是由用户指定的。每个消息队列还有一个消息队列描述符,其作用与用户文件描述符一样,以方便用户和系统对消息队列的访问。在一个系统中可能有若干个消息队列,由所有的消息队列的头标组成一个头标数组。第九章UNIX系统内核结构2.消息队列的建立与操作1)在一个进程要利用消息机制与其它进程通信之前,应利用系统调用msgget()先建立一个指名的消息队列。对于该系统调用,核心将搜索消息队列头标表,确定是否有指定名字的消息队列。若无,核心将分配一个新的消息队列头标,并对它进行初始化,然后给用户返回一个消息队列描述符;否则,它只是检查该消息队列的许可权后便返回。第九章UNIX系统内核结构2)消息队列的操纵(1)用于查询有关消息队列的情况,如队列中的消息数目、队列中的最大字节数、最后一个发送消息的进程的标识符、发送时间等。(2)用于设置和改变有关消息队列的属性,如改变消息队列的用户标识符、或用户组标识符、消息队列的许可权等。(3)消除消息队列的标识符。第九章UNIX系统内核结构3.消息的发送和接收1)当进程要与其它进程通信时,可利用msgsnd()系统调用来发送消息。对于msgsnd()系统调用,核心检查消息队列描述符和许可权是否合法、消息长度是否超过系统规定的长度。通过检查后,核心为消息分配消息数据区,并将消息从用户消息缓冲区拷贝到消息数据区。分配消息首部,将它链入消息队列的末尾;在消息首部中填写消息的类型、大小以及指向消息数据区的指针等;还要修改消息队列头标中的数据(如消息队列中的消息数、字节数等。然后,唤醒在等待消息到来的睡眠进程。第九章UNIX系统内核结构2)进程可利用msgrcv()系统调用,从指定消息队列中读一个消息。对于msgrcv()系统调用,是先由核心检查消息队列标识符和许可权,继而根据用户指定的消息类型做相应的处理。消息类型msgtyp的参数可能有三种情况:当msgtyp=0时,核心寻找消息队列中的第一个消息,并将它返回给调用进程;当msgtyp为正整数时,核心返回指定类型的第一

1 / 96
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功