资源预览内容
第1页 / 共106页
第2页 / 共106页
第3页 / 共106页
第4页 / 共106页
第5页 / 共106页
第6页 / 共106页
第7页 / 共106页
第8页 / 共106页
第9页 / 共106页
第10页 / 共106页
亲,该文档总共106页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十章 UNIX系统内核结构 第十章 UNIX系统内核结构 10.1 UNIX系统概述 10.2 进程的描述和控制 10.3 进程的同步与通信 10.4 存储器管理 10.5 设备管理 10.6 文件管理 第十章 UNIX系统内核结构 10.1 UNIX系统概述 10.1.1 UNIX系统的发展史 1. UNIX系统的发展 2. 两大集团对峙 3. 网络操作系统UNIX 第十章 UNIX系统内核结构 10.1.2 UNIX系统的特征 1) 开放性2) 多用户、多任务环境 3) 功能强大,实现高效 4) 提供了丰富的网络功能5) 支持多处理器功能 第十章 UNIX系统内核结构 10.1.3 UNIX系统的内核结构 图 10-1 UNIX核心的框图第十章 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.进程表项(Process Table Entry)用于描述和控制一个进程的信息通常都很多,其中有些是经常要被访问的,如进程标识符、进程状态等。为了提高对这些信息访问的效率,系统设计者将这些信息放在进程表项中,又称之为Proc表或Proc结构,使之常驻内存。在每个进程表项中,含有下述一些具体信息:(1) 进程标识符(PID),也称内部标识符,为方便用户使用,这里惟一地标识一个进程的某个整数。(2) 用户标识符(UID),标识拥有该进程的用户。第十章 UNIX系统内核结构 (3) 进程状态,表示该进程的当前状态。(4) 事件描述符,记录使进程进入睡眠状态的事件。(5) 进程和U区在内存或外存的地址,核心可利用这些信息做上、下文切换。(6) 软中断信息,记录其它进程发来的软中断信号。(7) 计时域,给出进程的执行时间和对资源的利用情况。(8) 进程的大小,这是核心在为进程分配存储空间时的依据,包括正文段长度和栈段长度等。第十章 UNIX系统内核结构 (9) 偏置值nice,供计算该进程的优先数时使用,可由用户设置。(10) P_Link指针,这是指向就绪队列中下一个 PCB的指针。(11) 指向U区进程正文、数据及栈在内存区域的指针。第十章 UNIX系统内核结构 2.U区(U Area)为了存放用于描述和控制进程的另一部分信息, 系统为每一个进程设置了一个私用的U区,又称之为 User结构,这部分数据并非常驻内存,其中含有下述 信息:(1) 进程表项指针,指向当前(正在执行)进程的 进程表项。(2) 真正用户标识符u-ruid(real user ID),这是由超级用户分配给用户的标识符,以后,每次用户在登录 进入系统时,均须输入此标识符。 第十章 UNIX系统内核结构 (3) 有效用户标识符u-euid,在一般情况下,它与 ruid相同,但在其他用户允许的情况下,可用系统调用 setuid将它改变为其他用户标识符,以获得对该用户的文件进行操作的权力。(4) 用户文件描述符表,其中记录了该进程已打开的所有文件。(5) 当前目录和当前根,用于给出进程的文件系统环境。(6) 计时器,记录该进程及其后代在用户态和核心态运行的时间。 第十章 UNIX系统内核结构 (7) 内部I/O参数,给出要传输的数据量、源(或 目标)数据的地址、文件的输入/输出偏移量。(8) 限制字段,指对进程的大小及其能“写”的文件大小进行限制。(9) 差错字段,记录系统调用执行期间所发生的错误。(10) 返回值,指出系统调用的执行结果。(11) 信号处理数组,用于指示在接收到每一种信号时的处理方式。 第十章 UNIX系统内核结构 3.系统区表(System Region Table)系统把一个进程的虚地址空间划分为若干个连 续的区域:正文区、数据区、栈区等。 这些区是可被共享和保护的独立实体,多个进程可以共享一个区。为了对区进行管理,在核心中设置了一个系统区表(简称区表),在各表项中记录了以下有关描述活动区 的信息: 第十章 UNIX系统内核结构 (1) 区的类型和大小。(2) 区的状态。一个区有这样几种状态: 锁住、在请求中、在装入过程、有效(区已装入内存)。(3) 区在物理存储器中的位置。(4) 引用计数,即共享该区的进程数。(5) 指向文件索引结点的指针。 第十章 UNIX系统内核结构 4.进程区表(Process Region Table)为了记录进程的每个区在进程中的虚地址,并通过它找到该区在物理存储器中的实地址,系统为每个进程配置了一张进程区表。表中的每一项记录一个区的起始虚地址及指向系统区表中对应的区表项的指针。核心可通过查找进程区表和系统区表,将区的逻辑地址变换为物理地址。可见,进程区表和系统区表用 于对区地址进行映像(射)。用两张区表实现地址映射,是为了便于实现对区的共享。第十章 UNIX系统内核结构 图 10-2 进程区表项、系统区表项和区的关系 第十章 UNIX系统内核结构 图 10-3 进程的数据结构 第十章 UNIX系统内核结构 10.2.2 进程状态与进程映像 1. 进程状态 图 10-4 进程的状态转换 第十章 UNIX系统内核结构 2.进程映像1) 用户级上下文用户级上下文的主要成分是用户程序。它在系统中 可分为正文区和数据区两部分。正文区是只读的,它主 要包括一些程序指令。进程在执行时,可利用用户栈区 来保存过程调用时的传送参数和返回值。共享存储区是 一个能与其它进程共享的数据区。存储区中的数据可由 有权共享该存储区的进程所共享。 第十章 UNIX系统内核结构 2) 寄存器上下文寄存器上下文主要是由CPU中的一些寄存器的内容所组成的。主要的寄存器有下述几种。(1) 程序寄存器。在其中存放的是CPU要执行的下一条指令的虚地址。(2) 处理机状态寄存器(PSR)。包括运行方式(用户态或核心态)、处理机当前的运行级以及记录处理机与 该进程有关的硬件状态信息,如产生进位和溢出等。(3) 栈指针。该指针指向栈的下一个自由项或栈中最后使用的项。(4) 通用寄存器。该寄存器用于存放进程在运行过程中所产生的数据,通用寄存器的数目也因机器而异。 第十章 UNIX系统内核结构 3) 系统级上下文系统级上下文包括OS为管理该进程所用的信息,可分为静态和动态两部分:(1) 静态部分。在进程的整个生命期中,系统级上下文的静态部分只有一个,其大小保持不变,又可再进 一步把它分成三部分:进程表项、U区及进程区表项、系统区表项和页表。(2) 动态部分。在整个进程的生命期中,系统级上 下文动态部分的大小是可变的,它包括: 核心栈, 这是进程在核心态时使用的栈; 若干层寄存器上下文,其中,每一层都保存了前一层的上下文。 第十章 UNIX系统内核结构 10.2.3 进程控制 1. fork系统调用 (1) 为新进程分配一个进程表项和进程标识符。(2) 检查同时运行的进程数目。 (3) 拷贝进程表项中的数据。 (4) 子进程继承父进程的所有文件。(5) 为子进程创建进程上下文。 (6) 子进程执行。 第十章 UNIX系统内核结构 2. exec系统调用UNIX系统提供了一组系统调用exec,用于将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,以更新新进程的用户级上下文。UNIX所提供的这一组exec系统调用,它们的基本功能相同,只是它们须各自以不同的方式提供参数,且参数各异。第十章 UNIX系统内核结构 图 10-5 exec 的参数组织方式 第十章 UNIX系统内核结构 3. exit系统调用 UNIX内核利用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系统把进程的优先级分成两类,第一类是核心优先级,又可进一步把它分为可中断和不可中断两种。当一个软中断信号到达时,若有进程正在可中断优先级上睡眠,该进程将立即被唤醒;若有进程处于不可中断优先级上,则该进程继续睡眠。另一类是用户优先级 ,它又被分成n+1级,其中第0级为最高优先级,第n级的优先级最低。 第十章 UNIX系统内核结构 4. 进程优先数的计算 其中,基本用户优先数即proc结构中的偏移值nice,可由用户将它设置成040中的任一个数。一旦设定后,用户仅能使其值增加,特权用户才有权减小nice的值。而最近使用CPU的时间,则是指当前占有处理机的进程本次使用CPU的时间。内核每隔16.667ms,便对该时间做加1操作,这样,占有CPU的进程其优先数将会随着它占有CPU时间的增加而加大,相应地,其优先级便随之降低。 第十章 UNIX系统内核结构 5. 进程切换 在OS中,凡要进行中断处理和执行系统调用时,都将涉及到进程上下文的保存和恢复问题,此时系统所保存或恢复的上下文都是属于同一个进程的。而在进程调度之后,内核所应执行的是进程上下文的切换,即内核是把当前进程的上下文保存起来,而所恢复的则是进程调度程序所选中的进程的上下文,以使该进程能恢复执行。第十章 UNIX系统内核结构 10.3 进程的同步与通信 10.3.1 sleep与wakeup同步机制 1. sleep过程 进入sleep过程后,核心首先保存进入睡眠时的处理机运行级, 再提高处理机的运行优先级,来屏蔽所有的中断,接着将该进程置为“睡眠”状态,将睡眠地址保存在进程表项中,并将该进程放入睡眠队列中。如果进程的睡眠是不可中断的,做了进程上下文的切换后,进程便可安稳地睡眠。 当进程被唤醒并被调度执行时,将恢复处理机的运行级为进入睡眠时的值, 此时允许中断处理机。 第十章 UNIX系统内核结构 2. wakeup过程该过程的主要功能,是唤醒在指定事件队
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号