操作系统实验报告.docx

上传人:b****5 文档编号:4099637 上传时间:2022-11-27 格式:DOCX 页数:40 大小:553.06KB
下载 相关 举报
操作系统实验报告.docx_第1页
第1页 / 共40页
操作系统实验报告.docx_第2页
第2页 / 共40页
操作系统实验报告.docx_第3页
第3页 / 共40页
操作系统实验报告.docx_第4页
第4页 / 共40页
操作系统实验报告.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

操作系统实验报告.docx

《操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告.docx(40页珍藏版)》请在冰豆网上搜索。

操作系统实验报告.docx

操作系统实验报告

本科实验报告

 

课程名称:

操作系统B

实验项目:

操作系统实验报告

实验地点:

学院楼606

专业班级:

计算机0903班学号:

2009001506

学生姓名:

张亮亮

指导教师:

张辉

2011年12月10日

实验一几种操作系统的界面

一.实验目的与要求

(一)目的

本实验的目的是使学生熟悉1-2种操作系统的界面,在熟悉使用机器的基础上,能了解各种操作命令和系统调用在系统中的大致工作过程。

(二)要求

1.能熟练的在1-2种操作系统的环境下工作,学会使用各种命令,熟悉系统提供的各种功能,主动而有效地使用计算机。

2.熟悉系统实用程序的调用方法和各种系统调用模块的功能和作用。

二.实验内容

在某种操作系统的环境下建立、修改、运行、打印源程序和结果,最后撤消一个完整的程序。

提示:

可按下述步骤进行

1.编写一个完整的源程序,通过编辑命令送入机器,建立源程序文件;

2.编译该源文件,建立相应的目标文件;

3.编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误;

4.连接目标文件,形成可执行文件;

5.执行该文件,得到结果;

6.打印输出源程序和运行结果;

7.撤消本次实验中形成的所有文件。

三.实验步骤

1.按照要求编写一个C语言程序,通过编辑命令送入机器,建立源程序文件;编译该源文件,建立相应的目标文件;编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误;

连接目标文件,形成可执行文件;执行该文件,得到结果。

2.编写题目:

利用二分法求解方程组f(x)=x3+x2-3x-3=0的解。

要求可随机输入区间[a,b]的值执行程序,算出误差限的值。

讨论a,b变化时,二分次数的变化;误差限变化时二分次数的变化;估算的次数与实际二分次数的符合情况。

3.编写程序的算法:

(1)给定区间[a,b],并设f(a)与f(b)符合相反,取为根的容许误差,δ为|f(x)|的容许误差。

令c=(a+b)/2

(2)如果(c-a)<或|f(c)|<δ,则输出C,结束;否则执行(3)。

(3)如果f(a)*f(b)>0,则根位于区间[a,c]内,以c代替b;f(a)*f(b)<0则根位于区间[c,b]内,以c代替a;重复

(1),

(2),(3)。

直到区间[a,b]长度缩小到允许误差范围之内或f(c)=0,此时区间中点c即可作为所求的根。

4.程序框图如下:

 

 

5.程序清单:

#include

#include

#defineeps5e-4

#definedelta1e-6

floatf(floatx)

{

returnx*x*x+x*x-3*x-3;

}

voidmain()

{

floata,b,c;

intk;

floatfa,fb,fc;

intn=1;

scanf("%f,%f",&a,&b);

printf("a=%f,b=%f\n",a,b);

k=(log(b-a)-log(eps))/log(2.0);

printf("k=%d\n",k);

fa=f(a);

fb=f(b);

do

{

if(fa*fb>0)

{

printf("无解");

break;

}

else

{

c=(a+b)/2;

fc=f(c);

if(fabs(fc)

if(fa*fc<0)

{

b=c;

fb=fc;

}

if(fb*fc<0)

{

a=c;

fa=fc;

}

if((b-a)

}

printf("%d%f%f\n",n,c,fc);

n++;

}

while(n=k);

}

6.程序运行结果:

(1)输入初始参数:

a=1,b=2,EPS=5e-6;

其结果为:

 

(2)改变a,b的值为:

a=0,b=2,EPS不变,仍为5e-6,

其结果为:

(3)改变EPS的值为:

EPS=5e-4,a,b不变,仍为a=1,b=2,

其结果为:

 

7.运行结果分析:

.输入不同的区间初值a,b,二分次数的变化情况:

输入的区间范围越大,要达到相同的精确值,二分次数K会相应的增加。

.输入不同的误差限,二分次数的变化情况:

随着误差限的增大,二分次数会相应的减少。

.估算的次数与实际二分次数的符合情况:

估算的次数与实际二分次数相等,即估算好多次,就二分了好多次。

8.编写一个Java程序,通过编辑命令送入机器,建立源程序文件;编译该源文件,建立相应的目标文件;使用eclipse进行编译,编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误;连接目标文件,形成可执行文件;执行该文件,得到结果。

9.编写题目要求:

设计一个拥有加,减,乘,除四则运算的计算器。

10.程序框图如下:

 

11.程序清单:

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

publicclassS08_04extendsJFrameimplementsActionListener{

doubleop1,op2;

publicstaticfinalintJIA=0;

publicstaticfinalintJIAN=1;

publicstaticfinalintCHENG=2;

publicstaticfinalintCHU=3;

publicstaticfinalintJJ=4;

publicstaticfinalintDIAN=5;

publicintcurrent0p=0;

staticS08_04frm=newS08_04();

//staticFramefrm1=newFrame("计算器");

privatebooleanopEnd=false;

staticJPanelpn=newJPanel();

staticJButtonbtn1=newJButton("1");

staticJButtonbtn2=newJButton("2");

staticJButtonbtn3=newJButton("3");

staticJButtonbtn4=newJButton("4");

staticJButtonbtn5=newJButton("5");

staticJButtonbtn6=newJButton("6");

staticJButtonbtn7=newJButton("7");

staticJButtonbtn8=newJButton("8");

staticJButtonbtn9=newJButton("9");

staticJButtonbtn10=newJButton("+");

staticJButtonbtn11=newJButton("-");

staticJButtonbtn12=newJButton("*");

staticJButtonbtn13=newJButton("/");

staticJButtonbtn14=newJButton("clr");

staticJButtonbtn15=newJButton("0");

staticJButtonbtn16=newJButton("sqrt");

staticJButtonbtn17=newJButton("=");

staticJButtonbtn18=newJButton(".");

staticJButtonbtn19=newJButton("1/x");

staticJButtonbtn20=newJButton("%");

staticJLabelresult=newJLabel(".0");

publicstaticvoidmain(String[]args){

S08_04c=newS08_04();

btn1.addActionListener(frm);

btn2.addActionListener(frm);

btn3.addActionListener(frm);

btn4.addActionListener(frm);

btn5.addActionListener(frm);

btn6.addActionListener(frm);

btn7.addActionListener(frm);

btn8.addActionListener(frm);

btn9.addActionListener(frm);

btn10.addActionListener(frm);

btn11.addActionListener(frm);

btn12.addActionListener(frm);

btn13.addActionListener(frm);

btn14.addActionListener(frm);

btn15.addActionListener(frm);

btn16.addActionListener(frm);

btn19.addActionListener(frm);

btn20.addActionListener(frm);

btn18.addActionListener(frm);

btn17.addActionListener(frm);

frm.setLayout(newBorderLayout());

pn.setLayout(newGridLayout(5,4));

result.setBounds(200,20,100,5);

pn.add(btn1);

pn.add(btn2);

pn.add(btn3);

pn.add(btn10);

pn.add(btn4);

pn.add(btn5);

pn.add(btn6);

pn.add(btn11);

pn.add(btn7);

pn.add(btn8);

pn.add(btn9);

pn.add(btn12);

pn.add(btn15);

pn.add(btn16);

pn.add(btn14);

pn.add(btn13);

pn.add(btn19);

pn.add(btn20);

pn.add(btn18);

pn.add(btn17);

frm.add("Center",pn);

frm.add("North",result);

frm.setSize(240,250);

frm.setVisible(true);

frm.setTitle("计算器");

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==btn15){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"0");

}

if(e.getSource()==btn1){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"1");

opEnd=true;

}

if(e.getSource()==btn2){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"2");

opEnd=true;

}

if(e.getSource()==btn3){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"3");

opEnd=true;

}

if(e.getSource()==btn4){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"4");

opEnd=true;

}

if(e.getSource()==btn5){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"5");

opEnd=true;

}

if(e.getSource()==btn6){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"6");

opEnd=true;

}

if(e.getSource()==btn7){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"7");

opEnd=true;

}

if(e.getSource()==btn8){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"8");

opEnd=true;

}

if(e.getSource()==btn9){

if(opEnd==false){

result.setText("");

}

result.setText(result.getText()+"9");

opEnd=true;

}

try{

if(e.getSource()==btn10){

op1=Double.parseDouble(result.getText());//2、说明操作数已经输入完毕

opEnd=false;

current0p=JIA;

}

if(e.getSource()==btn12){

op1=Double.parseDouble(result.getText());//2、说明操作数已经输入完毕

opEnd=false;

current0p=CHENG;

}

if(e.getSource()==btn13){

op1=Double.parseDouble(result.getText());//2、说明操作数已经输入完毕

opEnd=false;

current0p=CHU;

}

if(e.getSource()==btn11){

op1=Double.parseDouble(result.getText());//2、说明操作数已经输入完毕

opEnd=false;

current0p=JIAN;

}

if(e.getSource()==btn18){

Stringtmp=result.getText();

if(tmp.equals("")){

return;

}

if(tmp.indexOf(".")!

=-1){

return;

}

tmp=tmp+".";

result.setText(tmp);

}

if(e.getSource()==btn16){

Stringtmp=result.getText();

if(tmp.equals("")){

return;

}

doubled;

d=Double.parseDouble(tmp);//先定义一个double类型的d

if(d<0){

result.setText("不能对负数求平方根!

");

return;

}

op2=Math.sqrt(d);

result.setText(op2+"");

}

if(e.getSource()==btn14){

result.setText("0");

opEnd=false;

}

if(e.getSource()==btn17){

op2=Double.parseDouble(result.getText());

switch(current0p){

caseJIA:

result.setText(op1+op2+"");

break;

caseJIAN:

result.setText(op1-op2+"");

break;

caseCHENG:

result.setText(op1*op2+"");

break;

caseCHU:

if(op2==0){

result.setText("被除数不能为零!

");

break;

}

result.setText(op1/op2+"");

break;

}

opEnd=false;

}

}catch(Exceptionne){

result.setText("Wrong");

opEnd=false;

}

}

}

12.程序结果:

四.实验总结

操作系统作为计算机系统的核心与基石,负责支撑应用程序运行环境以及用户操作环境的系统软件。

为适应时代要求和用户需要,操作系统加强了对网络和安全的支持,功能更加强大,各平台操作系统之间的竞争也变得更加激烈。

操作系统传统上是负责对计算机硬件直接控制及管理的系统软件。

操作系统的功能一般包括处理器管理、存储管理、文件管理、设备管理和作业管理等。

操作系统可以在概念上分割成两部分:

内核(Kernel)以及壳(shell)。

发展模式比较单一,越来越多的人先入为主,先接受了windows,其实它并没有那么好,导致越来越多的人依赖它。

随着人们对信息安全重视程度的不断提升,如何构建可靠、可用和安全的操作系统将成为一个十分重要的课题。

而对可靠、可用和安全的追求无疑将使操作系统更为复杂,操作系统的规模也将不断增大。

 

实验二进程调度程序设计

一.实验目的与要求

(一)目的

进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生独立地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进程调度和各种调度算法的理解。

(二)要求

1.设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:

进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。

2.调度程序应包含2—3种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。

3.系统应能显示或打印各进程状态和参数的变化情况,便于观察。

二.实验内容

1.实验题目

本程序可选用优先数法或简单轮转法对五个进程进行调度。

每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假定起始状态都是就绪状态W。

为了便于处理,程序中进程的运行时间以时间片为单位计算。

各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。

进程控制块如下图所示:

进程标识符

链指针

优先数/轮转时间片数

占用CPU时间片数

进程所需时间片数

进程状态

进程控制块链结构如图2-1所示:

RUNHEADTAIL

 

其中:

RUN—当前运行进程指针;

HEAD—进程就绪链链首指针;

TAIL—进程就绪链链尾指针。

2.算法与框图

程序框图如图2-2所示:

图2-2进程调度框图

(1)优先数法

进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。

每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3。

理由是该进程如果在一个时间片中完成不了,优先级应降低一级。

接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入运行。

原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。

(2)简单轮转法

进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。

进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。

每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。

3.程序清单

#include

#include

#definefurthest5

structprocess/*PCBSTRUCTURE*/

{intid;

intpriority;

intcputime;

intalltime;

charstate;

intnext;}prochain[furthest-1];

intprocnum;

intrand();

intalgo;

intrun,head,tail,j;

main()/*MAINPROGRAM*/

{agan:

printf("typethealgorithmis(1:

RR,2:

PRIO):

");

scanf("%d",&algo);

if(algo==2)

{printf(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

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

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