您好,欢迎访问三七文档
课程设计报告(2011--2012年度第1学期)名称:操作系统原理课程设计B院系:信息工程系班级:计算机10k1学号学生姓名:指导教师:设计周数:1成绩:日期:2012年12月11日《操作系统原理课程设计B》课程设计任务书一、目的与要求1.理解和掌握操作系统的基本概念、基本组成与工作原理;2.理解和掌握操作系统中主要功能模块的工作原理及其实现算法;3.掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力。二、主要内容采用某种程序设计语言,设计与开发一个仿真操作系统,要求具备进程调度、存储器管理、文件及设备管理等基本功能,具体内容包括:1.模拟单处理器系统的进程调度,加深对进程的概念及进程调度算法的理解;2.编写一个多线程程序,加深对现代操作系统中线程的理解;3.编写和调试一个银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法;4.用可变分区算法模拟主存的分配和回收,加深对存储器管理的理解,熟悉各种主存分配方法;5.模拟虚拟存储管理中缺页中断及页面置换算法,加深对虚拟存储器管理的理解,熟悉各种页面淘汰算法;模拟设备的分配与回收,加深对设备管理的理解;模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解;模拟磁盘调度的过程,加深对磁盘存储器管理的理解,熟悉各种磁盘调度算法。6.综合以上实验的结果,并进行集成与设计,开发出一个小型虚拟操作系统。对以上课程设计内容,将根据学生的专业与实际情况进行调整,某些题目为选作题目。三、进度计划序号设计(实验)内容完成时间备注1熟悉开发环境及程序设计语言1天2系统的分析、设计2天3调试与集成1天4验收,提交实验报告1天四、设计(实验)成果要求至少完成主要内容中的3项,统一使用课程设计报告书,文字清楚、工整。五、考核方式实验结果(60%)+实验报告(30%)+实验过程表现(10%)学生姓名:指导教师:年月日一、课程设计(综合实验)的目的与要求1.理解和掌握操作系统的基本概念、基本组成与工作原理;2.理解和掌握操作系统中主要功能模块的工作原理及其实现算法;3.掌握软件模块设计技能;熟悉并能较好地利用软件开发环境独立编程、调试和分析程序运行情况,逐渐形成创新思维和从事系统软件的研究和开发能力。二、设计正文实验1:单处理器系统的进程调度1.1实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。1.2实验要求1.设计一个按时间片轮转法实现处理器调度的程序,每个程序由一个PCB表示。2.程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。1.3实验原理和设计进程控制块PCB的格式为:进程名指针要求运行时间已运行时间状态指针——进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。要求运行时间——假设进程需要运行的单位时间数。已运行时间——假设进程已经运行的单位时间数,初始值为“0”。状态——有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用0表示。当一个进程运行结束后,它的状态为“结束”,用1表示。(1)运行处理器调度程序前,输入进程数并且为每个进程设置所需的服务时间;(2)把各个进程按顺序排成循环队列,用指针指出队列连接情况;(3)由于是模拟程序,在时间片轮转的前提下,每次使得相应进程:执行时间=已执行时间+1;(4)输出运行细节。1.4实验结果附加程序:#includeiostreamusingnamespacestd;typedefstructPCB{intid;//进程名字p1、p2、p3、p4、p5structPCB*next;//指针指向下一个位置intruntime;//运行时间intpriority;//优先级charstatus;//状态}*pcb;voidcreate(PCB*h){inta,b;//a运行时间、b进程优先级h-next=NULL;for(inti=0;i5;i++){cout-------Pi+1:endl;cinab;PCB*p=newPCB;PCB*q=h-next;p-id=i+1;p-runtime=a;p-priority=b;p-status='R';if((q==NULL)||(p-priorityq-priority)){p-next=h-next;h-next=p;continue;}while((p-priorityq-next-priority)&&(q-next!=NULL)){q=q-next;}p-next=q-next;q-next=p;}}voidsort(PCB*h){if(h-next-runtime==0){h-next-status='E';h-next=h-next-next;return;}PCB*p=h-next;h-next=p-next;PCB*q=h-next;if((q==NULL)||(p-priorityq-priority)){p-next=h-next;h-next=p;return;}while((q-next!=NULL)&&(p-priority=q-next-priority)){q=q-next;}p-next=q-next;q-next=p;}voidcall(PCB*h){cout调用Ph-next-idendl;h-next-runtime--;h-next-priority--;}voidshow(PCB*h){PCB*p=h-next;while(p!=NULL){coutpp-idp-runtimep-priorityp-statusendl;cout----------------------------------------------------------------------endl;p=p-next;}}voidmain(){cout**请输入各个进程的运行时间及其优先级**endl;PCB*h=newPCB;create(h);while(h-next!=NULL){call(h);sort(h);show(h);}}实验二银行家算法实验一、实验目的熟悉银行家算法,理解系统产生死锁的原因及避免死锁的方法,加深记意。二、实验要求用高级语言编写和调试一个描述银行家算法的程序。设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。三、实验原理利用银行家算法避免死锁1、银行家算法中的数据结构(1)可利用资源向量Available(2)最大需求规阵Max(3)分配矩阵Allocation(4)需求矩阵Need2、银行家算法(1)如果Requesti<或=Need,则转向步骤2;否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Request<或=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,P1必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:Available:=Available-Requesti;Allocation:=Allocationi+Request;Needi:=Needi-request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3、安全性算法系统所执行的安全性算法可描述如下:(1)设置两个向量①工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work:=Allocation;②Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]:=false;当有足够资源分配给进程时,令Finish[i]:=true。(2)从进程集合中找到一个能满足下述条件的进程:①Finish[i]:=false②Need/=Work如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work:=Work+Allocation;Finish[i]:=true;Gotostep2;(4)如果所有进程的Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。4、银行家算法之例假设有五个进程{P0,P1,P2,P3,P4}和三种类型的资源{A,B,C},每一种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图1所示。图1(1)T0时刻的安全性利用安全性算法对T0时刻的资源分配情况进行分析,可得下表所示的T0时刻的安全性分析,从中得知,T0时刻存在着一个安全序列{P1,P3,P4,P2,P0},故系统是安全的,如图2所示。图2(2)P1请求资源P1发出请求向量Request(1,0,2),系统按银行家算法进行检查:(1)Request1(1,0,2)≤Need(1,2,2)(2)Request1(1,0,2)≤Available(3,3,2)(3)系统先假定可为P1分配资源,并修改Aailable,Allocation1和Need1向量,由此形成的资源变化情况如图1中的圆括号所示。(4)我们再利用安全性检查此时系统是否安全。由所进行的安全性检查得知,可以找到一个安全序列{P1,P3,P4,P2,P0}。因此,系统是安全的,可以立即将P1所申请的资源分配给它。(3)P4请求资源P4发出请求向量Request(3,3,0),系统按银行家算法进行检查:(1)Request4(3,3,0)≤Need4(4,3,1)。(2)Request4(3,3,0)Available(2,3,0),让P4等待。(4)P0请求资源P0发出请求向量Request0(0,2,0),系统按银行家算法进行检查:(1)Request0(o,2,0)或=Need0(7,4,3));(5)进行安全性检查可用资源Available{2,1,0}已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。如果在银行家算法中,把P0发出的请求向量改为Request(0,1,0),系统是否能将资源分配给它,请读者考虑四、实验所需仪器、设备、材料PC机五、实验思路银行家算法的基本思想是分配资源之前,判断系统是否是安全的;若是,才分配。它是最具有代表性的避免死锁的算法。设进程cusneed提出请求REQUEST[i],则银行家算法按如下规则进行判断。(1)如果REQUEST[cusneed][i]=NEED[cusneed][i],则转(2);否则,出错。(2)如果REQUEST[cusneed][i]=AVAILABLE[cusneed][i],则转(3);否则,出错。(3)系统试探分配资源,,进(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状程等待安全性检查算法(1)设置两个工作向量Work=AVAILABLE;FINISH(2)从进程集合中找到一个满足下述条件的进程,FINISH==false;NEED=Work;如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,
本文标题:操作系统B
链接地址:https://www.777doc.com/doc-4185636 .html