




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信息科学与技术学院实验报告课程名称: 操作系统实验 实验项目: 进程调度 实验地点: 博西207 指导教师: 侯永莉 日期: 2017.11.24 实验类型: 验证性实验 专业: 服务外包 班级: 外二 姓名: 石顺义_ 学号: 一、实验目的及要求1. 理解进程调度的概念和基本调度算法;2. 利用C语言实现掌握进程算法FIFO,优先数调度算法,时间片轮转调度算法。二、实验仪器、设备或软件1. 知识准备:学过进程管理、处理机调度等章节内容.2. 硬件环境:个人计算机3. 软件平台:Windows操作系统,语言开发环境VC+6.0.三、实验内容及原理1. 实验原理1) FIFO算法思想:处理机分配
2、给最先进入就绪队列的进程,一个进程一旦分得处理机,便执行下去,直到该进程完成或阻塞时,才释放处理机。2) 优先数算法思想:优先数(priority number)是一个与进程关联的固定区间的整数,优先级确定可由系统内部定义或由外部指定。优先选择就绪队列中最高优先权的进程投入运行。 非抢占式优先级法:当前占用CPU的进程一直运行下去,直到完成或因等待某事件而主动让出CPU时,系统才让另一个优先级高的进程占用CPU。 抢占式优先级法:立刻停止当前进程,强行将CPU分配给优先级高的进程。3) 时间片轮转算法思想:把CPU时间划分成若干小单位-时间片,按顺序赋给就绪队列中的每一个进程,进程轮流占有CP
3、U,当时间片用完时,进程被抢占并加入就绪队列尾;即使未执行完,系统也剥夺该进程的CPU,将该进程排在就绪队列末尾,同时系统选择另一个进程运行。2. 实验内容:这个实验主要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。考虑如何组织进程,首先就要设定进程控制块的内容。进程控制块PCB记录各个进程执行时的情况。不同的操作系统,进程控制块记录的信息内容不一样。操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。这里的实验只使用了必不可少的信息。一般操作系统中,无论进行控制块中信息量多少,信息都可以大致分为以下四类:标识信息、管理信息、现场信息、说明信息。编写代码实现下面三种算
4、法的任意一种FIFO,优先数调度算法,时间片轮转调度算法。四、实验步骤(或过程) 利用软件vc+6.0,将程序代码输入,执行后依次输入七个数字组成pcb,执行结果如下。 五、实验结论1、实验结果 2、程序分析 实验中,进程控制块队列采用单向不循环静态链表。该程序标识符采用编号方式,为每个进程依次分配一个不相同的正整数,使用进程控制块模拟进程,仅包括进程状态,用大写的全局变量AX、BX、CX、DX模拟通用寄存器、大写的全局变量PC模拟程序计数器、大写的全局变量PSW模拟程序状态字寄存器。确定进程控制块内容后,由于实验模拟的是进程调度,没有对等待队列的操作,所以实验中只有一个指向正在运行进程的进程
5、控制块指针和一个就绪进程控制块队列指。六、实验程序设计代码如下:#include#include#includeusing namespace std;enum process_statusREADY , RUN , FINISH; /进程的三种状态/定义进程数据结构typedef struct pcb char process_tag20 ; /存储进程标识符 struct pcb *next ; /连接下一个进程的指针 int priority_num ; /优先调度算法中为优先级 , 轮转调度算法中为轮转时间片 int take_cpu_time ; /占用CPU时间片数 int pro
6、cess_time ; /进程所需时间片数 process_status status ; /进程当前的状态 PCB ;/定义进程控制块的链结构typedef struct PCB *run ; /当前运行的进程指针 PCB *ready ; /当前准备队列的头指针 PCB *tail ; /准备队列的队尾指针 PCB *finish ; /完成队列的指针 PCBC ;void init_pcbc(PCBC *p) p-run = NULL ; p-ready = NULL ; p-tail = NULL ; p-finish = NULL ;/输入进程,并加入就绪队列void input_p
7、rocess(PCBC *pcbc) PCB *pcb ; pcb = (PCB*)malloc(sizeof(PCB) ; printf(请输入进程标识符:) ; scanf(%s , &pcb-process_tag) ; printf(输入格式为: (优先级,占用CPU时间片数,进程所需时间片数) : ) ; scanf(%d,%d,%d , &pcb-priority_num , &pcb-take_cpu_time , &pcb-process_time) ; pcb-status = READY ; /初始化就绪状态 /当就绪队列为空时 if(pcbc-ready = NULL &
8、 pcbc-tail = NULL) pcbc-ready = pcbc-tail = pcb ; pcb-next = NULL ; else /将新进入的队列加入队尾 pcb-next = pcbc-tail-next ; pcbc-tail-next = pcb ; pcbc-tail = pcb ; void swapx(PCB * p1 , PCB *p2) int i , priority_num , take_cpu_time , process_time ; char temp ; /进行标识符的交换 for(i = 0 ; i process_tagi; p1-process
9、_tagi = p2-process_tagi ; p2-process_tagi = temp ; /优先值的交换 priority_num = p1-priority_num ; p1-priority_num = p2-priority_num ; p2-priority_num = priority_num ; /占用CPU时间片的交换 take_cpu_time = p1-take_cpu_time ; p1-take_cpu_time = p2-take_cpu_time ; p2-take_cpu_time = take_cpu_time ; /进程所需时间片数的交换 proce
10、ss_time = p1-process_time ; p1-process_time = p2-process_time ; p2-process_time = process_time ;/将就绪队列按优先级别大小进行排序,按冒泡排序算法void sort_pcbc(PCBC *pcbc , int pcb_num) PCB *p , *p1 ; p = pcbc-ready ; for(p = pcbc-ready ; p != NULL ; p = p-next) for(p1 = p-next ; p1 != NULL ; p1 = p1-next) if(p-priority_nu
11、m priority_num) swapx(p , p1) ; /只是进行指针内部数据的交换,不改变指针指向 /* *打印当前进程控制块中的情况 */ void print_log(PCBC *pcbc) PCB *ready , *finish ; ready = pcbc-ready ; finish = pcbc-finish ; printf(- n) ; printf(Run: n) ; if(pcbc-run != NULL) printf(%s %04d %04d %04d n , pcbc-run-process_tag ,pcbc-run-priority_num , pcb
12、c-run-take_cpu_time , pcbc-run-process_time) ; else printf(Run is empty! n) ; printf(Ready:n) ; while(ready != NULL) printf(%s %04d %04d %04d n , ready-process_tag ,ready-priority_num , ready-take_cpu_time , ready-process_time) ; ready = ready-next ; printf(Finish:n) ; while(finish != NULL) printf(%
13、s %04d %04d %04d n , finish-process_tag ,finish-priority_num , finish-take_cpu_time , finish-process_time) ; finish = finish-next ; /* *运行进程控制块 */ void run_pcbc_priority(PCBC *xpcbc) PCBC *pcbc = xpcbc ; PCB *temp , *pre , *tail ; /进行那个CPU的循环调用 while(pcbc-ready != NULL) pcbc-run = pcbc-ready ; /将就绪队
14、列队首加入运行队列 pcbc-ready = pcbc-ready-next ; /改变队首元素 print_log(pcbc) ; pcbc-run-priority_num -= 3 ; pcbc-run-process_time -= 1 ; if(pcbc-run-process_time = 0) if(pcbc-finish = NULL) pcbc-finish = pcbc-run ; pcbc-finish-next = NULL ; tail = pcbc-finish ; else tail-next = pcbc-run ; tail = tail-next ; tai
15、l-next = NULL ; else if(pcbc-ready != NULL) temp = pcbc-ready ; while(temp != NULL) if(pcbc-run-priority_num temp-priority_num) break ; pre = temp ; temp = temp-next ; if(temp = pcbc-ready) pcbc-run-next = pcbc-ready ; pcbc-ready = pcbc-run ; else pcbc-run-next = pre-next ; pre-next = pcbc-run ; else pcbc-ready = pcbc-run ; pcbc-run = NULL ; print_log(pcbc) ; int main() PCBC *pcbc ; /创建进程控制块链 ; int pcb_num ; /记录处理进程数目 pcbc = (PCBC*)malloc(sizeof(PCBC) ; printf(请输入要处理的进程数目: )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东阳江小升初数学试卷
- 海口中学七升八数学试卷
- 广州天河中考数学试卷
- 医院药房管理课件
- 健康管理师送课件
- 2025年中国互联网+电火锅市场竞争格局分析及投资方向研究报告
- 2025年中国云母电容器行业市场调查研究及发展战略规划报告
- 2025年中国临时租用收费系统行业市场发展前景及发展趋势与投资战略研究报告
- 单位工程开工报告模板
- 2025年中国封装测试行业市场全景评估及发展战略规划报告
- 护理事业十五五发展规划(2026-2030)
- 林下中药材种植项目可行性研究报告
- 小学语文人教五年级下册(统编)第六单元-15、自相矛盾学历案
- 建筑施工项目成本费用分析手册
- 电磁干扰及防护课件
- 中国教育学会会员申请表
- 黄大年式教师团队申报
- 新冀人版小学科学三年级下册全册教案(2022年春修订)
- 工作场所空气中有害物质监测的采样规范
- 国家开放大学电大《可编程控制器应用》机考2套真题题库及答案10
- 畜牧场经营管理.ppt
评论
0/150
提交评论