版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计 实验报告姓 名: 李文孝 班 级: 12计科2班 学 号: 5 指导老师: 王燕红、汤可宗 景德镇陶瓷学院目录任务一、进程创建、控制与撤消1一、目的:1二、内容:1三、程序框图2四、源代码3五、运行结果7任务二、单处理机系统的进程调度11一、目的:11二、程序框图11三、源代码12四、实验结果17任务五、死锁的避免19一、目的19二、内容19三、程序框图19五、实验结果25任务六、磁盘空间的分配与回收26一、目的:26二、内容26三、进程框图27四、源代码28四、实验结果31任务一、进程创建、控制与撤消一、目的:1、 加深对进程概念的理解,明确进程和程序的区别;2、 进一步认
2、识并发执行的概念,区别顺序执行和并发执行;3、 分析进程争用临界资源的现象,学习解决进程互斥的方法;二、内容:1、编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。2、同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。3、按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程。三、程序框图四、源代码#include conio.h#include stdio.h#include stdlib.hstruct jincheng_typ
3、e int pid;int youxianji;int daxiao;int msg;int live;struct jincheng_type neicun20,waicun20;int shumu=0,pid_1;create()if(shumu=20)printf(n 内存已满,请先结束或换出进程n); else printf(n 请输入第%d个进程n,shumu+1); printf(n 请输入进程的pidn);scanf(%d,&neicunshumu+1.pid); printf(n 请输入新的进程的优先级n); scanf(%d,&neicunshumu+1.youxianji)
4、;printf( 请输入新的进程的大小n);scanf(%d,&neicunshumu+1.daxiao);printf( 请输入新的进程的消息n);scanf(%d,&neicunshumu+1.msg); neicunshumu+1.live=1; shumu+; return neicunshumu-1.live; void viewrun() int vpid; printf(n 请输入进程的pidn); scanf(%d,&vpid);if(vpid0&vpid0&pid1neicunpid2.youxianji) waicun20.pid=neicunpid1.pid; waicu
5、n20.youxianji=neicunpid1.youxianji; waicun20.daxiao=neicunpid1.daxiao; waicun20.msg=neicunpid1.msg; neicunpid1.pid=neicunpid2.pid; neicunpid1.youxianji=neicunpid2.youxianji; neicunpid1.daxiao=neicunpid2.daxiao; neicunpid1.msg=neicunpid2.msg; neicunpid2.pid=waicun20.pid; neicunpid2.youxianji=waicun20
6、.youxianji; neicunpid2.daxiao=waicun20.daxiao; neicunpid2.msg=waicun20.msg; printf(n 替换完成n); printf(n 被替换进程的pid是:%dn,waicun20.pid); printf(n 被替换进程的youxianji是:%dn,waicun20.youxianji); printf(n 被替换进程的daxiao是:%dn,waicun20.daxiao); printf(n 被替换进程的msg是:%dn,waicun20.msg);else printf(n进程优先级不够大); else print
7、f(所查看运行进程不存在); printf(请按回车退出换出进程n);c=getch();void kill() int kpid; printf(n 请输入进程的pidn); scanf(%d,&kpid);if(kpid0&kpid20&neicunkpid.live=1)neicunkpid.live=0; main ()int n,m,i;char a;n=1;while(n=1)system(cls);printf(n *); printf(n * 进程演示 *);printf(n *);printf(n 1.创建新的进程 2.查看运行进程 );printf(n 3.换出某个进程 4
8、.杀死运行进程 ); printf(n 5. 退出 ); printf(n *);printf(n 请选择(15)); a=getch();switch(a) case1:create();break;case2:viewrun();break;case3:tihuan();break;case4:kill();break;case5: exit(0);default:n=0; 五、运行结果任务二、单处理机系统的进程调度一、目的:1、加深对进程概念的理解,明确进程和程序的区别2、深入了解系统如何组织进程,创建进程3、进一步认识如何实现处理机调度。二、程序框图While循环遍历就绪队列调用che
9、ck()函数,打印所有队列将就绪队列中的首进程由“就绪状态”转为执行状态调用running()函数调用destroy()函数,释放进程调用input()函数;用户输入测试数据输入的同时建立好就绪序列初始化运行时间是否等于服务开始结束三、源代码#include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ char name10; char state; int super; int ntime; int rt
10、ime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-super)(se
11、cond-super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; void input() /* 建立进程控制块函数*/ int i,num; printf(n请输入进程数量:); scanf(%d,&num); for(i=1;iname); printf(n 输入进程优先数:);
12、scanf(%d,&p-super); printf(n 输入进程运行时间:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); void show()printf(nqnametstatetsupertndtimetruntimen); void disp(PCB * pr) /*建立进程显示函数,用于显示当前进
13、程*/ printf( %st,pr-name); printf( %ct,pr-state); printf( %dt,pr-super); printf( %dt,pr-ntime); printf( %dt,pr-rtime); printf(n); void check() /* 建立进程查看函数 */ PCB* pr; printf(n*当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/ show();disp(p); pr=ready; if(pr=NULL)printf(n*当前就绪队列为空!);else printf(n*当前就绪队列状态为:); /*显示就
14、绪队列状态*/show();while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(n 进程%s已完成.n,p-name); free(p); void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else (p-super)-; p-state=w; sort(); /*调用sort函数*/ void main() /*主函数*
15、/ int len,h=0; char ch; input(); len=space(); while(len!=0)&(ready!=NULL) ch=getchar(); h+; printf(n 当前运行次数为:%d n,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一键继续.); ch=getchar(); printf(nn 进程已经完成.n); ch=getchar(); 四、实验结果任务五、死锁的避免一、目的在多道程序系统中,多个进程的并发执行来改善系统的资源利用
16、率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。二、内容利用银行家算法来避免死锁的发生开始计算剩余资源量显示信息show()初始化Init()主函数main()结束已分配资源Allocation判断是否安全Safe程序所需济源Need三、程序框图四、源
17、代码#include#include#includeusing namespace std;int Sign100;/标记数组int Progress100;/进程执行顺序标记数组string Number100;/进程号class BankerArithmeticpublic:BankerArithmetic(int a,int b); /构造函数int Safe(int grac);/判断是否安全void Show();/显示相关信息void Bank();/计算剩余资源量BankerArithmetic();/析构函数private:BankerArithmetic();void Ini
18、t(int a,int b);/初始化int ID;/记录成功申请资源的进程号int n; /包含的进程数int m; /资源种类数int *Available;/可提供的资源总数int * Allocation;/以分配的资源int * Need;/仍需要的资源int *Left;/剩余的资源;BankerArithmetic:BankerArithmetic(int a,int b):n(a),m(b)Init(n,m);BankerArithmetic:BankerArithmetic()int i;deleteAvailable;deleteLeft;for(i=0;in;i+)del
19、eteAllocationi;deleteAllocation;for(i=0;in;i+)deleteNeedi;deleteNeed;void BankerArithmetic:Init(int a,int b)int i,j;for(i=0;i100;i+)Signi=-1;Available=new intb;/Availablede的申请Left=new intb;/Left的申请Allocation=new int*a;/Allocation的申请for(i=0;ia;i+)Allocationi=new intb;Need=new int*a;/Need的申请for(i=0;ia
20、;i+)Needi=new intb;cout请输入可用资源Available:endl;for(i=0;iAvailablei;cout请输入进程号:endl;for(i=0;iNumberi;cout请输入分配资源矩阵Allocation:(a,b)endl; for(i=0;ia;i+)for(j=0;jAllocationij;cout请输入仍需要资源矩阵Need:(a,b)endl; for(i=0;ia;i+)for(j=0;jNeedij;/计算剩余的资源for(i=0;im;i+)Lefti=Availablei;j=0;while(jm)for(i=0;in;i+)Leftj
21、-=Allocationij;j+;int BankerArithmetic:Safe(int grac) int i,j,temp;for(i=0;in;i+)if(Signi!=1)temp=1;for(j=0;j=Needij)temp*=1;elsetemp*=0;if(temp=1)break;ID=i;Signi=1;Progressgrac=ID;if(temp)return ID;elsereturn -1;void BankerArithmetic:Bank()for(int i=0;im;i+)Lefti=Lefti+AllocationIDi; void BankerAr
22、ithmetic:Show()int i,j;cout进程 Allocation Need n;for(i=0;in;i+)if(Signi!=1)coutNumberi ;for(j=0;jm;j+)cout Allocationij;cout ;for(j=0;jm;j+)cout Needij;coutendl;coutendl;for(i=0;im;i+)coutLefti ;coutendl;int main()int process,source,result,i=0,sum=1;char ans1,ans2;coutprocess;coutsource;BankerArithme
23、tic banker(process,source);while(iprocess)coutans1;if(ans1=y|ans1=Y)banker.Show();result=banker.Safe(i);if(result=0)Progressi=result;elsesum=0;cout处于不安全状态!程序将退出!n; exit(1);cout按空格键程序执行一次endl; while(cin.get(ans2)&ans2=n)banker.Bank();i+;if(sum=1)cout进程执行的顺序如下:;for(i=0;iprocess-1;i+)coutNumberProgress
24、i ; coutNumberProgressprocess-1;return 0;五、实验结果任务六、磁盘空间的分配与回收一、目的:磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。用户作业在执行期间常常要在磁盘上建立文件或已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实验使学生掌握磁盘存储空间的分配和收回算
25、法。二、内容模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。从下题目中选择一题来实现设备的管理:1、连续的磁盘存储空间的分配和回收。2、用位示图管理磁盘存储空间。3、模拟UNIX系统的空闲块组链接法,实现磁盘存储空间的管理。三、进程框图分配框图开始把As块内容复制到专用块A0:=Asi:=MA0把专用块内容自制到主存MA:=A0MA01?MA0=1?MA1=0?S:=MAi空闲块数减1MA0:=MA0-1显示分配的块号sS:=MAi显示:系统无空闲块结束 否 是 是 否 否 是回收框图开始J:=归还块号MA0=3?i:=MA0MAi:=jMA0:=MA0+1MAj:=MAMA0:
26、=1MA1:=j结束 否 是四、源代码#include #include void Initbitmap(int map88)int cylinder,track,sector;char choice=Y;printf(初始化位视图.n);while(choice=y|choice=Y)printf(柱面号:);scanf(%d,&cylinder);printf(磁道号:);scanf(%d,&track);printf(物理记录号:);scanf(%d,§or);mapcylinder4*track+sector=1;printf(contiune?);getchar();scanf(%c,&choice);void allocate(int map88)int i,j;int flag=0;int cylinder,track,sector;for(i=0;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 热销销售代理合同样本集
- 建筑用地承包合同汇编
- 代理加盟协议书范本
- 商业铺位转让协议样本
- 国际石油合作权益转让合同
- 合伙经营食品店合同书
- 合租租房合同样本:2024年合租租赁协议模板
- 酒店预订服务协议书模板
- 字画作品买卖协议
- 室外停车场租赁合同范例
- 专题03 中点弦问题(点差法)(教师版)2024高考数学复习满分突破
- 少儿体智能特色课程设计
- 成人重症患者镇痛管理(专家共识)
- 中职语文课件:1.1《送瘟神》课件14张2023-2024学年中职语文职业模块
- 旅游规划与开发(第五版)课件 第十一章 旅游规划图件及其制作
- 物业营运收费优惠活动方案
- 《中小学研学旅行课程开发规范》
- 化疗药物神经毒性
- 有限空间作业的安全监护人
- 阁楼拆除施工方案
- 金融科技对商业银行盈利能力影响的研究
评论
0/150
提交评论