资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
课 程 号:0540251适用专业:软件工程制 定 人:邓泓、熊焕亮、李光泉教 研 室:软件开发教研室江西农业大学软件学院2010 年7 月操作系统原理实验指导书名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 23 页 -前言操作系统是计算机的核心和灵魂。操作系统软件的设计对整个计算机的功能和性能起着至关重要的作用,所以此门课也是必不可少的,是面向计算机科学与技术、网络工程、软件工程等大多数计算机专业本科生和研究生开设的一门计算机专业课程。操作系统是计算机系统的核心,操作系统课程是计算机科学与技术专业的重要必修课。本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。操作系统实验是操作系统课程的重要组成部分,属于学科基础实验范畴。作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。基本要求是:理解进程的概念,理解死锁,掌握银行家算法;掌握请求页式存储管理的实现原理及页面置换算法。学生应具有高级语言编程能力、具有数据结构等基础知识。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 23 页 -实验要求为了顺利完成操作系统课程实验,学生应做到:(1)实验前,认真学习教材以及实验指导书的相关内容,提前做好实验准备。(2)实验结束一周后提交实验报告。实验报告内容应包括:实验目的、实验内容、设计思路和流程框图,源程序(含注释)清单、测试结果以及实验总结。(3)遵守机房纪律,服从辅导教师指挥,爱护实验设备。实验的验收将分为两个部分。第一部分是上机操作,随机抽查程序运行和即时提问;第二部分是提交书面的实验报告。此外杜绝抄袭现象,一经发现雷同,双方成绩均以 0分计算。实验内容安排实验第一次上机(2 课时)第二次上机(2 课时)实验一熟悉进程调度相关内容;熟悉最高优先数的调度算法的示例编写“多级反馈队列轮转法”模拟程序实验二熟悉银行家算法实验三熟悉页面置换相关内容;熟悉 LRU 算法的示例编写 FIFO 模拟程序名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 23 页 -目录实验一进程调度实验.5实验二银行家算法模拟.12实验三请求页式存储管理中常用页面置换算法模拟.18 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 23 页 -Y 已达到未达到N 开始初始化 PCB,输入进程信息各进程按优先数从高到低排列就绪队列空?结束就绪队列首进程投入运行时间片到,运行进程已占用CPU 时间 1 运行进程已占用CPU 时间达到所需的运行时间?进程完成撤销该进程使运行进程的优先数减1 把运行进程插入到就绪队列实验一进程调度实验【开发语言及实现平台或实验环境】C+/C#Microsoft Visual Studio 6.0/Microsoft Visual Studio.NET 2003【实验目的】(1)加深对进程的概念及进程调度算法的理解;(2)在了解和掌握进程调度算法的基础上,编制进程调度算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。【实验要求】(1)了解进程调度;(2)理解利用进程调度算法进行调度的原理;(3)会使用某种编程语言。【实验原理】一、例题:设计一个有N 个进程其行的进程调度算法。进程调度算法:采用最高优先数的调度算法(即把处理机分配给优先数最高的进程)。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用 CPU 时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为的指定(也可以由随机数产生)。进程的到达时间为进程的输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得CPU 后都只能运行一个时间片。用已名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 23 页 -占用 CPU 时间加 1 表示。如果运行一个时间片后,进程的已占用CPU 时间已达到所需要的运行时间,则撤销该进程,如果运行一个时间片后,进程的已占用CPU 时间还未达到所需要的运行时间,也就是进程还需要继续运行,此时应该将进程的优先数减1(即降低一级),然后把它插入就绪队列等待 CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要的进程都完成为止。分析:使用固定队列与静动态优先级结合每个优先级为00 xFF,并且以小的数字为高优先级,大的数字为低优先级,每次皆使用循环得到最高优先级的进程并执行,然后将其动态优先级设置为最低,并将其他进程动态优先级提高,以使得每个进程都有机会运行。进程的优先级与运行时间由随机数产生.二、代码试例#include#include#include /*常量和状态定义*/#define PRO_NUM 0 x05#define MAX_TIME 0 xFF/*状态宏*/#define WAIT 0 x01#define RUN 0 x02#define FINISH 0 x03#define ID_ERROR 0 x10#define MIN_PRIOR 0 xFF#define MAX_PRIOR 0 x00 typedef unsigned int Uint32;/*进程 PCB*/struct PCB_Info Uint32 s_id;Uint32 s_static_prior;Uint32 s_dynamic_prior;Uint32 s_start_time;Uint32 s_need_time;Uint32 s_used_time;Uint32 s_state;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 23 页 -;/*进程队列*/PCB_Info g_queue5;Uint32 g_time;/*模拟进程执行函数*/void Simulator();/*初始化 5 个进程函数*/void Init_Process();/*初始化进程队列函数*/void Init_Queue();/*创建进程函数*/Uint32 Create_Process(Uint32 pri,Uint32 needtime);/*系统运行函数*/void Run_Process();/*得到最高优先级进程ID 函数*/Uint32 Get_PriProcess();/*进程时间片执行函数*/void Work_Process(Uint32 id);/*改变进程状态和优先级函数*/void Change_Process(Uint32 id);/*打印进程状态函数*/void Print_State();/*结束系统函数*/void End_Process();/*入口函数*/int main(int argc,char*argv)Simulator();return 0;void Simulator()Init_Process();Run_Process();End_Process();void Init_Process()int i;Uint32 id;srand(unsigned)time(NULL);Init_Queue();for(i=0;iPRO_NUM;+i)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 23 页 -/*在这里修改随机数的范围,建议优先级取值为0 到 4 之间,进程工作总时间为1到 10 之间*/id=Create_Process(rand()%4,1+rand()%10);if(id!=ID_ERROR)printf(*n);printf(创建进程成功n);printf(进程 ID 号为:%dn,id);printf(进程的静态优先权为:%dn,g_queueid.s_static_prior);printf(进程的动态优先权为:%dn,g_queueid.s_dynamic_prior);printf(进程的到达时间为:%dn,g_queueid.s_start_time);printf(进程需要时间为:%dn,g_queueid.s_need_time);printf(进程已用CPU 时间为:%dn,g_queueid.s_used_time);printf(进程的状态为:%dn,g_queueid.s_state);printf(n);else printf(创建进程失败n);void Init_Queue()int i;for(i=0;iPRO_NUM;+i)g_queuei.s_id=i;g_queuei.s_dynamic_prior=MIN_PRIOR;g_queuei.s_need_time=0;g_queuei.s_start_time=0;g_queuei.s_static_prior=MIN_PRIOR;g_queuei.s_used_time=0;g_queuei.s_state=FINISH;Uint32 Create_Process(Uint32 pri,Uint32 needtime)int i=0;Uint32 id=ID_ERROR;for(i=0;iPRO_NUM;+i)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 23 页 -if(g_queuei.s_state=FINISH)id=g_queuei.s_id;g_queuei.s_dynamic_prior=MIN_PRIOR;g_queuei.s_need_time=needtime;g_queuei.s_start_time=g_time;g_queuei.s_state=WAIT;g_queuei.s_static_prior=pri;g_queuei.s_used_time=0 x0;break;return id;void Run_Process()Uint32 id;while(id=Get_PriProcess()!=ID_ERROR)Work_Process(id);Change_Process(id);void Print_State()int i;printf(时间 进程 IDt状态已用时间需要时间开始时间静优先级动优先级 n);for(i=0;iPRO_NUM;+i)printf(%dt%dt%dt%dt%dt%dt%dt%dn,g_time,g_queuei.s_id,g_queuei.s_state,g_queuei.s_used_time,g_queuei.s_need_time,g_queuei.s_start_time,g_queuei.s_static_prior,g_queuei.s_dynamic_prior);Uint32 Get_PriProcess()Uint32 id=ID_ERROR;int i,prev_id=ID_ERROR;Uint32 prior=MIN_PRIOR*2,temp_prior;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 23 页 -for(i=0;iPRO_NUM;+i)if(g_queuei.s_state!=FINISH)temp_prior=g_queuei.s_dynamic_prior+g_queuei.s_static_prior;if(temp_prior=prior)id=i;prior=temp_prior;return id;void Work_Process(Uint32 id)+g_time;g_queueid.s_state=RUN;+g_queueid.s_used_time;Print_State();void Change_Proce
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号