操作系统实验报告

发布时间 : 星期四 文章操作系统实验报告更新完毕开始阅读

实验四 系统内存使用统计

一、 实验目的

(1)了解Windows内存管理机制,理解页式存储管理技术。 (2)熟悉Windows内存管理基本数据结构。 (3)掌握Windows内存管理基本API的使用。 二、实验内容

使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,当内存和虚拟存储空间变化时,观察系统显示变化情况。 三、实验要求

能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟存储空间使用情况,会使用VirtualAlloc()函数和VirtualFree()函数分配和释放虚拟存储空间。 四、参考实验代码

#include \#include \#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

void GetMemSta(void);

int main(int argc, TCHAR* argv[], TCHAR* envp[])

{

int nRetCode = 0;

LPVOID BaseAddr;//LPVOID是一个没有类型的指针,也就是说你可以将任意

类型的指针赋值给LPVOID类型的变量(一般作为参数传递),然后在使用的时候再转换回来。

char *str; GetMemSta();

printf(\

Memory\\n\\n\

BaseAddr=VirtualAlloc(NULL, 1024*1024*32, MEM_COMMIT,

PAGE_READWRITE); //分配虚拟内存

配内存

GetMemSta();

printf(\if (BaseAddr==NULL) printf(\str=(char *)malloc(2*1024*1024); //分

Memory\\n\\n\

}

void GetMemSta(void) //统计内存的状态 { MEMORYSTATUS MemInfo;

GlobalMemoryStatus(&MemInfo);//此函数用来获得当前可用的物理和虚拟

if(VirtualFree(BaseAddr,0,MEM_RELEASE) ) //释放虚拟内存 printf(\

free(str); //释放内存 GetMemSta(); return nRetCode;

内存信息

printf(\printf(\

is %dMB\\n\

printf(\is %dMB\\n\

printf(\

is %dMB\\n\

printf(\

is %dMB\\n\

printf(\

is %dMB\\n\

printf(\

is %dMB\\n\

printf(\}

五、总结(1)程序开始运行,首先显示的可用物理内存、可用页文件大小、可用虚拟内存三个数值,数值分别可用物理内存:106MB,可用页文件大小:399MB,可用虚拟内存:2021MB。

(2)当调用VirtualAlloc()函数,系统会分配32MB虚拟内存,调用malloc()函数,系统会分配2MB物理内存,输出显示可用物理内存:104MB,可用页文件大小:365MB,可用虚拟内存:1987MB。

(3)当调用VirtualFree()函数,系统释放32MB虚拟内存;调用free()函数,系统释放2MB物理内存,此时系统内存还原为初始(1)状态,既系统的显示可用物理内存:106MB,可用页文件大小:399MB,可用虚拟内存:2021MB。 中。

实验五 动态链接库的建立与调用

一、 实验目的

(1) 理解动态链接库的实现原理。

(2) 掌握Windows系统动态链接库的建立方法。 (3) 掌握Windows环境下动态链接库的调用方法。 二、 实验内容

(1) 在Windows环境下建立一个动态链接库。 (2) 使用隐式调用法调用动态链接库。 (3) 使用显式调用法调用动态链接库。 三、 实验要求

掌握动态链接库建立和调用方法。在WindowsXP+Microsoft Visual C++环境下建立一个动态链接库,并分别使用隐式和显式方式将其调用,从而体会使用动态链接库的优点。

该实验完成了动态链接库的建立和调用。函数Add()和Sub()在动态链接库文件SimpleDll.cpp中,分别完成两个整数的相加和相减。而调用该动态链接库的程序文件是CallDll.cpp 四、参考实验代码

代码(一):

// DLL.cpp : Defines the entry point for the DLL application. //

#include \

extern \extern \BOOL APIENTRY DllMain( HANDLE hModule,

DWORD ul_reason_for_call, LPVOID lpReserved ) {

return TRUE; }

int Add(int x,int y) { return x+y; //加法定义 }

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