ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:335.87KB ,
资源ID:5066439      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5066439.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计.docx

1、操作系统课程设计任务一、进程创建、控制与撤消一、 目的:通过进程的创建和控制的设计来达到如下目的:1、 加深对进程概念的理解,明确进程和程序的区别;2、 进一步认识并发执行的概念,区别顺序执行和并发执行;3、 分析进程争用临界资源的现象,学习解决进程互斥的方法;二、 内容:在WINDOWS环境下模拟实验:1、 编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。2、 同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。3、 按进程的优先级的顺序撤消进程,同时通

2、过终端显示PCB的撤消过程和内存的释放过程程序流程图:源代码如下:#include;using namespace std;struct PCB int pid; int priority; int size; int detail; int isrun;PCB running20, ready20;int sum = 0, pid_1;void choose();void menu();int create() if (sum = 20) cout 内存已满,请先结束或换出进程 endl; else cout 请输入第 sum + 1 个进程endl; cout 请输入进程的pid runn

3、ingsum + 1.pid; cout 请输入新的进程的优先级 runningsum + 1.priority; cout 请输入新的进程的大小 runningsum + 1.size; cout 请输入新的进程的详情 runningsum + 1.detail; runningsum + 1.isrun = 1;sum+; return runningsum - 1.isrun; choose();void display() int pid; cout 请输入进程的pid pid; if (pid 0 & pid = 20 & runningpid.isrun = 1) cout 进程的

4、pid是: runningpid.pidendl; cout 进程的优先级是: runningpid.priorityendl; cout 进程的大小是: runningpid.sizeendl; cout 进程的相关信息: runningpid.detailendl; else cout 所查看运行进程不存在 endl; choose();void replace() int pid1, pid2; cout 请输入第一个替换进程的pid pid1; cout 请输入第二个替换进程的pid pid2; if (pid1 0 & pid1 runningpid2.priority) ready

5、20.pid = runningpid1.pid; ready20.priority = runningpid1.priority; ready20.size = runningpid1.size; ready20.detail = runningpid1.detail; runningpid1.pid = runningpid2.pid; runningpid1.priority = runningpid2.priority; runningpid1.size = runningpid2.size; runningpid1.detail = runningpid2.detail; runni

6、ngpid2.pid = ready20.pid; runningpid2.priority = ready20.priority; runningpid2.size = ready20.size; runningpid2.detail = ready20.detail; cout 替换完成 endl; cout 被替换进程的pid是: ready20.pidendl; cout 被替换进程的优先级是:, ready20.priority; cout 被替换进程的大小是: ready20.sizeendl; cout 被替换进程的详情是: ready20.detailendl; else co

7、ut 进程优先级不够大endl; else cout 所查看运行进程不存在endl; choose();void kill() int kpid; cout kpid; if (kpid 0 & kpid 20 & runningkpid.isrun = 1) runningkpid.isrun = 0; choose();void choose() int choose; cout 是否继续操作?继续,请输入1,退出:按任意键 endl; cout choose; if (choose = 1) menu(); else exit(0); void menu() int n, i; n =

8、1; while (n = 1) system(cls); cout 进程模拟 endl; cout 1.创建进程 2.查看进程信息 endl; cout 3.撤销进程 4.终止进程 endl; cout 5. 退出 endl; cout i; switch (i) case 1:create(); break; case 2:display(); break; case 3:replace(); break; case 4:kill(); break; case 5: exit(0); default:n = 0; int main() menu(); return 0;运行结果如下:任务三

9、、基本存储器管理一、 目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收。二、 内容:从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用

10、最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。程序流程图:源代码如下:#include#include#define n 10 /系统最大作业数#define maxsize 20 /空闲区最大内存 #define minisize 100 using namespace std;struct float addr; /已分配分区起始地址 float size; /已分配分区长度,单位为字节 int flag; useedn; /已分配区表 struct float addr; /空闲区起始地址 float size; /空闲区大小int flag; /0为空

11、,1未分配freesmaxsize; void allo(char a,float xk) int i,k; float ad; k=-1; for(i=0;i=xk&freesi.flag=1) if(k=-1|freesi.sizefreesk.size) k=i; if(k=-1) cout无可用空闲区endl; return; if(freesk.size-xk=minisize) freesk.flag=0; ad=freesk.addr; xk=freesk.size; else freesk.size=freesk.size-xk; ad=freesk.addr+freesk.s

12、ize; i=0; while(useedi.flag!=0&i=n) couterror,未初始化endl; if(freesk.flag=0) freesk.flag=1; else freesk.size=freesk.size+xk; return; else useedi.addr=ad; useedi.size=xk; useedi.flag=a; return; void findc(char x) int i,k,a,s,t; float S,L; s=0; while(useeds.flag!=x|useeds.flag=0)&s=n) cout没有找到该作业endl; re

13、turn; useeds.flag=0; S=useeds.addr; L=useeds.size; a=-1;k=-1;i=0; while(imaxsize&(a=-1|k=-1) if(freesi.flag=1) if(freesi.addr+freesi.size=S)k=i; if(freesi.addr=S+L)a=i; i+; if(k!=-1) if(a!=-1) freesk.size=freesa.size+freesk.size+L; freesa.flag=0; else freesk.size=freesk.size+L; else if(a!=-1) freesa

14、.addr=S; freesa.size=freesa.size+L; else t=0; while(freest.flag=1&t=maxsize) cout内存空闲表没有空间,回收空间失败endl; useeds.flag=a; return; freest.addr=S; freest.size=L; freest.flag=1; return; int main( ) int i,a; float xk; frees0.addr=10240; frees0.size=10240; frees0.flag=1; for(i=1;imaxsize;i+) freesi.flag=0; f

15、or(i=0;in;i+) useedi.flag=0; while(1) cout选择操作:endl0-退出endl1-分配内存endl2-回收已分配内存endl3-显示内存信息endl; couta; switch(a) case 0: exit(0); case 1:couta; coutxk; allo(a,xk); break; case 2:couta; findc(a); break; case 3:cout输出空闲分区:endl起始地址 分区长度 标志endl; for(i=0;imaxsize;i+) coutfreesi.addr freesi.size freesi.fl

16、agendl; cout 按任意键,输出已分配信息endl; getch(); cout 查看已分配分区:endl起始地址 分区长度 标志endl; for(i=0;in;i+) if(useedi.flag!=0) coutuseedi.addr useedi.size useedi.flagendl; else coutuseedi.addr useedi.size useedi.flagendl; break; default:cout输入有误!endl; return 1;任务五、死锁的避免一、目的在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生

17、一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用,他们都无法在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。二、内容利用银行家算法来避免死锁的发生#include#include#define max_s 20#define max_p 100int availablemax_s;int max max_p max_s ;int alloca

18、tion max_p max_s ;int need max_p max_s ;int request max_s ;int requestPID;int source; int process; using namespace std; /1:表示请求的资源还分配的资源/2:表示请求的资源系统剩余的资源/3:表示不存在安全序列/0:成功int banker( int stSq ) int i , j , k; for( i = 0 ; i needrequestPIDi ) return 1; for( i = 0 ; i availablei ) return 2; for( i = 0

19、; i source ; i+ ) availablei -= requesti; allocationrequestPIDi += requesti; needrequestPIDi -= requesti; int finish max_p = 0 ; int work max_s ; int curS; for( i = 0 ; i source ; i+ ) worki = availablei; for( k = 0 ; k process ; k+ ) bool flag = false; for( i = 0 ; i process & !flag ; i+ ) if( fini

20、shi = 0 ) flag = true; for( j = 0 ; j workj ) flag = false; curS = i; if( !flag ) for( j = 0 ; j source ; j+ ) availablej += requestj; allocationrequestPIDj -= requestj; needrequestPIDj += requestj; return 3; finishcurS = k+1; for( j = 0 ; j source ; j+ ) workj += allocationcurSj; for( i = 0 ; i pro

21、cess ; i+ ) j = 0; while( finishj != i + 1 ) j+; stSqi = j; return 0;void setCS() source = 3; process = 5; int a = 4 , 5 , 8 ; int max20100; int m max_s = 8 , 5 , 4 , 5 , 3 , 3 , 10 , 1 , 3 , 3 , 3 , 3 , 5 , 4 , 4 , ; int al max_s = 1 , 2 , 1 , 3 , 1 , 1 , 4 , 1 , 3 , 3 , 2 , 2 , 1 , 1 , 3 ; int re

22、= 0 , 2 , 2 ; int i , j; cout当前可用资源数:endl; for( i = 0 ; i source ; i+ ) availablei = ai; coutsetw(5)availablei; coutendlendl; cout进程所需资源的最大数量:endl; for( i = 0 ; i process ; i+ ) for( j = 0 ; j source ; j+ ) maxij = mij; coutsetw(5)maxij; coutendl; coutendl; cout进程已分配到资源量:endl; for( i = 0 ; i process

23、 ; i+ ) for( j = 0 ; j source ; j+ ) allocationij = alij; coutsetw(5)allocationij; coutendl; coutendl; cout进程还需的资源量:endl; for( i = 0 ; i process ; i+ ) for( j = 0 ; j source ; j+ ) needij = maxij - allocationij; coutsetw(5)needij; coutendl; coutendl; requestPID = 1; cout进程 requestPID 正在请求的资源:endl; for( i = 0 ; i source ; i+ ) requesti = rei; coutsetw(5)requesti; coutendlendl; void main() setCS(); int stSq max_p = 0 ; cout银行家算法的演示endl; int error = banker( stSq ); if( !err

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

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