实验二-实验报告(进程管理)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二模拟实现进程管理
组长:和林软件1402
一、实验目的
1.理解进程的概念,明确进程和程序的区别。
2.理解并发执行的实质。
3.掌握进程的创建,睡眠,撤销等进程控制方法。
二、实验容
用C语言,JAVA语言,C++语言编写程序,模拟实现创建新的进程;查看运行进程,换出某个进程;杀死运行进程。
三、实验准备
1.进程的定义
进程是程序在一个数据集合上的运行过程,是系统资源分
配和调度的一个独立单位。一个程序在不同的数据集合上
运行,乃至一个程序在同样数据集合上的多次运行都是不
同的进程。
2.进程的状态
通常情况下,一个进程必须具有就绪,执行和阻塞三种基本
情况。
1)就绪状态
当进程已分配到除处理器外的所有必要资源后,只要再
获得处理器就可以立即执行,这时进程的状态就为就绪
状态。在一个系统里,可以有多个进程同时处于就绪状
态,通常把这些就绪进程排成一个或多个队列,称为就
绪队列。
2)执行状态
处于就绪状态的进程一旦获得处理器,就可以运行,进
程状态也就处于执行状态,在单处理器系统中,只能有
一个进程处于执行状态,在多处理器系统中,则可能有
多个进程处于执行状态
3)阻塞状态
正在执行的进程因为发生某些事件而暂停运行,这种受
阻暂停的状态称为阻塞状态,也可称为等待状态。通常
将处于阻塞状态的进程拍成一个队列,称为阻塞队列,
在有些系统中,也会按阻塞原因的不同将阻塞状态的进
程排成多个队列。
3.进程状态之间的转换
4.进程控制块
1)进程控制块的作用
进程控制块是进程实体的重要组成部分,主要包含下述四个方面的信息:
a)进程标示信息
b)说明信息
c)现场信息
d)管理信息
5.进程控制块的组织方式
1)方式
2)索引方式
6.进程控制原语
1)创建原语
2)撤销原语
3)阻塞原语
4)唤醒原语
7.程序代码
#include
#include
using namespace std;
void clrscr();
void create();
void run( );
void exchange( );//唤出
void kill( );
void wakeUp( );//唤醒
struct process_type{
int pid;
int priority;//优先次序
int size;
int state;//状态
char info[10];
};
struct process_type internalMemory[20];
int amount=0,hangUp=0,pid,flag=0;//数目,挂起
void main( ){
int n;
int a;
n=1;
clrscr( );
while(n==1){
cout<<"\n********************************************";
cout<<"\n* 进程演示系统 *";
cout<<"\n********************************************";
cout<<"\n 1.创建新的进程 2.查看运行进程 ";
cout<<"\n 3.换出某个进程 4.杀死运行进程 ";
cout<<"\n 5.唤醒某个进程¨ 6.退出系统 ";
cout<<"\n*********************************************"< cout<<"请选择 "; cin>>a; 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<<" 存已满,请先结束或换出进程"; } else{ for (i=0;i<20;i++) { if (internalMemory[i].state==0) { break; } } cout<<"请输入新进程的pid: "< cin>>internalMemory[ i ].pid; cout<<"请输入新进程的优先级: "< cin>>internalMemory[amount].priority; cout<<"请输入新进程的大小: "< cin>>internalMemory[amount].size; cout<<"请输入新进程的容: "< cin>>internalMemory[amount].info; internalMemory[i].state=1; amount++; } } void clrscr()//清除存空间 { for (int i=0;i<19;i++) { internalMemory[i].pid=0; internalMemory[i].priority=0; internalMemory[i].size=0; internalMemory[i].state=0; } amount=0; } void run() { for (int i=0;i<20;i++) {