进程管理器的模拟实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

衡阳师范学院《操作系统》课程设计

题目:进程管理器的模拟实现系别:计算机科学系

专业:物联网工程

班级:1206班

学生姓名:郑晓娟

学号:12450218

指导老师:王玉奇

完成日期:2014年12月28日

目录

一、需求分析 (3)

二、概要设计 (3)

三、详细设计 (4)

1.进程PCB结构体的定义 (4)

2.创建模块 (4)

3.查看模块 (5)

4.换出模块 (6)

5.杀死模块 (8)

四、程序调试 (10)

五、总结分析 (14)

一、需求分析

有时候我们需要去了解我们电脑的运行情况,掌握和管理它的进程,并对其异常情况给予操作和控制。进程管理器就像我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以查看到所有进程的运行情况,并对运行的进程加以管理和控制。在本课程设计中,进入模拟进程系统后,可以根据请求选择“创建进程”创建新的进程。还可以选择“查看进程“来查看当前正在运行的进程,以及该进程的相关的信息,其中包括进程的pid,进程优先级,进程大小和进程的内容,我们可以通过这些来了解计算机中每个进程的使用状况。选择“换出进程”,可以挂起某个正在运行的进程。选择“撤销进程”,可以停止某个正在运行的程序,并且释放其占用的资源。选择“退出进程”,可以退出进程模拟系统。

二、概要设计

程序流程:

三、详细设计

(1)进程PCB结构体的定义

struct jincheng_type{ //定义表示进程信息的结构体int pid; //进程ID

int youxian; //优先级

int daxiao; //大小

int zhuangtai; //进程的状态,这里用0表示没有建立或被杀死,1表示执行,2表示换出

int neirong; //内容

};

(2)创建模块

void create() //函数--创建一个新进程

{

if(shumu>=20) printf("\n内存已满,请先换出或杀死进程\n") //判断内存空间是否已满

else{

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

if(neicun[i].zhuangtai==0) break; //选出空着的内存单元给新进程使用

printf("\n请输入新进程pid\n"); //输入新进程ID存至选出的内存单元

scanf("%d",&(neicun[i].pid));

for(int j=0;j

if(neicun[i].pid==neicun[j].pid) //当输入的新进程与原有进程ID相同时,显示"该进程已存在"

{

printf("\n该进程已存在\n");

return;

}

printf("\n请输入新进程优先级\n"); //输入新进程的优先级、大小和内容

scanf("%d",&(neicun[i].youxian));

printf("\n请输入新进程大小\n");

scanf("%d",&(neicun[i].daxiao));

printf("\n请输入新进程内容\n");

scanf("%d",&(neicun[i].neirong));

neicun[i].zhuangtai=1; //将新进程的内存单元状态(zhuangtai)设成"1",以表示存在且未被换出

shumu++; //正在运行的进程数目加一

}

}

(3)查看模块

void run() //函数--查看正在运行的进程

{

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

{

if(neicun[i].zhuangtai==1) //将存在且未被挂起(即zhuangtai=1)的进程显示出来,若存在这样的程序,则将flag设成1 {

printf("\n pid=%d",neicun[i].pid);

printf("youxian=%d",neicun[i].youxian);

printf("daxiao=%d",neicun[i].daxiao);

printf("zhuangtai=%d",neicun[i].zhuangtai);

printf("neirong=%d",neicun[i].neirong);

flag=1;

}

}

if(!flag)

printf("\n当前没有运行进程\n"); //若当前没有运行进程(即flag=0),则显示"当前没有运行进程"

}

(4)换出模块

void huanchu() //函数--换出进程

{

if(!shumu) //判断是否无进程存在

{

printf("\n当前没有进程存在\n");

return;

}

printf("\n 输入换出进程ID值"); //输入需要换出的进程ID scanf("%d",&pid);

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

{

if(pid==neicun[i].pid)

{

if(neicun[i].zhuangtai==1) //若该ID代表的进程正在运行,则将其挂起,即将zhuangyai置成2,并将guaqi 加一

{

neicun[i].zhuangtai=2;

guaqi++;

printf("\n已经成功换出进程\n");

}

else if(neicun[i].zhuangtai==2)

printf("\n要唤出的进程已被挂起\n"); //若该ID代表的进程已被挂起,即zhuangtai==2,则显示'要唤出的进程已被挂起'

相关文档
最新文档