os实验指导书
更新时间:2024-05-03 06:38:02 阅读量: 综合文库 文档下载
大庆石油学院
实验课指导书
单 位 实 验 室 实验名称 主讲教师 职 称
计算机信息与技术学院 计算机信息与技术专业实验室
操作系统(英)
郭玲玲 讲师
2006年08 月20 日
实验一 Simulation of random occurrence(随机事件模拟)
一、实验名称
Simulation of random occurrence(随机事件模拟) 二、实验目的
以银行业务处理为例,理解随机事件的发生、处理过程及处理的一般原则,为处理操作系统中的随机事件做准备。 三、实验内容
模拟银行的业务处理过程,银行有三个窗口,每天8点开门,12点关门,银行业务主要包括两种:存钱和取钱,每件业务的处理时间为3-5分钟。 四、实验要求
要求给出模拟的形象直观效果。 五、实验学时及环境
4学时,Turbo C、Visual C++、Visual Basic、Delphi均可。 六、实验思路
1.如果程序开始运行时产生的随机时间在8-12点之间,则运行该程序,否则提示银行已关门;
2.程序开始运行时,随机产生当时银行存在的人数,及三个窗口的排列情况,并按其先后顺序排序1,2,3……;
3.随机产生每个窗口正在办理业务的情况,包括存钱和取钱,及其每个窗口正在办理业务所剩余的时间,并表示出来;
4.程序运行中随机产生每个时刻进来的人数,并进行排列; 5.假如第一个人处理完业务,则队列依次前移; 6.假如到了12点,系统提示银行停止办理业务。 七、主要程序代码
如果使用C语言进行设计,程序涉及的头文件主要有:stdlib.h, stdio.h, time.h;程序使用的主要函数有:srand(), rand(), time(), sleep()。
以下是用C语言开发的代码示例:
/********************************************/ /* ----银行客流模拟系统---- */ /* ---2004/10/16 */
/********************************************/ #include \#include \#include \#include \#include \#include \main() {
int i,j,l,m,n,p,q,r,u,v; int aa,bb,cc; int za,zb,zc;
int numa,numb,numc; int a[80],b[80],c[80]; int x[80]; int k=1; int mini,tim; time_t t;
srand((unsigned) time(&t));
l=0;m=0;n=0; p=0;q=0; r=0; u=0; v=0;
numa=0;numb=0;numc=0; aa=0;bb=0;cc=0; /* time start */ mini=rand()`; tim=rand()$; if(tim>=8&&tim<12) { while(1)
{ clrscr();
window(1,1,80,25); textbackground(1); textcolor(YELLOW); clrscr();
printf(\ printf(\ ------银行窗口模拟系统------ ****\ printf(\ 制作人:刘佳宁 刘茜 ****\ printf(\ 高遵富 梁舒 ****\ printf(\ if(mini==60)
{
tim++;
if(tim==12)
{printf(\ 现在时间 12:00\\n\
printf(\ 银行已经停止营业!\\n\ sleep(2);
printf(\ 正在注销系统...\\n\ sleep(2);
printf(\ 正在关闭系统...\\n\ printf(\ sleep(4);
break;
}
mini=0; }
printf(\ \ if(tim<10) printf(\ printf(\ if(mini<10) printf(\
printf(\ 营业时间: 8:00-12:00 *********************************\ mini++; /* time over */
p=rand()%2; /* main start */
if(p==0) q=0; else
q=rand()%3+1; for(i=0;i for(i=0;i if(numa<=numb&&numa<=numc) { a[l]=x[i]; l++; numa++; } else if(numb<=numa&&numb<=numc) { b[m]=x[i]; m++; numb++; } else { c[n]=x[i]; n++; numc++; } /* printf A array */ printf(\ 窗口 1:\\n \printf(\状态:\if(numa>0) { if(r==0) { r=rand()%3+3; za=rand()%2; } if(za==0) printf(\取款\ else printf(\存款\ printf(\ 剩余时间:\ for(i=0;i for(i=aa;i printf(\空闲\ printf(\ } printf(\-----\/* printf B array */ printf(\ 窗口 2:\\n \printf(\状态:\if(numb>0) { if(u==0) { u=rand()%3+3; zb=rand()%2; } if(zb==0) printf(\取款\ else printf(\存款\ printf(\ 剩余时间:\ for(i=0;i for(i=bb;i printf(\空闲\ printf(\ } printf(\ /* printf C array */ printf(\ 窗口 3:\\n \printf(\状态:\if(numc>0) { if(v==0) { v=rand()%3+3; zc=rand()%2; } if(zc==0) printf(\取款\ else printf(\存款\ printf(\ 剩余时间:\ for(i=0;i for(i=cc;i printf(\空闲\ printf(\ } printf(\printf(\ 本分钟有%d位顾客进入银行!\printf(\ if(tim==11&&mini>51) { i=61-mini; printf(\ 银行将在%d分钟后停止营业!\\n\ } else printf(\ printf(\/* main over */ sleep(2); } } else { clrscr(); window(1,1,80,25); textbackground(1); textcolor(YELLOW); printf(\printf(\ ------银行窗口模拟系统------ ****\printf(\ 制作人:刘佳宁 刘茜 ****\printf(\ 高遵富 梁舒 ****\printf(\printf(\ printf(\ 现在时间 \if(tim<10) printf(\printf(\if(mini<10) printf(\printf(\ printf(\ 银行尚未营业!\ printf(\sleep(3); clrscr(); } } 实验二 Single producer consumer problem(单个生产者消费者问题) 一、实验名称 Single producer consumer problem(单个生产者消费者问题) 二、实验目的 以单个生产者—消费者问题为例,理解进程调度算法。 三、实验内容 生产者——消费者问题是最著名的进程同步问题。它描述一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品。同时,每个进程都互斥的占用CPU。 假定生产者和消费者是互相等效的,只要缓冲区未满,生产者就可以把产品送入缓冲区,类似的,只要缓冲区未空,消费者便可以从缓冲区中取走产品并消费它。生产者—消费者的同步关系将禁止生产者向已满的缓冲区中放入产品,也禁止消费者从空的缓冲区中获取产品。 四、实验要求 模拟一个生产者,一个消费者,共享一个缓冲区的情形。 模拟一个生产者,一个消费者,共享多个缓冲区的情形。 五、实验学时及环境 4学时,Turbo C、Visual C++、Visual Basic、Delphi均可。 六、实验思路 1.随机产生每个生产者生产一个产品的时间和每个消费者消费一个产品的时间,并体现出来; 2.随着时间的推移,体现生产者生产一个产品的过程和消费者消费一个产品的过程,并统计出生产产品的总数与消费产品的总数; 3.限制缓冲区的容量,比如只能容纳N个产品。当缓冲区已满时,要能够体现出生产者处于等待的情形;当缓冲区为空时,要能够体现出消费者处于等待的情形; 4.当存在多个生产者或消费者进程时,随着产生占用某个CPU时间片的单个进程。 七、主要程序代码 如果使用C语言进行设计,程序涉及的头文件主要有:conio.h, stdio.h, time.h;程序使用的主要函数有:srand(), rand(), time(), sleep()。 以下是用C语言开发的代码示例: /***************************************/ /* 生产者与消费者 */ /***************************************/ #define count 10 #define lie 14 #include \#include \#include \ int k; int a[count]; int hour,mini; int s; int pdone; int b[180]; int r=0; int ptim1=0,pttim1=0; int ptim2=0,pttim2=0; int pover1=1,pover2=1; int p; int vtim1=0,vttim1=0; int vtim2=0,vttim2=0; int vover1=1,vover2=1; int q=0; int p1_ok=0,v1_ok=0; int p2_ok=0,v2_ok=0; void tim() {window(lie,3,lie+8,3); textbackground(5); clrscr(); printf(\ 0%d:\ if(mini<10) printf(\ printf(\ if(mini==0) { hour--; mini=60; } mini--; } void num0_1() {int i; i=rand(); if(a[i]==1) num0_1(); a[i]=1; } void num1_0() {int i; i=rand(); if(a[i]==0) num1_0(); a[i]=0; } void pshow(ptim,pttim,x) int ptim,pttim,x; {window(lie,2*x+5,ptim+lie-1,2*x+5); textbackground(7); clrscr(); window(lie,2*x+5,pttim+lie-1,2*x+5); if(pdone==1) textbackground(7); else textbackground(2); clrscr(); pdone=0; printf(\} void sheng(pover,ptim,pttim,x) int pover,ptim,pttim,x; {if(pover==1) {if(ptim==pttim) {ptim=rand()%4+5; pttim=0; } pttim++; } if(pttim==ptim) {if(k!=count) {if(p==count) p=0; /*a[p]=1;*/ num0_1(); k++; p++; pover=1; pdone=1; } else pover=0; } pshow(ptim,pttim,x); if(s==0) {ptim1=ptim; pttim1=pttim; pover1=pover; } else {ptim2=ptim; pttim2=pttim; pover2=pover; } } void vshow(vtim,vttim,x) int vtim,vttim,x; {window(lie,2*x+5,vtim+lie-1,2*x+5); textbackground(7); clrscr(); if(vttim!=0) {window(lie,2*x+5,lie+vttim-1,2*x+5); textbackground(4); clrscr(); } printf(\} void xiao(vover,vtim,vttim,x) int vover,vtim,vttim,x; { if(vttim==0) {if(k!=0) {/*a[q]=0;*/ num1_0(); q++; k--; if(q==count) q=0; vover=1; } else {vover=0; vshow(vtim,vttim,x); } } if(vover==1) {if(vttim==0) {vtim=rand()%4+5; vttim=vtim; } vttim--; vshow(vtim,vttim,x); } if(s==2) {vtim1=vtim; vttim1=vttim; vover1=vover; } else {vtim2=vtim; vttim2=vttim; vover2=vover; } } void memshow() { int i; for(i=0;i {window(lie+4*i,13,lie+4*i+1,13); if(a[i]==1) textbackground(2); else textbackground(4); clrscr(); } } void cputime() {int i; int m,h; for(i=0;i window(lie+2*i-h,15+m,lie+2*i+2-h,15+m); switch(b[i]) {case 0: {textbackground(2); clrscr(); cprintf(\break; } case 1: {textbackground(2); clrscr(); cprintf(\break; } case 2: {textbackground(4); clrscr(); cprintf(\break; } case 3: {textbackground(4); clrscr(); cprintf(\break; } } } } main() { int i; time_t t; srand((unsigned) time(&t)); hour=3; mini=0; for(i=0;i k=rand()%(count+1); p=k; for(i=0;i {window(1,1,80,25); textbackground(1); clrscr(); textcolor(YELLOW); clrscr(); printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ if(hour==0&&mini==0) {window(1,1,80,25); textbackground(1); clrscr(); cprintf(\ getch(); return; } Press any key to exit!\ tim(); s=rand()%4; b[r]=s; r++; switch(s) { case 0:{p1_ok=1; sheng(pover1,ptim1,pttim1,0); if(p2_ok==1) {if(ptim2==pttim2) pdone=1; pshow(ptim2,pttim2,1); } if(v1_ok==1) vshow(vtim1,vttim1,2); if(v2_ok==1) vshow(vtim2,vttim2,3); break; } case 1:{if(p1_ok==1) {if(ptim1==pttim1) pdone=1; pshow(ptim1,pttim1,0); } p2_ok=1; sheng(pover2,ptim2,pttim2,1); if(v1_ok==1) vshow(vtim1,vttim1,2); if(v2_ok==1) vshow(vtim2,vttim2,3); break; } case 2:{if(p1_ok==1) {if(ptim1==pttim1) pdone=1; pshow(ptim1,pttim1,0); } if(p2_ok==1) {if(ptim2==pttim2) pdone=1; pshow(ptim2,pttim2,1); } v1_ok=1; xiao(vover1,vtim1,vttim1,2); if(v2_ok==1) vshow(vtim2,vttim2,3); break; } case 3:{if(p1_ok==1) {if(ptim1==pttim1) pdone=1; pshow(ptim1,pttim1,0); } if(p2_ok==1) {if(ptim2==pttim2) pdone=1; pshow(ptim2,pttim2,1); } if(v1_ok==1) vshow(vtim1,vttim1,2); v2_ok=1; xiao(vover2,vtim2,vttim2,3); break; } } memshow(); cputime(); sleep(1); } } 实验三 Banker algorithm(银行家算法) 一、实验名称 Banker algorithm(银行家算法) 二、实验目的 在了解和掌握银行家算法的基础上,能熟练的处理课本例题中所给状态的安全性问题,能编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。 三、实验内容 设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源数量分别为10,5,7。 进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。 四、实验要求: 本实验要求用高级语言编写和调试一个简单的银行家算法程序。用银行家算法实现资源分配。 五、实验学时及环境 4学时,Turbo C、Visual C++、Visual Basic、Delphi均可。 六、实验思路: 设requesti为进程p[i]的请求向量,如果requesti[j]=K,表示进程p[i]需要K个Rj资源。当系统发出请求后,系统按下述步骤开始检查: 1.如果requesti[j]<=need[i][j],转向步骤2;否则报告出错,申请的资源已经大于它需要的最大值。 2.如果requesti[j]<=available[j],转向步骤3;否则报告出错,尚无足够的资源。 3.系统试探着把资源分配给p[i],并修改下列数据结构中的值: available[j]=available[j]-request[j] allocation[i][j]=allocation[i][j]+request[j] need[i][j]=need[i][j]-request[j] 4.系统进行安全性算法,检查此次分配后,系统是否还处于安全状态,若安全,把资源分配给进程p[i];否则,恢复原来的资源分配状态,让进程p[i]等待。 安全性算法: 1.设置两个工作向量WORK=AVAILABLE;FINISH[M]=FALSE 2.从进程集合中找到一个满足下述条件的进程: FINISH[i]=FALSE NEED<=WORK 如找到,执行3;否则,执行4。 3.设进程获得资源,可顺利执行,直至完成,从而释放资源。 WORK=WORK+ALLOCATION FINISH=TRUE GO TO 2 4.如所有的进程Finish[M]=true,则表示安全;否则系统不安全。 七、主要程序代码 如果使用C语言进行设计,程序涉及的头文件主要有:stdio.h。 以下是用C语言开发的代码示例: #include int available[N]={3,3,2}; int max[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; int allocation[M][N]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; int need[M][N],p[M]; void init(){ int i,j; for(i=0;i need[i][j]=max[i][j]-allocation[i][j]; } } } void output(){ int i,j; printf(\ for(i=0;i printf(\ } } } int compare(int need[],int work[]){ int j; for(j=0;j return TRUE; } int isSecurity(int available[],int need[][N],int allocation[][N]){ int i,j,k=0,flag,finish[M],work[N]; for(i=0;i for(j=0;j while(TRUE){ flag=FALSE; for(i=0;i if(finish[i]==FALSE&&compare(need[i],work)==TRUE){ for(j=0;j finish[i]=TRUE; p[k++]=i; flag=TRUE; break; } } if(flag==FALSE){ for(i=0;i if(finish[i]==FALSE) return FALSE; } return TRUE; } } } void operate(){ int i,j,flag,f1,request[N]; printf(\ printf(\ while(TRUE){ f1=FALSE; printf(\ scanf(\ if(i>=M){ printf(\ continue; } getchar(); if(i<0) break; printf(\ for(j=0;j for(j=0;j printf(\ output(); printf(\ f1=TRUE; break; } } for(j=0;j printf(\ output(); printf(\ f1=TRUE; break; } } if(f1==TRUE) continue; for(j=0;j flag=isSecurity(available,need,allocation); if(flag==TRUE){ printf(\ printf(\ for(i=0;i i==4 ? printf(\ } output(); printf(\ } else{ printf(\ printf(\ for(j=0;j available[j]-=request[j]; allocation[i][j]+=request[j]; need[i][j]-=request[j]; } output(); printf(\ } } } void main(){ clrscr(); init(); operate(); } 八、实验结果分析 由于安全的路径并不一定唯一,所以输出的结果并不是和书上的一样,很正常,原因在于安全路径的找法上。 实验四 Paging Memory Management(分页式存储管理) 一、实验名称 Paging Memory Management(分页式存储管理) 二、实验目的 理解分页式存储管理的原理。 三、实验内容 在分页系统中,把每个作业(进程)的地址空间划分成一些大小相等的片,称之为页面或页。同样地,把内存的存储空间也分成与页相同大小的存储块,称为物理块或页框。分页系统允许将进程的每一页离散地存储在内存的任一物理块中,为了能在内存中找到每个页面所对应的物理块,系统为每个进程建立一张页面映射表,即页表,图1所示。页表的作用是实现从页号到物理块号的地址映射。 四、实验要求 模拟多个作业分页式存储管理的全过程。 五、实验学时及环境 4学时,Turbo C、Visual C++、Visual Basic、Delphi均可。 六、实验思路 1.划分出一块内存空间,并为其编号; 2.初始化若干个作业,并为每个作业随机分配物理块号,每个作业包括标识号、页数、运行时间和物理块号四部分; 3.随着时间的推移,描述每个作业的开始、运行与结束过程; 4.在每个时间点,随机产生若干个新的作业。 七、主要程序代码 如果使用C语言进行设计,程序涉及的头文件主要有:stdio.h, dos.h, time.h, conio.h。 以下是用C语言开发的代码示例: #include struct page {char ch; int count; int page[4]; int tim; }aa[100]; int num=0; struct mem {int x; int ch; }frame[30]; int a=48; int sum=0; void first() {int i; for(i=0;i<30;i++) {frame[i].ch=0; frame[i].x=0; } } void ttim() {struct time t; gettime(&t); printf(\ .ti_sec); } num0_1() {int i; i=rand()0; if(frame[i].x==1) num0_1(); else return i; } void fenpei() {int i; aa[num].ch=a; a++; if(a==58) a=65; if(a==91) a=97; aa[num].tim=rand()%4+5; aa[num].count=rand()%4+1; for(i=0;i frame[aa[num].page[i]].ch=aa[num].ch; } -:d:d\\n\ } void check() {int i,j; for(i=0;i for(j=0;j frame[aa[i].page[j]].ch=0; } } } void putout() {int i,j; printf(\ \ for(i=0;i<30;i++) {printf(\ if(i==14) printf(\ \ } for(i=0;i<=14;i++) {window(11+i*4,5,12+i*4,5); if(frame[i].x==1) textbackground(RED); else textbackground(GREEN); clrscr(); cprintf(\ } for(i=0;i<=14;i++) {window(11+i*4,8,12+4*i,8); if(frame[i+15].x==1) textbackground(RED); else textbackground(GREEN); clrscr(); cprintf(\ } window(25,10,55,23); textbackground(8); clrscr(); printf(\ Size Time Mem\ window(25,11,55,23); textbackground(6); clrscr(); sum=0; for(i=0;i {printf(\ printf(\ \ for(j=0;j printf(\ printf(\ \ sum++; } } } void work() {int cishu=60; int k; int i; while(cishu--) {clrscr(); window(1,1,80,25); textbackground(BLUE); clrscr(); textcolor(YELLOW); clrscr(); ttim(); k=rand()%2; if(k==1) {k=rand()%3+1; if((sum+k)>13) k=0; for(i=0;i num++; } } check(); putout(); sleep(1); } } main() {time_t t; srand((unsigned) time(&t)); clrscr(); first(); work(); window(1,1,80,25); textbackground(BLUE); clrscr(); printf(\ getch(); } Press Any Key to Exit !\ clrscr(); ttim(); k=rand()%2; if(k==1) {k=rand()%3+1; if((sum+k)>13) k=0; for(i=0;i num++; } } check(); putout(); sleep(1); } } main() {time_t t; srand((unsigned) time(&t)); clrscr(); first(); work(); window(1,1,80,25); textbackground(BLUE); clrscr(); printf(\ getch(); } Press Any Key to Exit !\
正在阅读:
os实验指导书05-03
讲述立邦刷新服务收费标准12-29
湘少版四年级英语Unit1 Its on you head导学案07-08
日照大学城简介12-21
实验室常用溶液及试剂配制(重新排版)10-01
浅谈王洛宾的艺术成就12-09
EMC Clariion CX 系列客户日常维护指南04-27
上海2010上半年会计基础考试07-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 指导书
- 实验
- 科技外协项目可行性论证意见表
- 写生测绘报告
- 四级语法专项练习题-倒装
- 五官科护理学习题及答案
- php中文日期 setlocale和strftime区域化 时间差 倒计时 问题
- 李四光计划
- (2014泰山版)小学信息技术第二册(下)教案 - 图文
- 2011年第二期知识讲座
- 党政机关事业单位党员干部学习测试题
- 毕业论文终稿
- 维文彩信制作软件架构与详细设计书
- 第五章 设计一个合理的教学
- 吉林省逆向物流的发展研究--陈雪论文
- 新课标人教版四年级语文上册“导学案”第一二单元
- 住院大楼工程施工组织设计 - 图文
- C8苯乙烯抽提蒸馏工艺简介 - 图文
- 东华大学纺织材料学历年考题(1996-2012)
- 工业建筑可靠性鉴定标准(GB50144-2008)
- 管网施工方案
- GHOST使用教程详解 - 图文