操作系统实验报告Word格式文档下载.docx
《操作系统实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告Word格式文档下载.docx(43页珍藏版)》请在冰豆网上搜索。
连接目标文件,形成可执行文件;
执行该文件,得到结果。
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<
stdio.h>
math.h>
#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);
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)<
delta)break;
if(fa*fc<
{
b=c;
fb=fc;
}
if(fb*fc<
a=c;
fa=fc;
if((b-a)<
eps)break;
%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()+"
if(e.getSource()==btn1){
result.setText(result.getText()+"
opEnd=true;
if(e.getSource()==btn2){
if(e.getSource()==btn3){
if(e.getSource()==btn4){
if(e.getSource()==btn5){
if(e.getSource()==btn6){
if(e.getSource()==btn7){
if(e.getSource()==btn8){
result.setText("
if(e.getSource()==btn9){
try{
if(e.getSource()==btn10){
op1=Double.parseDouble(result.getText());
//2、说明操作数已经输入完毕
opEnd=false;
current0p=JIA;
if(e.getSource()==btn12){
current0p=CHENG;
if(e.getSource()==btn13){
current0p=CHU;
if(e.getSource()==btn11){
current0p=JIAN;
if(e.getSource()==btn18){
Stringtmp=result.getText();
if(tmp.equals("
)){
return;
if(tmp.indexOf("
)!
=-1){
tmp=tmp+"
;
result.setText(tmp);
if(e.getSource()==btn16){
"
doubled;
d=Double.parseDouble(tmp);
//先定义一个double类型的d
if(d<
0){
不能对负数求平方根!
op2=Math.sqrt(d);
result.setText(op2+"
if(e.getSource()==btn14){
if(e.getSource()==btn17){
op2=Double.parseDouble(result.getText());
switch(current0p){
caseJIA:
result.setText(op1+op2+"
caseJIAN:
result.setText(op1-op2+"
caseCHENG:
result.setText(op1*op2+"
caseCHU:
if(op2==0){
被除数不能为零!
result.setText(op1/op2+"
}catch(Exceptionne){
Wrong"
12.程序结果:
四.实验总结
操作系统作为计算机系统的核心与基石,负责支撑应用程序运行环境以及用户操作环境的系统软件。
为适应时代要求和用户需要,操作系统加强了对网络和安全的支持,功能更加强大,各平台操作系统之间的竞争也变得更加激烈。
操作系统传统上是负责对计算机硬件直接控制及管理的系统软件。
操作系统的功能一般包括处理器管理、存储管理、文件管理、设备管理和作业管理等。
操作系统可以在概念上分割成两部分:
内核(Kernel)以及壳(shell)。
发展模式比较单一,越来越多的人先入为主,先接受了windows,其实它并没有那么好,导致越来越多的人依赖它。
随着人们对信息安全重视程度的不断提升,如何构建可靠、可用和安全的操作系统将成为一个十分重要的课题。
而对可靠、可用和安全的追求无疑将使操作系统更为复杂,操作系统的规模也将不断增大。
。
实验二进程调度程序设计
进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生独立地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进程调度和各种调度算法的理解。
1.设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:
进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。
2.调度程序应包含2—3种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。
3.系统应能显示或打印各进程状态和参数的变化情况,便于观察。
1.实验题目
本程序可选用优先数法或简单轮转法对五个进程进行调度。
每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假定起始状态都是就绪状态W。
为了便于处理,程序中进程的运行时间以时间片为单位计算。
各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。
进程控制块如下图所示:
进程标识符
链指针
优先数/轮转时间片数
占用CPU时间片数
进程所需时间片数
进程状态
进程控制块链结构如图2-1所示:
RUNHEADTAIL
1
┇
R
3
W
5
0
2
…
其中:
RUN—当前运行进程指针;
HEAD—进程就绪链链首指针;
TAIL—进程就绪链链尾指针。
2.算法与框图
程序框图如图2-2所示:
priority
是
输入调度算法alog
开始
alog=priority/roundrobin?
生成并按优先数大小排列进程控制块链
进程时间片数为0?
从链首取一个进程投入运行
生成并按进入次序
排列进程控制块链
链首进程投入运行
时间片到,进程时间片
数减1,优先数减3
运行进程退出,排到进程链尾部
撤消该进程
时间片到,进程时间片数
减1,占用CPU时间加1
优先数大于链首进程?
运行进程退出,按优先数插入进程链
结束
进程队列空?
否
roundrobin
占用处理机时间片到?
图2-2进程调度框图
(1)优先数法
进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。
每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3。
理由是该进程如果在一个时间片中完成不了,优先级应降低一级。
接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入运行。
原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。
(2)简单轮转法
进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。
进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。
每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪