操作系统实验一_第1页
操作系统实验一_第2页
操作系统实验一_第3页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论