操作系统教程实验报11.docx

上传人:b****3 文档编号:13266198 上传时间:2023-06-12 格式:DOCX 页数:27 大小:690.76KB
下载 相关 举报
操作系统教程实验报11.docx_第1页
第1页 / 共27页
操作系统教程实验报11.docx_第2页
第2页 / 共27页
操作系统教程实验报11.docx_第3页
第3页 / 共27页
操作系统教程实验报11.docx_第4页
第4页 / 共27页
操作系统教程实验报11.docx_第5页
第5页 / 共27页
操作系统教程实验报11.docx_第6页
第6页 / 共27页
操作系统教程实验报11.docx_第7页
第7页 / 共27页
操作系统教程实验报11.docx_第8页
第8页 / 共27页
操作系统教程实验报11.docx_第9页
第9页 / 共27页
操作系统教程实验报11.docx_第10页
第10页 / 共27页
操作系统教程实验报11.docx_第11页
第11页 / 共27页
操作系统教程实验报11.docx_第12页
第12页 / 共27页
操作系统教程实验报11.docx_第13页
第13页 / 共27页
操作系统教程实验报11.docx_第14页
第14页 / 共27页
操作系统教程实验报11.docx_第15页
第15页 / 共27页
操作系统教程实验报11.docx_第16页
第16页 / 共27页
操作系统教程实验报11.docx_第17页
第17页 / 共27页
操作系统教程实验报11.docx_第18页
第18页 / 共27页
操作系统教程实验报11.docx_第19页
第19页 / 共27页
操作系统教程实验报11.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统教程实验报11.docx

《操作系统教程实验报11.docx》由会员分享,可在线阅读,更多相关《操作系统教程实验报11.docx(27页珍藏版)》请在冰点文库上搜索。

操作系统教程实验报11.docx

操作系统教程实验报11

操作系统实验报告

 

 

实验一WINDOWS进程初识

1、实验目的

(1)学会使用VC编写基本的Win32ConsolApplication(控制台应用程序)。

(2)掌握WINDOWSAPI的使用方法。

(3)编写测试程序,理解用户态运行和核心态运行。

2、实验内容和步骤

(1)编写基本的Win32ConsolApplication

步骤1:

登录进入Windows,启动VC++6.0。

步骤2:

在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32ConsolApplication”,然后在“Projectname”处输入工程名,在“Location”处输入工程目录。

创建一个新的控制台应用程序工程。

步骤3:

在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++SourceFile”,然后在“File”处输入C/C++源程序的文件名。

步骤4:

将清单1-1所示的程序清单复制到新创建的C/C++源程序中。

编译成可执行文件。

步骤5:

在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:

E:

\课程\os课\os实验\程序\os11\debug>hello.exe

运行结果(如果运行不成功,则可能的原因是什么?

):

运行成功;

(2)计算进程在核心态运行和用户态运行的时间

步骤1:

按照

(1)中的步骤创建一个新的“Win32ConsolApplication”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。

步骤2:

在创建一个新的“Win32ConsolApplication”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。

步骤3:

在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。

E:

\课程\os课\os实验\程序\os12\debug>timeTEST.exe

步骤4:

运行结果:

步骤5:

分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。

屏蔽i循环:

屏蔽j循环:

调整循环变量i的循环次数:

调整循环变量j的循环次数:

3、实验结论

当调用printf函数时,要进入核心态,因此运行占用的时间比较多而当把j循环屏蔽掉,即不进入printf时,i循环只需在用户态运行,不需要进入核心态,因此占用时间就为0%;当改变i循环的次数时,并不改变进入核心态时所占用的时间,所以运行时间没有改变;当改变j循环次数时,printf的次数改变,因此在核心态运行的时间就相对改变,可以看出运行时间随j的增大而增大,成正比关系。

 

实验二进程管理

1、实验目的

1)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。

2)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。

2、实验内容和步骤

(1).创建进程

本实验显示了创建子进程的基本框架。

该程序只是再一次地启动自身,显示它的系统进程ID和它在进程列表中的位置。

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单2-1中的程序,编译成可执行文件。

步骤2:

在“命令提示符”窗口运行步骤1中生成的可执行文件。

运行结果:

范例:

E:

\课程\os课\os实验\程序\os11\debug>os21

(假设编译生成的可执行文件是os21.exe)

按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:

步骤3:

在“命令提示符”窗口加入参数重新运行生成的可执行文件。

运行结果:

范例:

E:

\课程\os课\os实验\程序\os11\debug>os213

(假设编译生成的可执行文件是os21.exe)

按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:

步骤4:

修改清单2-1中的程序,将nClone的定义和初始化方法按程序注释中的修改方法进行修改,编译成可执行文件(执行前请先保存已经完成的工作)。

再按步骤2中的方式运行,看看结果会有什么不一样。

运行结果:

第一次修改:

结果不变。

第二次修改:

是一个死循环,不断的弹出此窗口:

从中你可以得出什么结论:

nClone的作用:

_设置进程的起始ID号,控制程序的执行,当nClone大于等于5时可跳出程序。

变量的定义和初始化方法(位置)对程序的执行结果有影响吗?

为什么?

________________

答:

有影响,因为变量的定义和初始化的不同可能导致进程的克隆的次数及克隆进程的ID号不同

(2).父子进程的简单通信及终止进程

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单2-2中的程序,编译成可执行文件。

步骤2:

在VC的工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。

运行结果:

步骤3:

按源程序中注释中的提示,修改源程序2-2,编译执行(执行前请先保存已经完成的工作)。

运行结果:

在程序中加入跟踪语句,或调试运行程序,同时参考MSDN中的帮助文件CreateProcess()的使用方法,理解父子进程如何传递参数。

给出程序执行过程的大概描述:

通过main(intargc,char*argv[])传递参数,每次运行时先检测argc的值,若小于1,程序运行结束,否则继续往下执行。

BOOLCreateProcess(

LPCTSTRlpApplicationName,;//pointertonameofexecutablemodule

LPTSTRlpCommandLine,//pointertocommandlinestringLPSECURITY_ATTRIBUTESlpProcessAttributes,//processsecurityattributesLPSECURITY_ATTRIBUTESlpThreadAttributes,//threadsecurityattributes

BOOLbInheritHandles,//handleinheritanceflag

DWORDdwCreationFlags,//creationflags

LPVOIDlpEnvironment,//pointertonewenvironmentblock

LPCTSTRlpCurrentDirectory,//pointertocurrentdirectoryname

LPSTARTUPINFOlpStartupInfo,//pointertoSTARTUPINFOLPPROCESS_INFORMATIONlpProcessInformation/pointertoPROCESS_INFORMATION

步骤4:

填空

CreateProcess()函数有6个核心参数?

本实验程序中设置的各个参数的值是:

a.szFilename,产生的应用程序的名称(本EXE文件).;

b.szCmdLine,告诉我们这是一个子进程的标志;

c.FALSE,不继承句柄;

d.CREATE_NEW_CONSOLE,创建新窗口;

e.&si,启动信息结构;

f.&pi返回的进程信息;

步骤5:

按源程序中注释中的提示,修改源程序2-2,编译执行。

运行结果:

步骤6:

参考MSDN中的帮助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用方法,理解父子进程如何利用互斥体进行同步的。

给出父子进程同步过程的一个大概描述:

答:

CreateMutex()创建互斥体,OpenMutex()打开互斥体,ReleaseMutex()释放互斥体,WaitForSingleObject()检测hHandle事件的信号状态,通过这些方法可实现当前只有一个进程被创建或使用,实现进程的同步。

3、实验结论

通过对进程的操作,如创建进程,实现对进程的简单控制使我对进程的概念有了更深一步的了解。

 

实验三进程同步的经典算法

1、实验目的

1)回顾系统进程、线程的有关概念,加深对Windows2000线程的理解。

2)了解互斥体对象,通过对生产者消费者等进程间同步与互斥经典算法的实现,加深对P、V原语以及利用P、V原语进行进程间同步与互斥操作的理解。

2、实验内容和步骤

(1).生产者消费者问题

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单3-1中的程序,编译成可执行文件。

步骤2:

在“命令提示符”窗口运行步骤1中生成的可执行文件。

运行结果:

范例:

E:

\课程\os课\os实验\程序\os11\debug>os31

(假设编译生成的可执行文件是os31.exe)

步骤3:

仔细阅读源程序,找出创建线程的WINDOWSAPI函数,回答下列问题:

线程的第一个执行函数是什么(从哪里开始执行)?

它位于创建线程的API函数的第几个参数中?

答:

第一个执行函数是Producer;位于第三个参数中。

步骤4:

修改清单3-1中的程序,调整生产者线程和消费者线程的个数,使得消费者数目大与生产者,看看结果有何不同。

运行结果:

从中你可以得出什么结论:

答:

生产者多于消费者时,生产者等待时间多一些,

消费者多于生产者时,消费者等待时间多一些。

步骤5:

修改清单3-1中的程序,按程序注释中的说明修改信号量EmptySemaphore的初始化方法,看看结果有何不同。

运行结果:

步骤6:

根据步骤4的结果,并查看MSDN,回答下列问题

1)CreateMutex中有几个参数,各代表什么含义。

答:

有三个参数.

1.LPSECURITY_ATTRIBUTESlpMutexAttributes代表安全属性的指针

2.BOOLbInitialOwner代表布尔bInitialOwner

3.LPCTSTRlpName代表LPCTSTR类型lpName

2)CreateSemaphore中有几个参数,各代表什么含义,信号量的初值在第几个参数中。

答:

四个参数:

第一个参数是安全属性;

第二个参数是表示信号量的初始值;

第三个参数是表示信号量的最大值;

第四个参数是表示拥有者的标识。

3)程序中P、V原语所对应的实际WindowsAPI函数是什么,写出这几条语句。

答:

WaitForSingleObject(EmptySemaphore,INFINITE);//p(empty);WaitForSingleObject(Mutex,INFINITE);

ReleaseMutex(Mutex);//V(mutex);ReleaseSemaphore(FullSemaphore,1,NULL);

4)CreateMutex能用CreateSemaphore替代吗?

尝试修改程序3-1,将信号量Mutex完全用CreateSemaphore及相关函数实现。

写出要修改的语句:

答:

可以

HANDLEMutex;》HANDLESemaphore;

Mutex=CreateMutex(NULL,FALSE,NULL);》Semaphore=CreateSemaphore(NULL,1,1,NULL);

WaitForSingleObject(Mutex,INFINITE);》WaitForSingleObject(Semaphore,INFINITE);ReleaseMutex(Mutex);》ReleaseSemaphore(Semaphore,1,NULL);

(2).读者写者问题

根据实验

(1)中所熟悉的P、V原语对应的实际WindowsAPI函数,并参考教材中读者、写者问题的算法原理,尝试利用WindowsAPI函数实现第一类读者写者问题(读者优先)。

3、实验结论

将信号量看作生产或消费的一个对象,对信号量的生成和销毁操作如同P操作和V操作一样,生成者消费者问题模拟的就是对信号量的生成和销毁,其中牵涉了信号量的同步,这也是该问题为何称为同步的经典问题的原因。

 

实验四存储管理

1、实验目的

(1)通过对Windows2000“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。

(2)了解Windows2000的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。

2、实验内容和步骤

(1)观察和调整Windows2000/XP的内存性能。

步骤1:

阅读“背景知识”,请回答:

1)什么是“分页过程”?

分页过程就是将信息从主内存移动到磁盘进行临时存储的过程。

2)什么是“内存共享”?

允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性,运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源。

3)什么是“未分页合并内存”和“分页合并内存”?

Windows2000中,未分页合并内存的最大限制是多少?

未分页合并内存:

分页合并内存是存储迟早需要的可分页代码或数据的内存部分。

分业合并内存:

未分页合并内存包含必须驻留在内存中的占用代码或数据。

在Windows2000中为分业合并内存的最大限制是256MB。

4)Windows2000分页文件默认设置的最小容量和最大容量是多少?

内存数量的1.5倍作为分页文件的最小容量,这个最小容量的两倍作为最大容量。

步骤2:

登录进入Windows2000Professional。

步骤3:

查看包含多个实例的应用程序的内存需求。

1)启动想要监视的应用程序,例如Word。

2)右键单击任务栏以启动“任务管理器”。

3)在“Windows任务管理器”对话框中选定“进程”选项卡。

4)向下滚动在系统上运行的进程列表,查找想要监视的应用程序。

请在表4-3中记录:

 

表4-3实验记录

映像名称

PID

CPU

CPU时间

内存使用

 WINWORD.EXE

 3220

 00

 0:

00:

28

 14420K

 

“内存使用”列显示了该应用程序的一个实例正在使用的内存数量。

5)启动应用程序的另一个实例并观察它的内存需求。

请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况:

答:

第二个实例占用内存22612K,比第一个实例占用的内存大很多。

步骤4:

未分页合并内存。

估算未分页合并内存大小的最简单方法是使用“任务管理器”。

未分页合并内存的估计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。

总数(K):

96340K

分页数:

50328

未分页(K):

46052K

还可以使用“任务管理器”查看一个独立进程正在使用的未分页合并内存数量和分页合并内存数量。

操作步骤如下:

1)单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。

2)在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“确定”按钮。

返回Windows2000“任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。

仍以刚才打开观察的应用程序(例如Word)为例,请在表4-4中记录:

表4-4实验记录

映像名称

PID

内存使用

页面缓冲池

非页面缓冲池

 WINWORD.EXE

3496 

 53088K

 473K

 16K

从性能的角度来看,未分页合并内存越多,可以加载到这个空间的数据就越多。

拥有的物理内存越多,未分页合并内存就越多。

但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。

步骤5:

提高分页性能。

在Windows2000的安装过程中,将使用连续的磁盘空间自动创建分页文件(pagefile.sys)。

用户可以事先监视变化的内存需求并正确配置分页文件,使得当系统必须借助于分页时的性能达到最高。

虽然分页文件一般都放在系统分区的根目录下面,但这并不总是该文件的最佳位置。

要想从分页获得最佳性能,应该首先检查系统的磁盘子系统的配置,以了解它是否有多个物理硬盘驱动器。

1)在“开始”菜单中单击“设置”–“控制面板”命令,双击“管理工具”图标,再双击“计算机管理”图标。

2)在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配置。

如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。

这是因为:

Windows2000最多可以支持在多个驱动器上分布的16个独立的分页文件。

为系统配置多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。

请在表4-5中记录:

表4-5实验记录

布局

类型

文件系统

容量

状态

 C:

 磁盘分区

 基本

FAT32

48.82GB

状态良好(系统)

 D:

 磁盘分区

  基本

 FAT32

 24.5GB

状态良好(页面文件)

 LENOVO_PART

  磁盘分区

   基本

 FAT32

 305MB

 状态良好(EISA 配置)

 

 

 

 

 

 

 

步骤6:

计算分页文件的大小。

要想更改分页文件的位置或大小配置参数,可按以下步骤进行:

1)右键单击桌面上的“我的电脑”图标并选定“属性”。

2)在“高级”选项卡上单击“性能选项”按钮。

3)单击对话框中的“虚拟内存”区域中的“更改”按钮。

请记录:

所选驱动器(C:

)的页面文件大小:

驱动器:

C:

[WINXP]

可用空间:

23298MB

初始大小(MB):

__________1524____________

最大值(MB):

______________3048__________

所选驱动器(D:

)的页面文件大小:

(如果有的话)

驱动器:

D:

[SOFTTWARE]

可用空间:

12925MB

初始大小(MB):

最大值(MB):

____________________

所有驱动器页面文件大小的总数:

允许的最小值:

2MB

推荐:

1522MB

当前已分配:

1524MB

4)要想将另一个分页文件添加到现有配置,在“虚拟内存”对话框中选定一个还没有分页文件的驱动器,然后指定分页文件的初始值和最大值(以兆字节表示),单击“设置”,然后单击“确定”。

5)要想更改现有分页文件的最大值和最小值,可选定分页文件所在的驱动器。

然后指定分页文件的初始值和最大值,单击“设置”按钮,然后单击“确定”按钮。

6)在“性能选项”对话框中单击“确定”按钮。

7)单击“确定”按钮以关闭“系统特性”对话框。

步骤7:

使用任务管理器。

可以使用“任务管理器”来简单地检查分页文件是否配置了正确容量。

这样可以实时提供系统正在使用分页文件的方式以及其他重要系统信息的准确描述。

通过右键单击任务栏运行“任务管理器”,选定“性能”选项卡查看实时的系统统计数据。

与分页文件大小最有关的信息位于“认可用量”区域。

这一区域显示了认可“峰值”是否达到或超过了认可“限制”,以及它是否超过了系统上的物理内存数量。

认可“峰值”是指系统迄今为止向进程分配的最大物理内存和虚拟内存数量。

请记录:

物理内存(K)

总数:

1039724K

可用数:

517644K

系统缓存:

501940K

认可用量(K)

总数:

859572K

限制:

、2500780K

峰值:

1238956K

当系统遇到分页活动增加的情况时,提交的内存数量(“认可总数”)就会增加。

一旦它达到了“认可限制”值,系统就需要扩展分页文件。

“认可限制”值指出在不必扩展分页文件的情况下可以向内存提交的虚拟内存数量。

因为目标是避免扩展分页文件,所以必须保持“认可总数”和“认可限制”值相差较大。

如果这两个值接近了,那么系统必须动态增加分页文件的大小。

“任务管理器”的“认可用量”区域显示的信息还说明了系统的主内存是否足以满足系统执行的任务。

如果认可“总数”值经常超过系统中的内存数量,那么系统的物理内存可能不足。

(2)了解和检测进程的虚拟内存空间。

步骤1:

创建一个“Win32ConsolApplication”工程,然后拷贝清单4-1中的程序,编译成可执行文件。

步骤2:

在VC的工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。

范例:

E:

\课程\os课\os实验\程序\os11\debug>os41

(假设编译生成的可执行文件是os41.exe)

步骤3:

根据运行结果,回答下列问题

虚拟内存每页容量为:

4.00KB

最小应用地址:

0x00010000

最大应用地址:

0x7ffeffff

当前可供应用程序使用的内存空间为:

1.99GB

当前计算机的实际内存大小为:

0.99GB

理论上每个Windows应用程序可以独占的最大存储空间是:

___0.99GB

提示:

可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区。

虚拟内存空间中的64KB保护区是防止编程错误的一种Windows方式。

任何对内存中这一区域的访问(读、写、执行)都将引发一个错误陷阱,从而导致错误并终止程序的执行。

按committed、reserved、free等三种虚拟地址空间分别记录实验数据。

其中“描述”是指对该组数据的简单描述,例如,对下列一组数据:

00010000–00012000<8.00KB>Committed,READWRITE,Private

可描述为:

具有READWRITE权限的已调配私有内存区。

 

将系统当前的自由区(free)虚拟地址空间填入表4-6中。

表4-6实验记录

地址

大小

虚拟地址

空间类型

访问权限

描述

 00012000-00020000

56.0KB

free

NOACCESS

 没有任何权限的已调配的共有内存区

 00021000-00030000

 60.0KB

free

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2