项目操作系统课程设计文档及代码.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 设计目的与内容 1.1 设计目的 通过课程设计, 加深对操作系统对程序执行的理解,掌握操作系统的多程序运行原理,能模拟操作系统设计相应的进程调度算法,掌握操作系统的基本原理及功能, 具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。 1.2 设计内容 1、设计进程控制块PCB表结构,分别适用于可强占的优先数调度算法和循环轮转调度算法。 2、建立进程就绪队列。对两种不同算法编制入链子程序。 3、编制两种进程调度算法:1)可强占的优先进程调度;2)循环时间片轮转调度 4、设计操作系统运行的指令。 2 设计说明 2.1 需求分析 设计虚拟内核实现进程的调度,实现多道程序的调度。设计调度算法计算各个进程的优先权限来确定进程执行的次序。进程调度程序选择一个就绪状态的进程,使之在处理器上运行。进程的调度采用最高优先数优先的调度算法和先来先服务调度算法相结合的算法,并且采用动态优先数策略,选择进程占用处理器后该进程仅能使用一个时间片,运行完后优先数减1。 2.2 设计思路 本程序用两种算法对多个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。 为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 在优先数算法中,优先数的值为31与运行时间的差值。进程每执行一次,优先数减1,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 设计程序指令, MOV n //把整数n赋给累加器A SAV m //把累加器A的值存入地址M ADD n //从累加器A的值减去整数n,结果送到累加器A。 SUB n //从累加器A的值减去整数n,结果送到累加器A。 MUL n //从累加器A的值乘以整数n,结果送到累加器A。 DIV n //从累加器A的值除以整数n,结果送到累加器A。 JEQ m //F为0跳转到m JLG m //F大于0跳转到m JLE m //F大于等于0跳转到m JMP m //无条件跳转到m OUT port //累加器的内容输出到端口port。port为0,指显示器 算法和流程图 定义一个PCB数据结构: struct PCB{ int A; //累加器A int PC; //程序计数器PC char *addr; //程序加载起始地址 int length; //程序大小 int runtime; int waittime; int state; int pname; int pri; //优先级数 struct PCB *next; }pcbs[MAX_PID]; /* 运行指针*/ 进程调度算法如下: while( !apd() ) { while(pcbs[cur_pid].state == 05 || pcbs[cur_pid].priority pri) cur_pid = (cur_pid+1) % max_pid; exeInstruction(cur_pid); //执行指令 PCB *pcb=pcbs+cur_pid; //获取当前进程PCB tick++; if(pcb-PC=pcb-length) //执行完毕 { delete [] pcb-addr; //回收内存 pcb-priority = 0; //优先级置零 pri = maxpri(); pcb-state = 05; //将已经完成了的pcb状态设置为 05 已完成 } if( pcb-last = pcb-slice ) { pcb-last = 0; cur_pid = (cur_pid+1) % max_pid; } 可强占的优先进程调度,开始建立一个就绪队列,首先检查是否还有进程没有完毕,如果没有时间片就加1,从就绪队列中查找一个优先级最高的进程,如果在设定的时间片内没有完成就将此进程放入就绪队列中的后面,并将优先级减1。并循环检查是否还有进程没有完成。可强占优先调度算法实现过程流程图,如图2.1: 图2.1可强占优先调度算法实现过程流程图 循环轮转算法实现过程,开始建

文档评论(0)

taotao0c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档