计算机操作系统实验课实验报告
- 格式: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();