操作系统实验二_第1页
操作系统实验二_第2页
操作系统实验二_第3页
操作系统实验二_第4页
操作系统实验二_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统实验实验二进程管理学号1215108019姓名李克帆学院信息学院班级12电子2实验目的1、理解进程的概念,明确进程和程序的区别。2、理解并发执行的实质。3、掌握进程的创建、睡眠、撤销等进程控制方法。实验内容与要求基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。实验报告内容1、进程、进程控制块等的基本原理。进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源

2、分配和调度的一个独立单位。由于多个程序并发执行,各程序需要轮流使用CPU当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的内容、堆栈内容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU寸,能够正确执行。为了保存这些内容,需要建立一个专用数据结构,我们称这个数据结构为进程控制块PCB(ProcessControlBlock)。进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。在通常的操作系统中,PCB应包含如下一些信息:

3、进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标识数。 位置信息。指出进程的程序和数据部分在内存或外存中的物理位置。状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。进程的优先级。一般根据进程的轻重缓急其它信息。这里给出的只是一般操作系统中PCB所应具有的内容,不同操作系统的PCB吉构是不同的,我们将在2.8节介绍Linux系统的PCB结构。程度为进程指定一个优先级,优先级用优先数表示。进程现场保护区。当进程状态变化日(例如一个进程放弃使用CPU,它需要将当时的CPU现场保护到内存中,以便再次占用CPU时恢复正常运行,有的系统把要保护的CPU现场放在进程的

4、工作区中,而PCB中仅2出CPU现场保护区起始地址。资源清单。每个进程在运行时,除了需要内存外,还需要其它资源,如I/O设备、外存、数据区等。这一部分指出资源需求、分配和控制信息。队列指针或链接字。它用于将处于同一状态的进程链接成一个队列,在该单元中存放下一进程PCB首址。其它信息。这里给出的只是一般操作系统中PCB所应具有的内容,不同操作系统的PCB吉构是不同的,我们将在2.8节介绍Linux系统的PCB结构。2、程序流程图。开始3、程序及注释#include<stdio.h>#include<stdlib.h>#include<string.h>stru

5、ctjinchengtype/定义表示进程信息的结构体intpid;/进程IDintyouxian;/优先级intdaxiao;/大小intzhuangtai;/进程的状态,这里用0表示没有建立或被杀死,1表示执行,2表示换intinfo;/内容;structjincheng_typeneicun20;/定义20个内存单位给进程使用intshumu=0,guaqi=0,pid,flag=0;/定义正在执行进程数目,被挂起进程数目,进程ID,运行标志位voidcreate。/函数一创建一个新进程if(shumu>=20)printf("n内存已满,请先换出或杀死进程n"

6、);/判断内存空间是否已满elsefor(inti=0;i<20;i+)if(neicuni.zhuangtai=0)break;/选出空着的内存单元给新进程使用printf("n请输入新进程pidn");/输入新进程ID存至选出的内存单元scanf("%d",&(neicuni.pid);|for(intj=0;j<i;j+)if(neicuni.pid=neicunj.pid)/当输入的新进程与原有进程ID相同时,显示"该进程已存在"printf("n该进程已存在n");return)/输入

7、新进程的优先级、大小和内printf("n请输入新进程优先级n");scanf("%d",&(neicuni.youxian);printf("n请输入新进程大小n");scanf("%d",&(neicuni.daxiao);printf("n请输入新进程内容n");scanf("%s",&();neicuni.zhuangtai=1;谷(zhuangtai)设成"1",以表示存在且未被换出/将新进程的内存

8、单元状态shumu+;/正在运行的进程数目加一voidrun()/函数一查看正在运行的进for(inti=0;i<20;i+)if(neicuni.zhuangtai=1)/将存在且未被挂起(即zhuangtai=1)的进程显示出来,若存在这样的程序,则将flag设成1printf("npid=%d-",neicuni.pid);printf("youxian=%d-",neicuni.youxian);printf("daxiao=%d-",neicuni.daxiao);printf("zhuangtai=%d-&

9、quot;,neicuni.zhuangtai);printf("info=%c",);|flag=1;)if(!flag)printf("n当前没有运行进程n");/若当前没有运行进程(即flag=0),则显示“当前没有运行进程"voidhuanchu()/函数一换出进程if(!shumu)/判断是否无进程存在printf("n当前没有进程存在n");return;)printf("n输入唤出进程ID值");输入需要换出的进程ID,scanf("%d”,&pid

10、);for(inti=0;i<20;i+)(if(pid=neicuni.pid)(if(neicuni.zhuangtai=1)/若该ID代表的进程正在运行,则将其挂起,即将zhuangyai置成2,并将guaqi加一(neicuni.zhuangtai=2;guaqi+;printf("n已经成功换出进程n");)elseif(neicuni.zhuangtai=2)printf("n要唤出的进程已被挂起n");/若该ID代表的进程已被挂起,即zhuangtai=2,则显示要唤出的进程已被挂起flag=1;break;)if(!flag)pri

11、ntf("n要唤出的进程不存在n");/若进程不存在,给出显示)voidkill()/函数一杀死进程if(!shumu)/判断是否无进程存在(printf("n当前没有进程存在n");return;)printf("n输入杀死进程的ID值");/读入要杀死的进程IDscanf("%d",&pid);for(inti=0;i<20;i+)(if(pid=neicuni.pid)(if(neicuni.zhuangtai=1)/若进程正在运行则再次询问是否要杀死,通过用户的反馈执行不同操作(printf(

12、"n该进程正在运行,确定要杀死吗?n");printf("n请输入1:Yes;0:NOn");scanf("%d”,&flag);if(flag)(neicuni.zhuangtai=0;/将zhuangtai置为0,表示进程被杀死,并将shumuB减一shumu-;printf("n已经成功杀死进程n");elseprintf(要杀死的进程正在运行n");elseif(neicuni.zhuangtai=2)/若该进程已经被挂起,则直接杀死(neicuni.zhuangtai=0;shumu-;print

13、f("n已经成功杀死进程n");flag=1;break;if(flag=0)printf("n要杀死的进程不存在n");/若进程不存在,给出显示huanxing()if(!shumu)/函数-唤醒进程/判断是否无进程存在(printf("n当前没有运行进程n");return;if(!guaqi)/判断是否无进程被挂起(printf("n当前没有挂起进程n");return;/输入需要唤醒进程IDprintf("n输入pid'n");scanf("%d",&

14、pid);for(inti=0;i<20;i+)(if(pid=neicuni.pid)flag=false;if(neicuni.zhuangtai=2)/判断该进程是否被挂起,若没有则将其唤醒并将guaqi自减一neicuni.zhuangtai=1;guaqi-;printf("n已经成功唤醒进程n");elseif(neicuni.zhuangtai=2)printf("n要唤醒的进程已被挂起n");/若目标进程已被挂起,则显示要唤醒的进程已被挂起flag=1;break;if(!flag)printf("n要唤醒的进程不存在n&

15、quot;);/若要唤醒的进程不存在,给出显示voidviewall()/函数一查看内存状态for(inti=0;i<20;i+)/显示所有20个内存单元的状态printf("npid=%d",neicuni.pid);printf("youxian=%d",neicuni.youxian);printf("daxiao=%d",neicuni.daxiao);printf("zhuangtai=%d",neicuni.zhuangtai);printf("info=%c",neicuni

16、.info);voidmain()/主函数intn=1;intnum;for(inti=0;i<20;i+)/先将内存zhuangtai位清零neicuni.zhuangtai=0;while(n)printf("n);printf("n1.创建新的进程n");printf("n2.查看运行进程n"Iprintf("n3.唤出某个进程n");printf("n4.杀死某个进程n");fffn"printf(,3*、-);printf("n5.唤醒某个进程n");prin

17、tf("n6.查看内存状态n");printf("n7.退出进程n"););printf(,3*肝printf("n请选择(1-7)n");scanf("%d",&num);switch(num)/功能选择case1:create();break;case2:run();break;case3:huanchu();break;case4:kill();break;case5:huanxing();break;case6:viewall();break;case7:exit(0);default:n=0;4、

18、程序运行演示与截图(1)创建新进程,依次建立进程1、2、3,图中为建立进程2。M*耳a<MM>LlliEiMiMailX堇疑*隆蕤MJtif中其MI*i3程演示系统*a*H*M*51.创建新的进程2.查看运行进程3.唤出某个进程4,杀死某个进程S.唤醒某个逑程G,查看内存状态7.退出进程:M*4*:«*著注:HM:X:安:HM:注:清选择C1-7)1请输入新进程妙武2请输入新进程优先级2请输入新进程大小Z请输入新进程内容2(2)查看运行的进程与查看内存状态1.创建新的进程3.唤出某个进程唤醒某个进程入退出进程2.查看运行进程4.杀死某个进程6.查看内存状态机选择(Ir)p

19、id=lyouixian=ldaxiao=lzfiuangtai=1inf=!pid=2youxian=2daxiao=2Ehudngtai=linfo=2pid=3youxian=3daxiao=3zliiiangtai-1infd=3(2)换出进程。图中以换出进程3为例。HKKHKKHKKHj井,呈1言7J系,充*耳,1.创建新的进程3.唤出某个进程£.唤醒某个进程?.退出进程2.查看运行进程4.杀死某个进程6.查看内存状态请选择(IT)输入唤出进程ID值3已经成功换出进程(4)此时再次查看运行的进程与查看内存状态,可以看到进程3已不在运行的进程中,内存状态中其zhuangtai

20、标识等于2,表明进程3确实已被换出。并不呈:宙万系名充1*M:MEMIIM疆ME1 .创建新的进程3,唤出某个进程5唤醒某个进程2 .查看运行进程4.杀死某个进程G.查看内存状态7.退出进程£青选择(1-7)pid=lyouxian=ldaxiao=lzhuangtai=l:info=1pid=2yuxian=2daxiao=2zhuaingftai-1info2黄:KMMMM注MMMMMMMHMJfMMEXXMXMM苴葡由于呈演同个壬,充M苴MX首XHXXMJC1.创建新的进程3.唤出某个进程5.唤醒某个进程2.查看运行进程4.杀死某个进程心查看内存状态7.退出进程MMMMMUM1

21、tMM*>(HitMUMJtMTMlfMKMMMMKMi青选择Cl-7)pid=15iaux±an=ldaxiao=12hu.angtai=linfo=1pid=24/ouxian=2daxiao=2zhuangtai=iinFo=2pid=3youixian=3daxiao-3zliuan§(tai=2info=3pid"0iauxian=0daxiao«02haangtai=0inFo=0pid=0ouxian=0daxiao=0ahuangtai=0info-0pid=0youxian=0daxiao=0ziiiangJtai=0info=0

22、pid=0i/Duxian=0daxiaa=0zhuangtdi=0info=0pid=0oaxian=0daxiao=0shaangtai=0info-0pid=0youxian=0daxiao=Bzliuan9tai=0info=0pid=0t/Duxian=0daxi4o=02huanortai-0info=0pid=0vouxian=0daxiao=02huangtai=0info=0pid=0youxian=0daxiao=0zhuan9tai=0info=0pid=0ouxian=0daxiAO=0shuangtai=0info=0pid=0youxian=0daxiao=0shu

23、angtai=0info-0pid=0i/aiLXian=0daxiao=0zhuangtai=0info=0p±d=0t/ouxiein=0daxiao=0ahwangtax=0inFo=0pid=0ouxian=0daxiAo=0ahuangtai=0info-0pid=05PDuxian=0daxiao=0zhuangtai=0info-tJiii.d=0youxian=0daxiao=0ahwangtai=0inFo=fipid=0youxian=0daxiao=Deuiang七或i=0info=0(5)唤醒进程。图为将进程3唤醒万7;系g充Mx*MMMM*1 .创建新的进程

24、2.查看运行进程3 ,唤出某个进程4.杀死某个进程S.唤醒某个进程6.查看内存状态7.退出进程请选择(1-7)5输入Rid3已经成功唤醒进程(6)此时再次查看运行的进程与查看内存状态,可以看到进程3重新出现在运行的进程中,且内存状态中其zhuangtai标识等于1,表明进程3已被成功唤醒MM*.沙木呈1g刁区系t市*MlfMHMMHMM1 .创建新的进程2.查看运行进程3 .唤出某个进程4.杀死某个进程5 .唤醒某个进程6.查看内存状态7.退出进程请选择(1-7)2pid=ls/ouxian=ldaxiao=1zhuang-tai=1inf=1pid=2ouxian=2daxiao=22111

25、1*1*1=1info=2pid=35/ouxian=3daxiaoaJuiansftai»±info=3(7)杀死进程。图中以杀死进程3为例,并附以杀死后运行的进程与内存状态图,内存状态中进程3的zhuangtai=0,表示进程3已被杀死。工.创建新的进程2.查看运行进程3.唤出某个进程生杀死某个进程£.唤醒某个进程6.查看内存状态7.退出进程MXJtJtKJCKHMJCJCltltJCMNJtMJCJtXJOCKlCJOtMMMJtMXJt请选择(1-7)4输入杀死进程的5值3,进程正在运行,您确定要杀死吗?请输入li确定则不确定1已经成功杀死进程*进程演示系

26、统*.创建新的进程入唤出某个进程5.唤醒某个进程2.查看运行逸程4.杀死某个进程6.查看内存状态7.退出进程请选择(1-7)2pid=1youxian=l(3laxiao=13huanatai=linfo=lpid=2vouxian=2daxiao=2shuangtai=linfo=2驾同随XEXXK苴j#呈演7J系名充范M列“帏XXMKMM1,创建新的进程3,唤出某个进程5.唤醒某个进程2.查看运行进程4.杀死某个进程6.查看内存状态7.退出进程请选择(1-7)6pid=1y口uxian=1daxlao-1zhuaingftal-1infopid=2yolixian=2dlaxlao=2zhuangtai=linfo=2pid=

温馨提示

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

评论

0/150

提交评论