进程创建和撤销

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统

实验题目:进程的创建与撤销指导老师:***

专业班级:软工086班

学号:************

*名:***

中原工学院•软件学院

实验一:进程创建与撤消

一.实验目的

(1)加深对进程概念的理解和进程创建与撤消算法;

(2)进一步认识并发执行的实质。

二.实验属性

该实验为验证性+设计性实验。

三.实验仪器设备及器材

普通PC386以上微机

四.实验要求

本实验要求2学时完成。

本实验要求完成如下三个层次的任务:

(1)系统级—以普通用户身份认识windows的进程管理。通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。

(2)语言级—以普通程序员身份认识高级语言VC++/Java/C#的进程创建与撤销工具。

(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。

实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告;实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。

五.实验提示--模拟级编程

5.1数据结构定义

#define OK 1 成功返回OK定义为1

#define EVERFLOW -1 越界用-1

#define PCBSIZE 10 //空闲队列初始数组空间

#define NULL 0 //空定义为0

typedef struct PCB //定义进程结构体

{

int id; //进程的序号

int priority; //进程的优先级

struct PCB *next; //进程指向下一个节点

}PCB,*PCBList;

PCB pcb[PCBSIZE];//创建pcb块,初始空间大小为10

PCBList nullPcb;//空闲队列

PCBList readyPcb;//就绪队列

PCBList readyPcbtail;//就绪队列队尾指针

5.2函数

InitPcb(PCBList &nullPcb)——初始化空闲队列

Create(PCBList &nullPcb)——//创建一个pcb进程从PCB空间申请一个空PCB,填入进程参数,创建一个pcb进程。

InsertReadyPcb(PCBList &readyPcb,PCBList &pcb)——将刚刚创建的进程插入到有序的就绪队列中

Delete(int id,PCBList &readyPcb,PCBList &nullPcb)——用于销毁一个pcb进程,指定销毁队列的序列号,销毁该进程,并将它插入到空闲队列中

PrintPCB(PCBList &readyPcb)——就绪队列输出函数—输出就绪队列中的进程信息,以便观察创建或撤消活动的结果

主函数—功能选择,1.创建进程2.销毁进程3.输出就绪队列 4.退出系统

5.3函数设计及实现

5.3.1 初始空闲队列函数InitPcb()

Pcb块使用空间大小为10的pcb进程数组组成,该函数就是将pcb块中的元素连接起来,并用nullPcb空闲队列的头指针指向第一个元素,实现空闲队列的初始化工作。

5.3.2创建新进程函数Create()

空闲队列如果不空,从空闲队列中提取一个进程,再对进程赋值,如进程名,进程id,进程优先级等,完成一个进程的创建。

5.3.3销毁一个进程函数Delete()

销毁进程,在此函数中通过传入的id号,在就绪队列中查找与该id相同的进程,删除该进程,并将刚刚删除掉的进程插入到空闲队列的对头。

5.3.4 就绪队列输出函数PrintPCB()

遍历就绪队列,并将队列进程的基本信息输出。

5.3.5进程插入就绪队列InsertReadyPcb()

使用CreatePcb()的一个进程,而本函数就是将刚刚创建好的进程插入到就绪队列,并且按照进程的优先级序列排列了就绪队列的所有进程。

5.3.6主函数main()

主函数中先调用InitPcb()对空闲队列初始化,使用一个按钮控制主界面的循环,分别使用1-4序列来控制界面的跳转,流程的控制,他们分别运行以下功能:进程创建、进程销毁、就绪队列输出、退出系统。

5.4主界面设计

5.4.1主界面

主界面中主要包含四个操作,进程创建,进程销毁,就绪队列输出,退出系统,如下图:

图5.4.1主界面

5.4.2进程创建

输入1,进入创建进程子菜单中,分别赋予该进程的id值和优先级值,就会将创建的进程插入到就绪队列中了,如下图:

图5.4.2创建进程

5.4.3就绪队列输出

输入3,就可以将现有就绪队列的进程输出,如下图:

图5.4.3输出队列

5.4.4销毁进程

输入2。便可以删除指定的进程,需要输入进程的ID号,如下图:

图5.4.4销毁进程

5.4.5功能测试

成功将新建的进程删除,测试通过如图:

图5.4.5测试通过

六.实验总结

通过进程创建和销毁的模拟实验,让我又重新温习了一下我的c语言基础,在这个实验中主要是使用了指针和结构体,巧妙的比喻,使进程的创建和撤销很逼真,我真实的感受到,编程语言的重要性了,它可以很容易的是我们表达出很难描绘出来的结果,其中奥妙无穷,我会认真的漫步在这个金沙滩上。实验中遇到问题主要还是指针为空,没有初始化等,现在在看到这样的问题解决已经不是那么棘手了,并没有耗费太多的时间,这关过了之后,就是算法精妙的问题了,怎样的算法实现效率最高,就是我追求的下一个目标…

相关文档
最新文档