现代操作系统.doc_第1页
现代操作系统.doc_第2页
现代操作系统.doc_第3页
现代操作系统.doc_第4页
现代操作系统.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

现代操作系统上机实验报告(标题一号黑体) 学 院 软件学院 年 级 05 级 班 级 3 班 成 员 姓名 李雨生 学号3005218065 姓名 王尽宇 学号3005218077 实验一:方法一:一、银行家算法的模拟实现1。目的: 编一个程序,模拟实现银行家算法,以此来实现我们对此算法的认识。 2。实现方案: 按照书上的例子,来规定每个进程所需要的资源,以及计算机所拥有的资源。同样是五个进程。我们使用Visual C+ 6.0。创建了2个二维数组来模拟当前分配的资源以及需要的资源,3个一维数组来模拟资源总数,现在占用的资源,以及还剩下的资源,当我们输入了所有的当前分配的资源后,我们开始来计算剩下的资源是不是安全,当可以完全满足一个进程的需要时,释放他占有的全部资源。依次来看是否可以完成所有的进程,如是,则安全,否,则不安全。然后将结果存入文本; 本程序的流程图如下: 3。说明以及实例 用的是书上的例子。 全部的资源从一号到4号为 6 3 4 2。 一号进程总的需要 4 1 1 1。二号进程总的需要 0 2 1 2。三号进程总的需要 4 2 1 0。四号进程总的需要 1 1 1 1。五号进程总的需要 2 1 1 0。 代码:#include#includeusing namespace std;int main()int c65; / 现在的资源;int r65;int e5=0,6,3,4,2;int p5;int a5;bool solve;bool re=true;char ch;fstream ofstream; ofstream.open(banker.txt,ios:out);while(re=true)r11=4;r12=1;r13=1;r14=1;r21=0;r22=2;r23=1;r24=2;r31=4;r32=2;r33=1;r34=0;r41=1;r42=1;r43=1;r44=1;r51=2;r52=1;r53=1;r54=0; /初始化需要的资源re=false;for(int j=1;j=5;j+)for(int i=0;i=4;i+) cji=0; pi=0;for(j=1;j=5;j+)coutprint in the number j processs source.endl;for(int i=1;icji; pi=pi+cji; ai=ei-pi; rji=rji-cji; /输入要写入的资源需求while(1)solve=false;for(int i=1;i=5;i+)if(ci0=0)break;if(i=6) /判定:如果5个进程全部结束,则安全ofstreamsecurity!endl;break;for(i=1;i=5;i+)for(j=1;jaj)break;if(j=5&ci0!=1) for(j=1;j=4;j+)aj=cij+rij+aj;rij=0;cij=0;ci0=1;solve=true;if(solve=false) /如果有至少一个进程没结束ofstreamnot security!endl;break;coutdo yu want to restart(y/n)?ch;if(ch=y|ch=Y)re=true;else if(ch=n|ch=N)re=false; ofstream.close();return 0;截屏结果:方法二:一 试验目的:这是银行家算法的模拟程序,该程序能够循环检查每一个提出请求的银行客户,并且能判断这一请求是否安全。并且有关请求和相应决定的列表输出到一个文件中。二 实现方案:使用c#语言思想如下:1) 查找仍需资源中是否有一行,其没有被满足的资源数均小于或等于可用资源.如果不存在这样的行,那么系统就会死锁,状态就是不安全的.2) 假若找到这样一行,那么可以假设它获得所需的资源并进行结束,将该进程标记为终止,并将其资源加到可用资源里.3) 重复以上两步,直道所有的进程都标记为终止,其初始状态是安全的;或者直到死锁发生,此刻的状态是不安全的.流程图:使用说明(截图): (同时在C:Documents and SettingsdellMy DocumentsVisual Studio 2005ProjectsBankerConsoleApplication1binDebug 路径里会生成 安全.TXT文件)实验二:二、Ping的多线程实现1、目的:加深对多线程的认识,学习多线程编程方法。2、实现方案:仿照Windows系统中的Ping功能,编写一段程序。在Eclipse3.2平台上用JAVA语言编写用户界面。其中一个线程类从界面中获取所需信息(需要Ping的IP地址范围和Ping包的大小)用内部类实现多线程,对给定的地址Ping;另一个线程类对Ping等到的结果进行统计分析;最后一个线程类将Ping的结果和统计的结果保存起来并将结果显示给用户。从而完成对N个IP地址的多线程Ping。流程图:源代码:/ FrameForPing.javaimport javax.swing.*;import java.awt.*;import .*;importjava.awt.event.*;import java.io.*;import java.util.*;public class FrameForPing extends JFrame /创建componet变量private Button begin; private JLabel start_host;private JLabel end_host;private JLabel size;private JTextField tsiz;private JTextField ts;private JTextField es;private JTextArea message;private String information;/用来储存程序运行信息并将其输出private boolean running;/创建界面并获取信息:class ButtonListener implements ActionListener/添加 action listenerpublic void actionPerformed(ActionEvent e)if(!running)/开始pingtryrunning=true;/获得ping的参数String gs=ts.getText().trim();String ge=es.getText().trim();int gto=200;if(gto=0) throw new Exception();int gt=4;if(gt=0) throw new Exception();int gsiz=Integer.parseInt(tsiz.getText().trim();if(gsiz=0) throw new Exception();new PingInit(gs,ge,gto,gt,gsiz);/创建新的线程进行pingcatch (Exception e65)information+=Error input!n;message.setText(information);running=false;elseinformation+=ping is running!n;message.setText(information);private ButtonListener b=new ButtonListener(); /注册actionlistenerpublic FrameForPing(String n)/初始化窗口super(n);begin=new Button(Begin);start_host=new JLabel(Start Host);end_host=new JLabel(End Host);size=new JLabel(Packet Size);tsiz=new JTextField( 20);ts=new JTextField(10);es=new JTextField(10);message=new JTextArea(20,70);information=Welcome to use!n;running=false;init();public void init()/初始化窗口begin.addActionListener(b);/添加到事件监听器message.setText(information);message.setEditable(false);getContentPane().setLayout(new FlowLayout();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getContentPane().add(message);getContentPane().add(new JScrollPane(message);getContentPane().add(begin);getContentPane().add(start_host);getContentPane().add(ts);getContentPane().add(end_host);getContentPane().add(es);getContentPane().add(size);getContentPane().add(tsiz);setSize(800,450);setVisible(true);setResizable(true);public static void main(String args)/程序入口,创建实例JFrame FrameForPing=new FrameForPing(Ping);class SavePing extends Thread/为内部类,保存ping结果 SavePing()start();public void run()/以文件形式输出tryPrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(C:ping.doc);out.write(information);out.close();catch (IOException e)String getHost(long s,long l)/将主机地址转化为字符串型long tmp=s+l; String t1=; int d=256*256*256; for(int i=0;i4;i+) if(i!=3)t1+=tmp/d+.; else t1+=tmp/d+; tmp=tmp%d; d=d/256; return t1;class PingInit extends Thread/内部类,完成pingclass Stat extends Thread/对ping结果进行统计float lostRate;float avgTime;public Stat()start();public void run()/如果ping完成则创建统计线程进行统计while(true)boolean ok=true;for(int i=0;i=range;i+)ok=ok&overi;if(ok)break;information+=n;int lost=0;int receive=0;int totalTime=0;for(int i=0;i=range;i+)if(resulti222222)receive+;totalTime+=resulti;else lost+;lostRate=(float)lost/(lost+receive);avgTime=(float)totalTime/receive;for(int i=0;itimeout)/如果超时则结果为timeoutinformation+=Ping +getHost(strange,i)+ reply time outn;elseinformation+=Ping +getHost(strange,i)+ reply time: +resulti+n;/输出统计结果information+=Total received: +receive+n;information+=Total lost: +lost+n;information+=Lost rate: +lostRate*100+%+n;information+=Average time: +avgTime+n;message.setText(information);running=false;class PingAHost extends Thread/内部类完成对一台主机的pingString host;int timeout;int times;int packetsize;int index;PingAHost(String h,int to,int t,int p,long ind)/初始化ping的参数 host=h; timeout=to; times=t; packetsize=p; index=(int)ind;start();public void run()resultindex=ping(host,timeout,times,packetsize);overindex=true;System.out.println(resultindex);public int ping(String host,int timeout,int times,int packetsize) /ping 的过程int PORT=80;long t1=new Date().getTime();tryInetAddress IP= InetAddress.getByName(host);/连接其80端口Socket clientsocket=new Socket(IP,PORT);catch (Exception e )return 1;long t2=new Date().getTime();int reptime=(int)(t2-t1)/1000;/计算时间if (reptimetimeout)return Integer.MAX_VALUE;return reptime; int timeout;int times;int size;public longstart=new long4;public longend=new long4;long range;privatelong strange;privatelong endrange;publicint result;public boolean over;PingInit(String sh,String eh,int to,int t,int s)/初始化pinginit, int posdoc=0; int st=0;for(int i=0;i3;i+)/完成对ip地址范围的计算posdoc=sh.indexOf(.);starti=Integer.parseInt(sh.substring(st,posdoc-st);st=0;sh=sh.substring(posdoc+1);start3=Integer.parseInt(sh.substring(st);for(int i=0;i3;i+)posdoc=eh.indexOf(.);endi=Integer.parseInt(eh.substring(st,posdoc-st);st=0;eh=eh.substring(posdoc+1);end3=Integer.parseInt(eh.substring(st);/将其看作256进制的书进行计算System.out.println(end0*256*256*256);strange=start0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论