计算机操作系统实验课实验报告

  • 格式:docx
  • 大小:300.46 KB
  • 文档页数:28

.

可编辑文本

实验报告

实验课程: 计算机操作系统

学生姓名: XXX

学 号: XXXX

专业班级: 软件

2014年12月25日

.

可编辑文本 目录

实验一 熟悉Windows XP中的进程和线程 .. 3

实验二 进程调度 ................................................ 7

实验三 死锁避免—银行家算法的实现 ...... 18

实验四 存储管理 .............................................. 24

.

可编辑文本 实验一 熟悉Windows XP中的进程和线程

一、 实验名称

熟悉Windows XP中的进程和线程

二、 实验目的

1、熟悉Windows中任务管理器的使用。

2、通过任务管理器识别操作系统中的进程和线程的相关信息。

3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。

三、 实验结果分析

1、启动操作系统自带的任务管理器:

方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。 .

可编辑文本

2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表:

表一:统计进程的各项主要信息

序号 进程名称 进程ID 线程数量 占用内存 优先级 占CPU时间 虚拟内存

1 Bddownloader.exe 7312 32 9980k 标准 0:00:00 9200k

2 Taskmgr.exe 7228 3 4124k 高 0:00:04 3372k

3 BaiDuSdTray.exe 5144 30 8588k 标准 0:00:15 43652k

4 QQprotect.exe 4668 11 20700k 标准 0:00:01 23572k

5 TXPlatform.exe 5908 3 1716k 标准 0:00:00 2128k

6 Explorer.exe 5816 17 30340k 标准 0:00:11 21720k

3、启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再.

可编辑文本 从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是 任务管理器无法结束进程 ,

原因是 该系统是系统进程 。

4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化 桌面上图标菜单都消失了 、得到的结论 explorer.exe是管理桌面图标的文件

(说出explorer.exe进程的作用)。

5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:

进程:explorer.exe 中的各个线程

序号 进程ID 线程ID 基本优先级 当前优先级 CPU时间 上下文开关

1 000016B8 00000104 8 10 0:00:06499 8336 .

可编辑文本 2 000016B8 000003EC 15 15 0:00:00 8

3 000016B8 00000904 8 10 0:00:00

11

4 000016B8 00000A0C 8 10 0:00:00 13

5 000016B8 00001280 8 8 0:00:078 17138

6 000016B8 000013D8 8 10 0:00:00 2326

6、注意某些线程前有“+”,如图所示:,说明二者之间的差异 前有“+”其器线程下有窗口 。

四、 心得体会

通过本次实验,我了解到了windows系统中进程的管理与操作,我了解了如何切出任务管理器,任务管理器应用与其他与进程相关的知识,明白了有些系统程序不能够关闭,系统中的进程与线程虽然很多,但是其中有许多关联,只要弄清楚其中的关联那么就能够运用好进程与线程,达到我们的目的。

每个进程下都包含着许多线程,我们控制进程来达到控制线程的目的只有我们了解好掌握还进程,我们才能更好的运用线程,更好的控制运用计算机。

.

可编辑文本

实验二 进程调度

一、 实验名称

进程调度

二、 实验目的

1、使学生进一步理解进程的概念,并在此基础上掌握有关PCB、进程队列的概念。

2、掌握进程基本状态的转化;

3、 掌握进程调度的策略、具体实施方法以及系统性能的评价方法。 .

可编辑文本

三、实验结果分析

简化的实验代码如下:

#include

#include//调用STL中的优先队列

using namespace std;

//定义一个PCB进程类

class PCB

{

public:

char name[10];//进程的名字

int runtime;//该进程的运行时间

int priority;//该进程的优先级

char state;//该进程的状态

PCB* next;//指向下个进程的指针

void print()const//输出进程的信息

{

cout<<"(name="<

<<",priority="<

}

};

class PCBSortCriterion{//优先队列的优先准则类

public:

bool operator()(const PCB & p1,const PCB & p2)const//仿函数确定优先准则,从大到小

{

return (p1.priority < p2.priority);

}

}; .

可编辑文本 PCB* pcb=new PCB[number];//一个PCB的数组用来保存就绪进程

PCB* p1=new PCB[number];//一个PCB的数组用来保存已经结束的进程

cout<

PCB p;//一个PCB型的变量,用来保存队首元素

int i;

for( i=0 ;i<=number-1;i++)//建立进程信息

cout<<"请输入pcb["<

cout<<"以(name,runtime,state(初始为R),priority)格式输入!"<

cin>>pcb[i].name;

cin>>pcb[i].runtime;

cin>>pcb[i].state;

cin>>pcb[i].priority;

cout<

}

typedef priority_queue ,PCBSortCriterion> pQueue;//以

//PCBSortCriterion为

//优先准则的优先队列

pQueue q,// 优先队列pQueue的一个对象,对这个队列进行主操作

temp;//优先队列pQueue的一个对象,是q的一个拷贝对象,作为实现打印输出//的一个中间变量

for(int j=0;j<=number-1;j++)//将进程入队建立优先队列

{

q.push(pcb[j]);

}

//输出进程控制块的初始状态信息

cout<<"进程控制块的初始状态信息为:"<

temp=q;

while(!temp.empty())

{

p=temp.top(); .

可编辑文本 p.print();

temp.pop();

}

cout<

int n=0, //进程执行的次数

m=0;//完成进程的个数

while(!q.empty())//对进程进行调度

{

cout<<"第"<<++n<<"次运行";

p=q.top();

cout<

p.runtime-=1;

p.priority-=1;

q.pop();

if(p.runtime!=0)//表明该进程还未执行完 ,继续入队进行操作

{

q.push(p);

}

else {//表明该进程已经执行完,设置其状态为Z,并将其保存到p1中

p.state='Z';

p1[m++]=p;

}

cout<<"运行后的状态为:"<

//打印出运行后的进程状态

temp=q;//拷贝输出队列

while(!temp.empty())

{

p=temp.top();

p.print();

temp.pop();