1、2019/6/5,1,UNIX系统的进程系统分析,2019/6/5,2,7.4 进程管理,7.4.1 进程和进程控制块PCB 7.4.2 进程控制,2019/6/5,3,7.4.1 进程和进程控制块PCB,1、UNIX系统中进程的概念在UNIX系统中,进程具有如下特定的含义和特点: (1)一个进程是对一个程序的执行。 (2)一个进程的存在意味着系统中存在着一个相应的常驻内存的proc结构,其中包含着该进程的控制信息。 (3)对每一个进程,有一个被称为user结构的数据结构,这个结构中存放该进程的私用控制信息。该结构只有该进程运行时,才会调入内存。 (4)一个进程可以创建或撤消其子进程。 (5)
2、进程是系统进行资源分配的基本单位。,2019/6/5,4,2、进程的结构UNIX系统中,进程包含三部分内容:进程控制块、程序段以及数据段。下面我们分别对这三部分来进行讨论。 (1)进程控制块PCB在UNIX系统中,整个系统的活动是以进程为基本单位来组织进行的。为了管理进程的活动,系统为每个进程设立了一个进程控制块(PCB)来记录各个进程的状态以及与进程相关的数据。在UNIX系统中,进程控制块也是进程是否存在的标志。因为进程控制块中包含的信息量很大,所以占用的空间也很大。为了节省进程控制块所占的内存空间,UNIX系统把每个进程的进程控制块分为两部分:,2019/6/5,5,(a)常驻内存部分,称
3、proc结构,该结构中包含着进程调度时必须使用的一些主要信息; (b)非常驻内存部分,称user结构,该结构登记了 进程运行时才要用到的更多的信息,它可以随用户的程序和数据在内存中换进换出。UNIX系统将所有进程的proc结构组织到一起,形成一个进程表,也称为proc数组,表中的每一个proc结构是该数组的一个元素,成为该进程表的一个表目。进程表中的proc结构数量是有限制的,在UNIX系统中最多允许有50个。,2019/6/5,6, UNIX系统的proc结构主要包括以下各项: (a)进程标识符(PID)。它是标识一个进程的标识数; (b)用户标识符(UID)。标识拥有该进程的用户; (c)
4、进程状态。记录该进程的当前状态; (d)事件描述符。记录使进程进入睡眠状态的事件; (e)存储区位置和长度。指出进程在内存或在外存中的位置及大小。这些信息在进程换进换出以及状态转换时用到; (f)软中断信号。记录其他进程发来的软中断信号; (g)计时域。给出进程的执行时间和对资源的利用情况; (h)进程的大小。进程的大小是内核为进程分配存储空间的依据; (i)调度参数,包括优先数等。核心用它们决定进程转换到核心态和用户态的次序以及占有处理机的次序。,2019/6/5,7, user结构主要包括以下各项: (a)指向proc结构的指针。标识出对应于该user结构的proc结构; (b)真正用户标
5、识符(real user ID)。它是超级用户分配给用户的标识符,以后每次用户登录进入系统时,均需送入此标识符; (c)有效用户标识符(effective user ID)。一般情况下,它与真正用户标识符相同,但在其它用户允许的情况下,可用系统调用setuid将它改变为其它用户标识符,以获得对该用户的文件进行操作的权力; (d)用户文件描述符表。记录了该进程已打开的所有文件;,2019/6/5,8,(e)当前目录和当前根。给出进程的文件系统环境; (f)计时器。记录进程及其子进程在用户态和核心态运行的时间; (g)内部I/O参数。给出要传输的数据量、源数据或目标数据的地址、文件的输入、输出偏移
6、量; (h)限制值。对进程的大小及其能“写”的文件大小的限制; (i)系统调用信息。记录当前系统调用的参数、结果、返回值以及错误码等。,2019/6/5,9,(2)数据段分为三部分:进程数据区(PPDA)、用户的程序和数据区、用户栈区。其中,底部为进程数据区,共1024个字节。 进程数据区又分为两部分:最底部的289个字节是进程控制块的一部分USER结构,它含有进程的更多的信息;另一部分是该进程的系统栈,自顶向下扩展。进程数据区是属于进程的核心空间的一部分,因此进程的用户程序部分不能访问这一部分,只有该进程的系统程序部分才能访问进程数据部分。 数据段的顶部是用户栈区,物理上是从顶向下扩展。 数
7、据段的中间部分是可读写的用户的程序和数据区。,2019/6/5,10,图 7-3 进程数据段结构,2019/6/5,11,(3)正文段 正文段包括该进程所执行的所有可共享的、可再入的纯代码和常数。一个进程的正文段也可以不存在。 UNIX系统为了方便管理,将系统中所有这些只读的可共享的正文段组织在一个正文表中,在内存中的所有正文段均在这个正文表中有一个对应表目。该表目中包含有该正文段在内存和磁盘上的地址,该段大小和使用此段的进程数目等信息。该正文表又叫TEXT数组。 UNIX系统中最多允许在内存中同时存放40个正文段,也就是说TEXT数组的元素最多为40个。 整个系统中的进程控制如图7-4所示。
8、,2019/6/5,12,图 7-4 进程的组成,2019/6/5,13,在UNIX系统中,每个进程都包括两部分:系统程序部分和用户程序部分。 当进程在用户模式下运行时,执行的是用户程序。此时若发生中断或陷阱,则转入核心模式,执行系统核心程序。 值得注意的是,UNIX系统核心的所有程序都是作为进程的一部分来运行,它们被包括在每个进程的虚地址空间中。有时,我们把进程的用户程序部分叫做用户进程,而把核心程序部分叫做系统进程。在UNIX系统的一个进程中,无论是用户进程还是系统进程,都是进程的一部分,它们拥有同一个进程控制块,只不过这两个进程所执行的程序不同,映射的物理地址空间不同,使用的堆栈不同而已
9、。,2019/6/5,14,7.4.2 进程控制, UNIX系统中进程控制子系统主要负责进程同步、进程间通信、存储管理及进程调度。 1进程控制 UNIX系统中,用户可以通过一些系统调用对进程进行控制。对应进程的创建、执行和自我终止,UNIX系统提供了相应的系统调用fork()、exec()和exit(),以便在用户级上实现上述功能。,2019/6/5,15,7.4.2 进程控制,(1)进程的创建在UNIX系统中,除了0#进程是在系统引导时被创建外,其他进程都是由父进程通过调用系统原语fork来创建的。 该原语为新建立进程分配一个proc表目并赋予一个唯一的进程标识符pid,此外,内核还将 pr
10、oc表目初始化。 在UNIX中子进程共享父进程的所有打开文件和当前目录,但并不共享父进程的内存。所以初始化的主要工作是复制父进程的proc表目中的某些项目以共享其打开的文件,复制正文段和当前目录表的表目(i节点),为子进程申请内存并把父进程所有可写的数据段部分复制到内存中去。,2019/6/5,16,(2)进程的执行 子进程被建立后继承了父进程的正文段和数据段,这就限制了子进程可以执行的程序规模。为了扩充子进程的执行能力,使它可以执行不属于父进程的正文段和数据段,UNIX系统提供了一个系统调用原语exec来执行一个新的文件。这使得该进程以在此文件中指出的新的正文段和数据段来调换当前的正文段和数
11、据段。这个操作仅改变进程执行的程序,而并不改变进程的标识符,它在进程树中的位置也未变。,2019/6/5,17,(3)进程的终止在UNIX系统中,一般的用户进程在完成其任务后应尽快予以撤消,以便及时收回其占用的资源。为了及时回收资源并减少父进程的干预,UNIX系统通过系统调用原语exit来实现自己的终结。进程被终止时,关闭所有文件,将当前目录项的访问计数减1,释放正文段。将进程数据ppda写入盘对换区,释放数据段空间,唤醒父进程和1进程,最后,自我终止进程放弃处理机,内核再调度另一进程执行。,2019/6/5,18,2进程的同步和通信 UNIX中对可写的公用变量通常只允许系统进程访问。那么这些
12、系统进程间如何实现临界段互斥执行呢。其主要的方法是: (1)UNIX的调度策略规定在系统进程执行期间发生中断或陷阱时,不进行进程的转换调度。只有在用户程序执行过程中被中断或陷阱、并且在处理中断后返回时,才可以进行进程的调度以重新分配处理机。所以在系统进程执行期间不会有别的进程操作插入。 (2)提高临界段等代码段的处理机中断优先级以屏蔽某些类别的中断,用来防止在系统进程中插入中断和陷阱处理程序时,可能改变进程的状态或修改公共数据等情况。,2019/6/5,19,系统进程还可利用系统调用sleep和wakeup原语实现进程间同步。 sleep原语使调用者进程以指定的原因和优先数睡眠(阻塞) wak
13、eup原语则唤醒在指定原因上睡眠的所有进程。 这两个原语,用户进程是不能使用的,但用户进程之间可以利用核心程序提供的软中断信号机制来实现少量信息的传输和同步。它是某一个进程向另一个与之相关的进程发送一个019之间的数(放在接收进程的proc结构p-sig中)。UNIX系统的进程通信功能是很弱的,为了满足协同进程间的通信需要而设置了这一最简单的通信功能。,2019/6/5,20,4进程调度与存储管理在UNIX系统中进程调度的功能是由一个专门的进程0#进程来负责的,由于UNIX系统的进程调度的主要功能是响应分时用户,所以0#进程包括两部分任务: (1)把进程的映象从内存换出到磁盘; (2)分配处理
14、机。,2019/6/5,21, UNIX系统的进程调度是按照其优先级的高低进行调度的,每次调度拥有最高优先级的进程去占有处理机。每一个进程从它被创建时起,就拥有了一个随时间动态变化的优先级。系统进程的优先级高于用户进程的优先级,其最初的优先级取决于进程所等待的事件,事件优先级的排列次序为:磁盘事件,终端事件,时钟事件和用户进程事件。用户进程的优先级是基于其所使用了的处理机时间的多少而动态地变化,使用处理机时间越长,优先级越低。优先级高的进程优先得到处理机。UNIX每秒为每个用户进程计算一次优先级,优先数愈小,优先级愈高。,2019/6/5,22, 在分时系统中,各交互进程需要经常在内存和磁盘之
15、间进行交换。实际上,任何一个待执行的进程,如果它不能在内存中占据必需的容量,它是不能被执行的。然而,内存是一种有限却很昂贵的资源,它不可能容纳系统中所有活动的进程。 为使内存的紧张状况得到缓解,UNIX系统采用一种交换策略。一个在内存中非运行状态的进程,其进程的映象将被从内存中换出而存入磁盘的对换区中。而一个被选中运行的磁盘上的就绪进程,其映象可以被换入内存。在这两种情况下,均有内存或磁盘空间的分配和释放问题。 在UNIX中内存的磁盘空间的分配和释放模块是相同的,所使用的分配算法是最先适应法。,2019/6/5,23,一个进程在运行过程中如果要求增加分给它的的内存块数时,系统就重新分给它一块足够大的内存空间,并把旧的内存区中的内容复制到新分给的内存区中同时释放旧的内存区。如果进程要求增加内存空间而系统不能满足其要求时,就将该进程换出内存而放入磁盘对换区中,直到以后有足够内存时才将它重新换入内存。所有进程的对换工作全是由0#进程负责 在UNIX系统V中,除具有交换功能外,还支持请求调页的存储管理策略,在这种方式下,一个进程只须将其一部分(页或段)调入内存便可运行。,