十章UNIX系统内核结构教学提纲

上传人:yuzo****123 文档编号:137190381 上传时间:2020-07-05 格式:PPT 页数:96 大小:950KB
返回 下载 相关 举报
十章UNIX系统内核结构教学提纲_第1页
第1页 / 共96页
十章UNIX系统内核结构教学提纲_第2页
第2页 / 共96页
十章UNIX系统内核结构教学提纲_第3页
第3页 / 共96页
十章UNIX系统内核结构教学提纲_第4页
第4页 / 共96页
十章UNIX系统内核结构教学提纲_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《十章UNIX系统内核结构教学提纲》由会员分享,可在线阅读,更多相关《十章UNIX系统内核结构教学提纲(96页珍藏版)》请在金锄头文库上搜索。

1、第十章 UNIX系统内核结构,10.1 UNIX系统概述 10.2 进程的描述和控制 10.3 进程的同步与通信 10.4 存储器管理 10.5 设备管理 10.6 文件管理,10.1 UNIX系统概述,10.1.1 UNIX系统的发展史,10.1.2 UNIX系统的特征,开放性 2) 多用户、 多任务环境 3) 功能强大, 实现高效 4) 提供了丰富的网络功能 5) 支持多处理器功能,10.1.3 UNIX系统的内核结构,图 10-1 UNIX核心的框图,2. 文件子系统,文件管理。 (2) 高速缓冲机制。 (3) 设备驱动程序。,10.2 进程的描述和控制,10.2.1 进程控制块PCB,

2、在UNIX系统中, 把进程控制块分为四部分: (1) 进程表项。 (2) U区。 (3) 进程区表。 (4) 系统区表。,1. 进程表项(Process Table Entry),进程标识符(PID)。 (2) 用户标识符(UID)。 (3) 进程状态。 (4) 事件描述符。 (5) 进程和U区在内存或外存的地址。 (6) 软中断信息。 (7) 计时域。 (8) 进程的大小。 (9) 偏置值nice。 (10) P-Link指针。 (11) 指向U区进程正文、 数据及栈在内存区域的指针。,2. U区(U Area),进程表项指针。 (2) 真正用户标识符u-ruid(real user ID)

3、。 (3) 有效用户标识符u-euid(effective user ID)。 (4) 用户文件描述符表。 (5) 当前目录和当前根。 (6) 计时器。 (7) 内部I/O参数。 (8) 限制字段。 (9) 差错字段。 (10) 返回值。 (11) 信号处理数组。,3. 系统区表(System Region Table),区的类型和大小。 (2) 区的状态。 (3) 区在物理存储器中的位置。 (4) 引用计数。 (5) 指向文件索引结点的指针。,4. 本进程区表(Per Process Region Table),图 10-2 进程区表项、系统区表项和区的关系,图 10-3 进程的数据结构,1

4、0.2.2 进程状态与进程映像,1. 进程状态,图 10-4 进程的状态转换,2. 进程映像,用户级上下文 2) 寄存器上下文 程序寄存器。 (2) 处理机状态寄存器(PSR)。 (3) 栈指针。 (4) 通用寄存器。 3) 系统级上下文 静态部分。 (2) 动态部分。,10.2.3 进程控制,1. fork系统调用,为新进程分配一个进程表项和进程标识符。 (2) 检查同时运行的进程数目。 (3) 拷贝进程表项中的数据。 (4) 子进程继承父进程的所有文件。 (5) 为子进程创建进程上下文。 (6) 子进程执行。,2. exec系统调用,图 10-5 exec 的参数组织方式,3. exit系

5、统调用,通常,父进程在创建子进程时,应在进程的末尾安排一条exit,使子进程能自我终止。内核须为exit完成以下操作: (1) 关闭软中断。 (2) 回收资源。 (3) 写记账信息。 (4) 置进程为“僵死”状态。,4. wait系统调用,wait系统调用用于将调用进程挂起, 直至其子进程因暂停或终止而发来软中断信号为止。如果在wait调用前,已有子进程暂停或终止,则调用进程做适当处理后便返回。核心对wait调用做以下处理:核心查找调用进程是否还有子进程, 若无,便返回出错码;如果找到一个处于“僵死”状态的子进程,便将子进程的执行时间加到其父进程的执行时间上, 并释放该子进程的进程表项; 如果

6、未找到处于“僵死”状态的子进程,则调用进程便在可被中断的优先级上睡眠,等待其子进程发来软中断信号时被唤醒。,10.2.4 进程调度与切换,1. 引起进程调度的原因 首先,由于UNIX系统是分时系统,因而其时钟中断处理程序须每隔一定时间,便对要求进程调度程序进行调度的标志runrun予以置位,以引起调度程序重新调度。其次,当进程执行了wait、exit及sleep等系统调用后要放弃处理机时, 也会引起调度程序重新进行调度。此外,当进程执行完系统调用功能而从核心态返回到用户态时,如果系统中又出现了更高优先级的进程在等待处理机时,内核应抢占当前进程的处理机, 这也会引起调度。,2. 调度算法 进程调

7、度,在此是采用动态优先数轮转调度算法。 调度程序在进行调度时,首先从处于“内存就绪”或“被抢占”状态的进程中,选择一个其优先数最小(优先级最高)的进程。若此时系统中(同时)有多个进程都具有相同的最高优先级,则内核将选择其中处于就绪状态或被抢占状态最久的进程,将它从其所在队列中移出,并进行进程上下文的切换, 恢复其运行。,3. 进程优先级的分类 UNIX系统把进程的优先级分成两类,第一类是核心优先级,又可进一步把它分为可中断和不可中断两种。当一个软中断信号到达时,若有进程正在可中断优先级上睡眠,该进程将立即被唤醒;若有进程处于不可中断优先级上, 则该进程继续睡眠。对诸如“对换”、“等待磁盘I/O

8、”、“等待缓冲区”等几个优先级,都属于不可中断优先级;而“等待输入”、“等待终端输出”、“等待子进程退出”的几个优先级, 都是可中断优先级。另一类是用户优先级,它又被分成n+1级, 其中第0级为最高优先级,第n级的优先级最低。,4. 进程优先数的计算,其中,基本用户优先数即proc结构中的偏移值nice,可由用户将它设置成040中的任一个数。一旦设定后, 用户仅能使其值增加, 特权用户才有权减小nice的值。而最近使用CPU的时间,则是指当前占有处理机的进程本次使用CPU的时间。内核每隔16.667 ms,便对该时间做加1操作,这样,占有CPU的进程其优先数将会随着它占有CPU时间的增加而加大

9、,相应地,其优先级便随之降低。,5. 进程切换,在OS中, 凡要进行中断处理和执行系统调用时, 都将涉及到进程上下文的保存和恢复问题, 此时系统所保存或恢复的上下文都是属于同一个进程的。而在进程调度之后, 内核所应执行的是进程上下文的切换,即内核是把当前进程的上下文保存起来,而所恢复的则是进程调度程序所选中的进程的上下文,以使该进程能恢复执行。,10.3 进程的同步与通信,10.3.1 sleep与wakeup同步机制,1. sleep过程,进入sleep过程后,核心首先保存进入睡眠时的处理机运行级, 再提高处理机的运行优先级,来屏蔽所有的中断,接着将该进程置为“睡眠”状态,将睡眠地址保存在进

10、程表项中,并将该进程放入睡眠队列中。如果进程的睡眠是不可中断的,做了进程上下文的切换后,进程便可安稳地睡眠。 当进程被唤醒并被调度执行时,将恢复处理机的运行级为进入睡眠时的值, 此时允许中断处理机。,2. wakeup过程 该过程的主要功能,是唤醒在指定事件队列上睡眠的所有进程,并将它们放入可被调度的进程队列中。 如果进程尚未被装入内存,应唤醒对换进程; 如果被唤醒进程的优先级高于当前进程的优先级,则应重置调度标志。最后, 在恢复处理机的运行级后返回。,10.3.2 信号(signal)机制,1. 信号机制的基本概念 信号机制主要是作为在同一用户的诸进程之间通信的简单工具。 信号本身是一个11

11、9中的某个整数,用来代表某一种事先约定好的简单消息。信号机制是对硬中断的一种模拟。,信号机制与中断机制之间的相似之处表现为: 信号和中断都同样采用异步通信方式,在检测出有信号或有中断请求时,两者都是暂停正在执行的程序而转去执行相应的处理程序,处理完后都再返回到原来的断点;再有是两者对信号或中断都可加以屏蔽。 信号与中断两机制之间的差异是:中断有优先级,而信号机制则没有,即所有的信号都是平等的;再者是信号处理程序是在用户态下运行的,而中断处理程序则是在核心态下运行;还有,中断响应是及时的,而对信号的响应通常都有较长的时间延迟。,2. 信号机制的功能,1)发送信号 2) 设置对信号的处理方式 (1

12、) func=1时, 进程对sig类信号不予理睬, 亦即屏蔽了该信号。 (2) func=0, 即为缺省值时, 进程在收到sig信号后应自我终止。 (3) func为非0、 非1类整数时, 就把func的值作为指向某信号处理程序的指针。 3) 对信号的处理 ,10.3.3 管道机制,管道的类型 无名管道(Unnamed Pipes) 2) 有名管道(Named Pipes),2. 对无名管道的读写,对pipe文件大小的限制 2) 进程互斥 3) 进程写管道 4) 进程读管道,10.3.4 消息机制,1. 消息和消息队列 1) 消息(message),图 10-6 消息机制中的数据结构,2) 消

13、息队列,当一个进程收到由其它多个进程发来的消息时, 可将这些消息排成一个消息队列, 每个消息队列有一个称为关键字key的名称, 它是由用户指定的。 每个消息队列还有一个消息队列描述符, 其作用与用户文件描述符一样, 以方便用户和系统对消息队列的访问。 在一个系统中可能有若干个消息队列, 由所有的消息队列的头标组成一个头标数组。,2. 消息队列的建立与操作,1) 消息队列的建立 在一个进程要利用消息机制与其它进程通信之前, 应利用系统调用msgget( )先建立一个指名的消息队列。对于该系统调用,核心将搜索消息队列头标表, 确定是否有指定名字的消息队列。若无,核心将分配一个新的消息队列头标, 并

14、对它进行初始化,然后给用户返回一个消息队列描述符; 否则,它只是检查该消息队列的许可权后便返回。,2) 消息队列的操纵,(1) 用于查询有关消息队列的情况, 如队列中的消息数目、 队列中的最大字节数、 最后一个发送消息的进程的标识符、 发送时间等。 (2) 用于设置和改变有关消息队列的属性, 如改变消息队列的用户标识符、 或用户组标识符、 消息队列的许可权等。 (3) 消除消息队列的标识符。,3. 消息的发送和接收 1) 消息的发送 当进程要与其它进程通信时,可利用msgsnd( )系统调用来发送消息。 对于msgsnd( )系统调用, 核心检查消息队列描述符和许可权是否合法、消息长度是否超过

15、系统规定的长度。通过检查后,核心为消息分配消息数据区,并将消息从用户消息缓冲区拷贝到消息数据区。 分配消息首部,将它链入消息队列的末尾;在消息首部中填写消息的类型、 大小以及指向消息数据区的指针等;还要修改消息队列头标中的数据(如消息队列中的消息数、字节数等。然后,唤醒在等待消息到来的睡眠进程。,2) 消息的接收 进程可利用msgrcv( )系统调用, 从指定消息队列中读一个消息。对于msgrcv( )系统调用, 是先由核心检查消息队列标识符和许可权, 继而根据用户指定的消息类型做相应的处理。消息类型msgtyp的参数可能有三种情况:当msgtyp=0时,核心寻找消息队列中的第一个消息,并将它

16、返回给调用进程;当msgtyp为正整数时,核心返回指定类型的第一个消息;当msgtyp为负整数时,核心应在其类型值小于或等于msgtyp绝对值的所有消息中,选出类型值最低的第一个消息返回。 如果所返回消息的大小等于或小于用户的请求,核心便将消息正文拷贝到用户区,再从队列中删除该消息,并唤醒睡眠的发送进程;如果消息长度比用户要求的大, 则系统返回出错信息。,10.3.5 共享存储区机制,1. 共享存储区,图 10-7 利用共享存储区进行通信,2. 共享存储区的建立与操纵,1) 共享存储区的建立 当进程要利用共享存储区与另一进程进行通信时, 须先利用系统调用shmget( )建立一块共享存储区,并提供该共享存储区的名字key和共享存储区以字节为单位的长度size等参数。 若系统中已经建立了指名的共享存储区,则该系统调用将返回该共享存储区的描述符shmid;若尚未建立,便为进程建立一个指定大小的共享存储区。,2) 共享存储区的操纵 如同消息机制一样,可以用shmctl( )系统调用对共享存储区的状态信息进行查询,如

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号