




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题目:计算机操作系统模拟院系:信息学院专业:计算机科学与技术 班级:2013级1班辽宁大学实验题目一:模拟进程创建、终止、阻塞、唤醒原语一、题目类型:必做题目。二、实验目的:通过设计并调试创建、终止、阻塞、唤醒原语功能,有助于对操作系统中进程控制功能的理解,掌握操作系统模块的设计方法和工作原理。三、实验环境:1、硬件:pc机及其兼容机。2、软件:Windows XP,Turbo C或C+、VC+等。四、实验内容:1、设计创建、终止、阻塞、唤醒原语功能函数。2、设计主函数,采用菜单结构(参见后面给出的流程图)。3、设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供随时查看
2、各队列中进程的变化情况。五、实验要求:进程名:用P1,P2标识。优先级:为实验题目二做准备。运行时间:为实验题目二做准备。状态为:就绪、运行、阻塞,三种基本状态。指针:指向下一个PCB。1、进程PCB中应包含以下内容:进程名优先级运行时间状态指针2、系统总体结构:开始系统主菜单1创建2阻塞3唤醒4终止5显示0退出请输入您需要的功能(05):输入选择=?543210退出创建阻塞唤醒终止显示结束另加实验二:模拟进程调度功能/*PCB的组织方式:线性方式*/#include stdio.h#include string.h#include windows.htypedef structchar p_
3、name10;/进程名char p_pro;/优先级 1-3个级别 1.低 2.中 3.高char p_status;/运行状态 0.阻塞 1.运行 2.就绪int p_runtime;/运行时间int p_wait;/等待时间struct PCB *next;/指针,指向下一个PCBPCB;void Run(PCB *head)/任何时候保证程序里面至少有一个进程在运行PCB *p=head-next;/直接将P指向第一个结点while(p!=NULL)/遍历一遍链表,将所有就绪队列等待时间加1,防止前面结点因为唤醒又进入运行状态if(p-p_status=2)p-p_wait+;/将等待时
4、间加1p=p-next;p=head-next;/将P重置在第一个结点while(p-p_status!=1 & p!=NULL)if(p-p_status=2)/防止线性链表前面的结点因为从阻塞唤醒后又进入运行状态p-p_status=1;p-p_wait=2;if(p-p_status=1)/对上一个if进行处理return;p=p-next;return;void Insert(PCB *head,PCB *temp)/插入链表函数PCB *p;p=head;/将头结点保存起来while(p-next!=NULL)p=p-next;p-next=temp;temp-next=NULL;
5、int Check(PCB *head,PCB *temp)PCB *p=head;while(p-next)p=p-next;if(strcmp(p-p_name,temp-p_name)=0)return 0;return 1;void Create(PCB *head)/创建进程函数int chk=0;PCB *temp;/申请临时存储空间,方便接受数据temp=(PCB *)malloc(sizeof(PCB);system(cls);printf(t-进程创建-n);printf(n请输入进程名:);scanf(%s,temp-p_name);getchar();/*检查进程名称,如
6、果相同则返回主界面*/chk=Check(head,temp);if(chk=0)printf(进程队列已有该名称进程,创建失败,即将返回主界面.n);system(pause);return;printf(n请输入进程优先级(1.低 2.中 3.高):);scanf(%c,&temp-p_pro);getchar();printf(n请输入进程运行时间:);scanf(%d,&temp-p_runtime);getchar();temp-p_status=2;temp-p_wait=2;/*printf(n请输入该进程状态:);scanf(%c,&temp-p_status);getchar
7、();*/Insert(head,temp);/调用插入链表函数system(pause);Run(head);void Show(PCB *head)/显示队列进程函数int ready=1,block=1,run=1;PCB *p=head,*q;system(cls);if(p-next=NULL)printf(目前系统中没有进程.请返回主界面创建进程!n);system(pause);return;/*列出就绪队列列表*/q=p-next;/指针指到第一个结点printf(n-就绪队列-n);while(q)if(q-p_status=2)printf(%d)进程名:%s,ready+
8、,q-p_name);printf( 进程优先级:%c,q-p_pro);printf( 进程运行时间:%d,q-p_runtime);printf( 进程等待时间:%dn,q-p_wait);q=q-next;printf(n);/*列出运行队列列表*/q=p-next;/将指针重置到第一个结点printf(n-运行队列-n);while(q)if(q-p_status=1)printf(%d)进程名:%s,run+,q-p_name);printf( 进程优先级:%c,q-p_pro);printf( 进程运行时间:%dn,q-p_runtime);/printf( 进程已运行时间:);q
9、=q-next;printf(n);/*列出阻塞队列列表*/q=p-next;printf(n-阻塞队列-n);while(q)if(q-p_status=0)printf(%d)进程名:%s,block+,q-p_name);printf( 进程优先级:%c,q-p_pro);printf( 进程运行时间:%d,q-p_runtime);printf( 进程等待时间:%dn,q-p_wait);q=q-next;printf(n);printf(进程显示完毕.);system(pause);void Block(PCB *head)/阻塞进程函数char name10;PCB *p=head
10、;/保护头结点system(cls);printf(t-阻塞进程-n);printf(n输入你要放入阻塞队列的进程名称:);scanf(%s,name);getchar();p=p-next;while(p)if(strcmp(p-p_name,name)=0)break;p=p-next;if(!p)printf(n队列中无该进程.n);system(pause);if(p-p_status=1)printf(n该进程正在运行.n);printf(n将该进程放入阻塞队列nn);system(pause);p-p_status=0;printf(n该进程已经被放入阻塞队列n);system(p
11、ause);elseif(p-p_status=0)printf(n该进程已在阻塞队列中.n);system(pause);if(p-p_status=2)printf(n该进程正在就绪队列中.不可放入阻塞队列n);system(pause);Run(head);void Delete(PCB *head,PCB *temp)/*head为链表头结点,temp为将要删除的结点*/PCB *p=head,*q=temp-next;while(p-next!=temp)p=p-next;p-next=q;free(temp);void Stop(PCB *head)/终止进程函数char name
12、10;PCB *p=head;system(cls);printf(t-终止进程-n);printf(n输入你要终止的进程名称:);scanf(%s,name);getchar();p=p-next;while(p)if(strcmp(p-p_name,name)=0)break;p=p-next;if(!p)printf(进程队列中无该进程.n);system(pause);Delete(head,p);/调用删除结点函数printf(n进程终止成功n);system(pause);Run(head);void Wakeup(PCB *head)/唤醒进程函数char name10;PCB
13、*p=head;/保护头结点system(cls);printf(t-唤醒进程-n);printf(n输入你要唤醒的进程名称:);scanf(%s,name);getchar();p=p-next;while(p)if(strcmp(p-p_name,name)=0)break;p=p-next;if(!p)printf(阻塞队列中无该进程名称.n);system(pause);return;if(p-p_status=0)printf(该进程正在阻塞队列中.n);printf(n将该进程放回就绪队列中n);system(pause);p-p_status=2;p-p_wait=2;print
14、f(n该进程已经被放入就绪队列中n);system(pause);elseif(p-p_status=1)printf(n该进程正在运行.不可唤醒n);system(pause);if(p-p_status=2)printf(n该进程正在就绪队列中.不可唤醒n);system(pause);void prior_Sche(PCB *head)PCB *p=head-next,*temp=head-next;/保护头结点p,temp为将要删除的结点system(cls);if(p=NULL)printf(目前系统中没有进程.请返回主界面创建进程!n);system(pause);return;w
15、hile(p)if(temp-p_pro p_pro)temp=p;/将此时优先级最大的结点地址给临时空间保存p=p-next;printf(nn);printf(经过调度,此时程序中运行的进程是:n);printf(n 进程名:%s,temp-p_name);printf( 进程优先级:%c,temp-p_pro);printf( 进程运行时间:%dn,temp-p_runtime);printf(n该进程PCB显示完毕!n);system(pause);Delete(head,temp);Run(head);void time_Sche(PCB *head)int ready=1;PCB
16、*p=head,*q,*temp=NULL;/保护头结点p,temp为时间片用完将要删除时,保护的临时结点system(cls);if(p-next=NULL)printf(目前系统中没有进程.请返回主界面创建进程!n);system(pause);return;/*列出就绪队列列表*/q=p-next;/指针指到第一个结点printf(n-就绪队列-n);while(q)if(q-p_status=2)printf(%d)进程名:%s,ready+,q-p_name);printf( 进程优先级:%c,q-p_pro);printf( 进程运行时间:%dn,q-p_runtime-);/pr
17、intf( 进程已运行时间:);if(q-p_runtime=0)temp=q;q=q-next;if(temp!=NULL)Delete(head,temp);printf(n);system(pause);void Scheduling(PCB *head)/调度程序while(1)int choose;system(cls);printf(1.优先级调度n);printf(2.时间片调度n);printf(0.返回主菜单n);printf(n请输入选项:);scanf(%d,&choose);getchar();switch(choose)case 1:prior_Sche(head);
18、break;case 2:time_Sche(head);break;case 0: system(cls); return;break;default:printf(请输入0-2的数字n);system(pause);system(cls);break;void Menu()printf(t-模拟系统进程创建、终止、阻塞、唤醒-);printf(n);printf(1.进程创建n);printf(2.阻塞进程n);printf(3.唤醒进程n);printf(4.终止进程n);printf(5.显示进程n);printf(6.调度进程n);printf(0.退出n);printf(nn);printf(t-完美分割线-n);printf(功能介绍:n);printf(阻塞:运行-阻塞;处于运行之外状态,给出提示信息;若进程不存在也给出其他信息n);printf(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 在全镇第二批保持共产党员先进性教育活动第一阶段转段动员大会上的讲话
- 网络监管平台加强机关效能建设的调查
- 云南省玉溪市2023-2024学年高二下学期期末教学质量检测语文试卷(含答案)
- 2025建筑工程施工合同范本
- 江苏开放大学2025年春财务报表分析第二次模拟练习题
- 河南省项城市2024~2025学年 高三下册第一次考试数学试卷附解析
- 贵州省六校联考2024~2025学年 高三下册3月月考数学试卷附解析
- 福建省龙岩市2024~2025学年 高二下册第一次月考(2月)数学试卷附解析
- 2025年中考语文(长沙用)课件:主题5 最是激荡‘长沙红’演讲比赛
- 石家庄赵县城市管理综合行政执法局招聘笔试真题2024
- 回迁楼房买卖合同协议书
- 营业执照转让合同范本
- 劳务外包劳务合同范本
- Unit 5 Here and Now Section B 1a-1d 课件 2024-2025学年人教版七年级英语下册
- 文旅产业项目商业计划书
- 2025年公共财政与预算考试试卷及答案
- 计算机WPS基础知识试题及答案汇编
- 2025年医保知识培训试题:医保患者权益保障与医疗保险报销时限试卷
- 2025年人工智能基础知识知识考核试卷及答案
- 2025河南大河网数字科技有限公司招聘74人522截止笔试参考题库附带答案详解
- 江苏省南京玄武区十三中学集团科利华2025届七下生物期末综合测试试题含解析
评论
0/150
提交评论