操作系统教程
实验指导书
姓名:
学号: 班级: 指导老师:
2013-12-2
1
目录
实验一 WINDOWS进程初识 ............................................. 3
1、实验目的 ..................................................... 3 2、实验内容和步骤 ............................................... 3 3、实验结论 ..................................................... 4 4、程序清单 ..................................................... 4 实验二 进程管理.................................................... 7
背景知识 ........................................................ 7 1、实验目的 .................................................... 10 2、实验内容和步骤 .............................................. 10 3、实验结论 .................................................... 14 4、程序清单 .................................................... 14 实验三 进程同步的经典算法.......................................... 18
背景知识 ....................................................... 18 1、实验目的 .................................................... 19 2、实验内容和步骤 .............................................. 19 3、实验结论 .................................................... 22 4、程序清单 .................................................... 22 实验四 存储管理.................................................... 27
背景知识 ....................................................... 27 1、实验目的 .................................................... 31 2、实验内容和步骤 .............................................. 31 3、实验结论 .................................................... 37 4、程序清单 .................................................... 37 实验五 文件和设备管理.............................................. 41
背景知识 ....................................................... 41 1、实验目的 .................................................... 43 2、实验内容与步骤 .............................................. 43 3、实验结论 .................................................... 46
2
实验一 WINDOWS进程初识
1、 实验目的
(1) 学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2) 掌握WINDOWS API的使用方法。
(3) 编写测试程序,理解用户态运行和核心态运行。
2、 实验内容和步骤
(1)编写基本的Win32 Consol Application
步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location” 处输入工程目录。创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File” 处输入C/C++源程序的文件名。
步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。
步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:
E:\\课程\\os课\\os实验\\程序\\os11\\debug>hello.exe
运行结果 (如果运行不成功,则可能的原因是什么?) : _
(2)计算进程在核心态运行和用户态运行的时间
步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。
步骤2: 在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。
步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。
E:\\课程\\os课\\os实验\\程序\\os12\\debug>time TEST.exe
步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为此程序是个死循环,所以运行结果为无穷大
步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:
3
屏蔽j循环:
调整循环变量i的循环次数:
调整循环变量j的循环次数:
3、 实验结论
_通过实验可以得知运行一个程序CPU的使用情况是不同的,同时与循环的次数无关,和当前计算的复杂情况有关。实验得出的数据可以可以说明这一点。
程序清单
清单1-1 一个简单的Windows控制台应用程序 // hello项目
# include
std::cout << “Hello, Win32 Consol Application” << std :: endl ; }
清单1-2 核心态运行和用户态运行时间比计算 // proclist项目
# include
// 当在用户模式机内核模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法
DWORD GetKernelModePercentage(const FILETIME& ftKernel, const FILETIME& ftUser) {
// 将FILETIME结构转化为64位整数
ULONGLONG qwKernel=(((ULONGLONG)ftKernel.dwHighDateTime) <<32)+ftKernel.dwLowDateTime;
4
ULONGLONG qwUser=(((ULONGLONG)ftUser.dwHighDateTime) <<32)+ftUser.dwLowDateTime;
// 将消耗时间相加,然后计算消耗在内核模式下的时间百分比 ULONGLONG qwTotal=qwKernel+qwUser;
DWORD dwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal); return(dwPct); }
// 以下是将当前运行过程名和消耗在内核模式下的时间百分数都显示出来的应用程序 void main(int argc,char *argv[]) { if(argc<2) { cout<<\请给出你要查询的程序名\ exit(0); } // 对当前系统中运行的过程拍取“快照” HANDLE hSnapshot=::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, // 提取当前过程 0); // 如果是当前过程,就将其忽略
// 初始化过程入口 PROCESSENTRY32 pe; ::ZeroMemory(&pe,sizeof(pe)); pe.dwSize=sizeof(pe); BOOL bMore=::Process32First(hSnapshot,&pe); BOOL found = FALSE; while(bMore) {
// 打开用于读取的过程 if(!strcmp(pe.szExeFile,argv[1])) { found = TRUE; HANDLE hProcess=::OpenProcess( PROCESS_QUERY_INFORMATION, // 指明要得到信息 FALSE, // 不必继承这一句柄 pe.th32ProcessID); // 要打开的进程 if (hProcess!=NULL) { // 找出进程的时间
5
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库os实验指导书(新)在线全文阅读。
相关推荐: