3进程与并发程序设计PPT推荐.ppt
《3进程与并发程序设计PPT推荐.ppt》由会员分享,可在线阅读,更多相关《3进程与并发程序设计PPT推荐.ppt(59页珍藏版)》请在冰豆网上搜索。
,程序,数据,处理机分配,为进程分配处理机,为进程分配使用CPU的时间段(时间片)按照系统服务的目标选择优先级最高的进程运行优先级的计算依据程序的运行、等待、以及中断现场的保护区问题。
进程概念和基本状态,程序运行状态运行状态程序被中断,时钟中断其它中断,程序性中断外部中断,基本状态分析,程序等待CPU的状态就绪状态程序等待I/O设备的状态阻塞状态,作业概念,作业:
用户提交的任务,包括作业步以及每一作业步要求的程序和数据。
例如:
用户要运行程序:
第一步:
编辑文件vi第二步:
编译cc第三步:
运行a.out第四步:
得到结果这些就是作业步。
作业与进程的关系,include“stdio.h”main()printf(“Cprogramn”),进程的引入和定义,顺序程序的特点并发系统概述并发程序的特点进程的引入进程的定义,顺序程序及其特点,顺序性资源独占性环境的封闭性结果的可再现性。
并发程序及其特点,并发意指“同时”。
更准确地说,在某一时间里如果两个活动都处在各自的起点与终点之间,则认为这两个活动是并发的。
我们把在逻辑上的并行称之为并发。
例子:
变量X为共享变量,程序1和程序2都要对X进行访问,当两个程序执行的速度变化时可得到不同的结果。
目标程序段x=x+1,执行顺序1:
程序1程序2结果为:
X增加2。
执行顺序2:
R1=X;
R2=X;
R1=R1+1;
R2=R2+1;
X=R1;
X=R2结果为:
X增加1。
还可有许多其它组合,解决问题的手段,总线,中央处理机单元,内存储器,磁盘适配器,输入/输出接口,其他外设接口,通信线路接口,磁盘驱动器,输入/输出设备,各种外设,通信线路,引入进程的目的,是为了使多个程序并发执行,以改善资源利用率及提高系统的吞吐量,用进程代表运行的程序。
建立进程的同步机制,对并发程序之间的相互牵连加以控制。
信号量初值mutex=1,互斥,进程的定义,进程的参考定义有如下几种:
1、进程是程序的一次执行;
2、进程=PCB+程序+数据;
3、进程是一个可拥有资源的独立实体,同时又是一个可以独立调度的基本单位。
进程的状态和进程控制块,进程控制,原语进程控制原语创建原语撤销原语阻塞原语唤醒原语控制原语与进程状态的转换,置状态为“阻塞”插入等待队列停止程序运行,释放PCB释放内存释放所有资源,申请空白PCB填PCB置状态为“就绪”插入就绪队列,置状态为“就绪”插入就绪队列,不可中断的系统程序。
进程控制原语以及进程的状态转换,创建进程,撤销进程,唤醒进程,阻塞进程,结束,开始,线程的基本概念,引入线程的目的:
则是为了减少程序并发执行时所付出的时空开销,使操作系统具有更好的并发性。
线程的定义:
是进程中的一个实体,是被系统独立调度的基本单位。
分配处理机,资源分配,进程调度,进程调度的职能进程调度亦可称为处理机调度,它协调和控制各进程对CPU的使用。
进程调度算法先来先服务FCFS轮转调度分级轮转法优先数法进程调度时的状态图,FCFS,轮转调度,最初的队列形成可按照FCFS或者按照优先级排队为每个进程分配一个时间片,轮流运行,P1,P2,链头,Pn,中断现场保护区,中断现场保护区,中断现场保护区,分级轮转法,轮转,链头指针,FCFS,最高优先级,最低优先级,次高优先级,优先数法,P1,P2,链头,Pn,就绪队列按进程的优先级排序,中断现场保护区,中断现场保护区,中断现场保护区,评价调度算法的指标,吞吐量、周转时间、平均周转时间、带权周转时间和平均带权周转时间,进程调度时的状态,挂起进程模型,进程通信,临界资源和临界区同步与互斥两个经典的同步/互斥问题其他同步例子管程消息缓冲,临界资源和临界区,临界资源criticalresource临界区criticalsection,程序1Y=Y+1output,程序2Y=Y+2output,内存共享区Y,pcb1,pcb2,同步与互斥,基本概念同步工具硬件指令信号量与P、V操作并发程序共享资源问题的解决,基本概念,同步进程之间的一种通信方式,有时序上的制约关系,或者说是进程之间为了协同工作而存在的一种等待关系。
互斥进程之间对临界资源的一种竞争关系,排他性地对资源的访问方式。
同步关系和互斥关系举例。
同步关系:
公交车的司机与售票员之间的关系是同步关系。
司机启动汽车,正常行使,到站停车;
售票员关车门,通知司机启动汽车,售票,打开车门。
司乘人员通过信号共同协作,完成工作。
互斥关系:
足球比赛中球员之间的关系即为互斥关系。
球员对足球的控制权是互斥的。
同步工具,同步机制:
用于控制进程之间的同步与互斥。
硬件指令:
test-and-set(lock)功能表示如下:
test-and-set(lock)begina:
=lock;
Iflock=0thenlock:
=1;
reutrn(a)end其中:
lock是内存单元。
举例,应用举例,信号量,信号量:
仅能由P、V操作修改的整型变量。
P操作,P操作:
申请资源操作
(1)S:
=S-1;
(2)如果S0,则表示有资源,该进程继续执行;
如果S0,则表示已无资源,执行原语的进程被置成阻塞状态,并使其在S信号量的队列中等待,直至其他进程在S上执行V操作释放它为止。
V操作,V操作:
释放资源操作
(1)S:
=S+1;
(2)如果S0,则该进程继续执行;
如果S0,则释放S信号量队列的排头等待者并清除其阻塞状态,即从阻塞状态转变到就绪状态,执行V(S)者继续执行。
两个经典的同步/互斥问题,生产者与消费者读者与写者,生产者与消费者问题,模型的抽象化与进程分析(p99),信号量的设置Mutex=1临界资源Empty=n空缓冲区的个数Full=0满缓冲区的个数,生产者/消费者算法描述1,varmutex,empty,full:
psemaphore;
i,j,goods:
integer;
buffer:
array0n-1ofitem;
procedureproducer;
生产者进程beginwhiletruedobeginproducenextproduct;
P(empty);
P(mutex);
buffer(i):
=product;
i:
=(i+1)mod(n);
V(mutex);
V(full);
endend;
procedureconsumer;
消费者进程beginwhiletruedobeginP(full);
goods:
=buffer(j);
j:
=(j+1)mod(n);
V(empty);
consumeproduct;
endend;
生产者/消费者算法描述2,beginseminitial(mutex.v,1;
empty.v,n;
full.v,0);
i:
=j:
=0;
cobeginproducer;
consumer;
coendend,读者与写者问题,模型的抽象化与进程分析(p100),文件,写者进程,读者进程,读者进程,.,信号量的设置R-mutex=1临界资源1Rw-mutex=1临界资源2,临界资源:
读者计数器r-counter文件,写者进程,实例,读者与写者算法描述,varmutex,wrt:
readcount:
beginseminit(mutex.v,1;
wrt.v,1);
cobeginprocedurereader;
beginP(mutex);
readcount:
=readcount+1;
ifreadcount=1thenP(wrt);
readingisperforming;
=readcount-1;
ifreadcount=0thenV(wrt);
end,procedurewriter;
beginP(wrt);
writingisperforming;
V(wrt);
endcoendend;
哲学家就餐,第i个哲学家活动描述,信号量初值:
FORKSi=1,其中i=0、1、2、3、4BEGIN思考饥饿P(FORKSimod(5)P(FORKS(i+1)mod(5))吃面条V(FORKSimod(5)V(FORKS(i+1)mod(5))END,没有考虑死锁问题,五个哲学家就餐,信号量:
c0c4,初值均为1;
整型变量I=0,1,2,3,4;
Philosopher(I)BeginifImod2=0thenbeginP(cI);
P(cI+1mod5);
吃V(cI);
V(cI+1mod5);
end,elsebeginP(cI+1mod5);
P(cI);
吃V(cI+1mod5);
V(cI);
endEnd,实例,睡觉的理发师,算法描述,信号量:
customers=0;
barbers=0;
mutex=1整型变量:
waiting=0;
理发师:
BeginWhile(true)thenBeginP(customers);
P(mutex);
Waiting=waiting-1;
V(barbers);
V(mutex);
Cuthair();
EndEnd,顾客:
BeginP(mutex);
If(waitingCHIRS)thenBeginWaiting=waiting+1;
V(customers);
P(barbers);
Get_haircut();
EndElseBeginV(mutex);
EndEnd,管程,把分散的各同类临界区集中起来。
并为每个可共享资源设立一个专门的机构来统一管理各进程对该资源的访问,这个专门机构称为管程。
Hansen在并发PASCAL语言中首先引入了管程,将它作为语言中的一个并发数据结构类型。
主控程序M.Entry1M.Entry1,MonitorMEntry1Entry2,P(mutext),V(mutext),管程的组成,管程主要由两部分组成(p102)l局部于该管程的共享数据,这些数据表示了相应资源的状态;
l局部于该管程的若干过程,每个过程完成关于上述数据的某种规定操作。
条件变量每个独立的条件变量是和进程需要等待的某种原因(或说条件)相联系的,当定义一个条件变量时,系统就建立一个相应的等待队列。
关于条件变量有两种操作:
wait(x)和signal(x),其中x为条件变量。
wait把调用者进程挂在与x相应的等待队列上,signal唤醒相应等待队列上的一个进程。
管程描述,producer:
beginrepeatproduceanitem;
ringbuffer.put(item);
unti