《操作系统》实验指导书淮阴工学院计算机科学与工程学院2014.9目录实验一熟悉Windows2000/XP中的进程和线程实验二编程实现进程的控制实验三Windows中的线程与线程同步现象实验四操作系统中的经典线程同步问题实验五死锁避免—银行家算法的实现实验六Windows内存管理实验七分页内存管理算法模拟实验八页面置换算法的模拟实现实验九磁盘调度中的电梯调度算法实现实验十Windows中的消息机制实验一熟悉Windows2000/XP中的进程和线程一、实验目的1、熟悉Windows2000/XP中任务管理器的使用。2、通过任务管理器识别操作系统中的进程和线程的相关信息。3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。二、实验理论基础及教材对应关系1、实验理论基础:(1)操作系统中的进程和线程的概念;(2)进程PCB的各项指标含意;2、本实验内容主要对应于教材第2章。三、实验内容与步骤1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。如下图所示:2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):表一:统计进程的各项主要信息序号进程名称进程ID线程数量占用内存优先级占CPU时间虚拟内存1Acrobat.exe3744685064k标准0:00:0099828k2WINWORD.EXE3272847180K标准0:00:2481224k3Taskmgr.exe263635348k高0:00:022136k4Csrss.exe756128856k高0:00:022164k5Vmount2.exe103235756k标准0:00:003504k6MATLAB.exe3281356772k标准0:00:0166580k7Sqlservr.exe284261128k标准0:00:0053308k8System483300k标准0:00:0428k3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程,原因是该进程是关键系统进程。4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面上的图标都不见了,Windows图形界面无法使用,电脑只剩下一张壁纸、得到的结论是explorer.exe进程用于管理Windows的图形界面,包括开始菜单、任务栏、桌面和文件管理,对系统的稳定性有很大帮助。(说出explorer.exe进程的作用)。5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:表二:统计线程的各项信息进程:explorer.exe中的各个线程序号进程ID线程ID基本优先级当前优先级CPU时间上下文开关1000006E8000006EC8100:00:00.43796642000006E8000006F48100:00:00.0001213000006E80000006FC9130:00:01.3281087954000006E8000007008100:00:00.00085000006E8000007088100:00:00.000186000006E8000007148100:00:00.00011507000006E8000007C48100:00:00.07871138000006E8000007D015150:00:00.000129000006E8000008E88110:00:00.156387610000006E800000AC48100:00:00.0006211000006E800000D648100:00:00.000431213146、注意某些线程前有“+”,如图所示:,说明二者之间的差异是有无子进程,“+”表示有子进程。四、实验材料的提交与成绩评定1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)2、实验源程序一份,请表明题号(电子版)备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。实验二编程实现进程的控制一、实验目的1、进一步掌握进程的相关概念2、掌握Windows2000/XP有关进程操作的API函数的使用。3、了解进程的地址空间的含义。二、实验理论基础及教材对应关系1、实验理论基础:(1)操作系统中的进程和线程的概念;(2)进程的各种控制;2、本实验内容主要对应于教材第2章和第3章的内容。三、实验内容与步骤1、启动应用程序“ProcessInformation.exe”,应出现下面的界面:2、依次改变上图中“下拉组合框”的选项,读出界面中显示的各项信息,并完成下表(填满即可):(统计中要包含winlogon.exe、lsass.exe、csrss.exe、smss.exe等应用程序)表一:统计进程的一些信息序号进程名称进程ID父进程ID优先级线程数Heaps数量模块数量1winlogon.exe51600000204高32lsass.exe58000000244普通83csrss.exe428000001AC普通94csrss.exe468000001D4普通125smss.exe27200000110普通26Spoolsv.exe131600000524普通127Devenv.exe59000000170C普通218Lsm.exe5880000024C普通103、从上表中观察“进程ID”和“父进程ID”两栏,总结并画出下列程序间的亲缘关系:winlogon.exe、lsass.exe、csrss.exe、smss.exe。4、打开“ProcessInfo”工程文件,打开文件“ProcessInfo.cpp”,找到函数:CreateProcess()的使用方法。按下列步骤建立一个工程项目,将记事本应用程序运行起来,即创建了一个新的进程。步骤1、创建一个基于MFC的应用程序。步骤2、在应用程序类型中选取“基于对话框”的选项。步骤3、直接点击完成,系统将为你创建一个工程项目。步骤4、然后在“资源视图”中,打开对话框“IDD_MY_DIALOG”,将出现以下对话框:步骤5、打开界面上的“工具箱”,放置一个“按钮”,如下图:步骤6、双击上面的“Button1”按钮,切换到代码的编写处:输入以下语句:步骤7、编译并运行此工程项目,看看运行的结果。四、实验材料的提交与成绩评定1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)2、实验源程序一份,请表明题号(电子版)备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。实验三Windows中的线程与线程同步现象一、实验目的1、掌握Windows中线程的操作。2、熟悉线程不同步时的现象及环境因素。3、掌握一种同步对象的使用。二、实验理论基础及教材对应关系1、线程和线程不同步的认识。2、线程间的同步和通信。3、本实验内容主要对应于教材第2章中关于线程的各节。三、实验内容与步骤1、定义全局变量inti=0;初始值置为0。2、创建两个线程,一个对i执行加1操作,另一个对i执行减1操作。两个线程执行相同的次数。显然,正常情况下,i的仍然保持为0。#includestdio.h#includewindows.h#defineMaxCount9000000//循环次数要很大,可多次尝试一些值DWORD__stdcallfun1(LPVOIDp1){for(intj=0;jMaxCount;j++){i++;}return0;}DWORD__stdcallfun2(LPVOIDp1){for(intj=0;jMaxCount;j++){i--;}return0;}3、观察两个线程执行后的情况,可以发觉最后i的值不一定是0,有时是很大的正数,有时是很大的负数,这就是多个线程在操作同一个变量i时,未同步时带来的严重问题。还应该了解,在多个线程操作共享的变量时,才需要考虑同步问题。5、给这两个线程加上同步代码,再来观察对i值的影响。步骤2的函数稍微改动即可:CRITICAL_SECTIONcs;DWORD__stdcallfun1(LPVOIDp1){for(intj=0;jMaxCount;j++){::EnterCriticalSection(&cs);i++;::LeaveCriticalSection(&cs);}}DWORD__stdcallfun2(LPVOIDp1){for(intj=0;jMaxCount;j++){::EnterCriticalSection(&cs);i--;::LeaveCriticalSection(&cs);}}加入的同步代码的两个线程,无论如何执行,i的值总是0,结果是正确的。6、主函数的写法intmain(){DWORDid1,id2;HANDLEhThread[2];::InitializeCriticalSection(&cs);hThread[0]=::CreateThread(0,0,fun1,0,0,&id1);hThread[1]=::CreateThread(0,0,fun2,0,0,&id2);::WaitForMultipleObjects(2,hThread,1,INFINITE);printf(i=%d\n,i);::DeleteCriticalSection(&cs);getchar();return0;}四、实验材料的提交与成绩评定1、本实验的实验报告一份(电子版或纸质版一份,具体形式由任课教师确定,格式参考学院统一实验报告)2、实验源程序一份,请表明题号(电子版)备注:做下一次实验之时提交上一次实验的材料,由各班学习委员以班为单位收集并上交任课教师。3、实验成绩总分为10分,由指导老师根据学生实验表现和实验材料进行评定,本门课程结束后实验平均成绩(实验总成绩/实验次数)按照10%的比例记入期末考试总成绩。实验四操作系统中的经典线程同步问题一、实验目的1、加深对线程的理解、掌握Windows中线程的操作。2、掌握死锁产生的原因。3、掌握信号量、互斥量、事件、临界区等同步对象的使用。二、实验理论基础及教材对应关系1、进程和线程的关系。2、线程间的同步和通信。3、本实验内容主要对应于教材第2章中关于线程的各节、第3章中关于死锁的各节。三、实验内容与步骤1、运行实验程序“Reader_Writer.exe”,出现如下界面:2、交替点击“创建读者线程”和“创建写者线程”按钮,出现如下界面:3、观察第二步的实验现象,多次试验,可总结为:(1)、当有“读者”的绿灯亮时,其余的“读者”灯的状态是、其余的“写者”灯的状态是。(2)、当有“写者”的绿灯亮时,其余的“写者”灯的状态是、其余的“读者”灯的状态是。这说明“读者”间的关系是、“读者”之间的关系是、“读者-写者”之间的关系是。(填相容、互斥)4、打开工程文件“Reader_Writer”,查找下列函数的用法:(1)AfxBeginThread();创建线程。ResumeThread();让线程恢复运行。(2)CreateMutex();创建互斥量。Re