《第二章进程.ppt》由会员分享,可在线阅读,更多相关《第二章进程.ppt(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章第二章 进程管理进程管理2.1 UNIX进程管理的基本概念进程管理的基本概念 (一)进程的引入(1)程序顺序执行(SequentialExecution)与特征 顺序性:程序各程序段严格按照规定的顺序执行。封闭性:程序运行时机内各资源只受该程序控制而改变,执行结果不受外界因素影响。可再现性:只要程序执行环境和初始条件相同,程序多次执行,可获得相同结果。22程序并发执行程序并发执行(ConcurrentExecution)(ConcurrentExecution)与特征与特征 在计算机系统支持并行操作时,如采用多道程序设在计算机系统支持并行操作时,如采用多道程序设计技术,则内存中多道程序处
2、于并发执行状态。计技术,则内存中多道程序处于并发执行状态。间断性:程序在并发执行时,由于它们共享资间断性:程序在并发执行时,由于它们共享资源或为完成同一项任务而相互合作,使在并发程序之源或为完成同一项任务而相互合作,使在并发程序之间形成了相互制约的关系。相互制约将导致并发程序间形成了相互制约的关系。相互制约将导致并发程序具有具有“执行执行-暂仃暂仃-执行执行”这种间断性活动规律。这种间断性活动规律。失去封闭性:程序在并发执行时,是多个程序失去封闭性:程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运
3、行已失去了封闭性。个程序来改变,致使程序的运行已失去了封闭性。不可再现性:程序在并发执行时,由于失去了封不可再现性:程序在并发执行时,由于失去了封闭性,也将导致失去结果的可再现性。即程序经过多闭性,也将导致失去结果的可再现性。即程序经过多次运行,虽然其各次的环境和初始条件相同,但得到次运行,虽然其各次的环境和初始条件相同,但得到的结果却各不相同。的结果却各不相同。例:观察者例:观察者/报告者报告者 观察者:观察者:报告者:报告者:beginbeginbeginbeginrepeatrepeatrepeatrepeatwaitacargothroughdeleyatimewaitacargoth
4、roughdeleyatimeN=N+1N=N+1;PrintNPrintN;N=0N=0;untiluntiluntiluntilendendendend初始初始N=nN=n时不同执行序列:时不同执行序列:N=N+1N=N+1;PrintNPrintN;PrintNPrintN;PrintNPrintN;N=0N=0;N=N+1N=N+1;N=0N=0;N=N+1N=N+1;N=0N=0;结果各不相同结果各不相同:打印打印n+1n+1,N=0N=0;打印打印n n,N=1N=1;打印打印n n,N=0N=0;进程进程(Process)(Process)定义:定义:“可并发执行的程序在一个数可
5、并发执行的程序在一个数据集合上的运行过程据集合上的运行过程”。33进程的特征进程的特征:动态性:动态性是进程的最基本特征,它是程序动态性:动态性是进程的最基本特征,它是程序执行过程,它是有一定的生命期。它由创建而产生、执行过程,它是有一定的生命期。它由创建而产生、由调度而执行,因得不到资源而暂仃,并由撤消而死由调度而执行,因得不到资源而暂仃,并由撤消而死亡。而程序是静态的,它是存放在介质上一组有序指亡。而程序是静态的,它是存放在介质上一组有序指令的集合,无运动的含义。令的集合,无运动的含义。并发性:并发性是进程的重要特征,同时也是并发性:并发性是进程的重要特征,同时也是OSOS的重要特征。并发
6、性指多个进程实体同存于内存中,的重要特征。并发性指多个进程实体同存于内存中,能在一段时间内同时运行。而程序是不能并发执行。能在一段时间内同时运行。而程序是不能并发执行。独立性:进程是一个能独立运行的基本单位,即是独立性:进程是一个能独立运行的基本单位,即是一个独立获得资源和独立调度的单位,而程序不作为一个独立获得资源和独立调度的单位,而程序不作为独立单位参加运行。独立单位参加运行。异步性:进程按各自独立的不可预知的速度向前推异步性:进程按各自独立的不可预知的速度向前推进,即进程按异步方式进行,正是这一特征,将导致进,即进程按异步方式进行,正是这一特征,将导致程序执行的不可再现性,因此程序执行的
7、不可再现性,因此OSOS必须采用某种措施必须采用某种措施来限制各进程推进序列以保证各程序间正常协调运行。来限制各进程推进序列以保证各程序间正常协调运行。结构特征:从结构上,进程实体由程序段、数据段和结构特征:从结构上,进程实体由程序段、数据段和进程控制块三部分组成,进程控制块三部分组成,UNIXUNIX中称为中称为“进程映象进程映象”。2.1 UNIX进程管理的几个要点进程管理的几个要点 (1)进程在一个地址空间上执行单一指令序列。进程地址空间包括可以访问或引用的内存单元的集合,进程控制点通过一个一般称为程序计数器(PC)的硬件寄存器控制和跟踪进程指令序列。许多较新的UNIX版本支持多个控制点
8、(称为线程),因此在一个进程内可以有多个指令序列。2.1 UNIX进程管理的几个要点进程管理的几个要点 (2)UNIX系统是一个多道程序环境,即几个进程可以同时在系统中并发活动。系统为这些进程提供虚拟机的某些功能。在一个纯虚拟机结构中,操作系统给每个进程一个它是系统唯一进程的假象。程序员在写应用程序时,可以认为系统中只有他的代码在运行。在UNIX系统中,每个进程有自己的寄存器和内存,但必须通过操作系统才能进行I/O和设备控制。2.1 UNIX进程管理的几个要点进程管理的几个要点 (3)进程地址空间是虚拟的,通常只有部分映射到物理内存单元上。内核将进程地址空间的内容保存在备种存储对象上,包括物理
9、内存,磁盘上的文件,特别地还可以保存在本地和远程磁盘的交换区上。通常由内核的内存管理子系统完成进程存储页面在这些对象之间的转移。2.1 UNIX进程管理的几个要点进程管理的几个要点 (4)每个进程还有一组对应于实际硬件寄存器的寄存器。系统中有许多活动进程,但只有一组硬件寄存器。内核将当前运行进程的寄存器组保存在硬件寄存器中,将其他进程的寄存器组保存在每个进程的数据结构中。2.1 UNIX进程管理的几个要点进程管理的几个要点 (5)进程间会竞争系统中的各种资源,例如处理器,内存和外围设备。对于CPU这样的资源,内核限制每个进程在CPU上运行一个小段时间(称为定额,一般为10毫秒左右),然后再切换
10、到另一个进程。通过这种方法,内核给每个进程一种并发运行的假象。这样,每个进程获得一段CPU时间并继续执行。这种操作方法称为时间片。2.1 UNIX进程管理的几个要点进程管理的几个要点 (6)应用程序员并不关心设备的功能和结构的底层细节。操作系统拥有对这些设备的完全控制,并提供一个高级抽象编程接口,应用程序可以通过这些接口访问这些部件。这样就隐藏了硬件的所有细节,大大简化了程序员的工作。通过对这些设备的集中控制,还可以提供一些诸如访问同步(若两个用户在同一时刻想访问同一设备)和错误恢复等其他功能。应用编程接口(API)定义了用户程序和操作系统之间的所有交互语义。核心系统调用接口设备访问接口用 户
11、 进 程系统进程终端打印机各种外部设备存储设备图2.1 内核号进程及设备间的交互 2.1 UNIX进程管理的几个要点进程管理的几个要点 内核是一个直接运行在硬件上的特殊程序,它实现了进程模型和其他系统服务。它在磁盘的文件一般是/vmunix或/unix(这取决于UNIX厂商)。当系统启动时,通过一个称为引导程序(bootstrapping)的特殊过程从磁盘上加载内核。内核初始化系统,为运行进程设立环境。然后它创建一系列初始进程,这些进程接着又创建其他进程。一旦被加载后,内核将一直保留在内存中,直到系统关闭为止,它管理所有进程并为它们提供各种服务。UNIX操作系统借助以下4种方式提供功能:用户进
12、程通过UNIXAPI的内核部分,系统调用接口,显式地从内核获得服务。内核以调用进程的身份执行这些请求。进程的某些不正常操作,诸如除数为0,或用户堆栈溢出将引起硬件异常。异常需要内核干预,内核为进程处理这些异常。内核处理外围设备的中断。设备通过中断机制通知内核I/O完成和状态变化。内核将中断视为全局事件,与任何特定进程都不相关。像Swapper和pagedaemon之类的一组特殊的系统进程执行系统级的任务。比如,控制活动进程的数目或维护空闲内存池。2.2 进程的描述要点进程的描述要点 为了实施对进程的有效管理,操作系统为每个进程设置了一个进程控制块(PCB)。在UNIX 版本六中,将PCB分成P
13、roc结构、User结构、text结构。在UNIX System V中,将PCB分成进程表项和U区。除进程表项和U区外,管理进程的据结构还有本进程区表和系统区表。1进程表项 进程表项中的每个表目主要包含以下信息:UNIXUNIX版本版本的PROC结构struct procstruct proc char p_stat;/*char p_stat;/*进程的运行状态进程的运行状态*/*/char p_flag;/*char p_flag;/*进程的标志域进程的标志域*/*/char p_pri;/*char p_pri;/*进程的优先数进程的优先数*/*/char p_sig;/*char p_
14、sig;/*进程接收到的中断号进程接收到的中断号*/*/char p_uid;/*char p_uid;/*进程拥有者的用户进程拥有者的用户ID*/ID*/char p_time;/*char p_time;/*进程在内存中的驻留时间进程在内存中的驻留时间*/*/char p_cpu:/*char p_cpu:/*进程的使用进程的使用cpucpu时间时间*/*/char p_nice;/*char p_nice;/*计算进程优先数的偏置量计算进程优先数的偏置量*/*/int p_ttyp;/*int p_ttyp;/*控制终端控制终端*/*/int p_pid;/*int p_pid;/*当前
15、进程的进程当前进程的进程ID*/ID*/int p_ppid;/*int p_ppid;/*当前进程父进程的进程当前进程父进程的进程ID*/ID*/int p_addr;/*int p_addr;/*交换区的地址交换区的地址*/*/int p_size;/*int p_size;/*进程文件的大小进程文件的大小*/*/int p_wchan;/*int p_wchan;/*进入睡眠的原因进入睡眠的原因*/*/int *p_textp;/*int *p_textp;/*指向文本区的指针指向文本区的指针*/*/procNPROC;procNPROC;UNIX System V的进程表项 (1)标识
16、进程状态的状态域。UNIX System V中共有9个状态。(2)若干用户标识号,简称UID或用户ID。这些用户标识号指出该进程属于哪一用户,具有何种特权,如是否可以互相发送救中断信号等。(3)若干进程标识号,简称PID或进程ID,说明进程间的相互关系。(4)存储区位置和长度,指明进程在内存或外存中的位置及大小。这些信息在进程换入换出及状态转换时用到。(5)调度参数,包括优先数等。核心利用它们决定进程转换到核心态和用户态的次序,以及占有处理机的次序。(6)软中断信号域,记录发向一个进程的所有未处理的软中断信号。(7)各种计时域,给出进程执行时间和系统资源的利用情况。这些信息用来为进程记账、计算
17、调度优先数以及发送闹钟信号等。(8)指向U区的指针。(9)事件描述域,记录使进程进入睡眠状态的事件。2UNIX System V 的U区 U区中的各个域进一步刻画了进程的特性,U区主要包含以下信息:(1)指向进程表项的指针,指出对应于该U区的进程表项。(2)真正用户标识符(real user ID)及有效用户标识符(effec-tive user ID),决定进程的各种特权,如文件存取权限等。(3)用户文件描述符表,记录该进程已打开的文件。(4)当前目录和当前根,描述进程的文件系统环境。(5)计时器域,记录进程及其后代在核心态和用户态运行所用的时间。(6)一些输人脑出参数,描述要传输的数据量,
18、在用户空间的源(或目的)数据的地址,文件的输入输出偏移量等。(7)限制域,指出进程的大小及它能“写”的文件大小限制。(8)出错域,记录系统调用执行期间所发生的错误。(9)返回值域,它指出系统调用的返回结果。(10)信号处理数组,指出进程接收到软中断信号时的处理方式。UNIXUNIX版本的版本的版本的版本的UserUser结构结构结构结构 Struct userStruct user int u_rsav2;/*int u_rsav2;/*当进程不执行时保存当进程不执行时保存r5,r6r5,r6,不代表不在运行状态,不代表不在运行状态*/*/char u_segflg;/*char u_segf
19、lg;/*进程所处的运行状态,进程所处的运行状态,0 0表示用户态,表示用户态,1 1表示核心态表示核心态*/*/char u_error;/*char u_error;/*运行错误编号运行错误编号*/*/int u_procp;/*int u_procp;/*进程指针,指向进程指针,指向U U区对应的进程表项区对应的进程表项*/*/int *u_cdir;/*int *u_cdir;/*当前目录当前目录i i节点地址节点地址*/*/int *u_pdir;/*int *u_pdir;/*父目录父目录i i节点地址节点地址*/*/int u_uisa16;/*int u_uisa16;/*段寄
20、存器中的页地址寄存器段寄存器中的页地址寄存器*/*/int u_uisd16;/*int u_uisd16;/*段寄存器中的页说明寄存器段寄存器中的页说明寄存器*/*/int u_arg5;/*int u_arg5;/*系统调用时传递的参数系统调用时传递的参数*/*/int u_tsize;/*int u_tsize;/*正文区的大小正文区的大小*/*/int u_dsize;/*int u_dsize;/*数据区的大小数据区的大小*/*/int u_ssize;/*int u_ssize;/*栈区的大小栈区的大小*/*/int u_sep;/*int u_sep;/*正文区分开存储的标志正文
21、区分开存储的标志*/*/int u_qsav2;/*int u_qsav2;/*当进程被中断时保存当进程被中断时保存r5,r6*/r5,r6*/int u_ssav2;/*int u_ssav2;/*当进程被换出是保存当进程被换出是保存r5,r6*/r5,r6*/int *u_ar0;/*int *u_ar0;/*寄存器寄存器R0R0的地址的地址*/*/3系统区表 UNIX System V UNIX System V把一个进程的虚地址空间划分为若把一个进程的虚地址空间划分为若干连续的逻辑区,有正文区、数据区、栈区等。这些干连续的逻辑区,有正文区、数据区、栈区等。这些区是可被共享和保护的独立实
22、体,多个进程可以共享区是可被共享和保护的独立实体,多个进程可以共享一个区。为了对区进行管理,在核心中设置了一个系一个区。为了对区进行管理,在核心中设置了一个系统区表(简称区表),各表项中记录了描述活动区的统区表(简称区表),各表项中记录了描述活动区的有关信息:有关信息:(1)(1)区的类型和大小。区的类型和大小。(2)(2)区的状态。一个区具有这样几种状态:锁住、区的状态。一个区具有这样几种状态:锁住、在请求中、在装入过程中、有效(区已装人内存)。在请求中、在装入过程中、有效(区已装人内存)。(3)(3)区在物理存储器中的位置。区在物理存储器中的位置。(4)(4)引用计数。共享该区的进程数。引
23、用计数。共享该区的进程数。(5)(5)指向文件索引节点的指针。指向文件索引节点的指针。4本进程区表 为了记录进程的每个区在进程中的虚地址,并通过它找到该区在物理存储器中的实地址,系统为每个进程配置了一张进程区表,表中每一项记录一个区的起始虚地址及指向系统区表中对应区表项的指针。这样,核心通过查找本进程区表和系统区表,便可将区的逻辑地址变换为物理地址。这里使用两张表来对区地址进行映像是为了便于实现区的共享。2.3 进程的状态及其转换进程的状态及其转换 在在 UNIX System V UNIX System V中,为进程设置了中,为进程设置了 9 9种状态。种状态。(1)(1)创建状态创建状态:
24、进程刚被创建时,进程已经存在,但进程刚被创建时,进程已经存在,但尚未完全获得运行所必须具有的资源,因此它既不是尚未完全获得运行所必须具有的资源,因此它既不是就绪状态,也不是睡眠状态。这个状态可被认为是进就绪状态,也不是睡眠状态。这个状态可被认为是进程的初始状态。程的初始状态。(2)(2)内存中就绪内存中就绪:进程已在内存中且处于就绪状态。进程已在内存中且处于就绪状态。对于新创建的进程,若系统有足够的内存,核心便将对于新创建的进程,若系统有足够的内存,核心便将它装入内存,从而使新进程转入内存中就绪状态。它装入内存,从而使新进程转入内存中就绪状态。(3)(3)就绪且换出就绪且换出:进程处于就绪状态
25、,但被换出到外进程处于就绪状态,但被换出到外存中。在创建新进程时,若无足够的内存,核心便将存中。在创建新进程时,若无足够的内存,核心便将新进程安置在外存对换区中,并赋予就绪且换出状态。新进程安置在外存对换区中,并赋予就绪且换出状态。此外,原已在内存中的进程,可能因内存紧张而被换此外,原已在内存中的进程,可能因内存紧张而被换出,同样也成为就绪且换出状态。出,同样也成为就绪且换出状态。(4)(4)核心态执行核心态执行:进程在核心态下执行。进程在核心态下执行。(5)(5)用户态执行用户态执行:进程在用户态下执行。进程在用户态下执行。(6)(6)内存中睡眠内存中睡眠:进程已在内存中且正处于睡眠状态。进
26、程已在内存中且正处于睡眠状态。例如,进程所执行的系统调用涉及到例如,进程所执行的系统调用涉及到I/OI/O操作,而进操作,而进程又须等待程又须等待I/OI/O操作的完成,则进程将进人内存中睡操作的完成,则进程将进人内存中睡眠。眠。(7)(7)睡眠且换出睡眠且换出:当内存紧张时,在内存中睡眠的进当内存紧张时,在内存中睡眠的进程,首先被核心换出到外存上,以腾出内存。此时,程,首先被核心换出到外存上,以腾出内存。此时,进程将变为睡眠且换出状态。进程将变为睡眠且换出状态。(8)(8)被剥夺状态被剥夺状态:当进程从核心态返回用户态时,核当进程从核心态返回用户态时,核心剥夺了该进程的处理机,使该进程处于被
27、剥夺状态。心剥夺了该进程的处理机,使该进程处于被剥夺状态。(9)(9)僵死状态僵死状态:进程执行了进程执行了exitexit系统调用后,便处于系统调用后,便处于僵死状态。此时,进程已不存在,但它留下一些含有僵死状态。此时,进程已不存在,但它留下一些含有状态码和一些计时统计信息的记录,供父进程收集。状态码和一些计时统计信息的记录,供父进程收集。用户态运行用户态运行 系统调用系统调用 中断中断 返回返回 返回用户态返回用户态 僵死僵死 核心态运行核心态运行 退出退出 抢先抢先 睡眠睡眠 重新调重新调 度进程度进程 被抢先被抢先在内存在内存 中睡中睡眠眠 唤醒唤醒 在内存中就绪在内存中就绪 换换 出
28、出 fork fork 换出换出 换入换入 创建创建睡眠睡眠 内存不足内存不足 且换出且换出 就绪且换出就绪且换出 图图2 22 UNIX2 UNIX系统的状态转换图系统的状态转换图9465271382.3 进程的状态及其转换进程的状态及其转换 由图由图2 22 2可以看出,可以看出,UNIXUNIX把执行状态分为两种:把执行状态分为两种:一种是用户态执行;另一种是核心态执行。处于用户一种是用户态执行;另一种是核心态执行。处于用户态执行时,进程所能访问的内存空间和对象受到限制;态执行时,进程所能访问的内存空间和对象受到限制;而处于核心态执行时,进程能访问所有的内存空间和而处于核心态执行时,进程
29、能访问所有的内存空间和对象。进程在核心态执行时,是不允许被剥夺的;而对象。进程在核心态执行时,是不允许被剥夺的;而运行在用户态时是可以被剥夺的。此外,还有两个状运行在用户态时是可以被剥夺的。此外,还有两个状态是等效的,一个是内存中的就绪状态,处于这种状态是等效的,一个是内存中的就绪状态,处于这种状态的进程可以被调度而执行;另一个是被剥夺状态,态的进程可以被调度而执行;另一个是被剥夺状态,当运行进程要从核心态执行返回到用户态执行时,核当运行进程要从核心态执行返回到用户态执行时,核心可剥夺该进程的运行而调度另一进程执行,这时被心可剥夺该进程的运行而调度另一进程执行,这时被剥夺的进程便转换为被剥夺状
30、态。因而,处于这两种剥夺的进程便转换为被剥夺状态。因而,处于这两种状态的进程是等效的,它们被排列在同一队列中等待状态的进程是等效的,它们被排列在同一队列中等待再次调度。再次调度。2.4 进程上下文进程上下文 当一个进程在执行时,可看作是在它的进程上下文中执行。每个进程都有一个严格定义的上下文,包括描述这个进程的所有信息。上下文由几个部分组成:n n用户地址空间。一般划分为几个部分程序正文(可执行代码),数据,用户堆栈,共享内存区,等等。n n控制信息。内核使用两个数据结构维护进程的控制信息u区和proc区结构。每个进程也有它自己的内核堆栈和地址转换表。n n凭证。进程的凭证包括与其相关的用户I
31、D和组ID。2.4 进程上下文进程上下文n n环境变量。这是一些形如:variablevalue的字符串组,是从其父进程继承过来的。大多数UNIX将其存在用户栈底。标准输入输出库提供对这些变量的增加,删除,更改以及将从变量中取值的函数。当调用一个新程序时,调用者用exec取得原始环境或提供一组新的变量。n n硬件上下文。这包括通用寄存器中的值以及一组特殊的系统寄存器。系统寄存器包括:n n程序计数器(PC),它记录将要执行的下一指令地址。n n堆栈指针(SP),它包括栈顶元素的地址。2.4 进程上下文进程上下文n n处理器状态字(PSW),它包括几个表明系统状态信息的状态位,如当前和以前的执行
32、模式,当前和以前的中断优先级溢出以及进位位。n n内存管理寄存器,它对应进程的地址转换表。n n浮点单元(FPU)寄存器。n n程序寄存器包括当前正在运行进程的硬件上下文。当发生上下文切换时,寄存器中的值都保存到当前进程u区(称为进程控制块,PCB)的特定部分。内核选择一个新进程运行时,将从PCB中装载硬件上下文。2.4 进程上下文进程上下文 一个进程的上下文(context)由三部分组成:用户级上下文、寄存器上下文和系统级上下文。1用户级上下文 用户级上下文是由进程虚地址空间中的正文、数据、用户栈和共享存储区组成。在采用对换和请求调页存储管理方式时,只有进程的部分虚地址空间驻留在内存。但无论
33、它是否驻留在内存,都属于用户级上下文的组成部分。2.3 进程上下文进程上下文 2 2寄存器上下文寄存器上下文 寄存器上下文主要由寄存器上下文主要由CPUCPU中的一些寄存器内容构成。中的一些寄存器内容构成。主要的寄存器有:主要的寄存器有:n n程序计数器(程序计数器(PCPC),它记录将要执行的下一指令地),它记录将要执行的下一指令地址。址。n n堆栈指针(堆栈指针(SPSP),它包括栈顶元素的地址。),它包括栈顶元素的地址。n n处理器状态字(处理器状态字(PSWPSW),它包括几个表明系统状态),它包括几个表明系统状态信息的状态位,如当前和以前的信息的状态位,如当前和以前的 执行模式,执行
34、模式,当前和以前的中断优先级溢出以及进位位。当前和以前的中断优先级溢出以及进位位。n n内存管理寄存器,它对应进程的地址转换表。内存管理寄存器,它对应进程的地址转换表。n n浮点单元(浮点单元(FPUFPU)寄存器。)寄存器。2.3 进程上下文进程上下文 3 3系统级上下文系统级上下文 系统级上下文可分为静态和动态两部分:系统级上下文可分为静态和动态两部分:(1 1)静态部分)静态部分 在进程的整个生命期中,系统级上下文的静态部分在进程的整个生命期中,系统级上下文的静态部分只有一个,其大小保持不变,它由三部分组成:只有一个,其大小保持不变,它由三部分组成:n n进程表项进程表项:每个进程有一个
35、表项,其中记录了进程的每个进程有一个表项,其中记录了进程的状态及有关控制信息。状态及有关控制信息。n nU U区区:U:U区中的各个域进一步刻画了进程的特性。区中的各个域进一步刻画了进程的特性。n n本进程区表项、系统区表项和页表本进程区表项、系统区表项和页表:用于实现进程的用于实现进程的逻辑地址到物理地址的映射逻辑地址到物理地址的映射 2.3 进程上下文进程上下文 (2)(2)动态部分动态部分 在进程的整个生命期中,系统级上下文动态部分的在进程的整个生命期中,系统级上下文动态部分的数目是可变的。它包括:数目是可变的。它包括:核心栈核心栈:进程在核心态执行时使用的栈。进程在核心态执行时使用的栈
36、。若干层寄存器上下文若干层寄存器上下文:其中每一层都保存了前一层其中每一层都保存了前一层的寄存器上下文。的寄存器上下文。下图显示了进程上下文的组成。图的左边是上下文下图显示了进程上下文的组成。图的左边是上下文的静态部分,它由用户级上下文和系统级上下文的静的静态部分,它由用户级上下文和系统级上下文的静态部分所组成。图的右边是上下文的动态部分,它由态部分所组成。图的右边是上下文的动态部分,它由几个栈结构组成,其中每个栈结构中包含保存的前一几个栈结构组成,其中每个栈结构中包含保存的前一层寄存器上下文和当核心在该层执行时的核心栈。核层寄存器上下文和当核心在该层执行时的核心栈。核心的上下文层心的上下文层
37、0 0是虚设层,它表示用户级上下文。是虚设层,它表示用户级上下文。图2.3 进程上下文的组成上下文静态部分 上下文动态部分 用户级上下文 进程正文 数 据栈 共享数据系统级上下文静态部分 进程表项U 区 本进程区表核心栈第层第二层的保存的、寄存器上下文核心栈第2层第一层的保存的、寄存器上下文核心栈第1层第0层的保存的、寄存器上下文 核心上下文 0层应用程序 系统调用(用户)指令 异常 (只访问进程空间)(可以访问进程及系统空间)(只访问系统空间)不 允 许 中断、系统任务进程上下文系统上下文用户态核心态图2.4 执行模式及上下文 n n有三种事件会导致系统进入内核态设备中断,异常,自陷或软中断
38、。在每一种情况下,当内核接收到控制权,它依赖于派遣表控制转移方向。派遣表中包括处理这些事件的底层例程的地址。在调用相应的例程前,内核在内核栈上保存被中断进程的某种状态(如它的程序计数器,处理器状态字)。当例程完成后,内核恢复进程的状态,并将执行模式恢复为原来的模式(在内核态发生中断时,中断处理程序完成后仍返回内核态)。n n这里有必要区分中断和异常。中断是由外围设备,如磁盘,终端或硬时钟引起的异步事件。由于中断不是当前正在运行的进程引起的,它们必须在系统上下文中被处理,而不可以访问进程地址空间和U区。同理,它们也不能被阻塞,否则会阻塞其他进程。异常对进程而言是同步的,是由进程自身相关的事件引发
39、的,如除0或访问非法地址。因此异常处理程序应在进程上下文中运行,它可访问进程的地址空间和u区,必要时可以被阻塞。软件中断或自陷,在系统执行特殊指令时出现,如有系统调用,在进程上下文中同步处理。2.5 进程控制与调度进程控制与调度 n n在 UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。为了对进程进行控制,UNIX提供了一系列系统功能调用,用户可以利用它们来实现“创建一个进程”或“终止一个进程的执行”等功能。2.5.1 进程控制进程控制 在在UNIXUNIX系统中,用于对进程实施控制的主要系统系统中,用于对进程实施控制的主要系统调用有:调用有:forkfork,用于
40、创建一个新进程;,用于创建一个新进程;exec exec,执行,执行一个文件;一个文件;exit exit,使进程自我终止;,使进程自我终止;wait wait,等待子,等待子进程终止。进程终止。1 1系统调用系统调用forkfork 在在UNIXUNIX系统中,除了系统中,除了0 0进程外,其他所有进程都进程外,其他所有进程都是被另一个进程利用是被另一个进程利用forkfork创建的。创建的。0 0进程是一个特殊进程是一个特殊的系统进程,它是在系统引导时被创建的。系统初启的系统进程,它是在系统引导时被创建的。系统初启时,时,0 0进程又创建进程又创建1 1进程,此后进程,此后0 0进程就变为
41、对换进程,进程就变为对换进程,而而1 1进程就变为系统的始祖进程。进程就变为系统的始祖进程。UNIXUNIX利用利用forkfork为每为每个终端创建一个子进程为用户服务,如等待用户登录、个终端创建一个子进程为用户服务,如等待用户登录、执行执行shellshell命令解释程序等。此后,每个终端子进程命令解释程序等。此后,每个终端子进程又可利用又可利用forkfork来创建它的子进程,从而可形成一棵进来创建它的子进程,从而可形成一棵进程树。程树。1系统调用fork fork系统调用的语法格式如下:int fork();fork系统调用没有参数,如果执行成功,则创建一个子进程,子进程继承父进程的许
42、多特性,并具有与父进程完全相同的用户级上下文。核心为fork完成下列操作:(1)为新进程分配一进程表项和进程标识符。进入fork后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork系统调用失败;否则,核心为新进程分配一进程表项,并赋予一个惟一的进程标识符。1系统调用fork (2)检查同时运行的进程数目。对于一个普通用户,其所能建立的进程数是有限的,且当进程表中仅剩下最后一个进程表项时,不能由普通用户占用。因此对普通用户而言,超出此限制值或进程表中仅剩下最后一个进程表项时,fork系统调用失败。(3)复制进程表项中的数据。核心初始化子进程的进程表项,把它置为创建状态,然后把
43、父进程表项中的数据复制到子进程的进程表项中。系统调用fork (4 4)子进程继承父进程的所有文件。核心首先对父)子进程继承父进程的所有文件。核心首先对父进程的当前目录的引用计数加进程的当前目录的引用计数加1,1,其次若有改变的根目其次若有改变的根目录,也对其引用计数加录,也对其引用计数加1 1:再找出父进程已经打开的:再找出父进程已经打开的所有文件,并将相应的文件表项中的引用计数都进行所有文件,并将相应的文件表项中的引用计数都进行加加1 1操作。这样,子进程便继承了父进程的所有文件,操作。这样,子进程便继承了父进程的所有文件,从而可与父进程共享这些文件。从而可与父进程共享这些文件。(5 5)
44、为子进程创建进程上下文。核心先为子进程创)为子进程创建进程上下文。核心先为子进程创建进程上下文的静态部分,并将父进程上下文的静态建进程上下文的静态部分,并将父进程上下文的静态部分复制到子进程的上下文中。然后,再为子进程创部分复制到子进程的上下文中。然后,再为子进程创建进程上下文的动态部分。至此,进程的创建即告结建进程上下文的动态部分。至此,进程的创建即告结束。束。系统调用fork (6 6)进程执行。若正在执行的进程是父进程,则)进程执行。若正在执行的进程是父进程,则将于进程的状态设为内存中就绪,并将于进程的进程将于进程的状态设为内存中就绪,并将于进程的进程标识符返回给用户,从而完成了它的那部
45、分标识符返回给用户,从而完成了它的那部分forkfork调用;调用;若正在执行的进程是子进程,则它将执行子进程的那若正在执行的进程是子进程,则它将执行子进程的那部分部分forkfork调用,初始化调用,初始化U U区的计时字段后,将区的计时字段后,将0 0作为作为系统调用的返回值。系统调用的返回值。由于父进程和子进程都是从由于父进程和子进程都是从forkfork返回并继续执行同返回并继续执行同一程序,需要一种方式区分它们,并使它们能照此运一程序,需要一种方式区分它们,并使它们能照此运行。否则,不同进程将不可能做不同事。出于这种考行。否则,不同进程将不可能做不同事。出于这种考虑,虑,forkfo
46、rk系统调用为父子进程返回不同的值子进系统调用为父子进程返回不同的值子进程中程中forkfork返回返回0 0,父进程中返回子进程的,父进程中返回子进程的PIDPID。2系统调用exec fork系统调用只是将父进程的上下文复制到新进程中,因此执行完fork时,父子进程具有完全相同的正文区、数据区及用户栈区。若要使新进程执行的程序不同于父进程,可以使用exec系列系统功能调用。exec系列中的系统调用都完成同样的功能,它们把一个新的程序装入调用进程的内存空间,以改变调用进程的执行代码,从而使调用进程执行新引入的程序功能。如果exec调用成功,调用进程将被覆盖,然后从新引入程序的入口开始执行。这
47、就产生了一个新进程,它的进程标识符与调用进程相同,但所执行的程序代码不同。这就是说,exec没有建立一个与调用进程并发执行的新进程,而是用新进程取代了老进程。系统调用exec n n这一组系统调用的主要差别在于给出参数的数目和形式不同,给出参数的形式有两种,一种是直接给出指向每个参数的指针,另一种是给出指向参数表的指针。下面只给出两种基本的exec调用格式的说明,例如:int execl(path,arg0,arg1,argn,0);chart*path,*arg0,*arg1,*argn:int execv(path,argv);char path,argv;系统调用exec exec ex
48、ec系统调用必须执行下述任务;系统调用必须执行下述任务;1)1)分析路径名并访问可执行文件。分析路径名并访问可执行文件。2)2)验证调用者有执行该文件的权限。验证调用者有执行该文件的权限。3)3)读文件头并检查它是合法可执行的。读文件头并检查它是合法可执行的。4)4)若文件的模式中有若文件的模式中有SUIDSUID或或SGIDSGID位标识,把调用位标识,把调用者的有效者的有效UIDUID或或GIDGID 分别改变为这个文件的属主的分别改变为这个文件的属主的UIDUID和和GIDGID。5)5)将将execexec的参数和环境变量复制到内核空间,当前的参数和环境变量复制到内核空间,当前用户空间
49、将当被删除。用户空间将当被删除。6)6)为数据和堆栈区分配交换空间。为数据和堆栈区分配交换空间。7)7)释放旧的地址空间及相关的交换空间。若进程由释放旧的地址空间及相关的交换空间。若进程由forkfork创建,将老空间返回父进程。创建,将老空间返回父进程。2系统调用exec 8)8)为新的正文,数据和堆栈分配地址转换表。为新的正文,数据和堆栈分配地址转换表。9)9)设置新的地址空间。若正文区已经处于活动状设置新的地址空间。若正文区已经处于活动状态(某些进程巳在运行同一程序),态(某些进程巳在运行同一程序),那么就共享它。那么就共享它。否则,从可执行文件中读取它。否则,从可执行文件中读取它。UN
50、IXUNIX进程一般是分进程一般是分页式,页式,即只有当程序需耍时,才将页面读入内存。即只有当程序需耍时,才将页面读入内存。10)10)将参数和环境变量复制到新的用户栈上。将参数和环境变量复制到新的用户栈上。11)11)由于原处理函数不在新程序中,将所有信号处由于原处理函数不在新程序中,将所有信号处理函数重置为缺省动作。在调用理函数重置为缺省动作。在调用execexec前被忽略或阻前被忽略或阻塞的信号仍忽略或阻塞。塞的信号仍忽略或阻塞。12)12)初始化硬件上下文。大多数寄存器设为初始化硬件上下文。大多数寄存器设为0 0,计数,计数器设置为程序入口点。器设置为程序入口点。许多情况下,子进程从许