操作系统课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任务一、进程创建、控制与撤消
一、目的:
通过进程的创建和控制的设计来达到如下目的:
1、加深对进程概念的理解,明确进程和程序的区别;
2、进一步认识并发执行的概念,区别顺序执行和并发执行;
3、分析进程争用临界资源的现象,学习解决进程互斥的方法;
二、内容:
在WINDOWS环境下模拟实验:
1、编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四
作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。
2、同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出
来,同样通过终端输出。
3、按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和
内存的释放过程
程序流程图:
源代码如下:
#include
using namespace std; struct PCB
{
int pid;
int priority;
int size;
int detail;
int isrun;
};
PCB running[20], ready[20]; int sum = 0, pid_1;
void choose();
void menu();
int create()
{
if (sum >= 20)
cout << "内存已满,请先结束或换出进程" << endl;
}
else
{
cout << "请输入第" << sum + 1 << "个进程"< cout << "请输入进程的pid" << endl; cin >> running[sum + 1].pid; cout << "请输入新的进程的优先级" << endl; cin >> running[sum + 1].priority; cout << " 请输入新的进程的大小" << endl; cin >> running[sum + 1].size; cout << " 请输入新的进程的详情" << endl; cin >> running[sum + 1].detail; running[sum + 1].isrun = 1; sum++; } return running[sum - 1].isrun; choose(); } void display() { int pid; cout << "请输入进程的pid" << endl; cin >> pid; if (pid > 0 && pid <= 20 && running[pid].isrun == 1) cout << "进程的pid是:"<< running[pid].pid< cout << "进程的优先级是:"<< running[pid].priority< cout << "进程的大小是:"<< running[pid].size< cout << "进程的相关信息:"<< running[pid].detail< } else { cout << "所查看运行进程不存在" << endl; } choose(); } void replace() { int pid1, pid2; cout << "请输入第一个替换进程的pid" << endl; cin >> pid1; cout << "请输入第二个替换进程的pid" << endl; cin >> pid2; if (pid1 > 0 && pid1 <= 20 && running[pid1].isrun == 1) { if (running[pid1].priority > running[pid2].priority) { ready[20].pid = running[pid1].pid; ready[20].priority = running[pid1].priority; ready[20].size = running[pid1].size; ready[20].detail = running[pid1].detail; running[pid1].pid = running[pid2].pid; running[pid1].priority = running[pid2].priority; running[pid1].size = running[pid2].size; running[pid1].detail = running[pid2].detail; running[pid2].pid = ready[20].pid; running[pid2].priority = ready[20].priority; running[pid2].size = ready[20].size; running[pid2].detail = ready[20].detail; cout << "替换完成" << endl; cout << "被替换进程的pid是:"<< ready[20].pid< cout << "被替换进程的优先级是:", ready[20].priority; cout << "被替换进程的大小是:"<< ready[20].size< cout << "被替换进程的详情是:"<< ready[20].detail< } else { cout << "进程优先级不够大"<