UNIX的进程管理.ppt
《UNIX的进程管理.ppt》由会员分享,可在线阅读,更多相关《UNIX的进程管理.ppt(187页珍藏版)》请在三一办公上搜索。
1、第二章 UNIX的进程管理,李陶深,2.1 UNIX进程管理的几个要点,(1)进程在一个地址空间上执行单一指令序列。进程地址空间包括可以访问或引用的内存单元的集合,进程控制点通过一个一般称为程序计数器(PC)的硬件寄存器控制和跟踪进程指令序列。许多较新的UNIX版本支持多个控制点(称为线程),因此在一个进程内可以有多个指令序列。,2.1 UNIX进程管理的几个要点,(2)UNIX系统是一个多道程序环境,即几个进程可以同时在系统中并发活动。系统为这些进程提供虚拟机的某些功能。在一个纯虚拟机结构中,操作系统给每个进程一个它是系统唯一进程的假象。程序员在写应用程序时,可以认为系统中只有他的代码在运行
2、。在UNIX系统中,每个进程有自己的寄存器和内存,但必须通过操作系统才能进行I/O和设备控制。,2.1 UNIX进程管理的几个要点,(3)进程地址空间是虚拟的,通常只有部分映射到物理内存单元上。内核将进程地址空间的内容保存在备种存储对象上,包括物理内存,磁盘上的文件,特别地还可以保存在本地和远程磁盘的交换区上。通常由内核的内存管理子系统完成进程存储页面在这些对象之间的转移。,2.1 UNIX进程管理的几个要点,(4)每个进程还有一组对应于实际硬件寄存器的寄存器。系统中有许多活动进程,但只有一组硬件寄存器。内核将当前运行进程的寄存器组保存在硬件寄存器中,将其他进程的寄存器组保存在每个进程的数据结
3、构中。,2.1 UNIX进程管理的几个要点,(5)进程间会竞争系统中的各种资源,例如处理器,内存和外围设备。对于CPU这样的资源,内核限制每个进程在CPU上运行一个小段时间(称为定额,一般为10毫秒左右),然后再切换到另一个进程。通过这种方法,内核给每个进程一种并发运行的假象。这样,每个进程获得一段CPU时间并继续执行。这种操作方法称为时间片。,2.1 UNIX进程管理的几个要点,(6)应用程序员并不关心设备的功能和结构的底层细节。操作系统拥有对这些设备的完全控制,并提供一个高级抽象编程接口,应用程序可以通过这些接口访问这些部件。这样就隐藏了硬件的所有细节,大大简化了程序员的工作。通过对这些设
4、备的集中控制,还可以提供一些诸如访问同步(若两个用户在同一时刻想访问同一设备)和错误恢复等其他功能。应用编程接口(API)定义了用户程序和操作系统之间的所有交互语义。,核心,系统调用接口,设备访问接口,用 户 进 程,系统进程,终端,打印机,各种外部设备,存储设备,图2.1 内核号进程及设备间的交互,2.1 UNIX进程管理的几个要点,内核是一个直接运行在硬件上的特殊程序,它实现了进程模型和其他系统服务。它在磁盘的文件一般是/vmunix或/unix(这取决于UNIX厂商)。当系统启动时,通过一个称为引导程序(bootstrapping)的特殊过程从磁盘上加载内核。内核初始化系统,为运行进程设
5、立环境。然后它创建一系列初始进程,这些进程接着又创建其他进程。一旦被加载后,内核将一直保留在内存中,直到系统关闭为止,它管理所有进程并为它们提供各种服务。,UNIX操作系统借助以下4种方式提供功能:用户进程通过UNIXAPI的内核部分,系统调用接口,显式地从内核获得服务。内核以调用进程的身份执行这些请求。进程的某些不正常操作,诸如除数为0,或用户堆栈溢出将引起硬件异常。异常需要内核干预,内核为进程处理这些异常。内核处理外围设备的中断。设备通过中断机制通知内核I/O完成和状态变化。内核将中断视为全局事件,与任何特定进程都不相关。像Swapper和pagedaemon之类的一组特殊的系统进程执行系
6、统级的任务。比如,控制活动进程的数目或维护空闲内存池。,2.2 进程的描述要点,为了实施对进程的有效管理,操作系统为每个进程设置了一个进程控制块(PCB)。在UNIX 版本六中,将PCB分成Proc结构、User结构、text结构。在UNIX System V中,将PCB分成进程表项和U区。除进程表项和U区外,管理进程的据结构还有本进程区表和系统区表。1进程表项 进程表项中的每个表目主要包含以下信息:,UNIX版本的PROC结构struct proc char p_stat;/*进程的运行状态*/char p_flag;/*进程的标志域*/char p_pri;/*进程的优先数*/char p
7、_sig;/*进程接收到的中断号*/char p_uid;/*进程拥有者的用户ID*/char p_time;/*进程在内存中的驻留时间*/char p_cpu:/*进程的使用cpu时间*/char p_nice;/*计算进程优先数的偏置量*/int p_ttyp;/*控制终端*/int p_pid;/*当前进程的进程ID*/int p_ppid;/*当前进程父进程的进程ID*/int p_addr;/*交换区的地址*/int p_size;/*进程文件的大小*/int p_wchan;/*进入睡眠的原因*/int*p_textp;/*指向文本区的指针*/procNPROC;,UNIX Sys
8、tem V的进程表项(1)标识进程状态的状态域。UNIX System V中共有9个状态。(2)若干用户标识号,简称UID或用户ID。这些用户标识号指出该进程属于哪一用户,具有何种特权,如是否可以互相发送救中断信号等。(3)若干进程标识号,简称PID或进程ID,说明进程间的相互关系。(4)存储区位置和长度,指明进程在内存或外存中的位置及大小。这些信息在进程换入换出及状态转换时用到。,(5)调度参数,包括优先数等。核心利用它们决定进程转换到核心态和用户态的次序,以及占有处理机的次序。(6)软中断信号域,记录发向一个进程的所有未处理的软中断信号。(7)各种计时域,给出进程执行时间和系统资源的利用情
9、况。这些信息用来为进程记账、计算调度优先数以及发送闹钟信号等。(8)指向U区的指针。(9)事件描述域,记录使进程进入睡眠状态的事件。,2UNIX System V 的U区 U区中的各个域进一步刻画了进程的特性,U区主要包含以下信息:(1)指向进程表项的指针,指出对应于该U区的进程表项。(2)真正用户标识符(real user ID)及有效用户标识符(effec-tive user ID),决定进程的各种特权,如文件存取权限等。(3)用户文件描述符表,记录该进程已打开的文件。(4)当前目录和当前根,描述进程的文件系统环境。,(5)计时器域,记录进程及其后代在核心态和用户态运行所用的时间。(6)一
10、些输人脑出参数,描述要传输的数据量,在用户空间的源(或目的)数据的地址,文件的输入输出偏移量等。(7)限制域,指出进程的大小及它能“写”的文件大小限制。(8)出错域,记录系统调用执行期间所发生的错误。(9)返回值域,它指出系统调用的返回结果。(10)信号处理数组,指出进程接收到软中断信号时的处理方式。,UNIX版本的User结构 Struct user int u_rsav2;/*当进程不执行时保存r5,r6,不代表不在运行状态*/char u_segflg;/*进程所处的运行状态,0表示用户态,1表示核心态*/char u_error;/*运行错误编号*/int u_procp;/*进程指针
11、,指向U区对应的进程表项*/int*u_cdir;/*当前目录i节点地址*/int*u_pdir;/*父目录i节点地址*/int u_uisa16;/*段寄存器中的页地址寄存器*/int u_uisd16;/*段寄存器中的页说明寄存器*/int u_arg5;/*系统调用时传递的参数*/int u_tsize;/*正文区的大小*/int u_dsize;/*数据区的大小*/int u_ssize;/*栈区的大小*/int u_sep;/*正文区分开存储的标志*/int u_qsav2;/*当进程被中断时保存r5,r6*/int u_ssav2;/*当进程被换出是保存r5,r6*/int*u_a
12、r0;/*寄存器R0的地址*/,3系统区表 UNIX System V把一个进程的虚地址空间划分为若干连续的逻辑区,有正文区、数据区、栈区等。这些区是可被共享和保护的独立实体,多个进程可以共享一个区。为了对区进行管理,在核心中设置了一个系统区表(简称区表),各表项中记录了描述活动区的有关信息:(1)区的类型和大小。(2)区的状态。一个区具有这样几种状态:锁住、在请求中、在装入过程中、有效(区已装人内存)。(3)区在物理存储器中的位置。(4)引用计数。共享该区的进程数。(5)指向文件索引节点的指针。,4本进程区表 为了记录进程的每个区在进程中的虚地址,并通过它找到该区在物理存储器中的实地址,系统
13、为每个进程配置了一张进程区表,表中每一项记录一个区的起始虚地址及指向系统区表中对应区表项的指针。这样,核心通过查找本进程区表和系统区表,便可将区的逻辑地址变换为物理地址。这里使用两张表来对区地址进行映像是为了便于实现区的共享。,2.3 进程的状态及其转换,在 UNIX System V中,为进程设置了 9种状态。(1)创建状态:进程刚被创建时,进程已经存在,但尚未完全获得运行所必须具有的资源,因此它既不是就绪状态,也不是睡眠状态。这个状态可被认为是进程的初始状态。(2)内存中就绪:进程已在内存中且处于就绪状态。对于新创建的进程,若系统有足够的内存,核心便将它装入内存,从而使新进程转入内存中就绪
14、状态。(3)就绪且换出:进程处于就绪状态,但被换出到外存中。在创建新进程时,若无足够的内存,核心便将新进程安置在外存对换区中,并赋予就绪且换出状态。此外,原已在内存中的进程,可能因内存紧张而被换出,同样也成为就绪且换出状态。,(4)核心态执行:进程在核心态下执行。(5)用户态执行:进程在用户态下执行。(6)内存中睡眠:进程已在内存中且正处于睡眠状态。例如,进程所执行的系统调用涉及到I/O操作,而进程又须等待I/O操作的完成,则进程将进人内存中睡眠。(7)睡眠且换出:当内存紧张时,在内存中睡眠的进程,首先被核心换出到外存上,以腾出内存。此时,进程将变为睡眠且换出状态。(8)被剥夺状态:当进程从核
15、心态返回用户态时,核心剥夺了该进程的处理机,使该进程处于被剥夺状态。(9)僵死状态:进程执行了exit系统调用后,便处于僵死状态。此时,进程已不存在,但它留下一些含有状态码和一些计时统计信息的记录,供父进程收集。,用户态运行 系统调用 中断 返回 返回用户态 僵死 核心态运行 退出 抢先 睡眠 重新调 度进程 被抢先在内存 中睡眠 唤醒 在内存中就绪 换 出 fork 换出 换入 创建睡眠 内存不足 且换出 就绪且换出 图22 UNIX系统的状态转换图,9,4,6,5,2,7,1,3,8,2.3 进程的状态及其转换,由图22可以看出,UNIX把执行状态分为两种:一种是用户态执行;另一种是核心态
16、执行。处于用户态执行时,进程所能访问的内存空间和对象受到限制;而处于核心态执行时,进程能访问所有的内存空间和对象。进程在核心态执行时,是不允许被剥夺的;而运行在用户态时是可以被剥夺的。此外,还有两个状态是等效的,一个是内存中的就绪状态,处于这种状态的进程可以被调度而执行;另一个是被剥夺状态,当运行进程要从核心态执行返回到用户态执行时,核心可剥夺该进程的运行而调度另一进程执行,这时被剥夺的进程便转换为被剥夺状态。因而,处于这两种状态的进程是等效的,它们被排列在同一队列中等待再次调度。,2.4 进程上下文,当一个进程在执行时,可看作是在它的进程上下文中执行。每个进程都有一个严格定义的上下文,包括描
17、述这个进程的所有信息。上下文由几个部分组成:用户地址空间。一般划分为几个部分程序正文(可执行代码),数据,用户堆栈,共享内存区,等等。控制信息。内核使用两个数据结构维护进程的控制信息u区和proc区结构。每个进程也有它自己的内核堆栈和地址转换表。凭证。进程的凭证包括与其相关的用户ID和组ID。,2.4 进程上下文,环境变量。这是一些形如:variablevalue的字符串组,是从其父进程继承过来的。大多数UNIX将其存在用户栈底。标准输入输出库提供对这些变量的增加,删除,更改以及将从变量中取值的函数。当调用一个新程序时,调用者用exec取得原始环境或提供一组新的变量。硬件上下文。这包括通用寄存
18、器中的值以及一组特殊的系统寄存器。系统寄存器包括:程序计数器(PC),它记录将要执行的下一指令地址。堆栈指针(SP),它包括栈顶元素的地址。,2.4 进程上下文,处理器状态字(PSW),它包括几个表明系统状态信息的状态位,如当前和以前的执行模式,当前和以前的中断优先级溢出以及进位位。内存管理寄存器,它对应进程的地址转换表。浮点单元(FPU)寄存器。程序寄存器包括当前正在运行进程的硬件上下文。当发生上下文切换时,寄存器中的值都保存到当前进程u区(称为进程控制块,PCB)的特定部分。内核选择一个新进程运行时,将从PCB中装载硬件上下文。,2.4 进程上下文,一个进程的上下文(context)由三部
19、分组成:用户级上下文、寄存器上下文和系统级上下文。1用户级上下文 用户级上下文是由进程虚地址空间中的正文、数据、用户栈和共享存储区组成。在采用对换和请求调页存储管理方式时,只有进程的部分虚地址空间驻留在内存。但无论它是否驻留在内存,都属于用户级上下文的组成部分。,2.3 进程上下文,2寄存器上下文 寄存器上下文主要由CPU中的一些寄存器内容构成。主要的寄存器有:程序计数器(PC),它记录将要执行的下一指令地址。堆栈指针(SP),它包括栈顶元素的地址。处理器状态字(PSW),它包括几个表明系统状态信息的状态位,如当前和以前的 执行模式,当前和以前的中断优先级溢出以及进位位。内存管理寄存器,它对应
20、进程的地址转换表。浮点单元(FPU)寄存器。,2.3 进程上下文,3系统级上下文 系统级上下文可分为静态和动态两部分:(1)静态部分 在进程的整个生命期中,系统级上下文的静态部分只有一个,其大小保持不变,它由三部分组成:进程表项:每个进程有一个表项,其中记录了进程的状态及有关控制信息。U区:U区中的各个域进一步刻画了进程的特性。本进程区表项、系统区表项和页表:用于实现进程的逻辑地址到物理地址的映射,2.3 进程上下文,(2)动态部分 在进程的整个生命期中,系统级上下文动态部分的数目是可变的。它包括:核心栈:进程在核心态执行时使用的栈。若干层寄存器上下文:其中每一层都保存了前一层的寄存器上下文。
21、下图显示了进程上下文的组成。图的左边是上下文的静态部分,它由用户级上下文和系统级上下文的静态部分所组成。图的右边是上下文的动态部分,它由几个栈结构组成,其中每个栈结构中包含保存的前一层寄存器上下文和当核心在该层执行时的核心栈。核心的上下文层0是虚设层,它表示用户级上下文。,图2.3 进程上下文的组成,上下文静态部分 上下文动态部分,用户级上下文 进程正文 数 据栈 共享数据系统级上下文静态部分 进程表项U 区 本进程区表,核心栈第层第二层的保存的、寄存器上下文核心栈第2层第一层的保存的、寄存器上下文核心栈第1层第0层的保存的、寄存器上下文,核心上下文 0层,应用程序 系统调用(用户)指令 异常
22、(只访问进程空间)(可以访问进程及系统空间)(只访问系统空间)不 允 许 中断、系统任务,进程上下文,系统上下文,用户态,核心态,图2.4 执行模式及上下文,有三种事件会导致系统进入内核态设备中断,异常,自陷或软中断。在每一种情况下,当内核接收到控制权,它依赖于派遣表控制转移方向。派遣表中包括处理这些事件的底层例程的地址。在调用相应的例程前,内核在内核栈上保存被中断进程的某种状态(如它的程序计数器,处理器状态字)。当例程完成后,内核恢复进程的状态,并将执行模式恢复为原来的模式(在内核态发生中断时,中断处理程序完成后仍返回内核态)。,这里有必要区分中断和异常。中断是由外围设备,如磁盘,终端或硬时
23、钟引起的异步事件。由于中断不是当前正在运行的进程引起的,它们必须在系统上下文中被处理,而不可以访问进程地址空间和U区。同理,它们也不能被阻塞,否则会阻塞其他进程。异常对进程而言是同步的,是由进程自身相关的事件引发的,如除0或访问非法地址。因此异常处理程序应在进程上下文中运行,它可访问进程的地址空间和u区,必要时可以被阻塞。软件中断或自陷,在系统执行特殊指令时出现,如有系统调用,在进程上下文中同步处理。,2.5 进程控制与调度,在 UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。为了对进程进行控制,UNIX提供了一系列系统功能调用,用户可以利用它们来实现“创建一个进程
24、”或“终止一个进程的执行”等功能。,2.5.1 进程控制,在UNIX系统中,用于对进程实施控制的主要系统调用有:fork,用于创建一个新进程;exec,执行一个文件;exit,使进程自我终止;wait,等待子进程终止。1系统调用fork 在UNIX系统中,除了0进程外,其他所有进程都是被另一个进程利用fork创建的。0进程是一个特殊的系统进程,它是在系统引导时被创建的。系统初启时,0进程又创建1进程,此后0进程就变为对换进程,而1进程就变为系统的始祖进程。UNIX利用fork为每个终端创建一个子进程为用户服务,如等待用户登录、执行shell命令解释程序等。此后,每个终端子进程又可利用fork来
25、创建它的子进程,从而可形成一棵进程树。,1系统调用fork,fork系统调用的语法格式如下:int fork();fork系统调用没有参数,如果执行成功,则创建一个子进程,子进程继承父进程的许多特性,并具有与父进程完全相同的用户级上下文。核心为fork完成下列操作:(1)为新进程分配一进程表项和进程标识符。进入fork后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork系统调用失败;否则,核心为新进程分配一进程表项,并赋予一个惟一的进程标识符。,1系统调用fork,(2)检查同时运行的进程数目。对于一个普通用户,其所能建立的进程数是有限的,且当进程表中仅剩下最后一个进程表项
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UNIX 进程 管理
链接地址:https://www.31ppt.com/p-6522538.html