实验一进程的创建与撤销_第1页
实验一进程的创建与撤销_第2页
实验一进程的创建与撤销_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一:进程创建与撤消一、实验目的1、加深对进程概念的理解和进程创建与撤消算法;2、进一步认识并发执行的实质。二、实验内容本实验完成如下三个层次的任务:(1)系统级 以普通用户身份认识 windows 的进程管理。通过 windows 的 “任务管理器”观察进程的状态,进行进程的创建、切换和撤销。(2)语言级 以普通程序员身份认识高级语言 Java的进程创建与撤销工具。(3)模拟级以 OS设计师身份编程模拟实现进程创建与撤销功能, 并在屏 幕上观察进程活动的结果。三、实验步骤1、windows 的进程管理(1)按 ctrl+alt+delete 键,弹出 windows 任务管理器窗口(2)选

2、择相应操作序号,可以创建一个新的进程(3)在创建完一个新的进程后,可以显示出所有已创建进程的详细信息(4)选择相应操作序号,可以通过输入 pcbId 或 pcbGrade来撤销一个进程 2、进程创建与撤销工具(1) 进程的创建Process p=Runtime.getRuntime().exec("notepad");(2) 进程的撤销p.destroy();3、进程创建与撤销的模拟实现(1)总体设计: 数据结构定义:结构体 PCB:进程编号,进程名称,进程优先级和进程创建时间,队列按 进程创建时间排序。PCB 空间就绪队列指针空队列指针 函数进程创建:从 PCB 空间申请

3、一个空 PCB,填入进程参数,插入就绪队列; 进程终止:将指定的就绪进程移出就绪队列,插入空队列;就绪队列输出: 输出就绪队列中的进程信息, 以便观察创建或撤消活动的结 果;主函数:调用创建函数、调用终止函数、输出就绪队列; 主界面设计:进程创建、进程撤销、退出程序图 1 操作主界面 功能测试:从显示出的就绪队列状态,查看操作的正确与否。 2)详细设计:数据结构定义: 结构体 PCB:表 1 PCB 结构体表属性类型pcbIdintpcbNameStringpcbGradeintcreateTimeDatePCB 空间:是一个能存放十个 PCB 对象的数组就绪队列指针:定义一整型变量初始值为零

4、空队列指针:定义一整型变量初始值为零,当有进程创建时, 加入函数设计进程创建示例图图2 创建新进程创建多个进程后,可以查看到所有已创建的进程的详细信息,如图图 3 查看所有进程用户可以根据 pcbId 或者 pcbGrade来撤销某一个进程,并在撤销成功后, 可以看到撤销后剩余的所有进程信息,如图。图 4 根据 pcbId 撤销某个进程图5 根据pcbGrade撤销某个进程在操作主界面中选择操作 3 时,可以退出该程序,如图实验总结图6 退出程序四、该程序的主要任务为对 windows 的进程管理进行相应的模拟和认识。通过 对于进行的创建,切换和撤销,已完成我们对于 windows 进行的初步

5、了解和认 识。在编制程序的过程中, 我确实遇见了不少的问题, 发现其实自己并不强。 但 是当一个个问题的出现, 自己努力并最后解决的时候, 心里却悠然产生了一种非 常舒服和惬意的感念。 因为是自己努力得来的东西, 所以无论怎么样都会看着非 常开心,非常激动。通过此次试验, 我更加了解了关于进程方面的认识。 我今后会更加努力, 努 力学好自己的专业水平。五、附录/实体类#include <stdio.h>#include <iostream.h>#include <malloc.h>#define SIZE 10typedef char QElemType;t

6、ypedef int IP;typedef int GRADE;typedef struct QNode / 创建 PCBQElemType name;IP id;QElemType time;GRADE grade;struct QNode *next;PCB,*PCBLink;typedef struct PCBLink front;PCBLink rear;LinkQueue;void InitPCB(QNode PCB) /PCB 初始化PCB.grade=0;PCB.id=0;PCB.name='*'PCB.next=NULL;PCB.time='*'

7、void InitReadyQueue(LinkQueue &Q)/初始化就绪队列Q.front=Q.rear=(PCBLink) malloc(sizeof(QNode);Q.front->next=NULL;void EnQueue(LinkQueue &Q, QNode PCB)/ 入队PCBLink p = (PCBLink) malloc(sizeof(QNode); p->id=PCB.id;p->name=PCB.name; p->grade=PCB.grade; p->time=PCB.time; p->next=PCB.ne

8、xt; Q.rear->next=p; Q.rear=p;void DeNullQueue(LinkQueue &Q)/ 空队列出队if(Q.front=Q.rear)cout<<" 空队列空间已满,不能分配空间 !"<<endl; elseQ.front->next=Q.front->next->next; if(Q.rear=Q.front->next)/选择指定元素从就绪队列出队Q.rear=Q.front;void DeReadyQueue(LinkQueue &Q, QNode &PCB

9、, int b) if(Q.front=Q.rear)cout<<" 队列是空的 ,不能读出数据 !"<<endl;elsePCBLink p = Q.front; while(p->next!=Q.rear->next) switch(b) case 1: if(p->next->id=PCB.id)PCB.name = p->next->name;PCB.id = p->next->id;PCB.time = p->next->time;PCB.grade = p->next-&g

10、t;grade; p->next = p->next->next; if(Q.front=p)Q.front->next = p->next;if(Q.rear=Q.front) Q.rear=Q.front; elsep=p->next;break;case 2: if(p->next->grade=PCB.grade)PCB.name = p->next->name;PCB.id = p->next->id;PCB.time = p->next->time;PCB.grade = p->next-&g

11、t;grade; p->next = p->next->next; if(Q.front=p)Q.front->next = p->next;if(Q.rear=Q.front) Q.rear=Q.front; elsep=p->next;PCB 优先级:break; cout<<endl<<" 您终止的 PCBName: "<<PCB.name<<" ; PCBID : "<<PCB.id<<" ; "<<PCB.

12、grade<<" ; PCB 创建时间: "<<PCB.time<<endl;void InitNullQueue(LinkQueue &Q)/初始化 PCB 空队列Q.front=Q.rear=(PCBLink) malloc(sizeof(QNode); Q.front->next=NULL;for(int i=0;i<SIZE;i+)QNode PCB;InitPCB(PCB);EnQueue(Q, PCB);void CreatePCB(LinkQueue &NQ, LinkQueue &RQ,

13、QNode PCB)/ 创建原语DeNullQueue(NQ);EnQueue(RQ,PCB);void DeletePCB(LinkQueue &NQ, LinkQueue &RQ,QNode PCB, int b)/ 终止原语DeReadyQueue(RQ,PCB,b);InitPCB(PCB);EnQueue(NQ,PCB);void PCBShow(LinkQueue RQ)/ 读就绪队列if(RQ.front=RQ.rear)cout<<" 就绪队列无数据! "<<endl;elsecout<<endl<&

14、lt;endl; cout<<"就绪队列 PCB 列表 "<<endl; cout<<"PCBName "<<"PCBID "<<"PCB 优先级 "<<endl; PCBLink q = RQ.front->next;while(q!=RQ.rear->next)cout<<" "<<q->name<<" "<<q->id<&

15、lt;" "<<q->grade<<endl; q=q->next; void Create(LinkQueue &NQ, LinkQueue &RQ, QNode PCB)/ 创建原语界面cout<<"="<<endl; cout<<endl;cout<<" 进程创建与撤消 - 创建进程 "<<endl; cout<<""<<endl;cout<<"请您输入

16、您的 PCB 数据: "<<endl;cout<<"PCBName : " cin>>PCB.name; cout<<"PCBID : " cin>>PCB.id;cout<<"PCB 优先级: " cin>>PCB.grade;cout<<"PCB 创建时间: " cin>>PCB.time;CreatePCB(NQ,RQ,PCB); / 创建原语 PCBShow(RQ); / 读就绪队列 voi

17、d Delete(LinkQueue &NQ, LinkQueue &RQ, QNode PCB)/ 终止原语界面InitPCB(PCB);int b=0;cout<<"=*="<<endl;cout<<endl;cout<<" 进程创建与撤消 - 终止进程 "<<endl; cout<<" cout<<"请您输入终止依据 (1.PCBID 2.PCB 优先级 ): "<<endl; cin>>b;if

18、(b=1)cout<<" 请您输入 PCBID :"cin>>PCB.id;elsecout<<" 请您输入 PCB 优先级: "cin>>PCB.grade;DeletePCB(NQ,RQ,PCB,b); /终止原语PCBShow(RQ); / 读就绪队列 void main()LinkQueue NQ,RQ; / 空队列、就绪队列InitNullQueue(NQ); / 初始化空队列InitReadyQueue(RQ); / 初始化就绪队列QNode PCB;InitPCB(PCB);int n;*=&

19、quot;<<endl;cout<<"=*cout<<endl;cout<<" cout<<endl;进程创建与撤消 "<<endl;cout<<"*1.创建原语 *"<<endl;cout<<"$"<<endl; cout<<endl;cout<<"*2.终止原语 *"<<endl;cout<<endl;cout<<"*0.退出 *"<<endl;cout<<endl;cout<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论