操作系统课程设计-后面.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文档。上传文档
查看更多
操作系统课程设计-后面

第一章:设计内容及要求 一、课程设计的目的 本课程是课程的重要组成部分,通过本课程的学习,使学生能更进一步地掌握和算法。培养学生的实际分析解决问题的能力。?基本要求: 创新要求在基本要求达到后,进行创新设计。设计方法和基本原理Kernel中设置一个定时器,负责处理时间片。 ⑦用伪指令编写系统信息程序和用户测试程序。 第二章:设计说明 一、问题描述:Kernel程序首先运行。Kernel启动后,创建commander进程。Kernel程序根据需要创建reporter进程和Application进程。Kernel负责维护6个数据结构,包括时间 (Time), 处理器状态(CPUstate),进程表 (PCBTable), 就绪队列(ReadyState),等待队列(BlockedState),运行进程(RunningState)。 系统采用优先调度算法优先最的进程进程优先数减1(即降低一级)Kernel中设置一个定时器,负责处理时间片。 ⑦用伪指令编写系统信息程序和用户测试程序。 三、设计分析: 代码解释: 1. 创建简单虚拟内核 其实,若只考虑功能实现,我们完全可以不定义虚拟CPU。所以,为了简单又简单,我们不定义虚拟CPU,而直接通过进程PCB进行计算。但这不便于同学们理解上下文切换。有兴趣的同学可以考虑定义一个虚拟CPU(参见“虚拟内核(含虚拟CPU)设计提示.doc”)。 编写编译程序(1)定义指令 定义PCB结构 typedef struct { A; //寄存器A int PC; //程序计数器PC char *addr //程序加载起始地址 int length; //程序大小 }PCB//假设系统可同时运行10个进程PCB pcbs[MAX_PID]; //定义PCB结构数组,用于存放所有的PCB 3. 定义系统变量 定义一个全局变量作为系统变量: int cur_pid; //当前_进程号 初始化: cur_pid=0; 4. 加载用户程序PCB *pcb=pcbs+cur_pid; 分配加载内存:pcb-addr=(char *)malloc(字节码文件长度); 字节码文件读入到pcb-addr; 登记加载信息:pcb-A=0; pcb-PC=0; pcb-length=字节码文件长度; 5. 编写执行指令的函数 PCB *pcb=pcbs+cur_pid; 在pcb-addr+pcb-PC所指的单元取指令,执行该指令。 pcb-PC+=刚才执行的指令长度; 比如,假设PC所指的字节码为020F00。可以这么些执行代码: short op_data; //注意,操作数为16位整数,所以要定义为short char cmd; cmd= *(pcb-addr+pcb-PC); //取指令 if(cmd==0x02) //执行指令 { op_data= *((short*)(pcb-addr+pcb-PC+1)); //取操作数 pcb-A+= op_data; //操作数加到寄存器A } pcb-PC+=3;//修改程序计数器,使之指向下一条指令 5. 扩展PCB结构 添加新的结构成员 typedef struct { int A; //寄存器A int PC; //程序计数器PC char *addr //程序加载起始地址 int length; //程序大小 char state; //进程状态:02--就绪,0--运行, 0--等待 int slice; //时间片大小。为了简单,假设为“指令条数/时间片” int B; //寄存器B int F; //寄存器F addr; //程序加载起始地址}PCB; { if(flag==argc-2) // continue;//结束本次循环,进入下次循环 PCB *pcb=pcbs+cur_pid; //获取当前进程PCB PCB *pcbx=pcbs+p; //获取偏移量为q的进程的PCB if(p==cur_pid) pcb-priority-=2; else pcbx-priority+=2; } for(int j=0;jargc-1;j++)//-------------优先级测试 { PCB *pcb=pcbs+j; if(pcb-state==0) { coutendl; cout进程j+1的优先级为:pcb-priorityendl; } else

文档评论(0)

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

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

1亿VIP精品文档

相关文档