2010操作系统实验及其参考答案(完整版) - 图文 下载本文

可以正常运行

步骤6:在工具栏单击“Execute program”按钮,执行4-1.exe程序。

运行结果(如果运行不成功,原因是什么?):

阅读和分析4-2的程序,请回答下列问题: 1)使用了哪个系统API函数来创建线程实例? 使用了CreateThread系统API函数来创建线程实例

2)文件的读和写操作分别使用了哪个API函数?

文件的读和写操作分别使用了ReadFile()和WriteFile()API函数

3)在程序中,重置文件使用了哪一个函数? 在程序中,重置文件使用了CloseHandle()函数

2. 文件映射对象

在线程间使用的由页式文件支持的文件映射对象,从中可以看出利用内存映射文件比使用驻留在磁盘上的文件对象更为简单,其中的进程还使用了互斥信号量,以使公平地访问文件映射对象,然后,当每个线程都释放时,程序将文件的视图映射到文件上并增加数据的值。

步骤1:在工具栏单击“新建”按钮,编写代码保存为4-2.cpp。 实现功能:演示使用映射文件的内存交换数据的线程

参考类与函数:windows.h、iostream、WaitForSingleObject()、MapViewOfFile()、UnmapViewOfFile()、 ReleaseMutex()、MakeSharedFile()、CreateFileMapping()、ZeroMemory()。

步骤2:单击“Build”菜单中的“Compile 4-2.cpp”命令,再单击“是”按钮确认,系统对4-2.cpp进行编译。

步骤3:编译完成后,单击“Build”菜单中的“Build 4-2.exe”命

令,建立4-2.exe可执行文件。

操作能否正常进行,如果不行,原因是什么? 可以正常运行

步骤4:在工具栏单击“Execute program”按钮,执行4-2.exe程序。

运行结果(如果不成功,原因是什么?):

请回答:

1)程序中用来创建一个文件映射对象的系统API函数是什么? 创建一个文件映射对象的系统API函数是CreateFileMapping()

2)在文件映射上创建和关闭文件视图分别使用了哪一个系统函数?

a. MapViewOfFile()

b. UnmapViewOfFile()

3)填空:

通过(CreateFileMapping())函数创建一个小型的文件映射对象

(hMapping),接着,使系统API函数(CreateMutex())再创建一个保护其应用的互斥信号量(g_hMutexMapping)。然后,应用程序创建100个线程,每个都允许进行同样的进程,即:通过互体获得访问权,这个操作是由语句:

:: WaitForSingleObject(g_hMutexMapping, INFINITE) ; 实现的。再通过函数(MapViewOfFile())操作将视图映射到文件,将高32位看作有符号整数,将该数值增加(即命令:

++ (* pnData) ; ),再将新数值显示在控制台上,每个线程清除文件的视图并在退出之前释放互斥信号量的语句是:

:: ReleaseMutex(g_hMutexMapping); ,当线程完成时,应用程序关闭并退出。

4.5 实验总结

1.了解了运用CreateFile()函数在磁盘上创建一个新文件或当打开一个已经存在的文件,然后使用ReadFile()和WriteFile()函数在永久存储和应用程序间通过文件对象来移动数据。

2.了解了内存映射文件的方法,使用CreateFileMapping()创建文件映射对象和OpenFileMapping()函数来读取和写入数据,比使用ReadFile()和WriteFile()函数更为简单,并且可以使用互斥信号量来公平地访问文件映射对象。

3.用CreateFile()函数可打开和创建文件、管道、邮槽、通信服务、设备以及控制台缓冲区,函数原型及各参数含义为: HANDLE CreateFile(

LPCTSTR lpFileName, //指向文件名的指针 DWORD dwDesiredAccess, //访问模式(写/读) DWORD dwShareMode, //共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针

DWORD dwCreationDisposition, //如何创建 DWORD dwFlagsAndAttributes, //文件属性 HANDLE hTemplateFile //用于复制文件句柄 );

4.6 实验评价(教师)

实验5 存储管理

提高Windows 2000内存性能

(实验估计时间:50分钟)

5.1 背景知识

耗尽内存是Windows 2000 系统中最常见的问题之一,当系统耗尽内存时,所有进程对内存的总需求超出了系统的物理内存总量,随后,Windows 2000必须借助它的虚拟内存来维持系统和进程的运行,虚拟内存机制是Windows 2000操作系统的重要组成部分,但它的速度比物理内存慢得多,因此,应该尽量避免耗尽物理内存的资源,以免导致性能下降。

解决内存不足问题的一个有效的方法就是添加更多的内存,但是,一旦提供了更多的内存,Windows 2000很可能会立即“吞食”,而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问题的发生,因此,应该相信,优化所拥有的内存是非常关键的。 1. 分页过程

当Windows 2000求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging),分页就是将信息从主内存移动到磁盘进行临时存储的过程,应用程序将物理内存和虚拟内存视为一个独立的实体,甚至不知道Windows 2000使用了两种内存方案,而认为系统拥有比实际内存更多的内存。例如:系统的内存数量可能只有16MB,但每一个应用程序仍然认为有4GB内存可供使用。

使用分页方案带来了很多好处,不过就是有代价的,当进程需要已经交换到硬盘上的代码或数据时,系统要将数据送回物理内存,并在必要时将其他信息传输到硬盘上,而硬盘与物理内存在性能上的差异很大,例如:硬盘的访问时间通常为4-10ms,而物理内存的访问时间为60us,甚至更快。

2. 内存共享

应用程序经常需要彼此通信和共享信息,为了提高这种能力,Windows 2000必须允许访问某些内存空间而不危及它和其他应用程序