欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    操作系统课程设计报告.docx

    • 资源ID:6740979       资源大小:477.17KB        全文页数:69页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统课程设计报告.docx

    1、操作系统课程设计报告操作系统课程设计报告时间:2014-12-292015-1-9地点:信息技术实验中心软件专业2012级1班13号酷比泉2015-1-9一 课程设计的目的和意义3二 进程调度算法模拟41 设计目的42 设计要求43 使用动态优先权的进程调度算法的模拟程序4 3.1 程序设计思路4 3.2进程控制块等主要数据结构设计5 3.3 程序代码实现5 3.4 程序运行分析10三 动态分区内存分配算法模拟111 设计目的112 设计要求113循环首次适应算法模拟的程序12 3.1程序设计思路12 3.2 空闲分区链等主要数据结构设计12 3.3 程序代码实现13 3.4 程序运行分析16

    2、四 请求调页存储管理算法模拟181 设计目的182 设计要求183 LRU模拟算法的程序实现18 3.1程序设计思路18 3.2 页表等主要数据结构设计19 3.3 程序代码实现20 3.4 程序运行分析25五 简单文件系统的实现271 设计目的272 设计要求273 算法的实现27 3.1程序设计思路27 3.2文件存储空间管理以及磁盘空闲空间管理等主要数据结构的设计28 3.3 程序代码实现28 3.4 程序运行分析40六 总结42一 课程设计的目的和意义目的:1、根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容。2、通过调试典型列题或习题积累调试程序的经验3、通过完成辅导教材

    3、中的编程题,逐渐培养学生的编程能力,用计算机解决实际问题的能力。4、通过最终的课程设计锻炼学生独立思考及实践与动手能力意义:1、有助于加深我们对操作系统这门课程的理解,我们课堂上学的都是基础理论知识,对于如何用程序语言来描述所学知识还是有一定难度,通过课程设计,我们可以真正理解其内涵。2、有利于我们逻辑思维的锻炼,程序设计能直接有效的训练学生的创新思维、培养分析问题、解决问题、预测目标的能力。即使是一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,依然需要学生有条不紊的构思。3、有利于培养严谨认真的学习态度,在程序设计过程里,当我们输入程序代码的时候,如果不够认真或仔细,那么

    4、可能就导致语法错误,从而无法得出运行结果。那么,这个我们反复调试,反复修改的过程,其实也是对我们认真严谨治学的一个锻炼。4、通过几个课题把所学的理论知识融入实践,有利于基础知识的理解,即可以巩固所学的理论知识,同时还可以在实践中认识不足。5、有利于与其他学科的整合,在操作系统程序设计中,我们可以解决其他学科有关问题,也可利用其他课程的有关知识来解决操作系统中比较抽象很难理解的只是。在操作系统课中整合其他学科的知识,发挥信息技术的优势。6、有利于治学态度的培养,程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。这种现象会随

    5、着学习的深入而慢慢改观。二 进程调度算法模拟1、设计目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。2、设计内容 (1)用C语言来实现对N个进程采用动态优先算法的进程调度; (2)每个用来标识进程的进程控制块 PCB用结构来描述,包括以下字段:进程标识符id 进程优先数priority,并规定优先数越大的进程,其优先权越高; 进程已占用的CPU时间cputime ; 进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0; 进程的阻塞时间startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态; 进程被阻塞的时间bloc

    6、ktime,表示已阻塞的进程再等待blocktime个时间片后,将转换成就绪态 进程状态state; 队列指针next,用来将PCB排成队列 (3)优先数改变的原则: 进程在就绪队列中呆一个时间片,优先数增加1 进程每运行一个时间片,优先数减3。 (4)假设在调度前,系统中有5个进程,它们的初始状态如下: ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 ALLTIME 3 3 6 3 4 STARTBLOCK 2 -1 -1 -1 -1 BLOCKTIME 3 0 0 0 0 STATE READY READY READY READY

    7、READY (5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下: RUNNING PROG: i READY_QUEUE:-id1-id2 BLOCK_QUEUE:-id3-id4 = ID 0 1 2 3 4 PRIORITY P0 P1 P2 P3 P4 CPUTIME C0 C1 C2 C3 C4 ALLTIME A0 A1 A2 A3 A4 STARTBLOCK T0 T1 T2 T3 T4 BLOCKTIME B0 B1 B2 B3 B4 STATE S0 S1 S2 S3 S43 、使用动态优先权的进程调度算法的模拟程序3.1 程序设

    8、计思路通过VC+程序模拟动态优先权程序调度算法,主要思路和方法就是,通过结构体模拟计算机的控制模组,构造一个PCB结构体即进程控制块结构体,用来记录当前进程的的相关状态信息,包括进程标识符、处理机状态、进程调度信息、进程控制信息。并通过C+语言模拟计算机的相关调度算法,对构建的PCB进程进行模拟调度和运行,从而实现用计算机对进程的调度过程进行过程仿真。3.2进程控制块等主要数据结构设计数据结构:1. 包含PCB信息的结构体2. 包含进程信息的顺序表结构算法: 优先权=(等待时间+要求服务时间)/要求服务时间 Rp=(等待时间+要求服务时间)/要求服务时间=相应时间/要求服务时间系统将所有就绪队

    9、列按优先级高低排成一个队列,每次调度时,将CPU分配给优先级最高的进程,并令其执行一个时间片,而后中断,寻找并运行下一个优先级最高的进程。而所有进程的优先权在随进程的推进或随其等待时间的增加而增加,而被调度之后的程序则降低一定的优先级,从而使所有进程都有运行的机会,从而保证系统能在给定的时间内响应所有用户的请求。3.3 程序代码实现:#include /头文件#define N 5/静态变量/声明各个需要调用的函数void init();void print();int getRunning();void sort();int run(int time);enum STATEReady,Run

    10、,Block,RunOut;/枚举进程的状态:就绪、执行、阻塞、完成/建立PROCESS结构体struct PROCESS int ID;/标志数 int Priority;/优先数 int Cputime;/已占CPU时间 int Alltime;/还需占CPU时间 int Startblock;/开始阻塞时间 int Blocktime;/已被阻塞时间 enum STATE State;/进程状态 ProcessN; int READYN;/定义就绪数组 int BLOCKN;/定义阻塞数组 int RUNOUTN2;/完成数组 int main()/调用主函数 int Time=0;/定

    11、义time变量 init();/输入函数 printf(Time:%dn,Time);/输出time值 sort();/整理函数 print();/输出函数 while(1)/所需时间循环 Time+; getchar(); printf(Time:%dn,Time); if(run(Time)/返回值 break;/跳出 /sort(); /print(Time); return 0; void init()/调用init函数 int i;/为PRIORITY,ALLTIME,STARTBLOCK,BLOCKTIME各个变量赋初始值process(PRIORITY,ALLTIME,START

    12、BLOCK,BLOCKTIME):N,N); for(i=0;i=0)/ 如果正在执行 printf(tRUNNING PROG: %dn,getRunning();/显示正在执行的进程 printf(tREADY_QUEUE:);/显示正要等待执行的队列 for(i=0;i=0)/如果就绪 printf(-%d,ProcessREADYi.ID); /显示输出正在执行的进程id else/否则 break;/跳出继续执行 printf(ntBLOCK_QUEUE:);/输出阻塞队列 for(i=0;i=0)/如果阻塞 printf(-%d,ProcessBLOCKi.ID);/输出阻塞进程i

    13、d else/否则 break;/跳出继续执行 printf(n=n); printf(IDt); /输出进程id for(i=0;iN;+i) printf(t%d,Processi.ID); /显示输出进程id printf(nPRIORITY);/输出优先数 for(i=0;iN;+i) printf(t%d,Processi.Priority); /显示输出优先数 printf(nCPUTIMEt);/输出已占CPU时间for(i=0;iN;+i)printf(t%d,Processi.Cputime);/ 显示输出已占CPU时间printf(nALLTIMEt);/输出还需占CPU时

    14、间for(i=0;iN;+i)printf(t%d,Processi.Alltime);/显示输出还需占CPU时间printf(nSTARTBLOCK);/输出开始阻塞时间for(i=0;iN;+i)printf(t%d,Processi.Startblock);/显示输出开始阻塞时间printf(nBLOCKTIME);/输出已被阻塞时间for(i=0;iN;+i)printf(t%d,Processi.Blocktime);/ 显示输出已被阻塞时间printf(nSTATEt);/输出进程状态for(i=0;iN;+i)/根据进程执行阻塞就绪进行显示输出进程状态switch(Process

    15、i.State)/选择进程状态case 0:printf(tReady);break;/若第一种情况输出Ready跳出case 1:printf(tRun);/若第二种情况输出Runif(Processi.Alltime=0)/若还需占用时间等价为0Processi.State=RunOut;/则将赋值为RunOutelse Processi.State=Ready;/否则赋值为Readybreak;case 2:printf(tBlock);break;/输出阻塞case 3:printf(tRunOut);break;/输出执行完成printf(n);/换行printf(tRUNOUT L

    16、IST:);/输出RUNOUT LISTfor(i=0;i=0)printf(-%d(%d),ProcessRUNOUTi0.ID,RUNOUTi1);elseprintf(n);/换行break;/跳出printf(n);int getRunning()/执行函数int i;/定义变量ifor(i=0;iN;+i)if(Processi.State=Run)/若进程状态执行return i;/返回i值for(i=0;iN;+i)if(Processi.Startblock=0)/若状态阻塞return i;/返回i值return -1;/否则返回-1void sort()/sort函数int

    17、 i,j,k;/定义变量i、j、kfor(i=0;iN;+i)READYi=-1;/将-1赋值给ready数组BLOCKi=-1;/将-1赋值给block数组for(i=0;iN;+i)if(Processi.State=Ready|Processi.State=Run)/若进程状态就绪或执行if(Processi.Alltime=0)/还需占cpu时间等价为0continue;/继续向下执行for(j=0;jN;+j)if(READYj0)/若ready数值小于零READYj=i;/则将i值赋值给ready数组break;/跳出else if(Processi.Priorityj;-k)RE

    18、ADYk=READYk-1;/将ready数组前一个数值赋值给后一个READYj=i;/将i赋值给ready数值break;/跳出else if(Processi.State=Block)/若进程状态阻塞for(j=0;jN;+j)if(BLOCKj=ProcessBLOCKj.Blocktime)/若阻塞已被阻塞时间小于等于阻塞时间continue;/继续执行循环体elsefor(k=N-1;kj;-k)BLOCKk=BLOCKk-1;/将阻塞值向前移BLOCKj=i;/将i赋值给block数组break;/跳出int run(int time)/run函数int i,runNum;/定义变

    19、量I,runNumrunNum=READY0;/将ready的第一个值赋值给runNumif(runNum0&BLOCK0=0)/若runNum值大于等于0ProcessrunNum.Priority-=3;/赋值为3ProcessrunNum.Alltime-=1;/赋值为1ProcessrunNum.Cputime+=1;/赋值为1ProcessrunNum.State=Run;/进程状态为执行for(i=0;iN;+i)if(i!=runNum)/若i不等于runNumif(Processi.State=Ready)/若进程状态为就绪Processi.Priority+=1;/优先数自动

    20、加1else if(Processi.State=Block)/若进程状态为阻塞Processi.Startblock-=1;/开始阻塞时间为1if(Processi.Blocktime=0)/若阻塞时间等价于0Processi.State=Ready;/进程状态就绪if(ProcessrunNum.Alltime=0)/对应进程runNum值前提还需占cpu时间等价为0for(i=0;iN;+i)if(RUNOUTi0=0)/在runNum值前提下的阻塞状态大于等于0ProcessrunNum.Startblock-=1;/赋值为1if(ProcessrunNum.Startblock=0)

    21、/等价为0ProcessrunNum.State=Block;/阻塞状态/ProcessrunNum.Startblock-=1;/赋值为1else if(BLOCK0=0)/第一个阻塞数值大于等于0for(i=0;iN;+i)if(Processi.State=Block)/若阻塞状态Processi.Startblock=-1;/赋值为-1Processi.Blocktime-=1;/赋值为1if(Processi.Blocktime=0)/若开始阻塞时间等价为0Processi.State=Ready;/就绪状态sort();print();return 0; 3.4 程序运行分析图1.1图1.2感觉难度比较大,有很多生疏的指令。但在老师和同学的帮助下都解决了。总体上还是对进程概念和进程调度过程有了一个更深的理解。在这次试验中也暴露出自己不少的缺点,希望以后试验中可以改正!三 动态分区内存分配算法模拟1 、设计目的了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及实现过程的理解。2、设计内容(1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链来管理;在进行内存分配时,系统优先使用空闲区低端的空间。(2


    注意事项

    本文(操作系统课程设计报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开