Java模拟操作系统进程优先级调度

上传人:新** 文档编号:476524459 上传时间:2024-03-09 格式:DOC 页数:27 大小:104KB
返回 下载 相关 举报
Java模拟操作系统进程优先级调度_第1页
第1页 / 共27页
Java模拟操作系统进程优先级调度_第2页
第2页 / 共27页
Java模拟操作系统进程优先级调度_第3页
第3页 / 共27页
Java模拟操作系统进程优先级调度_第4页
第4页 / 共27页
Java模拟操作系统进程优先级调度_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《Java模拟操作系统进程优先级调度》由会员分享,可在线阅读,更多相关《Java模拟操作系统进程优先级调度(27页珍藏版)》请在金锄头文库上搜索。

1、/ 进程块* 设计PCB及其数据结构: 进程标识数:ID进程优先数:PRIORITY (优先数越大,优先级越高)* 进程已占用时间片: CPUTIME ,每得到一次调度,值加 1;* 进程还需占用时间片: ALLTIME ,每得到一次调度,该值减 1,一旦运行完毕,ALLTIME为0)进程队列指针:NEXT,用来将PCB 排成队列* 进程状态: STATE (一般为就绪,可以不用) 设计进程就绪 队列及数据结构; 设计进程调度算法, 并画出程序流程图; 设 计输入数据和输出格式;* 结构格式:当前正运行的进程: 0 当前就绪队列: 2, 1, 3, 4 编程上机,验证结果*/public cl

2、ass PCB privateintid;privateintpriority ;privateintcpuTime ;privateintallTime ;private int state ;/ 状态为 1的时候表示准备就绪/*无参数的构造方法,通过geter,seter器来对PCB的信息进行获取的修改*/public PCB() /*初始化PCB的基本信息的构造方法* paramid* parampriority* paramcpuTime* paramallTime* paramstate*/public PCB(int id, int priority, int cpuTime, i

3、nt allTime, intstate) 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 .pr

4、iority = 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(

5、) return allTime ;public void setAllTime( int allTime) this .allTime = allTime;/*根据要求修改PCB占用的时间片*/public void modifyAllTime() if (0 this .allTime ) this .allTime -= 1;returnpublic int getState() return state ;public void setState( int state) this .state = state;/*根据要求修改PCB的状态*/public void midifyStat

6、e() /*打印显示当前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 .prior

7、ity -= 3;/ 采用链表存储/*创建PCB的数据结构author 摆渡恋人public class LineListNode private LineListNode node ; private T element ;/* 创建空链表*/publicLineListNode() this.node = null ;this.element = null ;/* 创建一个存储特定元素的线性表*/publicLineListNode(T element) this.node = null ;this.element = element;/* 返回当前结点点的下一个节点public Line

8、ListNode 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.

9、osa.LineListNode;/*创建一个存储PCB用来线性链表,通过线性链表的相关操作来实现相应的功能* author XiaoZhang*/ public class LineListPcb /*表示PCB线性表的长度*/private int size;/*表示PCB线性表的头元素结点private LineListNode headPcb ;/创建一个具有特定元素的PCB线性存储链表 */public LineListPcb(LineListPcb llp) this .size = llp.getSize();this .headPcb = llp.getHeadPcb();th

10、is .lastPcb = llp.getLastPcb();表示PCB线性表尾元素结点*/private LineListNode lastPcb ;*创建一个空的PCB线性存储链表*/public LineListPcb() this .size = 0;this .headPcb = null ;this .lastPcb = this .headPcb ;/*从PCB线性表中的头部移除数据元素* param element*/public void removeElement() if (0 = this .size ) return ;/* 这一段主要是为了处理移除数据元素后只剩下一

11、个数据元 素的时候的线性链表处理*/if (this .size = 1) / this.headPcb.setNextNode(this.lastPcb);/ this.lastPcb = this.headPcb;/ this.lastPcb.setNextNode(null);this .headPcb = null ;this .size -;returnLineListNode tempNode = this .headPcbthis .headPcb = tempNode.getNextNode();tempNode = null ;this .size -;/ param ele

12、ment */public void addElement(PCB element) LineListNode newElement = newLineListNode(element);if (this .headPcb = null ) /* 头结点为空, 表示链表中当前没有数据元素,点和尾结点指向同一内存空间*/说明头结向PCB线性表中的添加数据元素this .headPcb = newElement;/从PCB线性表中的头部移除数据元素,并将其添加到 PCB线性 表中的尾部 */public void removeFromHeadAddToLast() 新添加一个数据元素则仍然指向同一

13、内存空间*/this .lastPcb = this .headPcb ; else /* 链表不为空, 在这里要保证最后一个结点与新加入的结点连接在一起*/this .lastPcb .setNextNode(newElement);this .lastPcb = newElement; this .size +;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 ) returnLineListNode tempNode =this .lastPcb ;/*设置尾结点的以一个结点为空*/this .headPcb ;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号