操作系统课程设计.docx
《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(50页珍藏版)》请在沃文网上搜索。
1、操作系统课程设计任务一、进程创建、控制与撤消一、 目的:通过进程的创建和控制的设计来达到如下目的:1、 加深对进程概念的理解,明确进程和程序的区别;2、 进一步认识并发执行的概念,区别顺序执行和并发执行;3、 分析进程争用临界资源的现象,学习解决进程互斥的方法;二、 内容:在WINDOWS环境下模拟实验:1、 编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。2、 同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。3、 按进程的优先级的顺序撤消进程,同时通
2、过终端显示PCB的撤消过程和内存的释放过程程序流程图:源代码如下:#include;using namespace std;struct PCBint 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;elsecout 请输入第 sum + 1 个进程endl;cout 请输入进程的pid runningsum + 1
3、.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 进程的pid是: runningpid.pid
4、endl;cout 进程的优先级是: runningpid.priorityendl;cout 进程的大小是: runningpid.sizeendl;cout 进程的相关信息: runningpid.detailendl;elsecout 所查看运行进程不存在 endl;choose();void replace()int pid1, pid2;cout 请输入第一个替换进程的pid pid1;cout 请输入第二个替换进程的pid pid2;if (pid1 0 & pid1 runningpid2.priority)ready20.pid = runningpid1.pid;ready2
5、0.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;runningpid2.pid = ready20.pid;runningpid2.pr
6、iority = 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;elsecout 进程优先级不够大endl;elsecout 所查看运行进程不存在endl;choose();
7、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 = 1;while (n = 1)system(cls);cout 进程模拟 endl;cout 1.创建进程 2.查看进程信息
8、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、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。程序流程图:源代码如下:#include#include#define n 10
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为空,1未分配freesmaxsize; void allo(char a,float xk) int i,k; float ad; k=-1; for(i=0;i
11、=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.size; i=0; while(useedi.flag!=0&i=n) couterror,未初始化endl; if(freesk.flag=0) freesk
12、.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; return; useeds.flag=0; S=useeds.addr; L=useeds.size; a=-1;k=-1;i=0; while(imaxsize
13、&(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.addr=S; freesa.size=freesa.size+L; else t=0; while(freest.flag=1&t=maxsize) cou
14、t内存空闲表没有空间,回收空间失败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; for(i=0;in;i+) useedi.flag=0; while(1) cout选择操作:endl0-退出endl1-分配内存endl2-回收已分配内存en
15、dl3-显示内存信息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.flagendl; cout 按任意键,输出已分配信息endl; getch(); cout 查看已分配分区:endl起始地址 分区长度 标志endl; for(i
16、=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;任务五、死锁的避免一、目的在多道程序系统中,多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险死锁。所谓死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种状态时,若无外力作用
17、,他们都无法在向前推进。我们可以在分配资源时加上限制条件就可以预防死锁,但是,在每一种预防死锁的方法之中,都施加了较强的限制条件;而在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统性能。二、内容利用银行家算法来避免死锁的发生#include#include#define max_s 20#define max_p 100int availablemax_s;int max max_p max_s ;int allocation max_p max_s ;int need max_p max_s ;int request max_s ;int requestPID;int so
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计