操作系统精美版2013os第3章进程管理_第1页
操作系统精美版2013os第3章进程管理_第2页
操作系统精美版2013os第3章进程管理_第3页
操作系统精美版2013os第3章进程管理_第4页
操作系统精美版2013os第3章进程管理_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二部分进程管理第3章进程第4章线程第5章CPU调度第6章进程同步第7章死锁第3章进程3.1进程概念3.2进程调度3.3进程操作3.4进程间通信3.5IPC系统的实例3.6客户机-服务器系统通信3.1进程的概念引入进程的原因进程定义为了使程序能并发执行,并能对并发的程序加以描述和控制而引入的(解决程序并发的不可再现性而引入进程)进程是执行中的程序(进程是程序的一次执行过程)进程是动态概念,有生命周期它是操作系统进行资源分配和调度的基本单位进程就是进程实体的一次执行过程(动态)程序是存放在介质上的一组有序指令集合(静态)增加并发020406080100120140incpuoutincpuout40ms20ms15ms15ms20ms30ms作业A作业B多道并发

(单CPU宏观并发,微观独占CPU)

增加问题:并发程序的不可再现性

解决:引入进程(进程并发)循环程序A、B,共享变量NN=N+1Print(N)N=0程序A程序BN=N+1Print(N)N=0N=N+1Print(N)N=0N=N+1Print(N)N=0n+1n+10nn+10n01A、B并发,有3种不同结果

增加进程间关系的描述——前趋图错误原因:不能存在循环前趋图:一个有向无循环图,用于描述进程之间执行的先后次序。图中的前驱关系表示为:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9P1P3P2P4P5P6P7P8P9S1S2S3具有9个结点的前趋图具有循环的图增加进程包含的内容进程包括:处理器寄存器程序计数器:下一条要执行的指令地址内存中的进程:(图3.1)堆:动态申请内存栈:局部变量,函数参数、返回地址等数据段:全局变量代码段:多个进程可能对应同一个程序代码段系统,数据段,堆、栈段不同P72系统进程系统进程:执行操作系统核心代码的进程(对系统资源进行管理和控制)用户进程:执行用户程序的进程独占资源,最高优先级运行直接执行I/O操作内核态(管态)下活动进程分类用户进程通过系统调用竞争资源不直接执行I/O操作用户态(目态)下活动增加3.1.2进程状态进程的3个基本状态进程并发间断性多种进程状态1获得除CPU外的所有必要资源23就绪态运行态阻塞态得到CPU控制权,运行因为等待某事件发生而暂停执行(如等待I/O)一个就绪队列一个运行进程多个阻塞队列P72进程状态图(5状态图)新建终止就绪运行等待I/O操作或事件的完成退出中断允许I/O操作或事件的等待调度算法分派图3.2进程状态图允许/许可:系统性能和内存容量是否允许退出/终止的原因:①进程到达自然结束点②出现无法克服的错误③被操作系统终结④被其它有终止权的进程终结P73进程状态图(7状态图)活动就绪静止就绪活动阻塞静止阻塞执行调度激活激活挂起挂起挂起释放释放请求I/O创建终止释放许可许可挂起:内存→外存激活:外存→内存增加3.1.3进程控制块

进程控制块(PCB)是系统用来控制和管理进程而设置的数据结构。进程与PCB一一对应PCB注意①系统创建新进程时,为它建立一个PCB②进程结束时回收其PCB,进程随之消亡③PCB可被OS的多个模块读或修改,应常驻内存④所有PCB组织成链表或队列结构,存放在PCB区内P73PCB中的信息①程序和数据的地址/内存管理信息②进程同步和通信机制③资源清单/I/O状态信息④链接指针(指向下一个PCB)①进程状态②进程优先级③进程调度信息④事件(阻塞原因)①通用寄存器/CPU寄存器②指令/程序计数器③程序状态字PSW④用户栈指针①内部标识符:系统提供数字标识②外部标识符:创建者提供(用户标识、父进程、子进程)⑴进程标识符(唯一标识进程)⑵处理机状态(CPU各寄存器内容)⑶进程调度信息⑷进程控制信息P733.2进程调度

在多道程环境下,进程数目往往多于处理机数目,致使它们争用处理机

这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行

分配处理机的任务是由进程调度程序完成的

它是操作系统设计的中心问题之一增加进程调度需要解决的问题WHATWHENHOW按什么原则分配CPU—进程调度算法何时分配CPU—进程调度的时机如何分配CPU—CPU调度过程(进程的上下文切换)增加3.2.1调度队列作业队列、就绪队列、设备队列图3.6就绪队列和各种设备队列P76图3.7表示进程调度队列的队列图就绪队列I/O队列I/O请求时间片结束创建一个子进程等待中断子进程执行中断发生P773.2.2调度程序处理器调度:调度程序为待处理的作业或进程分配处理器(就绪态→运行态)一个较为完善的操作系统会提供三级调度中级调度(内外存交换)高级调度(作业调度)低级调度(进程调度)

处理机调度算法对整个计算机系统的综合性能指标有重要影响P77作业调度提交状态作业注册程序后备状态作业调度程序执行就绪阻塞执行状态完成状态作业终止程序进程调度程序增加图3.8增加了中期调度的队列图换入换出换出的进程(已部分执行)就绪队列结束I/O等待队列P783级调度1.决定从外存的后备队列中调入多少个作业和要调入哪几个作业2.为被选中的作业创建进程,并分配必要的系统资源,如内存、外设等3.把新创建的进程放入就绪队列中,等待被调度执行进程调度进程完成作业调度作业就绪队列交互式用户时间片到阻塞队列事件发生等待事件中级调度CPU就绪,挂起队列阻塞,挂起队列中级调度进程调度进程完成作业调度作业就绪队列交互式用户时间片到阻塞队列等待事件中级调度CPU就绪,挂起队列阻塞,挂起队列中级调度事件发生分时系统中用户键入的命令和数据直接进入内存,OS为之建立进程,加入就绪队列就绪队列

1.交互式用户(进程调度):一般采用FIFO队列(先进先出)2.批处理用户(作业调度+进程调度):一般采用优先权队列阻塞队列:等待事件不同,一般可以有多个阻塞队列●中级调度提高了内存的利用率和系统吞吐量●内存使用紧张时,把内存中暂时不能运行的进程调到外存中等待

内存活动阻塞↓↓外存静止阻塞●等内存有足够空闲空间时,将外存上的某些具备了运行条件的就绪进程调入内存就绪队列

外存静止就绪↓↓内存活动就绪增加3.2.3上下文切换将CPU切换到另一进程需要保存原来进程的状态并装入新进程的保存状态。上下文切换时间是额外开销,因为切换时系统并不能做什么有用的工作。上下文切换时间与硬件支持密切相关。P78图3.4CPU在进程间的切换执行进程P0进程P1操作系统停顿执行中断或系统调用保存状态至PCB0从PCB1中获取状态停顿停顿执行中断或系统调用保存状态至PCB1从PCB0中获取状态P743.3进程操作

3.3.1进程的创建父进程创建子进程,子进程又创建其他进程,从而形成了进程树(见图3.9)子进程可能从操作系统处获得资源,也可共享父进程的资源当进程创建新进程时,有两种执行可能父进程与子进程并发执行父进程等待,直到某个或全部子进程执行完毕P79进程的创建过程⑴申请空白PCB(进程有唯一数字标识)⑵为新进程分配资源(为程序、数据和用户栈分配内存)⑶初始化PCB⑷将新进程插入就绪队列①初始化标识信息(自己和父进程标识)②初始化处理机状态信息(程序计数器、栈指针)③初始处理机控制信息(初始为就绪状态,最低优先级)增加进程创建地址空间子进程是父进程的复制品子进程装入另一个程序进来UNIX例子fork系统调用创建新的进程exec系统调用在fork调用后用新程序来取代进程的内存空间P81fork()返回子进程号返回0P82进程的终止过程①根据被终止进程的标识符,从PCB集合中检索出该进程的PCB,从中读出该进程状态②若被终止进程处于执行态,应立即终止该进程的执行,并设置调度标识为真(只是重新调度其它进程运行)③若该进程还有子孙进程,终止其所有子孙进程④将被终止进程的所有资源归还给父进程或系统⑤将被终止进程的PCB从所在队列或链表中移出,等待其它程序来收集信息增加#include<sys/types.h>#include<stdio.h>#include<unistd.h>voidmain(intargc,char*argv[]){pid_tpid;/*forkanotherprocess*/pid=fork();if(pid<0){/*erroroccurred*/fprintf(stderr,“ForkFailed”);exit(-1);}elseif(pid==0){/*childprocess*/execlp(“/bin/ls”,“ls”,NULL);}else{/*parentprocess*//*parentwillwaitforthechildtocomplete*/wait(NULL);printf(“ChildComplete”);exit(0);}}pid_tprintfforkexecargc为参数个数,argv[]为参数位置fork():创建新进程若成功调用一次则返回两个值子进程返回0,父进程返回子进程ID;否则,出错返回-1fork():创建新进程exec():执行新程序wait():等待,直到子进程结束exit():进程终止P823.4进程间通信(IPC)独立进程:一个进程不能影响或被在系统内执行的其他进程所影响协作进程:需要有进程间通信机制2种进程间通信机制:共享内存主要由应用程序员提供通信,操作系统只需要提供共享内存消息系统主要由操作系统来提供通信P84进程通信模型消息传递共享内存P853.4.1共享内存系统生产者-消费者问题:生产者进程产生信息,以供消费者进程消费。无限缓冲:对缓冲区大小没有实际限制有限缓冲:假设缓冲区大小固定ConsumerProducerBufferP86生产者-消费问题共享数据#defineBUFFER_SIZE10typedefstruct{ ...}item;itembuffer[BUFFER_SIZE];intin=0;intout=0;空:in=out满:(in+1)%BUFFER_SIZE只能用于缓冲的最大项数为:

BUFFER_SIZE-1…inoutBufferisEmptyBufferisFull…inoutP86生产者进程

while(true){

/*Produceanitem*/while(((in+1)%BUFFER_SIZE)==out)

;/*donothing--nofreebuffers*/

buffer[in]=item;

in=(in+1)%BUFFER_SIZE;}Insert()inout…P87消费者进程 while(true){

while(in==out)

;//donothing--nothingtoconsume

//removeanitemfromthebuffer item=buffer[out];

out=(out+1)%BUFFERSIZE; returnitem;

}Remove()inout…问题:未考虑多生产者消费者解决:同步P873.4.2消息传递系统消息传递至少提供两个操作发送消息send接收消息receive如果进程P和Q需要通信,那么他们需要相互建立通信线路通过发送/接收来交换消息有2种消息传递方式直接消息通信间接消息通信P87直接消息通信直接消息通信:需要通信的进程必须明确地命名通信的接收者或发送者send(P,message)-发送消息至进程Preceive(Q,message)-从进程Q接收消息P2P1P3P88间接消息通信(邮箱通信)对于间接通信,消息通过邮箱或端口来发送和接收。每个邮箱都有一个惟一的标识符进程只有共享一个邮箱才能相互通信send(A,message):发送消息给邮箱Areceive(A,message):从邮箱A接收消息P2P1P3M1M2P89问题邮箱共享P1,P2,P3共享邮箱AP1发送消息;P2和P3接收谁将获得这个消息?解决办法允许一条线路与两个以上的进程关联任一时刻只允许一个进程执行接收操作允许系统选择接收者,并可以告诉发送者谁是接收者P89同步消息传递可以是阻塞或非阻塞的阻塞的消息传递也称为同步消息阻塞send:发送进程阻塞,直到消息为接收进程或邮箱所接收阻塞receive:接收者阻塞,直

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论