您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 20141015操作系统第6章unix进程管理
第6章UNIX进程管理6.1UNIX进程简介6.2UNIX进程结构6.3进程控制6.4UNIX进程调度与交换6.5进程通信启动过程:引导程序开始系统自举,引导在外存硬盘中的操作系统进入内存。这一过程是一个启动UNIX系统、设置和初始化各种数据结构与表格、建立控制UNIX系统内核运行的控制进程和建立控制终端进程与Shell进程运行的1#进程。最后,系统在建立了0#进程和1#进程等之后,将出现相应的提示符,以等待用户输入命令来执行和处理用户应用程序。核心进程称为0#进程6.1UNIX进程和存储管理简介图6.1UNIX中各进程的关系终端管理进程与Shell进程是1#进程的子进程,除了0#进程和1#进程之外,其他进程都是由父进程创建的。人们也称1#进程是所有用户进程的祖先。UNIX操作系统的0#进程在核心态下运行,而1#进程以及由1#进程衍生的其他进程都可在用户态和核心态两种执行模式下执行。在不同的执行模式下执行时,同一进程使用不同的堆栈和不同的管理数据结构。在两种不同模式下执行的程序不能互相访问各自的堆栈,它们之间的参数传递往往需要借助通用寄存器等硬件。两态之间的主要区别是,用户态下的进程能存取它们自己的指令与数据,但不能存取核心指令和数据。然而,核心态下的进程能存取核心和用户地址。另外,某些机器的指令是特权指令,在用户态下执行会引起错误,只能在核心态下执行。0#进程是UNIX系统中唯一只在核心态下执行的进程。三种功能:1.初始化时创建1#进程2.负责调度分配处理器3.负责进程交换UNIX进程的核心态和用户态之间的转换靠中断以及硬件设置等方法完成图6.3进程控制系统进程控制系统在逻辑上由四个模块组成:1.与文件系统的接口部分2.进程本身的控制部分,包括进程的创建、进程调度和进程的撤消等3.进程间控制部分,包括进程间的互斥、同步和通信等,4.存储管理部分。UNIXSystemⅤ中引起进程调度的情况有五种:(1)当前执行进程申请内存等系统资源未得到满足,从而自己调用sleep过程,放弃处理机进入睡眠状态。(2)为了与其他并发进程保持同步,调用了wait或stop过程等,从而主动放弃了处理机而进入睡眠状态。(3)当系统发现系统中某进程的优先级已高于当前执行进程的优先级时(4)时间片用完,且当前进程的优先级低于其他就绪进程。(5)当前进程调用exit,自我终止时。6.2UNIX进程结构6.2.1进程的概念进程的静态描述是由三部分组成的,即进程状态控制块PCB(栈段),进程的程序文本(正文)段以及进程的数据段。进程控制块分为两部分:•基本控制块:PROC结构常驻内存,记录进行进程调度时必须使用的一些主要信息.•扩充控制块:USER结构非常驻内存,可存放在磁盘的对换区中.所包含内容见书6.2.4进程的状态和状态转换UNIXSystemⅤ中进程共有9个状态,它们是:(1)进程在用户态下的执行态SRUN。(2)进程在核心态下的执行态SRUN。(3)进程处于就绪态SRUN(4)进程处于就绪态SRUN,但交换程序已将其换出内存。(5)进程正在睡眠,且驻留在内存中的状态SSLEEP。(6)进程正在睡眠,已换出内存的状态SSLEEP。(7)进程正从核心态返回用户态。(8)创建状态(9)僵死状态图6.8进程状态转换图图6.9进程树的形成6.3进程控制6.3.1UNIX启动及进程树的形成6.3.2进程控制1.进程的创建fork的功能是创建一个子进程。调用fork的进程称为父进程。系统调用fork的语法格式是:pid=fork();CPU在父进程中时,pid值为所创建子进程的进程号,若在子进程中时,pid的值为零。系统调用fork通过执行核心程序fork过程完成的功能是:(1)为子进程在proc结构表中分配一个空项。(2)为子进程赋一个唯一的进程标识号pid。(3)复制一个父进程上下文的逻辑副本。(4)增加与父进程相关联的有关文件系统的进程引用计数。(5)对父进程返回子进程的进程标识号,对子进程返回零。图6.10fork流程图2.执行一个文件的调用exec()3.父进程和子进程同步Wait()4.进程的终止系统调用exit(rv)自我终止当前进程,使其进入SZOMB僵死状态,等待父进程进行善后处理。图6.11shell执行过程6.4UNIX进程调度与交换UNIX系统的调度与交换都是进程0的两个部分。它们分别由swtch()过程和sched()过程实现。事实上,用于交换的sched过程是把处于外存就绪态的进程换入内存,相当于三级调度中的中级调度(UNIX系统中没有高级调度)。因此,有时也把进程0称为调度进程。6.4.1进程调度1.调度原理UNIX系统的进程调度采用多级反馈轮转调度法(RoundRobinwithMultipleFeedback)。即系统给进程分一个时间片,当时间片结束时,动态计算该进程的优先级,若有优先级高于当前进程的内存就绪态进程时,系统设置调度标识,在由核心态转换到用户态前由swtch过程调度优先级高的进程执行,并把被抢先的进程反馈到相应的优先级队列中。一个进程在它结束之前,可能要经过多次反馈循环。UNIX的进程调度按时间片计算优先级,并按优先级的高低来调度进程,抢占处理机。因此,UNIX系统的进程调度是基于时间片加优先级的。UNIX的进程调度涉及的主要问题是:(1)调度的时机。(2)调度标志设置。(3)调度策略与优先数的计算。(4)调度的实现。下面,分别说明这几个问题。2.调度的时机发生进程调度的时机实质上只有两个:1.进程自动放弃处理机时自动转入调度进程2.在由核心态转入用户态时,系统设置了高优先级就绪进程的强迫调度标识。3.调度标识的设置UNIXSystemⅤ中有三个关于调度和交换用的调度标识。它们是runrun、runin和runout。runrun标识是要求处理机调度程序进行调度的标识,由唤醒原语wakeup、setrun及优先级设置过程setpri在发现某进程的优先级高于当前进程的优先级时,设置runrun标识。另外,每隔一秒一次的时钟中断处理中也将检查各就绪态进程的优先级而设置runrun标识。只要设置了该标识,在中断陷阱程序结束之前,系统就会调用swtch过程调度具有最高优先级的进程执行。runin和runout标识是用于就绪进程换入换出内存的。runin表示内存无足够空间换入一个外存就绪态进程,设置runin标识也意味着内存中无适当的进程可以换出。runout标识与runin相反,它表示外存交换区中无适当的进程可以调入内存。4.调度策略与优先数的计算在UNIX系统中,优先数越大优先级越低。优先数:P-pri=P-CPU/2+PUSER+P-nice+NZEROPUSER和NZERO是称为基本用户优先数的阈值。这两个数是常数,分别为25和20。P-CPU为每个进程的最近一次CPU使用时间。当进程使用CPU时,系统每个时钟周期对该进程的P-CPU加1,最多时该值可达80。另外,系统按每秒钟的时间间隔对P-CPU执行除以2的衰减操作。这样,如果系统的时钟周期为16.667ms的话,则系统进行每秒时钟中断处理时,P-CPU的值将由60变为30。P-nice是系统允许用户设置的一个进程优先数偏移值。SystemⅤ中,P-nice可以被设置成0~40间的一个数。但一旦设置之后,除了超级用户可以将其减小之外,普通用户仅能作增加的改变。6.4.2交换交换功能由进程0完成。在系统初始化结束时,进程0就进入无限循环,先试图从外存交换区换入进程(因为初始化结束时内存总不会是满的),内存不够时再换出进程。如果没有进程要换入换出时,则该进程进入睡眠状态。系统通过时钟中断定期唤醒进程0完成交换功能。在进程0执行之前,时钟中断处理程序计算出每个就绪进程在内存或外存中驻留的时间。图6.13sched过程流程图6.5进程通信6.5.1UNIX的低级通信UNIX的低级通信主要用来传递进程间的控制信号。实现传递控制信号的方法有两种。•利用睡眠原语sleep和唤醒原语wakeup实现进程间的同步与互斥。•利用软中断信号实现同一用户的诸进程之间的通信。
本文标题:20141015操作系统第6章unix进程管理
链接地址:https://www.777doc.com/doc-3005490 .html