已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 龙岩学院《视频合成与剪辑》2024-2025学年第一学期期末试卷
- 大数据技术对企业市场营销策略的改进作用
- 预应力金属波纹管抗均布荷载性能试验记录
- 供应链管理在备件采购中的实践
- 华中师范大学 论文格式
- 2008产品生命周期成本管理研究
- 美术鉴赏浅论隋唐时期的人物绘画
- 实习单位指导教师评语210句
- 中医药在辅助生殖技术中改善子宫内膜容受性的研究进展
- 略论卢梭的社会契约论
- 电商平台服务协议、交易规则
- 中医病房的护理管理
- “教-学-评一体化”理念下的初中英语教学目标设计与实施的调查研究
- GB/T 17215.241-2025电测量设备通用要求、试验和试验条件第41部分:多电能和多费率仪表的电能计度方法和要求
- 物业商铺装修管理协议合同书
- 变电站一次安装技术培训
- 日本eju数学练习题
- 2024年“皖密杯”密码知识职业技能大赛理论考试题库(含答案)
- 《重复构成》课件
- 癌症防治指南(大众版)
- 工程调试安全培训
评论
0/150
提交评论