进程管理模拟实验.docx
- 文档编号:8220917
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:12
- 大小:20.35KB
进程管理模拟实验.docx
《进程管理模拟实验.docx》由会员分享,可在线阅读,更多相关《进程管理模拟实验.docx(12页珍藏版)》请在冰豆网上搜索。
进程管理模拟实验
进程管理
一、目的与要求
1.目的
进程是操作系统最重要的概念之一,是了解操作系统实质的关键。
本课题实习的目的是,加深对进程概念及进程管理各部分内容的理解;熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构、通讯机构的实施。
2.要求
要求设计一个允许n个进程并发运行的进程管理模拟系统。
该系统包括以下内容:
(1)简单的进程控制
(2)同步及通讯机构(3)中断机构(4)进程调度。
其进程调度算法可任意选择。
每个进程用一个PCB表示,其内容可根据具体情况设置。
各进程之间有一定的同步关系。
系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。
二、范例
1.题目 支持多个进程并发运行的简单进程管理模拟系统
本系统的同步机构采用信号量上的P、V操作的机制;控制机构包括阻塞和唤醒操作;时间片中断处理程序模拟时间片中断;进程调度程序负责为各进程分配处理机。
系统中涉及了3个并发进程。
它们之间的关系是:
3个进程需要互斥使用临界资源S2,进程1和进程2又需互斥使用临界资源S1.本系统在运行过程中随机打印出各进程的状态变换过程,系统的调度过程及公共变量的变化情况。
2.算法与N~S图
系统为进程设置了5种运行状态:
e—执行态;r—高就绪态;t—低就绪态(执行进程因时间片到限而转入);w—等待态;c—完成态。
各进程的初始状态均设置为r.
系统分时执行各进程,并规定3个进程的执行概率均为33%。
通过产生随机数x来模拟时间片。
当进程process1访问随机数x时,若x>=0.33;当进程process2访问x时,若x<0.33或x>=0.66;当进程process3访问x时,若x<0.66,则分别认为各进程的执行时间片到限,产生“时间片中断”而转入低就绪态t。
进程调度算法采用剥夺式最高优先数法。
各进程的优先数通过键盘输入予以静态设置。
调度程序每次总是选择优先数最小(优先权最高)的就绪进程投入执行。
先从r状态进程中选择,再从t状态进程中选择。
当现行进程唤醒某个等待进程,且被唤醒进程的优先数小于现行进程时,则剥夺现行进程的执行权。
各进程在使用临界资源S1和S2时,通过调用信号量sem1和sem2上的P、V操作来实现同步。
阻塞和唤醒操作负责完成从进程的执行态到等待态以及从等待态到就绪态的转换。
系统启动后,在完成必要的系统初始化后便执行进程调度程序。
当执行进程因“时间片中断”,或被排斥使用临界资源,或唤醒某个进程时,立即进行进程调度。
当3个进程都处于完成状态后,系统退出运行。
N-S图在此显示不出。
3.数据结构
(1)每个进程有一个进程控制块PCB,内容包括:
id 进程标识数,id=0,1,2;
status 进程状可为e,r,t,w,c;
priority 进程优先数;
nextwr 等待链指针,指示在同一信号量上等待的下一个进程的标识数。
(2)信号量semaphore,对应于临界资源S1和S2分别有sem1和sem2,均为互斥信号量,内容包括:
value 信号量,初值为1;
firstwr 等待链首指针,指示在同一信号量上等待的下一个进程的标识数。
(3)现场保留区,在PCB中模拟,用inum,addr分别模拟通用寄存器和PC的内容。
(4)进程通信机构,在PCB中模拟,用mess变量模拟用于接收其它进程所发送消息的信箱。
此外,系统中还用到下列主要全程变量:
exe 执行进程指针,其值为进程标识数;
i 用来模拟一个通用寄存器;
addr 用来模拟程序计数器;
s1,s2 两个公共变量,用作共享临界资源。
4.程序及运行结果
programprocessc(input,output);
constMAXPRI=100;
NIL=-1;
TYPE
message=^messagetp;
procb=record
id:
integer;
status:
char;
nextwr:
integer;
priority:
integer;
mess:
message;
inum:
integer;
addr:
char;
end;
messagetp=record
num:
integer;
next:
message;
pro:
integer;
end;
semaphorel=record
value:
integer;
firstwr:
integer;
end;
var
pcb:
array[1..3]ofprocb;
sem:
array[1..2]ofsemaphorel;
addr:
char;
i,seed,exe:
integer;
style:
integer;
proceduresend(sender,receiver,snum:
integer);
Varq,p:
message;
begin
new(p);
p^.num:
=snum;
p^.next:
=NIL;
p^.pro:
=sender;
writeln('sendmessagetoprocess ',receiver);
writeln('process',sender,'alreadyrun ',snum,' times');
q:
=pcb[receiver].mess;
if(q=NIL)thenpcb[receiver].mess:
=p
elsebegin
while(q^.next<>NIL)do
q:
=q^.next;
q^.next:
=p;
end
end;
procedure receive(receiver:
integer);
varp:
message;
begin
p:
=pcb[receiver].mess;
if(p<>NIL)then
while(p<>NIL)do
begin
writeln;
writeln('receivemassageformprocess',p^.pro);
writeln('process ',p^.pro,'isalreadyrun',p^.num,' time');
writeln;
p:
=p^.next;
end;
pcb[receiver].mess:
=NIL;
end;
PROCEDUREinit;
VAR
j:
integer;
begin
forj:
=1to3do
begin
pcb[j].id:
=j;
pcb[j].status:
='r';
pcb[j].nextwr:
=NLL;
write('process',j,'priority?
');
readln(i);
pcb[j].priority:
=i;
pcb[j].mess:
=NIL;
pcb[j].inum:
=0;
pcb[j].addr:
='0';
end;
sem[1].value:
=1;
sem[1].firstwr:
=NLL;
sem[2].value:
=1;
sem[2].firstwr:
=NLL;
exe:
=NLL
end;
FUNCTIONrandom:
real;
VAR
m:
integer;
begin
ifseed<0thenm:
=-seed
elsem:
=seed;
seed:
=(25173*seed+13849)mod65536;
random:
=m/32767.0
end;
FUNCTIONfind:
integer;
VAR
j,pd,w:
integer;
begin
pd:
=NLL; w:
=MAXPRI;
forj:
=1to3do
ifpcb[j].status='r'then
ifpcb[j].priority beginw: =pcb[j].priority;pd: =jend; ifpd=NLLthen forj: =1to3do ifpcb[j].status='t'then ifpcb[j].priority beginw: =pcb[j].priority;pd: =jend; find: =pd end; FUNCTIONscheduler: integer; VAR pd: integer; begin pd: =find; if((pd=NLL)and(exe=NLL))thenscheduler: =NLL elsebegin ifpd<>NLLthen begin ifexe=NLLthen begin pcb[pd].status: ='e'; exe: =pd; writeln('process',exe,'isexecuting.'); end elseifpcb[pd].priority begin pcb[exe].status: ='r'; writeln('process',exe,'enterintoready.'); pcb[pd].status: ='e'; exe: =pd; writeln('process',exe,'isexecuting.'); end end; i: =pcb[exe].inum; addr: =pcb[exe].addr; scheduler: =exe end end; PROCEDUREblock(se: integer); VAR w: integer; begin writeln('process',exe,'isblocked'); pcb[exe].status: ='w'; pcb[exe].nextwr: =NLL; w: =sem[se].firstwr; if(w=NLL)then sem[se].firstwr: =exe elsebegin while(pcb[w].nextwr<>NLL)do w: =pcb[w].nextwr; pcb[w].nextwr: =exe end end; FUNCTIONp(se: integer;ad: char): boolean; begin sem[se].value: =sem[se].value-1; ifsem[se].value>=0thenp: =false elsebegin block(se); pcb[exe].inum: =i; pcb[exe].addr: =ad; exe: =NLL; p: =true end end; PROCEDUREwakeup(se: integer); VAR w: integer; begin w: =sem[se].firstwr; ifw<>NLLthen begin sem[se].firstwr: =pcb[w].nextwr; pcb[w].status: ='r'; writeln('process',w,'iswakenup') end end; FUNCTIONv(se: integer;ad: char): boolean; begin sem[se].value: =sem[se].value+1; ifsem[se].value>0thenv: =false elsebegin wakeup(se); pcb[exe].inum: =i; pcb[exe].addr: =ad; v: =true end end; FUNCTIONtimeint(ad: char): boolean; varx: real; begin x: =random; if((x<0.33)and(exe=1))thentimeint: =false elseif((x<0.66)and(exe=2))thentimeint: =false elseif((x<1.00)and(exe=3))thentimeint: =false elsebegin pcb[exe].inum: =i; pcb[exe].addr: =ad; pcb[exe].status: ='t'; writeln('Timessilceinterrupt.'); writeln('process',exe,'enterintoready.'); exe: =NLL; timeint: =true end end; procedureeexit(n: integer); begin pcb[n].status: ='c'; writeln('process',n,'iscompleted! '); exe: =NLL; end; procedureprocess1(vars1,s2: integer); labela1,b1,c1,d1,e1,f1,stop1,end1; begin if(addr='a')thengotoa1; if(addr='b')thengotob1; if(addr='c')thengotoc1; if(addr='d')thengotod1; if(addr='e')thengotoe1; if(addr='f')thengotof1; while(i<5)do begin receive (1); writeln('process1callsPonsemaphore1.'); if(p(1,'a'))thengotostop1; a1: writeln('process1isexecutingonitscreticalsection1.'); if(timeint('b'))thengotostop1; b1: s1: =s1+1; writeln('s1=',s1); writeln('process1callsVonsemaphore1andquitcreticalsetion1.'); if(v(1,'c'))thengotostop1; c1: writeln('process1callsPonsemaphore2.'); if(p(2,'d'))thengotostop1; d1: writeln('process1isexectingcreticalsection2.'); if(timeint('e'))thengotostop1; e1: s2: =s2+1; writeln('s2=',s2); writeln('process1callsVonsemaphore2andquitcreticalsection2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 管理 模拟 实验