2023年实验二实验报告进程管理.docx
实验二模拟实现进程管理1 .理解进程的概念,明确进程和程序的区别。2 .理解并发执行的实质。3 .掌握进程的创建,睡眠,撤消等进程控制方法。二、实验内容用C语言,JAVA语言,C+语言编写程序,模拟实现创建新的进程;查看运营进程,换出某个进程;杀死运营进程。三、实验准备1 .进程的定义进程是程序在一个数据集合上的运营过程,是系统资源分 派和调度的一个独立单位。一个程序在不同的数据集合上 运营,乃至一个程序在同样数据集合上的多次运营都是不 同的进程。2 .进程的状态通常情况下,一个进程必须具有就绪,执行和阻塞三种基本amou n t;。 cout<<"此进程被杀死"V<pid:。, el s e i f (in t er n al Memory i. s t at e =0)。coutV"n要杀死的进程不存在n”;。»。 e I se(cout«"n要杀死的进程已被挂起n0 )。f I ag=1;。» brea k :。1if (!fl a g)(» coutV "n要杀死的进程不存在n”;)vo i d wa keUpO i f (! a mount)(。cout<<"当前没有运营进程"<<end I ;ret urn;if ( ! hangUp).c out<<"当前没有挂起进程”;return;)cout”1请输入p i d:c in>> p i d;o for (int i = 0; i <20;i+)(i f (pid=interna IM e mor y i. p id)(。,flag=0;。if (int e r n al Memory i. s t a te=2)s »(» inte r na I Memory i . stat e =1;。» h a ngU p ;coutV< ”已经成功唤醒进程n”:«, o 。else if (internaIMemor y i. stat e =0)。,。» cout«"n要换战的进程不存在n”;。 e lse(。8 11伏<”小要唤酰的进程已被挂起: break;if (f lag),» cout«”n要唤醒的进程已被挂起n"Ven d I;)8 ,实现的结果卜。wakeUpO C:Userst§DesktopImprocessProcessControlDebugProcessContr.noryi.s iory(i.sIMemor卦奂醒的1 W唤醒的i;的« 黎某 建出酸 圈盘 13 5进程演不系统8-itL Jt,二,A 二一丁一工兀 运运一系 看死出 杳一嚷 2 4 6请选择:1请输入新进程的Pid : 曲认新进程的优先级: 量输入新进程的大小: 也输入新进程的内容: interface进程演示系统进进 任苴 运运系 看死出 查甯情况。1)就绪状态当进程已分派到除解决器外的所有必要资源后,只要再 获得解决器就可以立即执行,这时进程的状态就为就绪 状态。在一个系统里,可以有多个进程同时处在就绪状 态,通常把这些就绪进程排成一个或多个队列,称为就绪 队列。2)执行状态处在就绪状态的进程一旦获得解决器,就可以运营,进程 状态也就处在执行状态,在单解决器系统中,只能有一个 进程处在执行状态,在多解决器系统中,则也许有多个 进程处在执行状态3)阻塞状态正在执行的进程由于发生某些事件而暂停运营,这种受 阻暂停的状态称为阻塞状态,也可称为等待状态。通常将 处在阻塞状态的进程拍成一个队列,称为阻塞队列,在有 些系统中,也会按阻塞因素的不同将阻塞状态的进程排 成多个队列。3 .进程状态之间的转换4 .进程控制块1) 进程控制块的作用进程控制块是进程实体的重要组成部分,重要包含下述四个方面的信息:a)进程标示信息b)说明信息c)现场信息d)管理信息5 .进程控制块的组织方式1) 链接方式2) 索引方式.进程控制原语1)创建原语2)撤消原语3)阻塞原语4)唤醒原语.程序代码#includ e <stdio. h ># i n c I ude< i ostream>usi n g n am e space s td;void c I r s c r ();void cr e a te();void run();void e xch an g e( ) ; / / 啖出void kill ();void wakeUp( ) ;/唤醒str u ct p ro c e ss_ t yp e » i nt pid;。i nt p r i or i t y ; / /优先顺序o in t size:* i nt sta t e ;状态。char i n fo1 0;);s truct proc ess _type inte r nalMemo r y20:int amoun t =0, hangUp=O, pi d , f I a g = 0 ;/ / 数目,挂起void ma i n( ) int n;i n t a :n = 1;cIrsc r ();while (n 1 ) o cout V <" n * * * * * * * * * * * * * * * * * *;。 cout« M n *进程演示系统C out« " n*大*-k*大* 大*大* ;。 cout« " n 1.创建新的进程2.查看运营进程cout« " n3.换出某个进程 4.杀死运营进程。c out« " n5.唤曜某个进程“6.退出系统o o cout «"n* * * * * * * * * * * * * *"« e nd I;。cout« "请逸择c i n>>a;。s w i tch (a) ca s e 1:。 create ();»a break;。ca s e 2:。» run ();®。s brea k ;。case 3:o e x c h a n ge ();/换出。,br e a k ;。case 4:。kill ();ob r eak;。o case 5:。,v/akeUp0 ;。a,br e ak; case 6:exit (0);ode f ault:。n=0:。)void crea t e () /创建进程int i =0;« i f ( a mount>= 20),(。cout<< ”内存已满,请先然束或换出进程";。)e I se (o。for ( i =0; i <2 O ; i+)« # 。 if ( i ntern a IMemoryi. st a te=0)0 (obre a k:1。cout<< "请输入新进程的pid: "« e n d I;。ci n >>inte r na I Memo r y i . p i d:coutV<”请输入新进程的优先级:"<<endl;。» ci n >> i nt e r na I Me mor y amount. priori t y;» cout<< ”请输入新进程的大小:"«endl;c i n» i nt e r n a I Memory a mount, s i z e:。cout<V”请输入新进程的内容:"V<endl;cin>> int e rna I Memory am o unt. i nf o ;< interna IM e moryi. s t a te= 1 ;amount+ + :)void c I rscr ()济除内存空间for (int i=0;i<19;i+)。i n terna I Memoryi.pid=0;» inter n a I Memory i . pr i o r i ty=0;。internaIMemoryi.size=0;* 3 in t e r nalMemo ry i. s t a t e =0;)amount=O ;1voi d r un ()|fo r (int i=0: i<20; i + + )(if (int e r n a IM e moryi. stat e =1)。 (ocou t VV"当前内存中的进程:n”<Vendl;。,cout VV ”当前运营的进程:";cout <<i nternalMemo ryi . pid«endl;。,coutV<"当前运营进程的优先级:"cout« i n ter n alMem o ry i . pr i or i t y«en d I;。cout«”当前运营进程占用的空间大小:c o ut« i nt e rna I Memory i . size;vo i d e xcha n ge ( ) /唤出优先级最小的进程<> if ( ! amoun t)(cout<<"当前没有运营进程n "» r et u r n ;。I。c o u t«”n输入换出进程的ID值:";。ci n »pid;for (int i=0;i<20;i-H-),(® if (pid= int e rna I Memory i. p id)(if ( i nte r nalMemory i . st a te=1)0» d (。» « interna I Mem o r y i . stat e=2;«« » h a ngU p + ;。cout«=n已经成功换出进程n"aa )» else if ( internal Memory i . s t a t e= = 0)0 »(。3。cout«"n要换出的进程不存在";1。» e I se ,。仇”3要换出的进程已被挂起广;。fI ag=1 ;。,。b r eak:。I)if (flag=O)(cout< V" n要换出的进程不存在";6 1void kill ( ) o i f (! am o u n t)(。9 cout«"当前没有运营进程n":。 r e tu r n;cout« ”请输入要杀死的进程:。c i n»pi d ;for (in t i=0: i <20; i+)6 。» if (p i d=interna IMe moryi. p i d)(» if (i n t ernalM emoryi. st ate=1)» i nterna IM emoryi. s tate=0;