进程管理器的模拟实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,则显示'要唤出的进程已被挂起'