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