《实验二-实验报告(进程管理)(共9页).docx》由会员分享,可在线阅读,更多相关《实验二-实验报告(进程管理)(共9页).docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验二 模拟实现进程管理组长:李和林 软件1402组员分工一、 实验目的1. 理解进程的概念,明确进程和程序的区别。2. 理解并发执行的实质。3. 掌握进程的创建,睡眠,撤销等进程控制方法。二、 实验内容用C语言,JAVA语言,C+语言编写程序,模拟实现创建新的进程;查看运行进程,换出某个进程;杀死运行进程。三、 实验准备1. 进程的定义进程是程序在一个数据集合上的运行过程,是系统资源分配和调度的一个独立单位。一个程序在不同的数据集合上运行,乃至一个程序在同样数据集合上的多次运行都是不同的进程。2. 进程的状态通常情况下,一个进程必须具有就绪,执行和阻塞三种基本情况。
2、1) 就绪状态当进程已分配到除处理器外的所有必要资源后,只要再获得处理器就可以立即执行,这时进程的状态就为就绪状态。在一个系统里,可以有多个进程同时处于就绪状态,通常把这些就绪进程排成一个或多个队列,称为就绪队列。2) 执行状态处于就绪状态的进程一旦获得处理器,就可以运行,进程状态也就处于执行状态,在单处理器系统中,只能有一个进程处于执行状态,在多处理器系统中,则可能有多个进程处于执行状态3) 阻塞状态正在执行的进程因为发生某些事件而暂停运行,这种受阻暂停的状态称为阻塞状态,也可称为等待状态。通常将处于阻塞状态的进程拍成一个队列,称为阻塞队列,在有些系统中,也会按阻塞原因的不同将阻塞状态的进程
3、排成多个队列。3. 进程状态之间的转换接纳完成中断调度阻塞执行终止就绪新进程I/O请求I/O完成4. 进程控制块1) 进程控制块的作用进程控制块是进程实体的重要组成部分,主要包含下述四个方面的信息:a) 进程标示信息b) 说明信息c) 现场信息d) 管理信息5. 进程控制块的组织方式1) 链接方式2) 索引方式6. 进程控制原语1) 创建原语2) 撤销原语3) 阻塞原语4) 唤醒原语7. 程序代码#include #includeusing namespace std;void clrscr();void create();void run( );void exchange( );/唤出voi
4、d kill( );void wakeUp( );/唤醒struct process_typeint pid;int priority;/优先次序int size;int state;/状态char info10;struct process_type internalMemory20;int amount=0,hangUp=0,pid,flag=0;/数目,挂起 void main( )int n;int a;n=1;clrscr( );while(n=1)coutn*;coutn* 进程演示系统 *;coutn*;coutn 1.创建新的进程 2.查看运行进程 ;coutn 3.换出某个进
5、程 4.杀死运行进程 ;coutn 5.唤醒某个进程 6.退出系统 ;coutn*endl; couta;switch(a)case 1:create( );break;case 2:run( );break;case 3:exchange();/换出break;case 4:kill();break;case 5:wakeUp();break;case 6:exit(0);default:n=0;void create() /创建进程int i=0;if (amount=20)cout 内存已满,请先结束或换出进程;elsefor (i=0;i20;i+)if (internalMemory
6、i.state=0)break;cout请输入新进程的pid: internalMemory i .pid;cout请输入新进程的优先级: internalMemoryamount.priority;cout请输入新进程的大小: internalMemoryamount.size;cout请输入新进程的内容: internalMemoryamount.info;internalMemoryi.state=1;amount+;void clrscr()/清除内存空间for (int i=0;i19;i+)internalMemoryi.pid=0;internalMemoryi.priority
7、=0;internalMemoryi.size=0;internalMemoryi.state=0;amount=0;void run()for (int i=0;i20;i+)if (internalMemoryi.state=1)cout当前内存中的进程:nendl;cout当前运行的进程: ;coutinternalMemoryi.pidendl;cout当前运行进程的优先级: ;coutinternalMemoryi.priorityendl;cout当前运行进程占用的空间大小: ;coutinternalMemoryi.size;void exchange( )/唤出优先级最小的进程
8、if (!amount)cout当前没有运行进程n;return;coutpid;for (int i=0;i20;i+)if (pid=internalMemoryi.pid)if (internalMemoryi.state=1)internalMemoryi.state=2;hangUp+;coutn已经成功换出进程n;else if (internalMemoryi.state=0)coutn要换出的进程不存在;elsecoutn要换出的进程已被挂起n;flag=1;break;if (flag=0)coutn要换出的进程不存在;void kill( )if (!amount)cout
9、当前没有运行进程n;return;coutpid;for (int i=0;i20;i+)if (pid=internalMemoryi.pid)if (internalMemoryi.state=1)internalMemoryi.state=0;amount-;cout此进程被杀死pid;else if (internalMemoryi.state=0)coutn要杀死的进程不存在n;elsecoutn要杀死的进程已被挂起n;flag=1;break;if (!flag)coutn要杀死的进程不存在n;void wakeUp()if (!amount)cout当前没有运行进程endl;return;if (!hangUp)cout当前没有挂起进程;return;coutpid;for (int i=0;i20;i+)if (pid=internalMemoryi.pid)flag=0;if (internalMemoryi.state=2)internalMemoryi.state=1;hangUp-;cout已经成功唤醒进程n;else if (internalMemoryi.state=0)coutn要换醒的进程不存在n;elsecoutn要唤醒的进程已被挂起n;break;if (flag)coutn要唤醒的进程已被挂起nendl;8.实现的结果 专心-专注-专业
限制150内