操作系统课件-04-1进程及进程管理_第1页
操作系统课件-04-1进程及进程管理_第2页
操作系统课件-04-1进程及进程管理_第3页
操作系统课件-04-1进程及进程管理_第4页
操作系统课件-04-1进程及进程管理_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

第四章进程及进程管理(一)进程的基本概念(二)进程控制(三)进程之间的约束关系(四)同步机构(五)进程互斥与同步的实现(六)进程通信(七)线程的概念及特点1(一)进程的基本概念2一个程序由若干个程序段组成,而这些程序段的执行必须按照严格的先后次序顺序地执行,即只有当一个操作结束后,才能开始后继操作。程序的顺序执行也称为顺序程序设计。3一、什么是程序的顺序执行例:讨论单道系统的工作情况用户作业的处理,通常分为如下三段:首先输入用户的程序和数据然后进行计算最后打印计算结果例:讨论单道系统的工作情况这三个顺序执行的操作分别设为—I:输入操作C:计算操作P:输出操作2.顺序程序设计的特点(1)程序执行的顺序性(大多数程序都具有)

处理机的操作严格按照程序所规定的顺序执行。(2)程序执行的封闭性

独占资源,执行过程中不受外界影响。(3)程序执行结果的可再现性(确定性)

程序执行的结果与初始条件有关,而与执行时间无关。

即只要程序的初始条件相同,它的执行结果是相同的。6顺序程序设计的缺点是计算机系统效率不高(单道)。3、并发程序及特点(多道)例:用下图说明在多道批处理系统中,大量操作执行的先后次序。讨论:(1)哪些程序段的执行必须是顺序的?为什么?(2)哪些程序段的执行是可并行的?为什么?9I1I2I3I4C1C2C3P1P24、什么是程序的并发执行程序并发执行(定义) 若干个程序段同时在系统中运行,这些程序的执行在时间上是重迭的,一个程序段的执行尚未结束,另一个程序段的执行已经开始,即使这种重迭是很小的,也称这几个程序段是并发执行的。10PQR并发和并行的区别就是一个处理器同时处理多个任务和多个处理器或者是多核的处理器同时处理多个不同的任务。

前者是逻辑上的同时发生(simultaneous),而后者是物理上的同时发生。来个比喻:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头。并发(concurrency)与并行(parallel)有何区别?(补充了解)程序并发执行的描述程序并发执行的描述cobegin

S1;S2;S3;...;SNcoend;其中Si(i=1,2,3,...,n)表示n个语句(程序段),这n个语句用cobegin和coend括起来表示这n个语句是可以并发执行的。说明:co是concurrent的头两个字符。这是著名的荷兰计算机科学家Dijkstra(迪科斯彻)提出的。Dijkstra的主要贡献(补充)131提出“goto有害论”;

2提出信号量和PV原语;

3解决了有趣的“哲学家聚餐”

问题;

4最短路径算法(SPF)和银行

家算法的创造者;

5第一个Algol60编译器的设

计者和实现者;

6THE操作系统的设计者和开

发者;与D.E.Knuth(唐纳德.E.克努特))并称为我们这个时代最伟大的计算机科学家的人。程序并发执行的描述假设有一个程序由S0-Sn+1个语句,其中S1-Sn语句是并发执行的,程序如下:(1)用并发语句表示

(2)用次序图表示S0;

cobegin

S1;S2;S3;...;SN

coend;Sn+1;程序并发执行的描述由上面的程序运行先后示意图,我们所期望的效果是:先执行S0,在执行S1,S2,…,Sn;当S1,S2,…,Sn全部执行完毕后,在执行随后的语句Sn+1用次序图表示并发执行实例1:

例如,有两个循环程序A和B,它们共享一个变量n。程序A每执行一次时,都要做n++操作;程序B每执行一次时,都要执行Print(n)操作,然后再将n置成“0”。程序A和B以不同的速度运行。

(1)n++在Print(n)和n=0之前,此时得到的n值分别为n+1,n+1,0。

(2)n++在Print(n)和n=0之后,此时得到的n值分别为n,0,1。

(3)n++在Print(n)和n=0之间,此时得到的n值分别为n,n+1,0。intn=0cobegin

程序A

程序Bcoend与时间有关的错误——结果不唯一00010018并发执行实例2:誊抄(P104作业题第5题)f缓冲区sgetput缓冲区tcopygget程序负责从输入序列f中读取字符并送到缓冲区s中;copy程序把缓冲区s中的数据复制到缓冲区t中去;put程序从缓冲区t中取出数据打印。假定f系列中有记录

f=(R1,R2,...,Rn) g=()

在誊抄完成后:

f=() g=(R1,R2,...,Rn)算法中的:

copy:t=s put:put(t,g) get:get(s,f)if(f不为空){ get(s,f);while(眷抄未完成){

t=s;//copycobeginput(t,g);//并发程序1get(s,f);//并发程序2coend;}}20若程序写成:

while(誊抄未完成){cobegincopy;put;get;coend}初始状态:

f=(R1,R2,...,Rn)s=0t=0g=()首先执行get(s,f)f=(R2,R3,...,Rn)s=R1,t=0,g=()执行copy,put,getf=(R3,R4,...,Rn)s=R2,t=R1,g=(R1)copy,put,get三个程序段并发执行,就有六种组合:1、copy;put;get导致结果:g=(R1,R2)2、copy;get;put导致结果:g=(R1,R2)3、put;copy;get导致结果:g=(R1,R1)4、put;get;copy导致结果:g=(R1,R1)5、get;copy;put导致结果:g=(R1,R3)6、get;put;copy导致结果:g=(R1,R1)这就是与时间有关的错误:

程序并发执行时,若共享了公共变量,其执行结果与各并发程序的相对速度有关,即给定相同的初始条件,若不加以控制,也可能得到不同的结果,此为与时间有关的错误。思考:copy、get、put为何不可以一起并发

而get和put可以并发5.并发程序的特点(1)失去了程序的封闭性(程序结果的不可再现性)

并发程序执行的结果与其执行的相对速度有关,是不确定的(2)程序与计算不再一一对应

一个程序(静态)可以对应多个计算(一个程序的执行,动态):多用户共享使用同一个程序,但处理(计算)的对象却是不同的。

计算是按顺序执行的一组操作程序是按顺序执行的一组指令(3)程序并发执行的相互制约直接的相互制约关系——公共变量间接的相互制约关系——资源共享

23操作系统的特性是并发、共享、不确定性,这就会引起一系列的问题,包括:对资源的竞争、运行程序之间的通信、程序之间的合作与协同等。

要解决这些问题,用程序的概念已经不能描述程序在内存中运行的状态,必须引入新的概念——进程。24六、进程的定义25进程(Process)的定义

进程是指一个具有一定独立功能的程序关于某个数据集合的一次运行活动。七、进程与程序的区别与联系1、程序是指令的集合,是静态的概念进程是程序在处理机上的一次执行的过程,是动态的概念。进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的2、进程是一个独立的运行单位,能与其它进程并发(并行)活动。3、进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。4、一个程序可以作为多个进程的运行程序,一个进程也可以运行多个程序(多对多)。5、进程与程序的组成不同:进程包括程序、数据和进程控制块(PCB)26八、进程的状态进程的三种基本状态

运行状态

就绪状态

等待状态(又称阻塞、挂起、睡眠)27(1)运行状态(Running) 该进程已获得运行所必需的资源,它的程序正在处理机上执行。(在系统中,总只有一个进程处于此状态)(2)就绪状态(Ready)

进程已获得除CPU之外的运行所必需的资源,一旦得到CPU控制权,立即可以运行。(有多个进程处于此状态)(3)等待状态(Wait) 进程正在等待某个事件的发生而暂停执行。这时,即使给它CPU时间,它也无法执行,则称该进程处于等待状态。28

进程状态的变迁进程的状态,是随着进程自身的推进和外界条件的变化,而发生变化的。

运行

等待

就绪

服务请求/等待一个事件的发生

服务完成/事件已发生进程调度时间片到/

中断2023/2/6进程的五态模型(了解)在运行态、就绪态、阻塞态的基础上增加了如下两态:新建态(New),创建一个新的进程。终止态(Terminated),完成任务,结束进程。2023/2/631进程的五态模型Linux进程状态变迁进程的组成程序与数据: 描述进程本身所应完成的功能;PCB(ProcessControlBlock): 描述进程的动态特征,该进程与其他进程和系统资源的关系。33进程

控制块

PCB程序

数据九、进程控制块(PCB)PCB的主要内容34Linux系统下的进程控制块(PCB):被定义为task_struct。主要包括进程当前运行的状态信息、信号、进程号、父进程号、运行时间累计值等。structtask_struct{volatilelongstate;//运行状态标识intprio,static_prio,normal_prio;//动态和静态优先级等structlist_headrun_list;//进程在就绪队列中的节点unsignedintpolicy;//该进程的调度策略unsignedinttime_slice;//(剩余)时间片structmm_struct*mm,*active_mm;//指向所属内存描述器pid_tpid;//进程标识符struct

task_struct*parent;//指向父进程struct

list_headchildren;//关于子进程的双向链表struct

pid_linkpids[PIDTYPE_MAX];//快速查找进程的哈希表uid_tuid,euid,suid,fsuid;//创建该进程的用户IDstruct

mutex_waiterblocked_on;//用于检测死锁的互斥量wait_queue_tio_wait;//用于处理IO等待的队列};在创建一个进程时,应首先创建其PCB,然后才能根据PCB中信息对进程实施有效的管理和控制。当一个进程完成其功能时之后,系统则释放PCB,进程也随之消亡。

一个比喻:PCB就象我们的户口。描述一个进程在各个不同时期所处的状态,与其他进程及系统资源的关系的数据结构称为进程控制块pcb(ProcessControlBlock)。系统为了管理进程而设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。

进程与PCB是一一对应的38PCB管理(了解)为了便于对进程实施管理,通常把具有相同状态的进程链接在一起,组成各种队列。例如把所有就绪的队列链在一起,称为就绪队列。把所有因等待某事件而处于等待的进程链在一起就行形成了等待(阻塞)队列。(二)进程控制41什么是进程控制

进程控制的职责是对系统中全部进程实施有效的管理,它是处理机管理的部分,当系统允许多进程并发执行时,为了实现共享、协调并发进程的关系。

进程控制包括(负责控制进程状态的变化):进程创建、进程撤消、进程阻塞、进程唤醒

42一、进程控制的概念43运行就绪等待时间片到进程调度进程唤醒进程创建进程阻塞进程撤消这些控制操作都要对应地执行一个特殊的程序段(操作系统核心程序),同时系统也通过系统调用给用户提供进程控制的功能。称之为原语(一种特殊的系统调用)。原语是一种特殊的系统调用命令,它可以完成一个特定的功能,一般为外层软件所调用,其特点是原语执行时是不可中断的。创建原语、撤消原语、阻塞原语、唤醒原语。二.进程创建1.进程创建原语的形式:

create(name,priority)

入口参数

name:被创建进程的标识符priority:进程优先级

返回值:新创建进程的内部标识pid45所谓资源池也就是pcb集合,它是在系统存储区域开辟的一片区域,用来集中存放所有的进程控制块进程创建原语的实现步骤47••••••nextPCB[3]••••••nextPCB[11]••••••nextPCB[2]•••••••••∧PCB[n]Ready-q-start(就绪队列头结点)••••••nextPCB[k]48进程创建者称为父进程,被创建者称为子进程,子进程的大部分资源,均可从父进程处继承。包含头文件<sys/types.h>

和<unistd.h>pid_tfork(void);参数:无返回值:0 创建成功,从子进程返回>0创建成功,从父进程返回,其值为子进程PID号。-1 创建失败。Linux下的进程创建:fork的意思是复制进程,就是把当前的程序再加载一次,不同之处在,加载后,所有的状态和当前进程是一样的(包括变量)。fork后,新进程的入口就在fork的下一条语句。

父进程代码#include<stdio.h>#include<sys/types.h>/*提供类型pid_t的定义,在PC机上与int型相同*/#include<unistd.h>

/*提供系统调用的定义*/

intmain(void){pid_tpid;

/*此时仅有一个进程*/

pid=fork();

/*此时已经有两个进程在同时运行*/

if(pid<0) {printf("errorinfork!\n");return0;} if(pid==0) printf(“Iamthechildprocess\n”); else printf("Iamtheparentprocess\n”);}

子进程代码#include<stdio.h>#include<sys/types.h>/*提供类型pid_t的定义,在PC机上与int型相同*/#include<unistd.h>

/*提供系统调用的定义*/

intmain(void){pid_tpid;

/*此时仅有一个进程*/

pid=fork();

/*此时已经有两个进程在同时运行*/

if(pid<0) {printf("errorinfork!\n");return0;} if(pid==0) printf(“Iamthechildprocess\n”); else printf("Iamtheparentprocess\n”);}

编译并运行这个程序:#gccfork_test.c-ofork_test#./fork_testIamtheparentprocessIamthechildprocess

再运行一遍,输出结果可能不同。54Linux进程创建示例2:父进程创建子进程P1、P2,父子进程分别输出字符a、b和c#include<stdio.h>#include<sys/types.h>/*提供类型pid_t的定义,在PC机上与int型相同*/#include<unistd.h>/*提供系统调用的定义*/

intmain(void){ intp1,p2; while((p1=fork())==-1); //创建子进程1,直至创建成功

if(p1==0) //子进程P1返回输出’b’ putchar('b'); else //父进程返回

{ while((p2=fork())==-1); //创建子进程2 if(p2==0) //子进程P2返回输出’c’ putchar('c'); else putchar('a'); //父进程返回输出’a’ }return0;}2023/2/655子进程映像与父进程映像是存储在两个不同的地址空间中内容相同的程序副本;因为父子映像有各自的存储空间,双方都感觉不到对方的行为;父子进程各自的PC指针都指向fork结束后的下一条指令地址;操作系统对于父子进程的调度执行具有随机性。使用fork()创建进程的特点:三.进程撤消

1.进程撤销原语的形式:

Kill(或exit) 无参数和返回值

Linux系统调用函数:voidexit(intstatus)

包含头文件<stdlib.h>5657Linux进程撤销系统调用函数Linux系统调用函数:voidexit(intstatus)包含头文件<stdlib.h>58#include<stdio.h>#include<unistd.h>inttest(void){ exit(0); return0;}intmain(void){ test(); printf(“SleepBegin\n”); return0;}四.进程阻塞

1.进程等待原语的形式:

susp(chan)

入口参数chan:进程等待的原因。

2.进程等待原语的功能:

中止调用进程的执行,并加入到等待chan的等待队列中,最后使控制转向进程调度。59进程等待原语的实现60算法susp(chan)输入:chan等待的原因输出:无

{

进程现场信息→PCB;进程状态置为“阻塞”;插入到等待“chan”等待队列;调用进程调度程序;

}61••••••nextPCB[3]••••••nextPCB[11]••••••nextPCB[2]•••••••••∧PCB[n]wait-lpt-q-start••••••nextPCB[j]

next∧

Linux阻塞系统调用函数(一)intsleep(unsignedintseconds)

包含头文件<unistd.h>参数:seconds表示延时的秒数62#include<stdio.h>#include<unistd.h>intmain(void){ printf(“SleepBegin\n”); sleep(5); printf(“Sleepover\n”);

温馨提示

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

评论

0/150

提交评论