- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计科 康岩岩 201100814220
PAGE \* MERGEFORMAT16
操作系统实验报告试验一:进程创建与撤销
计科112康岩岩 201100814220
2013/4/10
实验一:进程创建与撤消
一、实验目的
1、 加深对进程概念的理解和进程创建与撤消算法;
2、 进一步认识并发执行的实质。
二、实验内容
本实验完成如下三个层次的任务:
(1)系统级—以普通用户身份认识windows的进程管理。通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。
(2)语言级—以普通程序员身份认识高级语言VC++/Java/C#的进程创建与撤销工具。
(3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。
三、实验步骤
1、windows的进程管理
以下是win7的人物管理器,可以进行进程的查看、创建、撤销等操作,由于操作比较简单与琐碎,这里不再具体描述。
2、VC++/Java/C#的进程创建与撤销工具
对于本次试验,我使用C#进行进程创建、撤销等测试,具体内容在下面给出。
3、进程创建与撤销的模拟实现
(1)总体设计:
此次程序完全由c#实现,能够通过窗体界面详细地生动地显示进程的运行状态。下面一步一步的进行实现
①数据定义:
类PCB的定义如下:
class PCB{
string pcbName; //进程名
int pcbId; //ID
long startTime; //开始时间
long pcbRuntime = 0; //运行时间
int pcbLeve; //线程优先级
}
对于所有的进程信息,用以下表储存:
Dictionaryint,Hashtable ThreadTable=new Dictionaryint,Hashtable();
容器 ThreadTable 用来储存所有进程 简直key 表示进程id,值为Hashtable,储存的为线程信息,
②函数
CREATE(PCB pcb)—进程创建:创建进程需要传入一个PCB对象,然后启动一个单独的线程来操作该对象,操作该对象就是把线程运行的状态传送给PCB同时PCB也唯一地标示其所在的线程。一个PCB对象的创建可通过一个与使用这交互的界面实现,使用者在交互窗体上输入进程名称,优先级,然后根据输入创建相应对象;
killProcess(int id)—进程终止:由于每个进程都具有不用的pcbid,所以要结束一个进程需要将其id作为参数传入,在窗体应用程序上,使用者只需选中进程列表总相应进程后,即可选择执行中止函数。
③主界面设计:
SEQ Figure \* ARABIC 1-主界面
利用C#的各种控件可以很方便地设计出界面,界面截图如下:
SEQ Figure \* ARABIC 2-运行界面
(2)详细设计:
此程序主要是用来实现进程的创建与撤销以及进行进程状态的实时显示,这一系列通过界面的交互操作来完成。由于本程序需要用C#来进行实现,关于进程的创建及界面操作都具有其语言特色,比如需要用到 事件、托管之类。
创建线程的函数如下,其中参数有交互窗体产生,主要包括进PcbName、PcbId及创建时间
private void createProcess(PCB pcb) {
//启动的线程函数为run
ParameterizedThreadStart ParStart = new ParameterizedThreadStart(run);
hread thread = new Thread(ParStart);
//设置pcb的起始时间为当前时间
pcb.StartTime = DateTime.Now.ToFileTime();
Hashtable hash=new Hashtable();
//将线程信息和pcb信息存入hash表
hash.Add(thread,thread);
hash.Add(pcb,pcb);
//将hash表存入记录线程状态的总表
this.ThreadTable.Add(pcb.PcbId,hash);
thread.Start(pcb); //启动线程
}
run 函数定义如下
/// summary
/// 线程运行的函数
/// /summary
/// param name=o具有唯一pcbid的PCB对象,用来标示线程,也用来显示储存线程运行状态/param
private void run(object o) {
//定义委托,用来调用函数显示某一进程的状态
Ge
文档评论(0)