您好,欢迎来到九壹网。
搜索
您的当前位置:首页实验二-实验报告(进程管理)

实验二-实验报告(进程管理)

来源:九壹网
 .

实验二 模拟实现进程管理

组长:李和林 软件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. 程序代码

#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*********************************************\"<>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) { } else{

for (i=0;i<20;i++) { }

cout<<\"请输入新进程的pid: \"<if (internalMemory[i].state==0) { }

break;

cout<<\" 内存已满,请先结束或换出进程\";

cin>>internalMemory[ i ].pid;

cout<<\"请输入新进程的优先级: \"<>internalMemory[amount].priority; cout<<\"请输入新进程的大小: \"<>internalMemory[amount].size; } }

cout<<\"请输入新进程的内容: \"<>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++) {

教育资料

.

} }

void exchange( ){//唤出优先级最小的进程 if (!amount)

{ }

cout<<\"\\n输入换出进程的ID值: \"; cin>>pid;

for (int i=0;i<20;i++)

{ }

if (flag==0) {

if (pid==internalMemory[i].pid) { }

if (internalMemory[i].state==1) { { } else{ } flag=1; break;

cout<<\"\\n要换出的进程已被挂起\\n\"; cout<<\"\\n要换出的进程不存在\"; internalMemory[i].state=2; hangUp++;

cout<<\"\\n已经成功换出进程\\n\"; }

cout<<\"当前没有运行进程\\n\"; return;

if (internalMemory[i].state==1) { }

cout<<\"当前内存中的进程:\\n\"<cout<cout<else if (internalMemory[i].state==0)

教育资料

.

} }

void kill( ){ if (!amount) {

cout<<\"当前没有运行进程\\n\"; return; }

cout<<\"请输入要杀死的进程: \"; cin>>pid;

for (int i=0;i<20;i++) {

if (pid==internalMemory[i].pid) }

if (!flag) { } }

void wakeUp(){ if (!amount) { }

cout<<\"当前没有运行进程\"<cout<<\"\\n要杀死的进程不存在\\n\"; }

{ { { { } flag=1; break;

cout<<\"\\n要杀死的进程已被挂起\\n\";

cout<<\"\\n要杀死的进程不存在\\n\";

}else

internalMemory[i].state=0;

amount--;

cout<<\"此进程被杀死\"<cout<<\"\\n要换出的进程不存在\";

}else if (internalMemory[i].state==0)

教育资料

.

if (!hangUp) { }

cout<<\"请输入pid: \"; cin>>pid;

for (int i=0;i<20;i++) {

if (pid==internalMemory[i].pid) { }

if (flag) { } }

cout<<\"\\n要唤醒的进程已被挂起\\n\"<flag=0;

if (internalMemory[i].state==2) { } }

else if (internalMemory[i].state==0) { } break;

cout<<\"\\n要换醒的进程不存在\\n\"; cout<<\"\\n要唤醒的进程已被挂起\\n\"; }else{

internalMemory[i].state=1; hangUp--;

cout<<\"已经成功唤醒进程\\n\";

cout<<\"当前没有挂起进程\";

return;

8.实现的结果

教育资料

.

教育资料

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务