版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学操作系统实验报告姓名:学号:班级: 软件工程 指导老师: 胡志刚 完成时间: 2014-11实验 1CPU Scheduling实验学时: 2实验地点:二综204 实验日期:2014/11/19一、实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处 理机。本实验模拟实现处理机调度,加深了解处理机调度的工作过程。二、实验内容选择或者自行设计一个调度算法,实现处理机调度。三、实验要求构建PCB,内容至少涵盖:进程名/PID ;要求运行时间(单位时间);优先权; 状态:PCB指针;1、可随机输入若干进程,并按优先权排序2、采用动态优先权调度,从就绪队首选进程
2、运行:优先权-1/要求运行时间-1 要求运行时间为 0时,撤销该进程3、重新排序,进行下轮调度4、最好采用图形界面5、可动态增加进程6、规定道数,设置后备队列和挂起状态7、 如果内存中进程数少于规定道数,可自动从后备队列通过作业调度选择一作业进入, &作业调度算法可自行选择9、被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂并入就绪队列10、每次调度后,显示各进程状态。四、实验代码Pcb :进程控制块,用于保存进程的信息)Reading :就绪队列,进入 cpu中执行,6,按优先级顺序,时间片为1sReserve :后备队列,存放进程,当就绪队列中进程数不足6个,从该队列调出Suspe
3、nd :挂起队列,就绪队列中的进程挂起后进入该队列PcbGUI :程序界面以及执行的核心类 Pcb :public class Pcb private String name; / 进程名称private int time; / 时间private int priority; / 优先级,越大表明优先级越高 public Pcb(String n , int t, int p)=n;this.time=t; this.priority=p;public String getName() return name;public void setName(String name)
4、 = name;public int getTime() return time;public void setTime(int time) this.time = time;public int getPriority() return priority;public void setPriority(int priority) this.priority = priority;public void change()this.time-; this.priority-;public String toString() return this.getName() + _ +
5、 this.getTime() + _ + this.getPriority() + n; 类 Reading:public class Reading implements Iterable private ArrayList readlist;public ArrayList getPCBItems() return this.readlist;public Reading() this.readlist = new ArrayList();public void addItem(Pcb PcbItem) public void removeItem(Pcb PCbItem) public
6、 Pcb getItem(Pcb processPCB) for (Pcb pCbItem : this.readlist) if (pCbItem.equals(processPCB) return pCbItem;return null;public Pcb getItem(String pid) for (Pcb pcBItem : this.readlist) if (pcBItem.getName().equals(pid) return pcBItem;return null;public int getNumberOfItems() public String getItemsP
7、roperties() String itemsProperties = new StringgetNumberOfItems();int i = 0;for(Iterator iterator1 = readlist.iterator(); iterator1.hasNext();) Pcb stu_Item = (Pcb)iterator1.next(); itemsPropertiesi+ = stu_Item.toString(); return itemsProperties;public Iterator iterator() 类 Reserve : public class Re
8、serve implements Iterable private ArrayList reservelist;public Reserve() reservelist =new ArrayList();public Iterator iterator()public void add(Pcb o) reservelist.add(o);public Pcb getfirst(int i)return reservelist.get(i);public Pcb getprocess(String n) for(Pcb o : reservelist) if(n.equals(o.getName
9、() return o;return null;public int getNumberOfItems() public void removeItem(Pcb PCbItem) public String getItemsProperties() String itemsProperties = new StringgetNumberOfItems();int i = 0;for(Iterator iterator1 = reservelist.iterator(); iterator1.hasNext();) Pcb stu_Item = (Pcb)iterator1.next(); it
10、emsPropertiesi+ = stu_Item.toString(); return itemsProperties;类 Suspend :public class Suspend implements Iterable private ArrayList suspendlist;public Suspend() suspendlist = new ArrayList();public Iterator iterator() public Pcb getprocess(String n) for(Pcb o : suspendlist) if(n.equals(o.getName() r
11、eturn o;return null;public int getNumberOfItems() public void removeItem(Pcb PCbItem) public String getItemsProperties() String itemsProperties = new StringgetNumberOfItems();int i = 0;for(Iterator iterator1 = suspendlist.iterator(); iterator1.hasNext();) Pcb stu_Item = (Pcb)iterator1.next(); itemsP
12、ropertiesi+ = stu_Item.toString();return itemsProperties;public Pcb getItem(String pid) for (Pcb pcBItem : this.suspendlist) if (pcBItem.getName().equals(pid) return pcBItem;return null;类 PcbGUI:public class PcbGUI extends JPanel /* Window width in pixels */ static private int WIDTH = 830;/* Window
13、height in pixels */static private int HEIGHT = 600 ;static private int RESERVE_LIST_SIZE = 110; static private int RESERVE_LIST_ROWS = 15; static private int READ_LIST_SIZE = 110;static private int READ_LIST_ROWS = 15; static private int SUSPEND_LIST_SIZE = 110; static private int SUSPEND_LIST_ROWS
14、= 14; static private int MEMORY_LIST_SIZE = 110; static private int MEMORY_LIST_ROWS = 15; private static JTextField PnameTextField; private JTextField PtimeT extField; private JTextField PpriorityTextField; private JTextField LimitT extField; private JTextField run; private JTextArea STextArea; pri
15、vate JButton Addbutton; private JButton Beginbutton; private JButton Pausebutton; private JButton Suspendbutton; private JButton Exitbutton; private JButton Hsbutton; private JList ReserveList; private JList ReadList; private JList SuspendList; private JList MemoryList;private Reserve reslist;/ 后备队列
16、private Reading realist;/ 就绪队列private Suspend slist; / 挂起队列 private int Pause; /Pause=1 表示运行, Pause=0 表示暂停 private boolean flag = false; / 控制线程运行 public static void main(String args) / TODO Auto-generated method stub JFrame frame = new JFrame(CPU Scheduling); frame.setContentPane(new PcbGUI(); frame
17、.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(WIDTH, HEIGHT); frame.setResizable(true); frame.setVisible(true);frame.setLocationRelativeTo(null); PnameTextField.requestFocus();public PcbGUI() Pause = 1; reslist = new Reserve();realist = new Reading();slist = new Suspend();Font x = n
18、ew Font(Serif,1,15);Font f=new Font( 楷体 ,Font.PLAIN,14);/ 设置后备队列ReserveList = new JList();ReserveList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);ReserveList.setVisibleRowCount(RESERVE_LIST_ROWS);ReserveList.setFixedCellWidth(RESERVE_LIST_SIZE);JPanel ProcessPanel1 = new JPanel();ProcessPa
19、nel1.setBorder(BorderFactory.createTitledBorder(ReserveList);ProcessPanel1.add (new JScrollPane(ReserveList,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);ProcessPanel1.setBounds(10, 10, 150, 370);ProcessPanel1.setBackground(null);/ 设置就绪队列ReadList = new JList();ReadLis
20、t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);ReadList.setVisibleRowCount(READ_LIST_ROWS);ReadList.setFixedCellWidth(READ_LIST_SIZE);JPanel ProcessPanel2 = new JPanel();ProcessPanel2.setBorder(BorderFactory.createTitledBorder(ReadingList);ProcessPanel2.add (new JScrollPane(ReadList,JScroll
21、Pane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);ProcessPanel2.setBounds(160, 10, 150, 370);/ 设置运行框JPanel Run = new JPanel();Run.setBorder(BorderFactory.createTitledBorder(Running);run = new JTextField(8);run.setHorizontalAlignment(JTextField.CENTER);run.setBorder(BorderFactory
22、.createEmptyBorder();run.setFont(x);run.setEditable(false);Run.add(run);Run.setBounds(310, 10, 200, 80);/ 设置添加JPanel AddPanel = new JPanel(); AddPanel.setLayout(null); AddPanel.setBorder(BorderFactory.createTitledBorder(Add); AddPanel.setBounds(310,100,200,280);Addbutton = new JButton(添加 (A);Addbutt
23、on.setMnemonic(KeyEvent.VK_A); Addbutton.setFont(f);Addbutton.setBounds(65, 220, 90, 35); PnameTextField = new JTextField(5);PtimeTextField = new JT extField(5); PpriorityTextField = new JTextField(5); LimitTextField = new JTextField(5); PnameTextField.setHorizontalAlignment(JTextField.CENTER); Ptim
24、eTextField.setHorizontalAlignment(JTextField.CENTER); PpriorityTextField.setHorizontalAlignment(JTextField.CENTER); LimitTextField.setHorizontalAlignment(JTextField.CENTER); PnameTextField.setBounds(110, 35, 60, 23); PtimeTextField.setBounds(110, 75, 60, 23); PpriorityTextField.setBounds(110, 115, 6
25、0, 23); LimitTextField.setBounds(110, 155, 60, 23);JLabel NameLabel = new JLabel(Name); JLabel TimeLabel = newJLabel(Time);JLabel PriorityLabel = newJLabel(Priority);JLabel LimitLabel = new JLabel(Limit); NameLabel.setBounds(30, 35, 60, 23); TimeLabel.setBounds(30, 75, 60, 23); PriorityLabel.setBoun
26、ds(30, 115, 60, 23); LimitLabel.setBounds(30, 155, 60, 23); AddPanel.add(Addbutton);AddPanel.add(PnameTextField);AddPanel.add(PtimeTextField); AddPanel.add(PpriorityTextField); AddPanel.add(LimitTextField); AddPanel.add(NameLabel); AddPanel.add(TimeLabel); AddPanel.add(PriorityLabel); AddPanel.add(L
27、imitLabel);/ 设置挂起队列SuspendList = new JList();SuspendList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);SuspendList.setVisibleRowCount(SUSPEND_LIST_ROWS);SuspendList.setFixedCellWidth(SUSPEND_LIST_SIZE);JPanel ProcessPanel3 = new JPanel();ProcessPanel3.setBorder(BorderFactory.createTitledBord
28、er(SuspendList);JPanel ProcessPanel4 = new JPanel();ProcessPanel4.add (new JScrollPane(SuspendList,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);Hsbutton = new JButton( 解挂 (U);Hsbutton.setMnemonic(KeyEvent.VK_U);Hsbutton.setFont(f);ProcessPanel3.add(ProcessPanel4,Bord
29、erLayout.NORTH);ProcessPanel3.add(Hsbutton,BorderLayout.SOUTH);ProcessPanel3.setBounds(510, 10, 150, 370);/ 设置开始按钮Beginbutton = new JButton(开始 (B);Beginbutton.setBounds(650, 415, 90, 35); Beginbutton.setFont(f);Beginbutton.setMnemonic(KeyEvent.VK_B);/ 设置暂停按钮Pausebutton = new JButton(暂停 (P);Pausebutt
30、on.setBounds(470, 415, 90, 35); Pausebutton.setFont(f);Pausebutton.setMnemonic(KeyEvent.VK_P);/ 设置挂起按钮Suspendbutton = new JButton(挂起 (S);Suspendbutton.setBounds(470, 490, 90, 35); Suspendbutton.setFont(f);Suspendbutton.setMnemonic(KeyEvent.VK_S);/ 设置退出按钮Exitbutton = new JButton(退出 (X);Exitbutton.set
31、Bounds(650, 490, 90, 35); Exitbutton.setFont(f);Exitbutton.setMnemonic(KeyEvent.VK_X);/ 设置备注STextArea = new JTextArea(); STextArea.setBounds(20,18,310,115);STextArea.setFont(new Font(Calibri, Font.PLAIN, 18); STextArea.setBackground(null);STextArea.setEditable(false);JPanel SPanel = new JPanel();SPa
32、nel.setLayout(null);SPanel.setBorder(BorderFactory.createTitledBorder(Status); SPanel.setBounds(10, 390, 350, 140);SPanel.add(STextArea);setLayout(null);add(ProcessPanel1); add(ProcessPanel2);add(Run); add(AddPanel);add(ProcessPanel3); add(Beginbutton);add(Pausebutton); add(Suspendbutton); add(Exitb
33、utton);/ 初始添加一些进程realist.addItem(new Pcb(a,3,4); realist.addItem(new Pcb(b,4,6);realist.addItem(new Pcb(c,8,9); sortReadyPCB();reslist.add(new Pcb(d,3,4); reslist.add(new Pcb(e,3,4);reslist.add(new Pcb(f,3,4); reslist.add(new Pcb(g,3,4); reslist.add(new Pcb(h,3,4);ReserveList.setListData(reslist.get
34、ItemsProperties();/ 消息响应函数Addbutton.addActionListener(new AddListener();Exitbutton.addActionListener(new ExitListener();Beginbutton.addActionListener(new BeginListener(); Suspendbutton.addActionListener(new SuspendListener(); Pausebutton.addActionListener(new PauseListener(); Hsbutton.addActionListe
35、ner(new HsListener(); ReadList.addListSelectionListener(new DisplayListener(); ReserveList.addListSelectionListener(new DisplayListener2(); SuspendList.addListSelectionListener(new DisplayListener1();/ 对就绪队列按优先级进行排序public void sortReadyPCB() Reading currentReadyPCB = new Reading();int num = realist.
36、getNumberOfItems();if(num 0) for(int i=num; i=1; i-) Iterator readyIterator = realist.iterator();Pcb currentItem = (Pcb) readyIterator.next();for( ; readyIterator.hasNext(); ) Pcb nowItem = (Pcb) readyIterator.next(); if(currentItem.getPriority() nowItem.getPriority() currentItem = null; currentItem
37、 = nowItem; currentReadyPCB.addItem(currentItem); realist.removeItem(currentItem);realist = null;realist = currentReadyPCB;ReadList.setListData(realist.getItemsProperties();/ 线程, CPU 处理进程class newthread extends Threadint t;int TimeSlice;boolean Flag = true;public void run()while(Flag)if(getPause() =
38、 1)while(getPause() = 1)try new Thread().sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch block e.printStackTrace(); if(realist.getNumberOfItems() 0) while(realist.getNumberOfItems() 0) Iterator bwackupPCBIterator = reslist.iterator();newPcb newItem = (Pcb) bwackupPCBIterator.
39、next(); while(bwackupPCBIterator.hasNext() ) newItem = (Pcb) bwackupPCBIterator.next(); if(newItem = null) break; if(newItem != null) Pcb nowItem = Pcb(newItem.getName(), newItem.getTime(), newItem.getPriority();realist.addItem(nowItem); reslist.removeItem(newItem);ReserveList.setListData(reslist.ge
40、tItemsProperties(); else break; sortReadyPCB();ReserveList.setListData(reslist.getItemsProperties(); Iterator readyIterator = realist.iterator();Pcb runningItem = null;if(readyIterator.hasNext() runningItem = (Pcb) readyIterator.next();if(runningItem != null) t = runningItem.getTime();TimeSlice = 1;
41、for(int i=TimeSlice; i0; i-) if(t 0) runningItem.change(); run.setText(runningItem.getName(); t-;sortReadyPCB();try Thread.sleep(1000); catch (Exception ee) ee.printStackTrace();if(t 0) Flag = getFlag();else Flag = false; else Flag = false;if(Pause = 1) while(getPause()=1) try Thread.sleep(1000); ca
42、tch (Exception ee) ee.printStackTrace();if(getPause() = 0) Flag = true;public boolean getFlag() return this.flag;public int getPause()return Pause;/ 添加按钮的消息响应函数class AddListener implements ActionListener public void actionPerformed(ActionEvent event)String str1 = PnameTextField.getText();int n1 = In
43、teger.parseInt(PtimeTextField.getText();int n2 = Integer.parseInt(PpriorityTextField.getText(); if(realist.getNumberOfItems()6)realist.addItem(new Pcb(str1,n1,n2);elsereslist.add(new Pcb(str1,n1,n2);ReadList.setListData(realist.getItemsProperties(); ReserveList.setListData(reslist.getItemsProperties
44、(); PnameTextField.requestFocus();PnameTextField.selectAll();/ 退出按钮的消息响应函数class ExitListener implements ActionListener public void actionPerformed(ActionEvent event) System.exit(0);/ 开始按钮的消息响应函数class BeginListener implements ActionListener public void actionPerformed(ActionEvent event) ReadList.setL
45、istData(realist.getItemsProperties(); Pause = 0;Thread run = new newthread();flag = true;run.start();/ 挂起按钮的消息响应函数class SuspendListener implements ActionListener public void actionPerformed(ActionEvent event) String selectedReadyItem = null;String pid = ; if(realist.getNumberOfItems() != 0) tryselec
46、tedReadyItem = (String) ReadList.getSelectedValue(); if(selectedReadyItem != null) newPcb(pid,StringTokenizer stringtokenizer StringTokenizer(selectedReadyItem, _);pid = stringtokenizer.nextToken(); Pcb selectedItem = realist.getItem(pid); if(selectedItem != null)Pcb boolItem = slist.getItem(pid); w
47、hile(boolItem != null) pid = S + pid; boolItem = slist.getItem(pid);Pcb newPcb = new selectedItem.getTime(),selectedItem.getPriority()slist.add(newPcb); realist.removeItem(selectedItem); sortReadyPCB();SuspendList.setListData(slist.getItemsProperties(); catch (RuntimeException e1) / TODO Auto-genera
48、ted catch block / 暂停按钮的消息响应函数class PauseListener implements ActionListener public void actionPerformed(ActionEvent event) if(Pause = 0)flag = false;Pausebutton.setText( 继续 (P);Pause = 1;elseflag = true;Pause =0;Pausebutton.setText( 暂停 (P);/ 解挂按钮的消息响应函数 class HsListener implements ActionListener publ
49、ic void actionPerformed(ActionEvent event) String selectedReadyItem = null;String pid = ; if(slist.getNumberOfItems() != 0) tryselectedReadyItem = (String) SuspendList.getSelectedValue(); if(selectedReadyItem != null) StringTokenizer stringtokenizer = new StringTokenizer(selectedReadyItem, _);pid =
50、stringtokenizer.nextToken();Pcb selectedItem = slist.getItem(pid); if(selectedItem != null) if(realist.getNumberOfItems() 6) int n = MemoryAllocation(selectedItem.getLimit();realist.addItem(new Pcb(pid, selectedItem.getTime(),selectedItem.getPriority()ReadList.setListData(realist.getItemsProperties(
51、);else Pcb(pid,reslist.add(newselectedItem.getTime(),selectedItem.getPriority();ReserveList.setListData(realist.getItemsProperties();slist.removeItem(selectedItem);SuspendList.setListData(slist.getItemsProperties(); catch (RuntimeException e1) / TODO Auto-generated catch block/display 就绪队列中的进程 class
52、 DisplayListener implements ListSelectionListener public void valueChanged(ListSelectionEvent event) if (! ReadList.getValueIsAdjusting() String selectedReadyItem = null; String pid = ;String ptime = ; String pp = ; selectedReadyItem = (String) ReadList.getSelectedValue();newif(selectedReadyItem != null) StringTokenizer stringtokenizer1 = StringTokenizer(selectedReadyItem, _);pid = stringtokenizer1.nextToken();ptime = stringtokenizer1.nextToken(); pp = stringtokenizer1.nextToken();String b = stringtokenizer1.nextToken();String l = stringtokenizer1.nextTo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年初中化学期末模拟预测试卷
- 2026中国医疗咨询服务行业市场现状竞争格局及投资机会规划研究报告
- 2026中国智能电动巡逻车行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国新能源金融基础设施建设投融资模式专题报告
- 2026中国消费升级趋势下高端消费品市场研究报告
- 2026中国叶黄素酯跨境贸易壁垒分析及出口策略调整建议报告
- 2026新型纳米材料在冲击吸收护具中的应用突破研究报告
- 2026中国消费电子行业创新趋势分析及全球价值链重构战略研究报告
- 2026中国智能家居语音助手市场发展现状竞争分析投资潜力报告
- 成本实操-煤炭开采与洗选加工成本核算SOP
- 巨人通力电梯NOVA GKE调试说明书故障代码GPN15 GVN15-GKE - 51668093D01-2022
- 简约劳务合同范本
- JT-T-776.3-2010公路工程玄武岩纤维及其制品第3部分:玄武岩纤维土工隔栅
- GB/T 25849-2024移动式升降工作平台设计、计算、安全要求和试验方法
- 选煤厂员工培训课件
- 利器收发记录
- 会计从业培训讲义
- 螺旋测微器的使用与读数课件
- 玻璃钢化炉的操作技巧
- 中国联通通信网络运行维护规程-固定网络设备分册-传输设备篇
- GB/T 25380-2010数控滚齿机精度检验
评论
0/150
提交评论