操作系统课设报告北京信息科技大学.docx

上传人:b****8 文档编号:12118515 上传时间:2023-06-04 格式:DOCX 页数:13 大小:92.31KB
下载 相关 举报
操作系统课设报告北京信息科技大学.docx_第1页
第1页 / 共13页
操作系统课设报告北京信息科技大学.docx_第2页
第2页 / 共13页
操作系统课设报告北京信息科技大学.docx_第3页
第3页 / 共13页
操作系统课设报告北京信息科技大学.docx_第4页
第4页 / 共13页
操作系统课设报告北京信息科技大学.docx_第5页
第5页 / 共13页
操作系统课设报告北京信息科技大学.docx_第6页
第6页 / 共13页
操作系统课设报告北京信息科技大学.docx_第7页
第7页 / 共13页
操作系统课设报告北京信息科技大学.docx_第8页
第8页 / 共13页
操作系统课设报告北京信息科技大学.docx_第9页
第9页 / 共13页
操作系统课设报告北京信息科技大学.docx_第10页
第10页 / 共13页
操作系统课设报告北京信息科技大学.docx_第11页
第11页 / 共13页
操作系统课设报告北京信息科技大学.docx_第12页
第12页 / 共13页
操作系统课设报告北京信息科技大学.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统课设报告北京信息科技大学.docx

《操作系统课设报告北京信息科技大学.docx》由会员分享,可在线阅读,更多相关《操作系统课设报告北京信息科技大学.docx(13页珍藏版)》请在冰点文库上搜索。

操作系统课设报告北京信息科技大学.docx

操作系统课设报告北京信息科技大学

 

北京信息科技大学

操作系统课程设计报告

题目:

Windows内存管理与文件管理

 

学院:

专业:

 

学生姓名:

指导老师:

赵宇

起止时间:

 

一.课程设计任务

本次课程设计的任务包括以下内容:

1)将自选的一到两个函数封装为,并成功调用。

2)设计使用Malloc()函数和ViertualAlloc()函数分配内存的程序,查询分配内存和虚拟存储空间前后的情况。

3)设计从键盘上输入文本,并将所输入的文本采用无缓冲方式存入硬盘的程序。

4)设计将硬盘上的文本文件采用无缓冲方式读入内存的程序。

5)设计采用无缓冲方式将磁盘上一个文本文件另存为另一文件的程序。

选做:

1)将硬盘上两个文本文件合并为一个文件。

2)将无缓冲方式读文件操作和写文件操作分别封装成动态链接库,并成功调用。

二.课程设计

1.设计要求

(以下写实验教材中动态链接库、查询分配内存和虚拟存储空间前后的情况、文件读写的“实验内容”和“实验要求”,可补充内容)

1.掌握动态链接库的调用和方法。

在WindowsXP+MicrosoftVisualC++6.0环境下建立一个动态链接库,并分别用隐式和显式的方式将其调用,从而体会动态链接库的有点;

2.能正确使用系统函数GlobalMemeryStatus()和数据结构MEMERYSTATUS了解系统内存和虚拟内存空间的使用情况,会使用VirtualAlloc()函数和VirtualFree()函数分配和和释放存储空间;

3.采用无缓冲方式完成文件的读写;

2.工作原理

(以下写:

采用无缓冲方式实现文件读写的工作原理。

实验讲义上有。

可以补充自己的理解或体会)

首先,文件创建—函数CreatFile()用于创建一个新文件,如果文件已存在,则得到该文件的句柄。

该函数的参数dwFlagsAndAttribute决定了文件的传输方式,对于普通的文件传输,,可将参数设置为FILE_ATTRIBUTE_NORMAL;其次,进行读文件操作—函数READFile()从文件指针指示的位置开始读取文件的数据;再次,还有写文件操作—函数WriteFile()将数据写入文件。

函数在文件所指的位置完成写操作,写操作完成后。

、,文件指针按实际写入的字节数来调整;最后对文件操作完成后,利用函数CloseHandle()关闭与文件相关的句柄,其作用与释放动态申请的内存空间类似,这样可以释放系统资源,使进程安全进行。

3.程序流程设计

(如果完成了选做,实验的流程图,并给予必要的解释)

 

将硬盘上两个文本文件合并为一个文件

输入“Cmd”并回车打开命令提示符窗口,然后输入“D:

”回车切换到D盘,输入“CDtxt”这样回车后即可把当前目录变成D:

txt,再输入“copy/b1.txt+2.txt+3.txthebing.txt”,回车后即会在当前目录生成一个名为hebing.txt(的)文件,它里面(的)内容(就是)合并后(的)文件内容

流程图

将无缓冲方式读文件操作和写文件操作分别封装成动态链接库,并成功调用。

流程图

 

4.相关API函数

(以下写出课程设计中调用过的API函数,在调用时你所选择的参数是什么,你选择参数的考虑)

1.动态链接库入口函数

(1)DllMain()函数动态连接数据库的入口函数,当Windows加载动态链接库时调用该函数。

DllMain()函数不仅在将动态链接库加载到进程地址空间时被调用,在动态链接库与进程分离时也被调用。

(2)动态链接库导入导出函数

_declspec(dllexport)add(intx,inty);导出

_declspec(dllimport)sub(intx,inty);导入

(3)动态链接库的两种链接接方式

一.是应用程序的源代码只用动态链接库中包含的符号,当应用程序运行时,加载程序隐式地将动态链接库装入到进程的地址空间中,成为饮食链接;另一种方法是应用运行时使用LoadLibary()显式地加载所需要的动态链接库,并显式地链接需要的输出符号表。

2.

(1)获取系统物理内存和虚拟内存的使用信息

VOIDGlobalMemeryStatus(LAPMEMERYSTATUSlpBuffer);

MEMERYSTATUS存储内存当前的物理信息;

(2)保留或提交平某一段虚拟内存空间

函数VitualAllco()可以在调用进程的虚拟地址空间中保留或提交若干页面。

保留意味着这段虚拟地址不能被使用,当提交时,这段虚拟地址才能真正的被分配到该进程。

(3)释放或注销某一段虚拟地址空间

函数VitualFree()用于释放或注销某一段虚拟地址空间

3.

(1)文件创建

函数CreatFile()用于创建一个新文件,如果文件已存在,则得到该文件的句柄。

该函数的参数dwFlagsAndAttribute决定了文件的传输方式,对于普通的文件传输,,可将参数设置为FILE_ATTRIBUTE_NORMAL/

(2)读文件

函数READFile()从文件指针指示的位置开始读取文件的数据

(3)写文件

函数WriteFile()将数据写入文件。

函数在文件所指的位置完成写操作,写操作完成后。

、,文件指针按实际写入的字节数来调整。

(4)函数CloseHandle()关闭与文件相关的句柄,其作用与释放动态申请的内存空间类似,这样可以释放系统资源,使进程安全进行。

三.实验过程与结果

(以下写出本次试验使用的源程序代码和必要的注释)

(以下写出本次试验所调用的各个API函数的返回值)

(以下粘贴代码运行结果界面采集)

程序代码如下;

1.动态链接库的调用和方法

//t3.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include"t3.h"

#pragmacomment(lib,"t1.lib")

#pragmacomment(lib,"t2.lib")

//告诉编译器与DLL相对应的.lib文件所在的路径及文件名。

//需要将编译SimpleDll工程所生成的.lib和.dll文件拷入本工程所在的路径。

extern"C"_declspec(dllimport)add(intx,inty);

extern"C"_declspec(dllimport)sub(intx,inty);

//声明SimpleDll.dll中的add(intx,inty)函数为本工程的导入函数。

voidmain()

{

intresult=add(112,3);

printf("112+3=%d\n",result);

intresult0=sub(112,3);

printf("112-3=%d\n",result0);

}

//t4.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include"t4.h"

typedefint(*lpAddFun)(int,int);//宏定义函数指针类型

typedefint(*lpSubFun)(int,int);

voidmain()

{

HINSTANCEhDll;

HINSTANCEhDll0;//定义一个调用DLL的句柄

lpAddFunaddFun;//定义DLL中要调用的函数的指针

lpSubFunsubFun;

intresult,result0;//开辟一个临时变量

hDll=LoadLibrary("t1.dll");//显式载入SimpleDll.dll

addFun=(lpAddFun)GetProcAddress(hDll,"add");//获取SimpleDll.dll中add()函数的地址指针

result=addFun(212,33);

printf("%d\n",result);

FreeLibrary(hDll);

hDll0=LoadLibrary("t2.dll");

subFun=(lpSubFun)GetProcAddress(hDll0,"sub");//获取SimpleDll.dll中add()函数的地址指针

result0=subFun(212,33);

printf("%d\n",result0);

FreeLibrary(hDll0);

return;

}

2.系统内存和虚拟内存空间的使用情况

//a4.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include"a4.h"

int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])

{

intnRetCode=0;

MEMORYSTATUSmm;

while(true)

{

GlobalMemoryStatus(&mm);

printf("%d\n\n",mm.dwMemoryLoad);

printf("%d\n\n",mm.dwTotalPhys/(1024*1024));

printf("%d\n\n",mm.dwAvailPhys/(1024*1024));

Sleep(1000);

}

returnnRetCode;

}

//a4.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include"a4.h"

int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])

{

intnRetCode=0;

MEMORYSTATUSmm;

while(true)

{

GlobalMemoryStatus(&mm);

printf("当前内存利用率:

%d%%\n\n",mm.dwMemoryLoad);

printf("物理内存的总字节数:

%d\n\n",mm.dwTotalPhys/(1024*1024));

printf("可用物理内存的字节数:

%d\n\n",mm.dwAvailPhys/(1024*1024));

printf("页文件的总字节数:

%d\n\n",mm.dwTotalPageFile/(1024*1024));

printf("页文件的可用字节数:

%d\n\n",mm.dwAvailPageFile/(1024*1024));

printf("用户模式下调用进程可以访问的虚拟空间总字节数:

%d\n\n",mm.dwTotalVirtual/(1024*1024));

printf("用户模式下调用进程可用虚拟空间的大小:

%d\n\n",mm.dwAvailVirtual/(1024*1024));

Sleep(3000);

}

returnnRetCode;

}

1.无缓冲方式完成文件的读

//1.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include"1.h"

 

voidmain()

{

CHAR*pBuffer;

DWORDRSize;

intfileSize=0;

HANDLEhFile;

hFile=CreateFile(

"d:

\\a.txt",//filename

GENERIC_READ,//openforreading

0,//donotshare

NULL,//defaultsecurity

OPEN_EXISTING,//onlyopenanexistingfile

NULL,//normalfile

NULL//notemplate

);

fileSize=GetFileSize(hFile,NULL);

pBuffer=(CHAR*)malloc(fileSize);

ReadFile(hFile,pBuffer,fileSize,&RSize,NULL);

printf("%s",pBuffer);

free(pBuffer);

CloseHandle(hFile);

}

无缓冲方式完成文件的写

//2.cpp:

Definestheentrypointfortheconsoleapplication.

//

#include"stdafx.h"

#include"2.h"

voidmain()

{

DWORDBytesToWrite;

DWORDszBuffer[4];

intfileSize=0;

HANDLEhFile;

charszText[]="asimpletextfortest";

hFile=CreateFile(

"d:

\\123.txt",//filename

GENERIC_WRITE,//openforwriting

0,//donotshare

NULL,//defaultsecurity

OPEN_ALWAYS,//iffilenotexist,createit

NULL,//normalfile

NULL//notemplate

);

BytesToWrite=lstrlen(szText);

WriteFile(hFile,szText,BytesToWrite,szBuffer,NULL);

CloseHandle(hFile);

}

四.课程设计总结

通过对动态链接库的的学习,基本上掌握了Windows系统链接库的建立方法,和使用显式和隐式两种方法来调用动态链接库,同时在实验中调用相关的API函数来查看系统物理内存和虚拟内存的有关使用情况和变化。

通过实验大体上了解了Windows内存管理机制及其数据结构。

了解了有关文件的读写操作的原理,明白了文件读写的相关API函数的的基本思想和应用。

这次实验仍有很多不足之处,但是在老师和同学的帮助下基本上全部攻克,希望在以后的实验里自己可以做的越来越好

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

当前位置:首页 > 农林牧渔

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

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