Java模拟操作系统进程优先级调度_第1页
Java模拟操作系统进程优先级调度_第2页
Java模拟操作系统进程优先级调度_第3页
Java模拟操作系统进程优先级调度_第4页
Java模拟操作系统进程优先级调度_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

进程块 设计PCB及其数据结构 进程标识数 ID 进程优先数 PRIORITY 优先数越大 优先级越高 进程已占用时间片 CPUTIME 每得到一次调度 值加1 进程还需占用时间片 ALLTIME 每得到一次调度 该值减1 一旦运行完毕 ALLTIME为0 进程队列指针 NEXT 用来将 PCB排成队列 进程状态 STATE 一般为就绪 可以不用 设计进程就绪 队列及数据结构 设计进程调度算法 并画出程序流程图 设计输入数据和输出格式 结构格式 当前正运行的进程 0 当前就绪队列 2 1 3 4 编程上机 验证结果 public class PCB private int id private int priority private int cpuTime private int allTime private int state 状态为1的时候表示准备就绪 无参数的构造方法 通过geter seter器来对PCB的信息进行 获取的修改 public PCB 初始化PCB的基本信息的构造方法 param id param priority param cpuTime param allTime param state public PCB int id int priority int cpuTime int allTime int state super this id id this priority priority this cpuTime cpuTime this allTime allTime this state state public int getId return id public void setId int id this id id public int getPriority return priority public void setPriority int priority this priority priority 根据要求来修改PCB的优先级 public void modifyPriority if 0 this priority this priority 3 return public int getCpuTime return cpuTime public void setCpuTime int cpuTime this cpuTime cpuTime 根据要求修改CPU时间 public void modifyCpuTime this cpuTime 1 public int getAllTime return allTime public void setAllTime int allTime this allTime allTime 根据要求修改PCB占用的时间片 public void modifyAllTime if 0 this allTime this allTime 1 return public int getState return state public void setState int state this state state 根据要求修改PCB的状态 public void midifyState 打印显示当前PCB的全部信息 public void showStatus System out println PCB id id priority priority cpuTime cpuTime allTime allTime state state 修改PCB的全部信息 public void modify if 0 this allTime this allTime 1 this cpuTime 1 if 0 this priority this priority 3 采用链表存储 创建PCB的数据结构 author 摆渡恋人 public class LineListNode private LineListNode node private T element 创建空链表 public LineListNode this node null this element null 创建一个存储特定元素的线性表 public LineListNode T element this node null this element element 返回当前结点点的下一个节点 public LineListNode getNextNode return this node 设置当前结点的下一个结点 public void setNextNode LineListNode node this node node 返回当前结点存储的数据元素 public T getElement return this element 设置当前结点存储的数据元素 public void setElement T element this element element package xiao zhang backup import xiao zhang osa LineListNode 创建一个存储PCB用来线性链表 通过线性链表的相关操作来实 现相应的功能 author XiaoZhang public class LineListPcb 表示PCB线性表的长度 private int size 表示PCB线性表的头元素结点 private LineListNode headPcb 表示PCB线性表尾元素结点 private LineListNode lastPcb 创建一个空的PCB线性存储链表 public LineListPcb this size 0 this headPcb null this lastPcb this headPcb 创建一个具有特定元素的PCB线性存储链表 public LineListPcb LineListPcb llp this size llp getSize this headPcb llp getHeadPcb this lastPcb llp getLastPcb 从PCB线性表中的头部移除数据元素 param element public void removeElement if 0 this size return 这一段主要是为了处理移除数据元素后只剩下一个数据元 素的时候的线性链表处理 if this size 1 this headPcb setNextNode this lastPcb this lastPcb this headPcb this lastPcb setNextNode null this headPcb null this size return LineListNode tempNode this headPcb this headPcb tempNode getNextNode tempNode null this size 向PCB线性表中的添加数据元素 param element public void addElement PCB element LineListNode newElement new LineListNode element if this headPcb null 头结点为空 表示链表中当前没有数据元素 说明头 结点和尾结点指向同一内存空间 this headPcb newElement 新添加一个数据元素则仍然指向同一内存空间 this lastPcb this headPcb else 链表不为空 在这里要保证最后一个结点与新加入的 结点连接在一起 this lastPcb setNextNode newElement this lastPcb newElement this size 从PCB线性表中的头部移除数据元素 并将其添加到PCB线性 表中的尾部 public void removeFromHeadAddToLast if this size 1 return LineListNode tempNode this headPcb this headPcb tempNode getNextNode this lastPcb setNextNode tempNode this lastPcb tempNode 从PCB线性表中中的尾部移除数据元素 并将其添加到PCB的 线性表中的头部 public void removeFromLastAddToHead if 0 this size return LineListNode tempNode this lastPcb 设置尾结点的以一个结点为空 LineListNode lastSecondNode this headPcb i 1表示指向PCB线性表的元素为线性表的第一个元素 i this size 1表示指向线性表的元素为线性表的末尾第 二个数据元素 for int i 1 i this size 1 i lastSecondNode lastSecondNode getNextNode lastSecondNode setNextNode null 设置PCB线性表尾结点的下一个结点为头结点的下一个结 点 头结点为为尾结点 tempNode setNextNode this headPcb getNextNode this headPcb tempNode 从PCB线性表中的头部移除数据元素 并根据线性表中的数据元素的优先级从高到低的顺序将头数 据元素放置在合适的位置 基本思想是 1 通过获得头数据元素 并且得到其优先级 2 获得链表的下一个数据元素tempNode 并得到其优先级 3 通过比较头数据元素的优先级priority和通过线性表获得的 数据元素的优先级tempPrority的比较 3 1如果大于等于则将头数据元素插入在当前 tempNode 的数据元素的后面 3 2如果小于则继续2 3步 public void insertPCBByPrority if this size 1 return LineListNode headNode this headPcb int currentPrority xiao zhang osa PCB headNode getElement getPriority LineListNode nextNode headNode getNextNode int nextPrority xiao zhang osa PCB nextNode getElement getPriority if currentPrority nextPrority return else this headPcb nextNode for int i 2 i this size i LineListNode nextNextNode nextNode getNextNode int nextNextPrority xiao zhang osa PCB nextNextNode getElement getPriority if currentPrority nextNextPrority nextNode setNextNode headNode headNode setNextNode nextNextNode return nextNode nextNextNode nextNode setNextNode nextNextNode nextPrority nextNextPrority this lastPcb setNextNode headNode headNode setNextNode null this lastPcb headNode 判断PCB线性表是否为空 public boolean isEmpty return this size 0 return the headPcb public LineListNode getHeadPcb return this headPcb return the lastPcb public LineListNode getLastPcb return this lastPcb return PCB public PCB getPCB return this headPcb getElement param headPcb the headPcb to set public void setHeadPcb LineListNode headPcb this headPcb headPcb return the size public int getSize return this size param size the size to set public void setSize int size this size size 主方法 public class PCBProcess 实现进程进如就绪队列的时后进行由优先级由高到低的顺序 进入 param p param llp private static void comeLineList PCB p LineListPcb llp for int i 0 i p length i int minIndex i for int j i 1 j p length j if p minIndex getPriority p j getPriority 在这里也可以直接对PCB线性链表添加数据元素 minIndex j break if minIndex i PCB temp p minIndex p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论