操作系统实验er要点.docx

上传人:b****5 文档编号:6469871 上传时间:2023-01-06 格式:DOCX 页数:27 大小:1.23MB
下载 相关 举报
操作系统实验er要点.docx_第1页
第1页 / 共27页
操作系统实验er要点.docx_第2页
第2页 / 共27页
操作系统实验er要点.docx_第3页
第3页 / 共27页
操作系统实验er要点.docx_第4页
第4页 / 共27页
操作系统实验er要点.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

操作系统实验er要点.docx

《操作系统实验er要点.docx》由会员分享,可在线阅读,更多相关《操作系统实验er要点.docx(27页珍藏版)》请在冰豆网上搜索。

操作系统实验er要点.docx

操作系统实验er要点

 

《操作系统》实验指导书

 

淮阴工学院

计算机科学与工程学院

2014.9

 

目录

实验一熟悉Windows2000/XP中的进程和线程

实验二编程实现进程的控制

实验三Windows中的线程与线程同步现象

实验四操作系统中的经典线程同步问题

实验五死锁避免—银行家算法的实现

实验六Windows内存管理

实验七分页内存管理算法模拟

实验八页面置换算法的模拟实现

实验九磁盘调度中的电梯调度算法实现

实验十Windows中的消息机制

 

实验一熟悉Windows2000/XP中的进程和线程

一、实验目的

1、熟悉Windows2000/XP中任务管理器的使用。

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

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

二、实验理论基础及教材对应关系

1、实验理论基础:

(1)操作系统中的进程和线程的概念;

(2)进程PCB的各项指标含意;

2、本实验内容主要对应于教材第2章。

三、实验内容与步骤

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

方法:

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

如下图所示:

 

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

表一:

统计进程的各项主要信息

序号

进程名称

进程ID

线程数量

占用内存

优先级

占CPU时间

虚拟内存

1

Acrobat.exe

3744

6

85064k

标准

0:

00:

00

99828k

2

WINWORD.EXE

3272

8

47180K

标准

0:

00:

24

81224k

3

Taskmgr.exe

2636

3

5348k

0:

00:

02

2136k

4

Csrss.exe

756

12

8856k

0:

00:

02

2164k

5

Vmount2.exe

1032

3

5756k

标准

0:

00:

00

3504k

6

MATLAB.exe

328

13

56772k

标准

0:

00:

01

66580k

7

Sqlservr.exe

284

26

1128k

标准

0:

00:

00

53308k

8

System

4

83

300k

标准

0:

00:

04

28k

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

再从任务管理器中分别找到下列程序:

winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程,原因是该进程是关键系统进程。

4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面上的图标都不见了,Windows图形界面无法使用,电脑只剩下一张壁纸、得到的结论是explorer.exe进程用于管理Windows的图形界面,包括开始菜单、任务栏、桌面和文件管理,对系统的稳定性有很大帮助。

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

5、运行“spy++.exe”应用软件,点击按钮“

”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:

表二:

统计线程的各项信息

进程:

explorer.exe中的各个线程

序号

进程ID

线程ID

基本优先级

当前优先级

CPU时间

上下文开关

1

000006E8

000006EC

8

10

0:

00:

00.437

9664

2

000006E8

000006F4

8

10

0:

00:

00.000

121

3

000006E8

0000006FC

9

13

0:

00:

01.328

108795

4

000006E8

00000700

8

10

0:

00:

00.000

8

5

000006E8

00000708

8

10

0:

00:

00.000

18

6

000006E8

00000714

8

10

0:

00:

00.000

1150

7

000006E8

000007C4

8

10

0:

00:

00.078

7113

8

000006E8

000007D0

15

15

0:

00:

00.000

12

9

000006E8

000008E8

8

11

0:

00:

00.156

3876

10

000006E8

00000AC4

8

10

0:

00:

00.000

62

11

000006E8

00000D64

8

10

0:

00:

00.000

43

12

13

14

6、注意某些线程前有“+”,如图所示:

,说明二者之间的差异是有无子进程,“+”表示有子进程。

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:

做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

 

实验二编程实现进程的控制

一、实验目的

1、进一步掌握进程的相关概念

2、掌握Windows2000/XP有关进程操作的API函数的使用。

3、了解进程的地址空间的含义。

二、实验理论基础及教材对应关系

1、实验理论基础:

(1)操作系统中的进程和线程的概念;

(2)进程的各种控制;

2、本实验内容主要对应于教材第2章和第3章的内容。

三、实验内容与步骤

1、启动应用程序“ProcessInformation.exe”,应出现下面的界面:

2、依次改变上图中“下拉组合框”的选项,读出界面中显示的各项信息,并完成下表(填满即可):

(统计中要包含winlogon.exe、lsass.exe、csrss.exe、smss.exe等应用程序)

表一:

统计进程的一些信息

序号

进程名称

进程ID

父进程ID

优先级

线程数

Heaps数量

模块数量

1

winlogon.exe

516

00000204

3

2

lsass.exe

580

00000244

普通

8

3

csrss.exe

428

000001AC

普通

9

4

csrss.exe

468

000001D4

普通

12

5

smss.exe

272

00000110

普通

2

6

Spoolsv.exe

1316

00000524

普通

12

7

Devenv.exe

5900

0000170C

普通

21

8

Lsm.exe

588

0000024C

普通

10

3、从上表中观察“进程ID”和“父进程ID”两栏,总结并画出下列程序间的亲缘关系:

winlogon.exe、lsass.exe、csrss.exe、smss.exe。

 

4、打开“ProcessInfo”工程文件,打开文件“ProcessInfo.cpp”,找到函数:

CreateProcess()的使用方法。

按下列步骤建立一个工程项目,将记事本应用程序运行起来,即创建了一个新的进程。

步骤1、创建一个基于MFC的应用程序。

步骤2、在应用程序类型中选取“基于对话框”的选项。

步骤3、直接点击完成,系统将为你创建一个工程项目。

步骤4、然后在“资源视图”中,打开对话框“IDD_MY_DIALOG”,将出现以下对话框:

步骤5、打开界面上的“工具箱”,放置一个“按钮”,如下图:

步骤6、双击上面的“Button1”按钮,切换到代码的编写处:

输入以下语句:

步骤7、编译并运行此工程项目,看看运行的结果。

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:

做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验三Windows中的线程与线程同步现象

一、实验目的

1、掌握Windows中线程的操作。

2、熟悉线程不同步时的现象及环境因素。

3、掌握一种同步对象的使用。

二、实验理论基础及教材对应关系

1、线程和线程不同步的认识。

2、线程间的同步和通信。

3、本实验内容主要对应于教材第2章中关于线程的各节。

三、实验内容与步骤

1、定义全局变量inti=0;初始值置为0。

2、创建两个线程,一个对i执行加1操作,另一个对i执行减1操作。

两个线程执行相同的次数。

显然,正常情况下,i的仍然保持为0。

#include

#include

#defineMaxCount9000000//循环次数要很大,可多次尝试一些值

DWORD__stdcallfun1(LPVOIDp1)

{

for(intj=0;j

i++;

}

return0;

}

DWORD__stdcallfun2(LPVOIDp1)

{

for(intj=0;j

i--;

}

return0;

}

3、观察两个线程执行后的情况,可以发觉最后i的值不一定是0,有时是很大的正数,有时是很大的负数,这就是多个线程在操作同一个变量i时,未同步时带来的严重问题。

还应该了解,在多个线程操作共享的变量时,才需要考虑同步问题。

5、给这两个线程加上同步代码,再来观察对i值的影响。

步骤2的函数稍微改动即可:

CRITICAL_SECTIONcs;

DWORD__stdcallfun1(LPVOIDp1)

{

for(intj=0;j

:

:

EnterCriticalSection(&cs);

i++;

:

:

LeaveCriticalSection(&cs);

}

}

DWORD__stdcallfun2(LPVOIDp1)

{

for(intj=0;j

:

:

EnterCriticalSection(&cs);

i--;

:

:

LeaveCriticalSection(&cs);

}

}

加入的同步代码的两个线程,无论如何执行,i的值总是0,结果是正确的。

6、主函数的写法

intmain()

{

DWORDid1,id2;

HANDLEhThread[2];

:

:

InitializeCriticalSection(&cs);

hThread[0]=:

:

CreateThread(0,0,fun1,0,0,&id1);

hThread[1]=:

:

CreateThread(0,0,fun2,0,0,&id2);

:

:

WaitForMultipleObjects(2,hThread,1,INFINITE);

printf("i=%d\n",i);

:

:

DeleteCriticalSection(&cs);

getchar();

return0;

}

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:

做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验四操作系统中的经典线程同步问题

一、实验目的

1、加深对线程的理解、掌握Windows中线程的操作。

2、掌握死锁产生的原因。

3、掌握信号量、互斥量、事件、临界区等同步对象的使用。

二、实验理论基础及教材对应关系

1、进程和线程的关系。

2、线程间的同步和通信。

3、本实验内容主要对应于教材第2章中关于线程的各节、第3章中关于死锁的各节。

三、实验内容与步骤

1、运行实验程序“Reader_Writer.exe”,出现如下界面:

2、交替点击“创建读者线程”和“创建写者线程”按钮,出现如下界面:

3、观察第二步的实验现象,多次试验,可总结为:

(1)、当有“读者”的绿灯亮时,其余的“读者”灯的状态是、其余的“写者”灯的状态是。

(2)、当有“写者”的绿灯亮时,其余的“写者”灯的状态是、其余的“读者”灯的状态是。

这说明“读者”间的关系是、“读者”之间的关系是、“读者-写者”之间的关系是。

(填相容、互斥)

4、打开工程文件“Reader_Writer”,查找下列函数的用法:

(1)AfxBeginThread();创建线程。

ResumeThread();让线程恢复运行。

(2)CreateMutex();创建互斥量。

ReleaseMutex();删除互斥量。

(3)CreateSemaphore();创建信号量。

ReleaseSemaphore()删除信号量。

(4)WaitForSingleObject();等待同步对象。

(5)CloseHandle();关闭内核对象的句柄。

5、运行“Dining.exe”应用程序,观察线程间“死锁”时的状态。

6、创建一个“Console”应用程序,在main()函数中创建4个线程,线程的工作就是向屏幕输出几个字符后,就自己结束掉。

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:

做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验五死锁避免—银行家算法的实现

一、实验目的

1、掌握死锁产生的原因和必要条件。

2、掌握银行家算法的实现

二、实验理论基础及教材对应关系

1、处理机调度与死锁。

2、死锁的产生与预防。

3、银行家算法。

三、实验内容与步骤

1、创建C语言工程项目,按照教材上的有关说明,定义相应的数据结构。

intAllocMatrix[5][4]//已经分配资源矩阵

intRequestMatrix[5][4]//需求矩阵

intAvailResource[4]//可用资源向量

intTryProcess[5]//尝试序列

2、给各个数据结构设定合适的初始值。

按照教材课后习题22的内容给上述数据结构设定初始值。

如:

intAllocMatrix[5][4]={//已经分配资源矩阵

{0,0,3,2},

{1,0,0,0},

{1,3,5,4},

{0,3,3,2},

{0,0,1,4}

};

注意:

步骤1、2可同时进行,即利用C语言中的定义变量就可同时初始化的方式进行数值初设。

3、依据银行家算法的描述依次进行资源的试探性分配,直至成功或失败,成功则说明当前状态是安全的;失败后,还应该将资源回到初始状态,并进行另一次试探;只有所有的试探都失败了,才能说明当前状态是不安全的。

通常,这种试探性算法采用递归的方法是很合适的,程序也是很简洁的。

代码片段:

if(AvailResource[0]>=RequestMatrix[k][0]

&&AvailResource[1]>=RequestMatrix[k][1]

&&AvailResource[2]>=RequestMatrix[k][2]

&&AvailResource[3]>=RequestMatrix[k][3])//若资源能使进程ProcessID结束

for(inti=0;i<4;i++)

AvailResource[i]-=AllocMatrix[k][i];//恢复资源

intSearchSecurity(intlevel)//递归函数

{

if(level==4){

……

}

else{

SearchSecurity(level+1);//有条件递归调用自己

}

……

}其余由大家自行完成。

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:

做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验六Windows内存管理

一、实验目的

1、熟悉程序的运行时动态链接。

2、熟悉Windows中内存的分页管理方式。

3、了解虚拟内存的用法,熟悉Windows中相应的API函数。

二、实验理论基础及教材对应关系

1、应用程序的动态链接。

2、内存的分页管理、虚拟内存的技术。

3、本实验内容主要对应于教材第4章。

三、实验内容与步骤

1、运行“SystemInfo.exe”应用程序,出现如下界面:

从该界面上可以看到Windows2000/XP系统中的分页大小(PageSize)是:

4,096,即4K字节,也可以看到本机所安装的处理器的个数是:

1个。

打开工程文件,熟悉信息获取函数的使用:

SYSTEM_INFOsinf;

GetSystemInfo(&sinf);

2、运行“VMSTATE.exe”应用程序,出现如下界面:

从界面上可以看到,本计算机中所安装的物理内存的大小“TotalPhys”,可用物理内存的大小“AvailPhys”。

打开源文件,熟悉或者信息函数的使用:

MEMORYSTATUSms={sizeof(ms)};

GlobalMemoryStatus(&ms);

3、运行“VMAlloc.exe”应用程序,掌握其用法和功能:

打开源文件,熟悉以下操作虚拟存储空间函数的使用:

VirtualAlloc()、VirtualQuery()、VirtualFree()。

4、运行“VMMap.exe”应用程序,了解程序的功能,读懂其显示的每一行信息的含义:

从上面显示的信息中,谈谈自己对虚拟储存空间的认识(100字以内)。

四、实验材料的提交与成绩评定

1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)

2、实验源程序一份,请表明题号(电子版)

备注:

做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。

3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。

实验七分页内存管理算法模拟

一、实验目的

1、熟悉基本分页存储管理。

2、建立描述分页内存管理中的页目录表、页表结构。

3、实现进行虚拟内存到物理内存的映射算法。

二、实验理论基础及教材对应关系

1、操作系统中内存管理。

2、基本分页内存、分段内存管理。

3、页目录表、页表的作用,以及虚拟地址到物理地址的映射关系。

三、实验内容与步骤

题目:

分页存储管理的设计与实现。

某系统采用了两级页表机制,可使页表所占用内存尽量少,分页地址变换机构如下图所示:

分页地址变换机构

页目录表共1024项,每个页表1024项,每页的大小是4K个字节。

地址转换时,先由分段部件生成线性地址,再由上面所述的分页部件,根据线性地址中的页目录索引在页目录表中找相应的项,该项值为所需页表在内存的块号,找到该页表后,然后按第21-12位的页表索引找到所需页的物理内存起始地址,把它与12位偏移直接相加得到32位的物理地址。

设系统有如表1中所示的10个段,已知:

1-8段从内存的200000H处开始由低地址到高地址连续存放,映射到3G+4M开始的线性地址空间;9段(缓冲区)放在400000H开始的内存,映射的线性地址同物理地址;显存从B8000H开始,映射到3G开始的线性地址空间。

表1

(1)、请设计并填写页目录表和页表(需说明每张表的内存地址)

(2)、线性地址为:

C0401010H、C0404010H、C0414010H,则物理地址是多少,所在段的段名是什么?

(需写出计算的详细步骤)

实验步骤:

1、定义页目录表、页表的数据结构,以及必要的数据。

#definePage_Size4096//页面大小

#definePages26//本题定义的总的页面个数

#defineFirstLinearAddr0xC0000000+0x400000//线性地址3G+4M

#defineSecondLinearAddr0x400000//线性地址0x400000

#defineThirdLinearAddr0xC0000000//线性地址3G

#defineIDT0

#defineTSS1

#defineGDT2

#definePDT3//页目录表的下标

#definePT14//第1个页表的下标

#definePT25//第2个页表的下标

#definePT36//第3个页表的下标

#definePT47//第4个页表的下标

//......省略其它页表

#defineCODE20

#defineSTACK21

#defineDATA22

#defineBUFF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1