操作系统实验二进程管理_第1页
操作系统实验二进程管理_第2页
操作系统实验二进程管理_第3页
免费预览已结束,剩余20页可下载查看

下载本文档

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

文档简介

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

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

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

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

5、<string.h> struct jincheng_type/ 定义表示进程信息的结构体int pid;/ 进程 IDint youxian; / 优先级int daxiao;/ 大小int zhuangtai;/ 进程的状态,这里用 0 表示没有建立或被杀死, 1 表示执行,2 表示换出int info;/ 内容;struct jincheng_type neicun20; / int shumu=0,guaqi=0,pid,flag=0; 程 ID ,运行标志位定义 20 个内存单位给进程使用/ 定义正在执行进程数目,被挂起进程数目,进void create()/ 函数创建一

6、个新进程if(shumu>=20)是否已满printf("n 内存已满,请先换出或杀死进程 n"); / 判断内存空间elsefor(int i=0;i<20;i+)程使用if(neicuni.zhuangtai=0) break;/ 选出空着的内存单元给新进printf("n 请输入新进程 pidn");出的内存单元scanf("%d",&(neicuni.pid);for(int j=0;j<i;j+)if(neicuni.pid=neicunj.pid)ID 相同时,显示“该进程已存在”printf(&

7、quot;n 该进程已存在 n"); return;printf("n 请输入新进程优先级 n");大小和内容scanf("%d",&(neicuni.youxian);printf("n 请输入新进程大小 n");scanf("%d",&(neicuni.daxiao);printf("n 请输入新进程内容 n"); scanf("%d",&(); neicuni.zhuangtai=1;态( zhuangtai )

8、设成“ 1”,以表示存在且未被换出 shumu+;/ 输入新进程 ID 存至选/ 当输入的新进程与原有进程/ 输入新进程的优先级、/ 将新进程的内存单元状/ 正在运行的进程数目加void run()/ 函数查看正在运行的进程for(int i=0;i<20;i+)if(neicuni.zhuangtai=1)zhuangtai=1 )的进程显示出来,若存在这样的程序,则将 printf("n pid=%d",neicuni.pid);printf("youxian=%d",neicuni.youxian);printf("daxiao=%

9、d",neicuni.daxiao);printf("zhuangtai=%d",neicuni.zhuangtai); printf("info=%d",);flag=1;if(!flag) printf("n 当前没有运行进程 n");flag=0 ),则显示“当前没有运行进程”/ 将存在且未被挂起(即flag 设成 1/ 若当 前没有运 行进程( 即void huanchu()if(!shumu)printf("n 当前没有进程存在 n");/ 函数换出进程/ 判 断 是 否

10、 无 进 程 存 在return;/ 输 入 需 要 换 出 的 进 程printf("n 输入唤出进程 ID 值 ");ID,scanf("%d",&pid);for(int i=0;i<20;i+)if(pid=neicuni.pid)if(neicuni.zhuangtai=1) / 若该 ID 代表的进程正 在运行,则将其挂起,即将 zhuangyai 置成 2 ,并将 guaqi 加一neicuni.zhuangtai=2;guaqi+;printf("n 已经成功换出进程 n");else if(neicun

11、i.zhuangtai=2) printf("n 要唤出的进程已被挂起 n");/ 若该 ID 代表的进程已被挂起,即 zhuangtai=2, 则显示要唤出的进程已被 挂起'flag=1;break;if(!flag) printf("n 要唤出的进程不存在 n"); / 若进程不存在,给出显示void kill()if(!shumu)/ 函数杀死进程/ 判断是否无进程存在printf("n 当前没有进程存在 n");return;printf("n 输入杀死进程的 ID 值 ");/ 读入要杀死的进程

12、IDscanf("%d",&pid);for(int i=0;i<20;i+)if(pid=neicuni.pid)if(neicuni.zhuangtai=1)/ 若进程正在运行则再次询问是否要杀死,通过用户的反馈执行不同操作printf("n 该进程正在运行,您确定要杀死吗?n");printf("n 请输入 1:确定; 0 :不确定n");scanf("%d",&flag);if(flag)neicuni.zhuangtai=0;/ 将 zhuangtai 置为 0 ,表示进程被杀死,并

13、将shumu自减一shumu-;elseprintf("n已经成功杀死进程 n");要杀死的进程正在运行n");else if(neicuni.zhuangtai=2)/ 若该进程已经被挂起,则直接杀死/ 若进程不存在,给出显/ 函数唤醒进程if(!shumu)printf("n 当前没有运行进程 n"); return;if(!guaqi)printf("n 当前没有挂起进程 n"); return;printf("n 输入 pidn");/ 判断是否无进程存在/ 判断是否无进程被挂起/ 输入需要唤醒进

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

15、;n 已经成功唤醒进程 n");else if(neicuni.zhuangtai=2) printf("n 要唤醒的进程已被挂起 n");/ 若目标进程已被挂起,则显示要唤醒的进程已被挂起'flag=1;break;if(!flag) printf("n 要唤醒的进程不存在 n"); / 若要唤醒的进程不存在,给出显 示void viewall()for(int i=0;i<20;i+)/ 函数查看内存状态/ 显示所有 20 个内存单元的状态printf("n pid=%d",neicuni.pid); pr

16、intf("youxian=%d",neicuni.youxian); printf("daxiao=%d",neicuni.daxiao);printf("zhuangtai=%d",neicuni.zhuangtai);void main()int n=1;int num;for(int i=0;i<20;i+)neicuni.zhuangtai=0;/ 主函数/ 先将内存 zhuangtai 位清零while(n)printf("n*n");/ 用户操作界面printf("n);printf(

17、"n*printf("n printf("n printf("n printf("n1. 创建新的进程2. 查看运行进程n");3. 唤出某个进程4. 杀死某个进程n");5. 唤醒某个进程6. 查看内存状态n");7. 退出进程n");进程演示系统 *n"););printf("nprintf("n 请选择( 1-7 ) n");/ 功能选择scanf("%d",&num);switch(num) case 1:create();bre

18、ak;case 2:run();break;case 3:huanchu();break;case 4:kill();break;case 5:hua nxin g();break;case 6:viewall();break;case 7:exit(0);default:n=0;flag=0;4、程序运行演示与截图(1)创建新进程,依次建立进程1、2、3,图中为建立进程2MXKMKM K M K > M HMM 4 M K M H M M K X M M M MMK < KKw*51(迪程 演 示 爭*克鼻耳捕1 创建新的进程2 查看运行咗程3 .唤出茸个逹稈4 杀死菇个咗稈唤醒

19、某个进程4查看内存状态 7 退岀讲程MM MMKMMK KXKMMMMKKKMMMMMKrfXKX HMMKMK(1-7)1请输入新咗枉卩也2輛入壯制瞇级2请输入新咗程大小2谨输入新子荐内容(2)查看运行的进程与查看内存状态程演 示系统创建新的进程2 -查看运行进程 氛唤出某个进程吗杀死某个进程 乳唤醒某个进程 氣查看内存状态叭退出迸程请选择(1-?)Epid=l yo ux lain =1 dixlcto =1 z huan sfta i_ =1 ±n f n =1pid =2 youxian=2 daKiao Ehwantai info =2pid=3ouxian=3daxiao

20、 =3zhuangtai=linfo=3(2)换出进程。图中以换出进程 3为例。J 程演 7J 系 統 xxxxwmxxH创建新的进程2-查看运彳亍进程 氛唤岀某个进程4 杀死某个进程 £ -唤醒某个进程 J查看内存状态 臨退岀进程X it 貝!MX 且 MiJKJCiCmtiOtaiCJlCNiCMUXItiiiiiJCHKMUmtNWMlj青选择(1-7)3输入唤出进程5值已经成功换岀迸程(4) 此时再次查看运行的进程与查看内存状态,可以看到进程3已不在运行的进程中,内存状态中其zhuangtai标识等于2,表明进程3确实已被换出。1 创建新的进程 史唤出某个进程 E.唤醒某个进

21、程门退出进程氏查看运行进程 乩杀死某个进程 查看内存状态*选择(I-*?)rp4d=li/cuxS.an «l<lax4ao *lzhuang(ta 1=1 info "1 pzLd =2«/DuxzLan =2daxzLao =2n1iii 云 ngtsi 1=1 zLnf o =2 pid =3<juxlan =3daxlao =3zhuangta i=2 inf o=,3 pS.d =-0ouxi*n "0d3cS.ao "SzhuAngta i=0inf o =6 pJ.d=6i/ouxJ.an =OdlaxJ.ao =0z

22、huans(<;a l=0inf o=0 pzLd =G«/ouxzLan =0daxzLao =02 liu An a l=0zLnf o =B pid=Byouxian=Odaxiao=021mangtai=Binfo=B pS.d =-0</ouxi*n "Gdaxiao "Szhuangta i=0inf o =6 pid=6youxian =0ilaxiao =02huAns(tai=Oinf o=0 pld=O«;Duxlan =0daxlao =0tehuAns(t al=01nf c =6 Pid=0yo«Kiftn

23、=0dftKio=GEhu«n9ti=0info=C pid0«/ouxian "OdAxiao "QzbuAnsrai01nf o =6 pid=Gyouxian*0daxiao*0zhuAn9tal=0info=0 pld=0«oulan =0dalao =OhuAnst;al=01nf o =6 p id=Gyoux ian =Bda« iao =021)un9tA i=B info =6 pid0«/ouxian "OdAxiao "QzbuAn g ta i"6inf o =0 pid

24、=Gyouxian=0daxiao=0zhuAn9tal-0info=0 pld=Q«ouKlan =0dalao =OhuAnst;al=01nf o =fi pid=GyouKian=Bda«io=BEhuangtfii=6info=B pid0«/ouxian -OdAxiao -OzbuAng ta i"Qinf q =0(5) 唤醒进程。图为将进程3唤醒创建新的进程趴沓看运行进程沢唤出某个进程4 杀死某个进程 皐唤醒某个进程6 查看内存状态 叭退出进程KKaCJiC3<W>OCA<>CSCJ<MICJ<K&g

25、t;C>CKX<K>*IIA<>t»!M3<KXXIKj< 请选择(1-7)5输入P"3已经成功唤醛进程jOLlOOCJCJCJCjOLlOCJCJCJCJCjOLlOtJtKMtKjMIftKJBJtKMtKjMIft(6) 此时再次查看运行的进程与查看内存状态,可以看到进程3重新出现在运行的进程中,且内存状态中其 zhuangtai标识等于1,表明进程3已被成功唤nmwxw 丁¥呈演下系纟充KHi科首材xmiifTill1-创建新的进程洪查看运行进程 唤岀某个进程 乳杀死某个进程唤醒某个进程查看內存状态 兀退出进程请选

26、择(1-7)2p id =d youx ian =1dax ian-izhuangta1=1info=l pid =2youx i_an «2 dax iftu -2shuangtal"linf o 3 pld =2youix£a.n =3 djcj-ao =3zhi*£irigftal=lzlnFo 2XJtaCKKiMJfM: >E*aC>£ MIX atJCtt KMIX NX NKJt HEX XlC>f(7 )杀死进程。图中以杀死进程 3为例,并附以杀死后运行的进程与内存状态图,内存状态中进程3的zhuangtai=O ,表示进程3已被杀死。*进程嘖不系统创建新的进程 沢唤出某个进程 唤酿某入进程2 一查看运行进程 乳杀死某个进程 肛查看内存狀态7 退岀进程XKX fcfJC :MHf:MX:MXKaiXPO<liEXKXjfKWM:miiWM:XII选ft (1-7)6pid=louxian Idaxiao =lzhuangtinfo=l pid=2yvuxin *2dxidu*2i£iucLPkyit«ii ilinf u-2

温馨提示

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

最新文档

评论

0/150

提交评论