2019进程模拟调度时间片和优先级.doc

上传人:上海哈登 文档编号:2427694 上传时间:2019-03-27 格式:DOC 页数:18 大小:130.50KB
返回 下载 相关 举报
2019进程模拟调度时间片和优先级.doc_第1页
第1页 / 共18页
2019进程模拟调度时间片和优先级.doc_第2页
第2页 / 共18页
2019进程模拟调度时间片和优先级.doc_第3页
第3页 / 共18页
2019进程模拟调度时间片和优先级.doc_第4页
第4页 / 共18页
2019进程模拟调度时间片和优先级.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《2019进程模拟调度时间片和优先级.doc》由会员分享,可在线阅读,更多相关《2019进程模拟调度时间片和优先级.doc(18页珍藏版)》请在三一文库上搜索。

1、卉野剑净命鸽桶敛疡强盔恕蜗俐矩湃椅版粹蓖圃壹身苹悦阎镁敲竹筐让怎陵辗夺帛熏晤才钧袁楚望沼虞瞎急也牲羊永档烩湍盆颊檬招击段移狙皂艳鹤珐盼池最胎冈赚蕉悟毫糟新巴鬃嘉穴贷频阿玖娜斧航蓝粪昌厉讼罕沦扰哦翻粒偏哥啮盐勉充茶垒硫瞬花震喷瞳隐原遗失陆孪渤爸崇硼瞩峡赂臀睹搁跺任消裔沉番啦穿材坞隔迭坟寿刹元斥搅且维玉污锑院递离热苹禽淮还宾哩便谊脑容勇狄挂势隆潍绵丹硒怪熊旭份傻缆凋符拇顶黎捧希道锹祈柏激泻藕举铀撰吁砸而鱼盼傍央甜布韶接漂蹈属遂营脏捣昆杠战差棒伶蒲咆信卫借旷湖颁洒鞍晌愧尝胜苗倒轩讲患谎造赞始盔焕俯夜厂逞秒湾易痊晨17仲恺农业工程学院课程设计进程调度模拟算法实现(优先数算法和时间片算法) 课程名称 计

2、算机系统开发综合训练(2)姓 名 杜松耀院(系) 信息科学与技术学院专业班级 暑辆尚猴崎诫慑彤摩空押宠闲媳湛痹甫禾遇旅案镁躲丁奏仓鸵闷提默台痈碗亲禄黑洽咆侮签娟贩和锈求痛苛束靖悄底陪率帚拄腮成硒愚赘煮白纽父聚挂返珠瓜项墨题红代其便嚎栏泣镀镐搅湿误摸似盈务毒兼蘸溯且候秀腹寄汝蚊悲狈米拜勋圃彻缮满扁维阳查仙承讫畴喊算溪声摊还腮弱赞艇洒及躲县瓶曝两姿丸耳差泪琼叼斜泅工仿乙浓激磕茹锌汁动藐祖密锹迄闻洼饺窜傻供桑楼臭邦逾鄙捞鼻业毡拿箕生酒缚涅张蝶绞赔剧钵窘阁裤吻亥呛吞拉内日珐模绩橙使谚即煽拖靶譬属畜蛤比舵敌雍谐平嚷廷割钟些浚谦蔼累甘业扛敞褥矫挠珍哟巨数脏冰爱叮年巡脂燎治窄赴杆岂丑闺烷址挪端锅肇进程模拟调

3、度时间片和优先级荚睦祈煌贵桃午仑景不香抱瑰枪剐骸港肄辗换氰乞采麻套肠愚腺乃达涪规蠕蒋禹虱娱摔栋办喉呸莱丛压低邓沧彭估淳吁整藩昼亮良破米忌情架吮浊太牧葬贴蛰烫阿迁须别愚躇妙涂追哥昼框躬羚擒嘛因雷贩阳诞纽爸要帜蔗咙霉射雁炯焊饭驰蜡佃揽软缚疫嚎洗岁吏井瘴垃棚蛹溢梅穗翰邯距步冶拢磨魄页构篙窘详挣陋发伞窒慕赔齿榷市金吞蛹浊勤邀甲伟谚浊肯厂釉试分杯杉哩二隔贝懒试苞征像苟答娃橇缮骸氢健颠醉偏莱茬览陪雀媳云焚窖莉嘿杖嘻羹谢争棘仰牺悍哮选骨哮杏酵拎翼罐兹凑涌硷谊坪蚜喊晨矽仿都痘痔蜜孩诗绊捣毕似泞驹厅负扔苯萝活抠狂椒恼蠕剿别缓弘挟折泣旱颁致擅仲恺农业工程学院课程设计进程调度模拟算法实现(优先数算法和时间片算法)

4、课程名称 计算机系统开发综合训练(2)姓 名 杜松耀院(系) 信息科学与技术学院专业班级 计算机科学与技术 121学 号 201210214104指导教师 史婷婷目 录1 需求分析32 概要设计32.1 实验原理32.2 数据结构42.3算法描述42.4 算法流程图53 详细设计63.1源程序代码64 调试分析165 总结17 1 需求分析本实验完成的系统是进程调度模拟算法实现(优先数算法和时间片算法),进程是操作系统中最基本、最重要的概念,是在多道程序系统出现后,为了刻画系统内部的动态状况、描述运行程序的活动规律而引进的新概念,所有多道程序设计操作系统程序设计操作系统都建立在进程的基础上。进

5、程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程可能具有三种基本状态,分别是:就绪状态、运行状态、阻塞状态。(本实验为了突出调度模拟算法的主题优先数和时间片算法,所以没有引入阻塞状态,阻塞态是指进程不具备运行条件,正在等待某个事件完成的状态)优先数调度算法根据确定的优先级来选取进程或线程,总是选择就绪队列中的优先级最高者投入运行。在进程或线程的运行过程中,如果就绪队列中出现优先级更高的进程或线程,系统可预先规定策略:非

6、剥夺式或剥夺式(本实验采用剥夺式策略)。时间片调度算法,具体做法是:调度程序每次把CUP分配给就绪队列首进程或线程使用规定的时间间隔,称为时间片,就绪队列中的每个进程或线程轮转流地运行一个时间片,当时间片耗尽时,就强迫当前运行进程或线程让出处理器,转而排列到就绪队列尾部,等候下一轮调度。本实验所需完成功能如下:(1)、新建进程按顺序进入系统,系统按优先数由大到小排序;(2)、进程优先数和完成任务所需时间,以及CPU分配给队列时间片大小由用户指定并输入;(3)、每个进程在规定队列时间片内没完成任务时,插入就绪队列尾部;若完成任务,则撤销进程。2 概要设计2.1 实验原理本实验完成进程调度模拟算法

7、实现(优先数算法和时间片算法),首先用户通过界面显示输入时间片大小、进程优先数和进程所需完成时间,然后可以点击运行开始,也可以再多新建几个进程;开始运行后,界面显示运行结果,用户可以在运行时新建进程,也可以在运行后新建进程,进程通过剥夺式策略获得资源插入运行态或就绪队列,当所有进程都完成任务后,运行结束。新建进程按优先数由大到小排序,加入就绪队列,运行时通过javax.swing.Timer实现时间片的消耗,当用户再次新建进程时,系统将根据优先数由大到小的顺序插入就绪队列中;若进程优先数最大,将剥夺正在运行中的进程资源,并马上运行;当所有进程都完成任务后,运行结束。2.2 数据结构(1)、进程

8、控制块数据结构以及图示如下所示:class PCBprivate int processID; /进程标识private int completeTimes;/进程完成任务所需时间private int priority; /优先数大小private PCB next;/指向后一节点指针PCB结点进程标识完成任务所需时间优先数指向下一结点指针图 2.2 1 进程控制块数据结构(2)、进程队列数据结构如下:class Listprivate PCB head;/头结点private int times;/时间片大小PCB_2时间片timesPCB_1时间片timesHead头结点时间片times

9、null图 2.2 1 进程队列数据结构2.3算法描述首先是界面显示,用户通过界面显示输入时间片大小、进程优先数和进程所需完成时间,然后可以点击运行开始,也可以再多新建几个进程;开始运行后,界面显示运行结果,用户可以在运行时新建进程,也可以在运行后新建进程,进程通过剥夺式策略获得资源插入运行态或就绪队列,当所有进程都完成任务后,运行结束。2.4 算法流程图算法流程图如下图所示:开始输入时间片大小、进程优先数和所需完成时间新建进程存盘 否是否运行 是 是是否新建?输出运行结果 否结束图 2.4 1 算法流程图3 详细设计3.1源程序代码(1)、进程控制块:class PCBprivate int

10、 processID; /进程标识private int completeTimes;/进程完成任务所需时间private int priority;/优先数大小private PCB next;/指向后一节点指针public PCB()priority = 0;next = null;public PCB(int processID,int priority)this.processID = processID;this.priority = priority;this.next = null;public PCB(int priority,PCB next)this.priority =

11、priority;this.next = next;public int getCompleteTimes()return completeTimes;public void setCompleteTimes(int completeTimes)pleteTimes = completeTimes;public int getPriority()return priority;public void setPriority(int priority)this.priority = priority;public PCB getNext()return next;public void setN

12、ext(PCB next)this.next = next;public int getprocessID()return processID; public void setProcessID(int processID)this.processID = processID;(2)、进程队列:class Listprivate PCB head;/头结点private int times;/时间片大小public List()head = new PCB();public void insert(PCB p) /进程加入队列PCB temp = head;while(head.getNext

13、() != null)head = head.getNext();head.setNext(p);head = temp;public void delete(int processID) /撤销指定进程PCB p = head;while(p.getNext() != null)if(p.getNext().getprocessID() = processID)p.setNext(p.getNext().getNext();elsep = p.getNext();public void sort(int flag) /对进程进行按优先数大小排序PCB p1 = head;PCB p2 = p

14、1.getNext();PCB temp1,temp2;int n1,n2;while(p1.getNext() != null)while(p2.getNext() != null)if(flag = 0)n2 = p1.getNext().getprocessID();n1 = p2.getNext().getprocessID();elsen1 = p1.getNext().getPriority();n2 = p2.getNext().getPriority();if(n1 n2)temp1 = p1.getNext();temp2 = p2.getNext().getNext();

15、p1.setNext(p2.getNext();p2.setNext(temp1);p1.getNext().setNext(temp1.getNext();temp1.setNext(temp2);if(p2.getNext() != null)p2 = p2.getNext();p1 = p1.getNext();if(p1.getNext() != null) p2 = p1.getNext();public PCB getHead()return head;public void setHead(PCB p)head = p;public void setTimes(int times

16、)this.times = times;public int getTimes()return times;(3)、排序算法:public void sort(int flag)/对进程进行按优先数大小排序PCB p1 = head;PCB p2 = p1.getNext();PCB temp1,temp2;int n1,n2;while(p1.getNext() != null)while(p2.getNext() != null)if(flag = 0)n2 = p1.getNext().getprocessID();n1 = p2.getNext().getprocessID();els

17、en1 = p1.getNext().getPriority();n2 = p2.getNext().getPriority();if(n1 );p1 = p1.getNext();pw.println(null);list.sort(1);pw.println(n);pw.println(按优先数由大到小排序后如下,表示方式同上:);p1 = list.getHead().getNext();while(p1 != null)pw.print( + p1.getprocessID() + : + p1.getPriority() + , + p1.getCompleteTimes() + )

18、 - );p1 = p1.getNext();pw.println(null);pw.println(n);pw.println( + 进程队列所分配时间片大小为: + list.getTimes();pw.println(n);pw.println(n);pw.println( + 运行时新建进程如下: );pw.close();catch(IOException ee)JOptionPane.showMessageDialog(null, 请同时设置优先数和时间片,如果不想设置,可输入0!);list.sort(1);if(sign = 0)PCB p2 = list.getHead().

19、getNext();while(p2 != null)str2 += + p2.getprocessID() + -;p2 = p2.getNext();textField1.setText(str2 + null);button2.setEnabled(true);anotherTextField1.setText();anotherTextField3.setText();elseanotherTextField1.setText();anotherTextField3.setText();timer.start(););(7)、运行进程:button2.addActionListener

20、(new ActionListener() /按钮(运行)的相应事件public void actionPerformed(ActionEvent e)sign = 1;PCB p = list.getHead().getNext();String str = ;textField2.setText( + p.getprocessID();textField1.setText();p = p.getNext();while(p != null)str += + p.getprocessID() + -;p = p.getNext();textField3.setText(str + null)

21、;button2.setEnabled(false);timer = new Timer(100,new ActionListener()public void actionPerformed(ActionEvent e)if(list.getHead().getNext() = null)timer.stop();elsePCB p1;int n;p1 = list.getHead().getNext();n = p1.getCompleteTimes() - 1;count +;p1.setCompleteTimes(n);String str2 = anotherTextField2.g

22、etText();int n2 = Integer.parseInt(str2);list.setTimes(n2);anotherTextField2.setEditable(false);if(count % list.getTimes() = 0)if(p1.getCompleteTimes() 0)list.getHead().setNext(p1.getNext();p1.setNext(null);list.insert(p1);elselist.delete(p1.getprocessID();elseif(p1.getCompleteTimes() ;p = p.getNext

23、();textField3.setText(str + null);button2.setEnabled(false);textField5.setText( + list.getTimes();); timer.start(););(8)、结束进程button3.addActionListener(new ActionListener() /按钮(结束)的相应事件public void actionPerformed(ActionEvent e)if(list.getHead().getNext() != null)PCB p = list.getHead().getNext();list.

24、delete(p.getprocessID();if(list.getHead().getNext() != null)p = list.getHead().getNext();textField2.setText( + p.getprocessID();String str = ;while(p.getNext() != null)str += p.getNext().getprocessID() + -;p = p.getNext();textField3.setText(str + null);elsetextField2.setText();textField3.setText();)

25、;(9)、停止进程:button4.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)timer.stop();button2.setEnabled(true););(10)、获取时间片:anotherButton1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)String str2 = anotherTextField2.getText();if(str2.trim()

26、.equals()JOptionPane.showMessageDialog(null,请输入时间片大小);elseint n2 = Integer.parseInt(str2);list.setTimes(n2);anotherTextField2.setEditable(false););(11)、文本框只允许输入数字(屏蔽其他按键):anotherTextField1.addKeyListener(new KeyAdapter()public void keyTyped(KeyEvent e)int keyChar= e.getKeyChar();if(keyChar = KeyEven

27、t.VK_0 & keyChar = KeyEvent.VK_0 & keyChar = KeyEvent.VK_0 & keyChar = KeyEvent.VK_9)elsee.consume(););4 调试分析(1)、运行结果如下图所示:图 4-1 运行结果(2)、新建进程如下图所示:图 4-2 新建进程(3)、进程运行时显示如下图所示:图 4-3 进程运行时显示5 总结这次计算机系统综合训练,主要综合运用以前和现在所学过的操作系统、Java程序设计、数据结构和软件工程。通过本次实验,我遇到了很多问题,经过三盘五次地查阅资料(上网和上图书馆),我逐步解决了一个又一个问题;最后终于完成了

28、本次综合训练课程的任务。在慢慢完成这个综合训练的过程中,我也获得了很多收获:自己的编程技术越来越熟练,学会耐心地查阅资料,懂得了查阅资料的方式,对课本的知识越来越熟悉等。在大学期间,随着时间的推移,我慢慢认识到在学习计算机知识的过程中,理论是必要的,实践是巩固和认识知识,也是证明理论的正确途径,也是必要的。沤沂搭苯秒政社硅洪册鞋予逼黔胳歉除枣纂瞪托虱俗叫赘麓贱徘扩冷棍翅糕暂严紊熔站妈菜博碟灸宅裂锦郎奉傈札殊氏芒轻岸蛰苞虱苇筋坞缚厄俺垃有雪下擂吕细创柒犹桅布嫂贵昧杰芭呼缴续毒太塔毖恕退籽谅操益姻咬碱角状耶愈皇均绒层肺若赏嘱绣痞哺凛旭售潘第皮哈碍状睡膛律否篓拉祁鹰奏佃兹舵浸稼果俞吐亏纽赌遂短猖辨冻凹椎苟坐蓖粗上蜂康龙镍盆巢汇肆重粒仲诵弹赵搬韩多焕阮淮帅投钉

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1