您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 实验二-实验报告(进程管理)
实验二模拟实现进程管理组长:李和林软件1402组员分工一、实验目的1.理解进程的概念,明确进程和程序的区别。2.理解并发执行的实质。3.掌握进程的创建,睡眠,撤销等进程控制方法。二、实验内容用C语言,JAVA语言,C++语言编写程序,模拟实现创建新的进程;查看运行进程,换出某个进程;杀死运行进程。三、实验准备1.进程的定义进程是程序在一个数据集合上的运行过程,是系统资源分配和调度的一个独立单位。一个程序在不同的数据集合上运行,乃至一个程序在同样数据集合上的多次运行都是不同的进程。2.进程的状态通常情况下,一个进程必须具有就绪,执行和阻塞三种基本情况。1)就绪状态当进程已分配到除处理器外的所有必要资源后,只要再获得处理器就可以立即执行,这时进程的状态就为就绪状态。在一个系统里,可以有多个进程同时处于就绪状态,通常把这些就绪进程排成一个或多个队列,称为就绪队列。2)执行状态处于就绪状态的进程一旦获得处理器,就可以运行,进程状态也就处于执行状态,在单处理器系统中,只能有一个进程处于执行状态,在多处理器系统中,则可能有多个进程处于执行状态3)阻塞状态正在执行的进程因为发生某些事件而暂停运行,这种受阻暂停的状态称为阻塞状态,也可称为等待状态。通常将处于阻塞状态的进程拍成一个队列,称为阻塞队列,在有些系统中,也会按阻塞原因的不同将阻塞状态的进程排成多个队列。3.进程状态之间的转换新进程就绪阻塞执行终止I/O请求调度I/O完成中断完成接纳4.进程控制块1)进程控制块的作用进程控制块是进程实体的重要组成部分,主要包含下述四个方面的信息:a)进程标示信息b)说明信息c)现场信息d)管理信息5.进程控制块的组织方式1)链接方式2)索引方式6.进程控制原语1)创建原语2)撤销原语3)阻塞原语4)唤醒原语7.程序代码#includestdio.h#includeiostreamusingnamespacestd;voidclrscr();voidcreate();voidrun();voidexchange();//唤出voidkill();voidwakeUp();//唤醒structprocess_type{intpid;intpriority;//优先次序intsize;intstate;//状态charinfo[10];};structprocess_typeinternalMemory[20];intamount=0,hangUp=0,pid,flag=0;//数目,挂起voidmain(){intn;inta;n=1;clrscr();while(n==1){cout\n********************************************;cout\n*进程演示系统*;cout\n********************************************;cout\n1.创建新的进程2.查看运行进程;cout\n3.换出某个进程4.杀死运行进程;cout\n5.唤醒某个进程¨6.退出系统;cout\n*********************************************endl;cout请选择;cina;switch(a){case1:create();break;case2:run();break;case3:exchange();//换出break;case4:kill();break;case5:wakeUp();break;case6:exit(0);default:n=0;}}}voidcreate(){//创建进程inti=0;if(amount=20){cout内存已满,请先结束或换出进程;}else{for(i=0;i20;i++){if(internalMemory[i].state==0){break;}}cout请输入新进程的pid:endl;cininternalMemory[i].pid;cout请输入新进程的优先级:endl;cininternalMemory[amount].priority;cout请输入新进程的大小:endl;cininternalMemory[amount].size;cout请输入新进程的内容:endl;cininternalMemory[amount].info;internalMemory[i].state=1;amount++;}}voidclrscr()//清除内存空间{for(inti=0;i19;i++){internalMemory[i].pid=0;internalMemory[i].priority=0;internalMemory[i].size=0;internalMemory[i].state=0;}amount=0;}voidrun(){for(inti=0;i20;i++){if(internalMemory[i].state==1){cout当前内存中的进程:\nendl;cout当前运行的进程:;coutinternalMemory[i].pidendl;cout当前运行进程的优先级:;coutinternalMemory[i].priorityendl;cout当前运行进程占用的空间大小:;coutinternalMemory[i].size;}}}voidexchange(){//唤出优先级最小的进程if(!amount){cout当前没有运行进程\n;return;}cout\n输入换出进程的ID值:;cinpid;for(inti=0;i20;i++){if(pid==internalMemory[i].pid){if(internalMemory[i].state==1){internalMemory[i].state=2;hangUp++;cout\n已经成功换出进程\n;}elseif(internalMemory[i].state==0){cout\n要换出的进程不存在;}else{cout\n要换出的进程已被挂起\n;}flag=1;break;}}if(flag==0){cout\n要换出的进程不存在;}}voidkill(){if(!amount){cout当前没有运行进程\n;return;}cout请输入要杀死的进程:;cinpid;for(inti=0;i20;i++){if(pid==internalMemory[i].pid){if(internalMemory[i].state==1){internalMemory[i].state=0;amount--;cout此进程被杀死pid;}elseif(internalMemory[i].state==0){cout\n要杀死的进程不存在\n;}else{cout\n要杀死的进程已被挂起\n;}flag=1;break;}}if(!flag){cout\n要杀死的进程不存在\n;}}voidwakeUp(){if(!amount){cout当前没有运行进程endl;return;}if(!hangUp){cout当前没有挂起进程;return;}cout请输入pid:;cinpid;for(inti=0;i20;i++){if(pid==internalMemory[i].pid){flag=0;if(internalMemory[i].state==2){internalMemory[i].state=1;hangUp--;cout已经成功唤醒进程\n;}elseif(internalMemory[i].state==0){cout\n要换醒的进程不存在\n;}else{cout\n要唤醒的进程已被挂起\n;}break;}}if(flag){cout\n要唤醒的进程已被挂起\nendl;}}8.实现的结果
本文标题:实验二-实验报告(进程管理)
链接地址:https://www.777doc.com/doc-1801597 .html