操作系统实验1进程调度

上传人:xian****hua 文档编号:137496458 上传时间:2022-08-18 格式:DOC 页数:13 大小:256KB
收藏 版权申诉 举报 下载
操作系统实验1进程调度_第1页
第1页 / 共13页
操作系统实验1进程调度_第2页
第2页 / 共13页
操作系统实验1进程调度_第3页
第3页 / 共13页
资源描述:

《操作系统实验1进程调度》由会员分享,可在线阅读,更多相关《操作系统实验1进程调度(13页珍藏版)》请在装配图网上搜索。

1、西华大学软件工程系上机实践报告课程名称: 操作系统原理年级:2011级上机实践成绩: 指导教师: 谭平姓名:杨玲上机实践名称:进程调度 学号上机实践日期上机实践编号:1组号:上机实践时间:4 学时一. 实验目的1、掌握进程的各种基本状态和状态之间的转换;2、掌握进程调度的过程;3、用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二. 实验内容与设计思想上机实践内容:编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。 静态优先数是在创建进程时确定的,并

2、在整个进程运行期间不再改变。 动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等。设计思想: (以下内容共参考,同学们可增加功能,相应的数据结构和流程图也要变哈!建议增加I/O时间)PCB的信息可以存放在结构或类中,如定义struct PCB /* 定义进程控制块PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; ;2、数据结构采用链式列队。

3、frontrearABCD开始结束图1 最高优先数进程调度模拟程序流程图如果要将进程的三种基本状态都考虑进去,就需要在PCB中添加I/O时间。建议学有余力的同学用图形化界面演示三种状态的变化过程。三. 使用环境windows XP ,VC+6.0四. 核心代码及调试过程#include stdio.h#include conio.h#include #define getpch(type) (type*)malloc(sizeof(type)#define NULL 0struct pcb /*定义进程控制块pcb */char name10;char state;int super;int

4、ntime;int rtime;struct pcb* link;*q=NULL,*p;typedef struct pcb PCB;void sort() /*建立对进程进行优先级排列函数*/PCB *first,*second;int i=0;if(q=NULL)|(p-super)(q-super) /*优先数最大者插入队首*/p-link=q;q=p;else /*进程比较优先级,插入适当的位置中*/first=q;second=first-link;while(second!=NULL)if(p-super)(second-super) /*若插入进程比当前进程优先数大,插入到当前进

5、程前面*/p-link=second;first-link=p;second=NULL;i=1;else /*插入进程优先数最低,则插入到队尾*/first=first-link;second=second-link;if(i=0) first-link=p;void input() /*建立进程控制块函数*/int i,num; printf(n 请输入进程数:);scanf(%d,&num);for(i=0;iname);printf(n 请输入进程优先数:);scanf(%d,&p-super);printf(n 请输入进程运行时间:);scanf(%d,&p-ntime);printf

6、(n);p-rtime=0;p-state=w;p-link=NULL;sort();int len()int l=0;PCB* pr=q;while(pr!=NULL)l+;pr=pr-link;return(l);void show(PCB* pr) /*建立进程显示函数,用于显示当前进程*/printf(n qname t state t super t ndtime truntime n);printf(|%st,pr-name);printf(|%ct,pr-state);printf(|%dt,pr-super);printf(|%dt,pr-ntime);printf(|%dt,

7、pr-rtime);printf(n);void check() /*建立进程查看函数*/PCB* pr;printf(n 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/show(p);pr=q;printf(n 当前就绪队列状态为:n); /*显示就绪队列状态*/while(pr!=NULL)show(pr);pr=pr-link;void destroy() /*建立进程撤销函数(进程运行结束,撤销进程)*/ printf(n 进程%s已完成.n,p-name); free(p); void running() /*建立进程就绪函数(进程运行时间到,置就绪状态)*/

8、 (p-rtime)+; if(p-rtime=p-ntime) destroy(); else (p-super)-; p-state=w; sort(); void main() int length,h=0; char ch; input(); length=len(); while(length!=0)&(q!=NULL) ch=getchar(); h+; printf(n The execute number:%d n,h); p=q; q=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一键继续.);

9、ch=getchar(); printf(nn 进程已完成.n); ch=getchar();五. 总结刚开始对进程调度的思想理解不够深刻,不知道如何实现对进程优先级的排序,以及进程控制块如何配置信息。在翻阅在大量书箱和同学的帮助下,解决了用动态优先级在方法实现进程调度模拟算法。在对C+语言的使用尤其是在编写代码方面很欠缺,在组织语言时出错不断。经过自己的多次修改之后,程序才得以运行。在做轮转法实现的过程中,参考动态优先级在方法,便很容易实现。在设计过程中,需要大量的相关资料,为了本次课程设计我在网上和图书馆查阅了大量资料,不断的发现问题、提出问题、解决问题。在编程和调试的过程中,经常会出现意想不到的问题,并非每个问题都可以从相关资料中找到解决方法,有些问题是无法预料到的,这就需要通过自己理性的分析得出问题的解决方案。我还希望我们可以有更多这样的学习机会,使我们的知识体系变的更加牢固。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!