操作系统课程设计
任务一、进程创建、控制与撤消一、 目的:通过进程的创建和控制的设计来达到如下目的:1、 加深对进程概念的理解,明确进程和程序的区别;2、 进一步认识并发执行的概念,区别顺序执行和并发执行;3、 分析进程争用临界资源的现象,学习解决进程互斥的方法;二、 内容:在WINDOWS环境下模拟实验:1、 编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。2、 同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出。3、 按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程程序流程图:源代码如下:#include<iostream>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" << endl;cin >> runningsum + 1.pid;cout << "请输入新的进程的优先级" << endl;cin >> runningsum + 1.priority;cout << " 请输入新的进程的大小" << endl;cin >> runningsum + 1.size;cout << " 请输入新的进程的详情" << endl;cin >> runningsum + 1.detail;runningsum + 1.isrun = 1;sum+;return runningsum - 1.isrun;choose();void display()int pid;cout << "请输入进程的pid" << endl;cin >> pid;if (pid > 0 && pid <= 20 && runningpid.isrun = 1)cout << "进程的pid是:"<< runningpid.pid<<endl;cout << "进程的优先级是:"<< runningpid.priority<<endl;cout << "进程的大小是:"<< runningpid.size<<endl;cout << "进程的相关信息:"<< runningpid.detail<<endl;elsecout << "所查看运行进程不存在" << endl;choose();void replace()int pid1, pid2;cout << "请输入第一个替换进程的pid" << endl;cin >> pid1;cout << "请输入第二个替换进程的pid" << endl;cin >> pid2;if (pid1 > 0 && pid1 <= 20 && runningpid1.isrun = 1)if (runningpid1.priority > runningpid2.priority)ready20.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;runningpid2.pid = ready20.pid;runningpid2.priority = ready20.priority;runningpid2.size = ready20.size;runningpid2.detail = ready20.detail;cout << "替换完成" << endl;cout << "被替换进程的pid是:"<< ready20.pid<<endl;cout << "被替换进程的优先级是:", ready20.priority;cout << "被替换进程的大小是:"<< ready20.size<<endl;cout << "被替换进程的详情是:"<< ready20.detail<<endl;elsecout << "进程优先级不够大"<<endl;elsecout << "所查看运行进程不存在"<<endl;choose();void kill()int kpid;cout << "请输入进程的pid:"cin >> kpid;if (kpid > 0 && kpid < 20 && runningkpid.isrun = 1)runningkpid.isrun = 0;choose();void choose() int choose;cout << "是否继续操作?继续,请输入1,退出:按任意键" << endl;cout << "请输入你的选择:"cin >> 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.查看进程信息 " << endl;cout << " 3.撤销进程 4.终止进程 " << endl;cout << " 5. 退出 " << endl;cout << "请输入你的选择:"cin >> 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;运行结果如下:任务三、基本存储器管理一、 目的:一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收。二、 内容:从下两种存储管理方式的主存分配和回收中,选择一种管理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法。2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况。程序流程图:源代码如下:#include<conio.h>#include<iostream>#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为空,1未分配freesmaxsize; void allo(char a,float xk) int i,k; float ad; k=-1; for(i=0;i<maxsize;i+) if(freesi.size>=xk&&freesi.flag=1) if(k=-1|freesi.size<freesk.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) i+; if(i>=n) cout<<"error,未初始化"<<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