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

    操作系统 磁盘调度.docx

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

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

    操作系统 磁盘调度.docx

    1、操作系统 磁盘调度成绩 课程设计报告 题 目 进程调度 课 程 名 称 操作系统课程设计 院 部 名 称 信息技术学院 专 业 10计算机科学与技术 班 级 10计算机科学与技术单 学 生 姓 名 龚 校 丹 学 号 1005202013 课程设计地点 1318 课程设计学时 20 指 导 教 师 李 莉 金陵科技学院教务处制 目录一、课程设计的目的和要求 311课程设计的目的 312课程设计的要求 3二、系统需求分析 3三、概要设计 331系统功能流程图 332主函数与各子函数之间的关系图 4四、详细设计 541数据结构 542 各功能模块分析 5421 sort()函数功能的分析与设计 5

    2、422 check()函数功能的分析与设计 6423 disp()函数功能分析与设计 7五、调试与运行 851运行过程描述 852输入进程信息 853显示运行结果 954遇到问题 10六、结论与体会 10七、参考文献 10附件 11一、课程设计的目的和要求11课程设计的目的进程调度是处理机管理的核心内容。本设计要求用C语言编写和调试一个简单的进程调度程序。通过设计本可以加深理解有关进程控制块、进程队列的概念,并体会和了解最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法的具体实施办法。12课程设计的要求(1)进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给

    3、优先数最高的进程)和先来先服务算法。 (2)每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 (3)进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 (4)每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 (5)就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。(6)每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,

    4、以便进行检查。 (7)重复以上过程,直到所要进程都完成为止。二、系统需求分析在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程的个数大于处理器数时,就必须依照某种策略决定哪些进程优先占用处理器。本课设模拟在单处理器情况下的处理器调度,加深了解处理器调度的工作。进程是在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的,虽然它由程序产生。程序只是一个静态的指令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。进程是程序执行时的一个实例,从用户的观点来看,进程的目的是担当分配系统资源(CPU 时

    5、间,存储器等)的实体。进程调度算法用于确定就绪队列中的哪一个进程即将获得CPU。该优先级调度算法为:每一个进程确定一个优先数,进程就绪队列按照优先数排序。根据优先级的顺序模拟执行进程,时间片减一,优先级减一,在进行第二次排序运行。三、概要设计31系统功能流程图下图是根据实验要求以及进程调度程序的功能,画出的程序设计流程图。把3个进程按给定的优先数从大到小连成队列。用一单元指出队首进程。处理器调度总是先对首进程运行。采用动态改变优先数的办法,进程每运行一次,则:优先数-1 要求运行时间-1进程运行完一次后,若要求运行时间不等于0,则要求将它加入队列(按优先数大小插入,且置队首标志);若要求运行时

    6、间等于0,则它的状态修改为“结束”,且退出队列。进程调度系统流程图32主函数与各子函数之间的关系图运用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程),设计一个有3个进程共行的进程调度程序。每个进程有一个进程控制块( PCB)表示;每个进程的状态可以是两种状态之一;就绪进程获得 CPU后都只能运行一个时间片;每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查;重复以上过程,直到所要进程都完成为止。下图为函数调用图: 各子函数功能介绍:1)sort()函数: 进程按优先级从大到小排序。读取PCB进程控制块信息,判断它是否为优先级最大者,如果是,则插入

    7、队首,如果不是最大,则进行优先级比较, 插入适当位置。结束本次函数调用。2)input()函数功能:建立进程控制块。然后调用sort函数。要求输入以下信息:1.需要输入模拟运行进程数。2.各进程的信息,进程名,进程优先级,进程运行时间。3)disp()函数功能:用于显示当前进程。因为进程有执行和就绪状态,所以各个函数显示信息不一样,所以用if语句判断。4)check()函数功能:查看当前进程以及就绪队列状态,调用disp()函数显示。5)destroy()函数功能:显示撤消进程的进程名字。6)running()函数功能:进程运行时间到,置就绪状态。中间有个判断语句,如果需要的时间和运行的时间相

    8、等,则调用destroy函数显示撤销进程。否则将当前进程的优先级减一,并调用sort函数排序。四、详细设计 41数据结构 进程名Pcb指针要求运行时间优先数状态假定系统有3个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的格式图。 进程名:作为进程的标识,假设五个进程的进程名分别为A,B,C。PCB指针:按优先数的大小把3个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“NULL”。要求运行时间:假设进程需要运行的单位时间数。优先数:赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态:可假设有2种状态,“就绪”状态“执行”状态 。3个进程的初始

    9、状态都为“就绪”状态,用“R”表示,“执行”状态用“W”表示。42 各功能模块分析421 sort()函数功能的分析与设计1)功能分析本程序主要是sort()函数的流程图,sort()函数主要是一个建立对进程进行优先级排列函数,通过对当前读取的进程优先级与之前的进程的比较,从而判断出下一个该执行的进程号以及进程队列。2)功能模块图根据对该函数的功能的分析,该功能模块图如下图所示:422 check()函数功能的分析与设计1)功能分析Check ()函数主要是查看并显示当前进程以及就绪队列状态。具体如下:先显示当前的进程,调用disp()函数,然后判断指针是否为空,为空则结束该函数调用,不为空则

    10、显示就绪队列,调用disp()函数实现。2)功能模块图根据对该函数的功能的分析,该功能模块图如下图所示:423 disp()函数功能分析与设计1)功能分析:该函数主要是用来显示当前正在运行的进程和就绪状态的进程,当进程块正在运行,disp()函数通过被check()函数调用来显示当前运行进程的相关信息,要是进程不在运行,即在就绪状态也可调用disp()函数显示进程信息。2)功能模块图:根据对该函数的功能的分析,该功能模块图如下图所示:五、调试与运行51运行过程描述1)输入你要模拟运行的进程数,初始化进程PCB。2)输入PCB的信息,包括进程名,优先级,需要运行时间。3)将PCB表中的各项按从前

    11、到后的顺序加入至就绪队列中。4)主摸拟过程: while(就绪队列不为空|runProcess不为空) 延时 If(runProcess不为空) 输出当前活动进程的各属性值(如进程名,优先值,需要运行时间) 将当前活动进程的优先值加1,剩余运行时间减1. If(当前进程的剩余运行时间为0) 当前进程状态置1,并加至结束队列中. 更新PCB表中的内容. else if(就绪队列不为空)/为空时就剩下一个进程,无需再加入队列 当前进程状况置为准备状态 根据动态优先数将当前的进程插入到就绪队列的适当的位置更新PCB表. If(runProcess不为空&runProcess-remainSecs=0

    12、)/处理只剩下最后一个进程且剩余运行时间0的情况 置 runProcess为NULL. if(就绪队列不为空) 从就绪队列中弹出一个进程给runProcess 置runProcess的状态为运行态. 更新PCB表 52输入进程信息此阶段主要是初始化进程,初始提示如下图:我输入了3,代表我将模拟三个进程调度,然后是输入各个进程的信息。每一次进程都要输入它的名字,优先级以及运行时间,进程名作为进程的标识,3个进程的进程名分别为A,B,C,优先级分别是1,2,3,它们的运行时间是1,2,3。指针按优先数的大小把3个进程连成队列,用指针值初下一个进程的进程控制块的首地址,最后一个进程的指针为“0”。当

    13、前运行结果如下 53显示运行结果此图是通过disp函数来显示进程,首先显示运行的次数,接着显示工作正在运行的进程的相关信息,然后显示就绪状态的进程信息,每次一个进程运行完成屏幕会显示“进程?运行结束”。当全部运行完成时,屏幕显示“并发进程模拟调度结束”。 54遇到问题在调试过程中让我们输入进程相关信息时,我把进程的运行时间写的比优先级大,优先级每次减1,最后会成为负数,经过几次实践证明,我发现该进程虽然可以运行,但是不够具有代表性,所以我将所有的运行时间同进程的优先级,最后优先级减下来的结果为0,满足当前系统要求。在刚开始创建进程时,我用了fock()函数来真实创建进程,一直累加,导致进程创建

    14、进入死循环,系统崩溃了。六、结论与体会本次实验主要是对进程利用C语言编写程序代码,然后进行上机调试、修改、进行连接,测试,VC不支持mallac函数,不能运行该程序,所以,我下载了个dev_c+,来运行该程序。而且,在编程时一定要细心,不要忘了定义使用的值,一些累加的要设置初值,否则信息出错。通过本次实验对进程的调试,我对课本上有关进程的知识进一步加深了理解,而且也知道了进程该如何运行,并体会和了解最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)的具体实施办法。七、参考文献1、计算机操作系统 汤子赢等编著,西安电子科技大学出版社2、操作系统实验教程 张丽芬等编著,清华大学出版社 2

    15、006年附件 进程调度系统源程序清单#include stdio.h#include #include #define getpch(type) (type*)malloc(sizeof(type)struct pcb /* 定义进程控制块PCB */char name10;char state;int super;int ntime;int rtime;struct pcb* link;*ready=NULL,*p;typedef struct pcb PCB;int system(const char *string); sort() /* 建立对进程进行优先级排列函数*/PCB *fir

    16、st, *second;int insert=0;if(ready=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/p-link=ready;ready=p;else /* 进程比较优先级,插入适当的位置中*/first=ready;second=first-link;while(second!=NULL)if(p-super)(second-super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/p-link=second;first-link=p;second=NULL;insert=1;Else /* 插入进程优先数最低,则

    17、插入到队尾*/first=first-link;second=second-link;if(insert=0) first-link=p;input() /* 建立进程控制块函数*/int i,num;printf(请输入并发的进程数目(09);scanf(t %d,&num);printf(n 请输入进程相关信息n);for(i=1;iname);printf(n 进程优先级:);scanf(%d,&p-super);printf(n 进程运行时间:);scanf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(); /

    18、* 调用sort函数*/int space()int l=0; PCB* pr=ready;while(pr!=NULL)l+;pr=pr-link;return(l);disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/if(pr-state=R)printf(n 进程名 进程状态 进程优先级 进程需要时间 进程已运行时间 n);printf( %st ,pr-name);printf(%ct ,pr-state);printf(%dt ,pr-super-1);printf(%dt ,pr-ntime);printf(%dt n,pr-rtime+1);elseprin

    19、tf(n 进程名 进程状态 进程优先级 进程需要时间 进程已运行时间 n);printf( %st ,pr-name);printf(%ct ,pr-state);printf(%dt ,pr-super);printf(%dt ,pr-ntime);printf(%dt ,pr-rtime);check() /* 建立进程查看函数 */PCB* pr;printf(n * 当前正在运行的进程为:%s,p-name); /*显示当前运行进程*/disp(p);pr=ready;printf(n *就绪队列状态为 :n); /*显示就绪队列状态*/while(pr!=NULL)disp(pr);

    20、pr=pr-link;destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/printf(n 进程%s运行结束. ,p-name);free(p);running() /* 建立进程就绪函数(运行时间到,置就绪状态*/(p-rtime)+;if(p-rtime=p-ntime)destroy(); /* 调用destroy函数*/else(p-super)-;p-state=w;sort(); /*调用sort函数*/main() /*主函数*/int len,h=0;char ch;input();len=space();while(len!=0)&(ready!=NULL)ch=getchar();h+;printf(n 运行次数为:%d n,h);p=ready;ready=p-link;p-link=NULL;p-state=R;check();running();printf(n 请按任意键进入下次运行过程);ch=getchar();printf(n并发进程优先级调度模拟结束n);ch=getchar();


    注意事项

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

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




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

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

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


    收起
    展开