ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:1.20MB ,
资源ID:3431369      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3431369.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计.docx

1、操作系统课程设计操作系统课程设计报告 项目名称: 临界区资源模拟 小组成员: AAA BBB CCC DDD 年级专业: 11级计算机科学与技术 日 期: 2014年3月12日一 需求分析建立三个进程,模拟进入临界区,然后用一个进程进行管理。设计技术参数:1实现wait、signal原语 2产生3个进程,两个进程模拟需要进入临界区的用户进程。当需要进入临界区时,显示:“进程x请求进入临界区”,同时向管理进程提出申请;申请返回,表示进入了临界区。在临界区中等待一段随机时间,并显示:“进程x正在临界区”;当时间结束,显示:“进程x退出临界区”,同时向管理进程提出退出申请;当申请返回,显示:“进程x

2、已退出临界区。”3一个进程作为原语的管理进程,接受其他进程的临界区进入请求:如果允许进入,则根据wait 原语的操作步骤设置相应变量,然后返回; 如果不允许进入,则进入循环等待,直到允许为止; 退出时模拟signal 操作。 4进程间通信可以采用信号、消息传递、管道或网络通信方式。二 分析过程 本实验主要分为以下几个部分:进程的创建:编写两个用户进程模拟需要进入临界区,同时还需编写一个进程作为原语的管理进程,其负责管理两个用户进程的进入。设计临界区及进程管理模块,让用户进程在其中访问时遵循空闲让进、忙则等待、有限等待、让权等待的准则。通信块及临界资源的设计,两个进程模拟用户进程进行通信。界面的

3、设计三 开发过程1.进程执行的间断性决定了进程可能具有多种状态,进程的状态反映进程执行的变化。这些状态随着进程的执行和外界条件发生变化和转换。对于处于就绪状态的进程,在调度程序为之分配处理机之后,该进程便可执行,相应地,他就由就绪状态转换执行状态。正在执行的进程也称为当前进程,如果因为分配给它的时间片已经用完而被暂停执行,该进程便由执行状态回到了就绪状态;如果因为发生了某件事情而使进程执行受阻,使之无法继续执行,该进程便由执行状态变为阻塞状态。下图给出了进程的三种基本状态以及各状态之间的转换关系。2.Java实现 Java支持多线程编程,因此用Java编写的应用程序可以同时执行多个任务。Jav

4、a的多线程机制使用起来非常方便,用户只需关注程序细节的实现,而不用担心后台的多任务系统。 Java语言里,线程表现为线程类。Thread()线程类封装了所有需要的线程操作控制。在设计程序时,必须很清晰地区分开线程对象和运行线程,可以将线程对象看作是运行线程的控制面板。在线程对象里有很多方法来控制一个线程是否运行,睡眠,挂起或停止。线程类是控制线程行为的唯一的手段。一旦一个Java程序启动后,就已经有一个线程在运行。可通过调用Thread().currentThread()方法来查看当前运行的是哪一个线程。 3. 唤醒原语当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。显然

5、,一个处于阻塞状态的进程不可能自己唤醒自己,唤醒一个进程有两种方法:一种是由系统进程唤醒。另一种是由事件发生进程唤醒。当由系统进程唤醒等待进程时,系统进程统一控制事件的发生并将“事件发生”这一消息通知等待进程。从而使得该进程因等待事件已发生而进入就绪队列。等待进程也可由事件发生进唤醒。由事件发生进程唤醒时,事件发生进程和被唤醒进程之间是合作关系。因此,唤醒原语既可被系统进程调用,也可被事件发生进程调用。我们称调用唤醒原语的进程为唤醒进程。唤醒原语首先将被唤醒进程从相应的等待队列中摘下,将被唤醒进程置为就绪状态之后,送入就绪队列。在把被唤醒进程送入就绪队列之后,唤醒原语既可以返回原调用程序,也可

6、以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。4.程序流程图 四 测试过程1. 程序开始界面2. 输入两个进程分别命名为11和22,然后开始测试3. 查看作者4. 保存文件,并命名为:“临界资源模拟”,系统将生成名为“临界资源模拟”的word文件。 5. 打开“临界资源模拟.doc”。 五 小组人员分工AAA:临界资源设计、核查并完善课程设计报告BBB:图形界面设计、对所有程序进行整合、书写课程设计报告CCC:管理进程的设计、核查并完善课程设计报告DDD:临界区及进程管理模块设计、核查并完善课程设计报告六 总结通过本次的操作系统课程设计,我最大的体会就是我们不仅要熟练地掌握书本上

7、的知识,更重要的是能够把学到的知识应用到上机编程中,这样才能算是真正学会了书本上所讲的知识。在编写代码的过程中,我遇到了很多困难,比如图形界面的设计、鼠标触发和管理进程的设计等就花费了很多时间翻看资料,不过看着凭借自己的努力做出来的成果,一切努力都是值得的。通过做这次课程设计,我对Java也有了进一步地了解,特别对部件的布局更熟练了。我想,学习是个持之以恒的过程,如果真正想学好Java以及操作系统的话,光靠课程设计的时间是远远不够的,所以以后我一定要加强学习,坚持不懈,一切努力都是值得的。七 参考文献1.雍俊海 编著. Java程序设计教程(第二版)-北京: 清华大学出版社,2007.07 2

8、.汤小丹、梁红兵等编著. 计算机操作系统(第三版)-西安电子科技大学出版社,2007.023.张芬丽、刘昕等编著. 操作系统实验教程及Linux和Windows系统调用编程北京:清华大学出版社,2010,084.网上搜索相关代码八、程序源代码第一个java文件:MainFrame.java/界面设计import java.awt.Color;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ja

9、va.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextArea;

10、import javax.swing.JTextField; public class MainFrame private static final long serialVersionUID = 1L; private JFrame frame=new JFrame(临界区资源模拟); private JPanel imagePanel; ImageIcon background; static JButton b=new JButton(开始测试); ImageIcon imagea=new ImageIcon(a.gif); ImageIcon imageb=new ImageIcon(

11、2.gif); static JTextField jf=new JTextField2; /单行文本框 ThreadShow ts=new ThreadShow(); /临界资源模拟 JTextArea ja=new JTextArea(null,20,40); /多行文本框,用于显示实验结果 JTextArea je=new JTextArea(null,1,17); /为了界面美观添加的隐形文本框 JTextArea jg=new JTextArea(null,2,70); JTextArea ji=new JTextArea(null,1,20); public MainFrame()

12、 background=new ImageIcon(4.jpg); JLabel label=new JLabel(background); /把背景图片显示在一个标签里面 label.setBounds(0,0,background.getIconWidth(),background.getIconHeight(); /把标签的大小位置设置为图片刚好填充整个面板 imagePanel=(JPanel)frame.getContentPane(); / 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明 imagePanel.setOpaque(false);

13、/设置内容窗格透明 imagePanel.setLayout(new FlowLayout(); /设置流式布局 JLabel cLabel=new JLabel(imagea,JLabel.LEFT); imagePanel.add(cLabel); String S=进程1的名称:,null,进程2的名称:; JLabel aLabel=new JLabel(S0,null,JLabel.CENTER); aLabel.setFont(new Font(宋体,Font.BOLD,15); /设置字体,宋体,15号 aLabel.setForeground(Color.GREEN); /字体

14、颜色为红色 imagePanel.add(aLabel); /将标签加到面板中 jf0=new JTextField(null,10); jf0.setText(); imagePanel.add(jf0); /添加单行文本框,用于用户进程的输入 JButton plays=new JButton( 刷 新 ); imagePanel.add(plays); plays.setFont(new Font(宋体,Font.BOLD,15); plays.setForeground(Color.RED); JButton b2=new JButton(查看作者); imagePanel.add(b

15、2); b2.setFont(new Font(宋体,Font.BOLD,15); b2.setForeground(Color.RED); imagePanel.add(je); /*为了界面美观添加的隐形文本框 ,以下带有*注释的一样 je.setEditable(false); je.setOpaque(false); JLabel bLabel=new JLabel(S2,null,JLabel.CENTER); bLabel.setFont(new Font(宋体,Font.BOLD,15); bLabel.setForeground(Color.GREEN); imagePanel

16、.add(bLabel); jf1=new JTextField(null,10); jf1.setText(); imagePanel.add(jf1); imagePanel.add(b); /添加按钮 b.setFont(new Font(宋体,Font.BOLD,15); b.setForeground(Color.RED); b.addActionListener(new ActionListener() /为开始测试按钮添加触发事件 public void actionPerformed(ActionEvent e) ja.setText(null); b.setEnabled(f

17、alse); jf0.setEditable(false); jf1.setEditable(false); ts.run(jf0.getText().trim(),jf1.getText().trim(),ja); /调用 ThreadShow.run(,);成员方法实现模拟 /trim()的作用是:去掉字符串左右的空格 ); JButton c=new JButton(保存结果); imagePanel.add(c); c.setFont(new Font(宋体,Font.BOLD,15); c.setForeground(Color.RED); c.addActionListener(n

18、ew ActionListener() public void actionPerformed(ActionEvent e) /为保存结果按钮添加触发事件 try JFileChooser f=new JFileChooser(); f.showSaveDialog(frame); String filename=f.getSelectedFile().getAbsolutePath().trim(); FileWriter x=new FileWriter(filename+.doc); new BufferedWriter(x); String saveString=ja.getText(

19、).replaceAll(n,rn); x.write(saveString); /写 x.flush(); /强制显示 x.close(); /关闭输出流 JOptionPane.showMessageDialog(null,保存成功!,null,JOptionPane.PLAIN_MESSAGE); catch(IOException ioe) JOptionPane.showMessageDialog(null,保存失败!,null,JOptionPane.PLAIN_MESSAGE); ); b2.addActionListener(new ActionListener() /为查看作

20、者按钮添加触发事件 public void actionPerformed(ActionEvent e) JOptionPane.showMessageDialog(null,AAA、BBB、CCC、DDD,作者,JOptionPane.INFORMATION_MESSAGE); ); plays.addActionListener(new ActionListener() /为查看作者按钮添加触发事件 public void actionPerformed(ActionEvent e) ja.setText(null); jf0.setText(); jf0.setEditable(true

21、); jf1.setText(); jf1.setEditable(true); ); ji.setBackground(Color.blue); imagePanel.add(jg); /* jg.setEditable(false); jg.setOpaque(false); JLabel dLabel=new JLabel(imageb,JLabel.LEFT); /添加图片 imagePanel.add(dLabel); ja.setFont(new Font(宋体,Font.BOLD,15); ja.setDisabledTextColor(Color.YELLOW); ja.set

22、Opaque(false); ja.setEditable(false); /JScrollPane js=new JScrollPane(ja, / ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, / ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED ); /添加滚动条 imagePanel.add(ja); /添加多行文本框并设置相关属性 frame.getLayeredPane().setLayout(null); frame.getLayeredPane().add(label,new I

23、nteger(Integer.MIN_VALUE); /把背景图片添加到窗格的最底层 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /设置关闭框架的行为属性 frame.setLocation(100,5); /窗口位置 frame.setSize(830,710); /窗口大小 frame.setResizable(false); /窗口大小固定 frame.setVisible(true); /设置可见 public static void main(String args) new MainFrame(); 第二个java文件

24、:ThreadManager.java /临界区及进程管理模块import java.util.Vector;import javax.swing.JOptionPane;class ThreadManager implements Runnable /指向要管理的临界资源 ThingSome obj; /临界资源 static boolean jud=false; /记录临界资源的使用情况 Vector vec=new Vector(); /向量,数据元素为线程 public ThreadManager(ThingSome ts) obj=ts; public void run() whil

25、e (vec.size()!=0) for (int i=0;ivec.size();i+) if (!(vec.get(i).isAlive() /如果用户进程运行结束 (vec.get(i).interrupt(); /使被阻塞的用户进程抛出一个中断异常,从而使进程提前结束阻塞状态 vec.remove(i); /删除用户进程i try Thread.sleep(100); /模拟进程运行一段时间 catch (InterruptedException e) e.printStackTrace(); JOptionPane.showMessageDialog(null, 模拟成功!,nul

26、l,JOptionPane.INFORMATION_MESSAGE); /进程运行结束窗口 MainFrame.b.setEnabled(true); /控件可用 public void addThreadUser(ThreadUser user) vec.add(user); /将用户进程添加到向量中 SuppressWarnings(static-access) public void take(Thread user) /进程控制块 System.out.println(进程 +user.getName()+ 请求资源.); obj.jta.append(进程 +user.getName

27、()+ 请求资源.n); while (jud) / 如果jud为true,表示有进程正在使用资源,否则相反 try System.out.println(进程 +user.getName()+ 等待资源.); obj.jta.append(进程 +user.getName()+ 等待资源.n); synchronized (obj) obj.wait(); / 进入资源的等待池中,等待被唤醒 catch (InterruptedException e) e.printStackTrace(); jud=true; /关锁 System.out.println(进程 +user.getName

28、()+ 进入临界区); obj.jta.append(进程 +user.getName()+ 进入临界区n); obj.useing(user); / 使用资源 System.out.println(进程 +user.getName()+ 已退出临界区); obj.jta.append(进程 +user.getName()+ 已退出临界区n); jud=false; /开锁 synchronized(obj) obj.notifyAll(); /把资源等待池中的进程唤醒 第三个java文件:ThingSome.java/临界资源import javax.swing.JTextArea; class ThingSome static JTextArea jta=new JTextArea(); public ThingSome(JTextArea ja) jta=ja; /构造方法 public void useing(Thread user) System.out.println(进程 +user.getName()+ 正在临界区); /控制台输出 jta.append(进程 +user.getName()+ 正在临界区n); /添加到多文本框jta try Thread.sleep(6

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1