高等学校计算机操作系统实验报告最终答案 - 图文

发布时间 : 星期一 文章高等学校计算机操作系统实验报告最终答案 - 图文更新完毕开始阅读

DWORD dwDesiredAccess, // 访问方式 DWORD dwShareMode, // 共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, /设为NULL DWORD dwCreationDisposition, /// 创建方式 DWORD dwFlagsAndAttributes, // 属性 HANDLE hTemplateFile // 无模板文件 );

创建线程实例使用的函数是:CreateThread()

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

BOOL ReadFile(

HANDLE hFile, //文件的句柄

LPVOID lpBuffer, //用于保存读入数据的一个缓冲区 DWORD nNumberOfBytesToRead, //要读入的字符数

LPDWORD lpNumberOfBytesRead, //指向实际读取字节数的指针 LPOVERLAPPED lpOverlapped //如文件打开时指定了

FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL

);

写入文件: BOOL WriteFile(

HANDLE hFile, // 文件句柄

LPCVOID lpBuffer, // 数据缓存区指针

DWORD nNumberOfBytesToWrite, // 你要写的字节数

LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针

LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针

);

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程序。

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

在程序修改之前:输出结果是:

由此可见运行结果出现错误。

修改错误: if (nTotal == 1) {

:: Sleep(1500) ;//添加这一句

std :: cout << \

:: WaitForSingleObject(hThread, INFINITE) ; } 程序修改之后:

按照实验的要求将:: Sleep(500) ; 语句注释之后发现程序执行的过程将会立即出现执行结果,最后显示正确的输出结果。 请回答:

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

运用CreateFileMapping()函数

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

a.创建文件试图:MapViewOfFile()

b. 关闭文件视图:UnmapViewOfFile()

3)填空:

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

g_hMutexMapping = :: CreateMutex(NULL, FALSE, NULL) ; 实现的。再通过函数(MapViewOfFile())操作将视图映射到文件,将高32位看作有符号整数,将该数值增加(即命令: ++ (* pnData) ; ),再将新数值显示在控制台上,每个线程清除文件的视图并在退出之前释放互斥信号量的语句是: :: UnmapViewOfFile(pFile) ; :: ReleaseMutex(g_hMutexMapping) ;,当线程完成时,应用程序关闭并退出。

4.5 实验总结

1.

首先对于4-1

对于程序中用到的w2kdg.Fileobj.file.data.txt文件,用GetTempPath()这个函数可以获得系统的临时缓存地址。即:在

2. 3.

认识和熟悉了CreateFileMapping,UnmapViewOfFile,MapViewOfFile等API函数。

对于4-2.cpp,程序创建一个互斥体,这个互斥体不能被继承,不由创建者初始化,没有名字(根据参数决定)。然后创建进程,执行ThreadProc()函数,等待上一个进程对互斥体的使用完毕,然后创建映射,程序通过映射修改了进程的值,然后输出,然后解除映射,释放互斥体。

4.6 实验评价(教师)

实验5 存储管理

提高Windows 2000内存性能

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

5.1 背景知识

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

解决内存不足问题的一个有效的方法就是添加更多的内存,但是,一旦提供了更多的内存,Windows 2000很可能会立即“吞食”,而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问

联系合同范文客服:xxxxx#qq.com(#替换为@)