进程创建与撤消
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:进程创建与撤消(模拟)
一、实验目的
1、加深对进程概念的理解和进程创建与撤消算法;
2、进一步认识并发执行的实质。
二、实验内容
本实验完成如下三个层次的任务:
(1)系统级—以普通用户身份认识windows的进程管理。通过windows 的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。
(2)语言级—以普通程序员身份认识高级语言VC++/Java/C#的进程创建与撤销工具。
(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。
三、实验步骤
1、windows的进程管理
当前状态
切换前
切换后
撤销
2、VC++进程创建与撤销工具
3、进程创建与撤销的模拟实现
(1)总体设计:
①数据结构定义:
结构体PCB:进程名、ID、运行时间、优先级等,队列的排序按创建时间或优先级排序。PCB空间—结构体PCB数组
就绪队列指针
空队列指针
②函数
CREATE()—进程创建:从PCB空间申请一个空PCB,填入进程参数,插入就绪队列;
KILL()—进程终止:将指定的就绪进程移出就绪队列,插入空队列;
就绪队列输出函数Display()—输出就绪队列中的进程信息,以便观察创建或撤消活动的结果;
主函数Main()—功能选择、输入新进程参数、调用创建函数、输出就
绪队列;输入进程名称、调用终止函数、输出就绪队列;
③主界面设计:进程创建、进程撤销、就绪队列显示菜单;数据输入和就绪队列显示区。
④功能测试:从显示出的就绪队列状态,查看操作的正确与否。
(2)详细设计:
①数据结构定义:
结构体PCB:
struct PCB {
char NAME[10];
long ID;
float TIME;
int PRIORITY;
};PCB pcb[100];
②函数设计
给出CREATE()、KILL()、Display()、Main()的流程图描述;
以CREATE()为例如下:
(3)调试与测试:列出你的测试结果,包括输入和输出。
四、实验总结
通过这次试验了解到了进城创建与撤销,并对以前的知识进行了复习,通过使用结构体和指针,实行进程的创建与撤销,我的程序设计能力得到
提高,
五、附录
带注释的源程序。
#include<>
#include<>
#include<>
#include<>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
struct PCB D)
{ cout<<"进程ID已存在"< cout<<"进程ID:"; cin>>id; } } cout<<"进程名:";cin>>name; cout<<"运行时间:"; cin>>time; cout<<"优先级:"; cin>>priority; N++;AME,name); pcb[N].ID =id; pcb[N].TIME =time; pcb[N].PRIORITY =priority; p=(QueuePtr)malloc(sizeof(QNode));RIORITY pcb[i]=pcb[j]; pcb[j]=pcb[0]; } } menu(); } void kill()D)D) { if== cout< while(p!=NULL) { pcb[p->data]=pcb[p->data+1];D<<""< p=p->next ; } menu(); } void exit()D =0; menu(); } void menu() { cout<<'\n'<<"1.进程创建"<<'\n'<<"2.进程撤销"<<'\n'<<"3.就绪队列显示"<<'\n'<<"4.退出"< int choice; cout<<"请选择:"; cin>>choice; switch(choice) { case 1:create();break; case 2:kill();break; case 3:display();break; case 4:exit(); default :exit(); } }