




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验指导书课 程 号:1002060106适用专业:计算机各专业制 定 人:吴江红教 研 室:计算机科学与技术教研室计算机科学与信息工程学院2012 年5 月前言操作系统是计算机的核心和灵魂。操作系统软件的设计对整个计算机的功能和性能起着至关重要的作用,所以此门课也是必不可少的,是面向计算机科学与技术、网络工程、软件工程等大多数计算机专业本科生和研究生开设的一门计算机专业课程。操作系统是计算机系统的核心,操作系统课程是计算机科学与技术专业的重要必修课。本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。本课程的理论性强,内容抽象,特别是进程管理,需要通过严密的逻辑思维来想象微观时间世界中的处理机调度与运行。通过学习使学生掌握计算机操作系统的基本原理及组成;计算机操作系统的基本概念和相关的新概念、名词及术语;了解计算机操作系统的发展特点、设计技巧和方法;对常用计算机操作系统(Dos、Windows和Unix或 Linux) 会进行基本的操作使用。实验要求为了顺利完成操作系统课程实验,学生应做到: (1) 熟练掌握一种高级程序设计语言。(2) 实验前,认真学习教材以及实验指导书的相关内容,提前做好实验准备。(3) 每次实验先分析后编程,在实验报告中应写明自己的编程思路和设计流程。(4) 实验结束一周后提交实验报告。实验报告内容应包括:实验目的、实验内容、设计思路和流程框图,源程序(含注释)清单、测试结果以及实验总结。(5) 遵守机房纪律,服从辅导教师指挥,爱护实验设备。实验的验收将分为两个部分。第一部分是上机操作,随机抽查程序运行和即时提问;第二部分是提交书面的实验报告。此外杜绝抄袭现象,一经发现雷同,双方成绩均以0分计算。目 录实验一 Windows多线程1实验二 Windows线程同步机制 5实验三 Windows线程通信9实验四 银行家算法模拟15实验五 页面置换算法模拟22实验一 Windows多线程【开发语言及实现平台或实验环境】C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 【实验目的】(1) 进一步理解操作系统的并发性;(2) 了解Windows线程创建方法,并通过查阅资料理解各参数的含义;(3) 了解多线程程序设计方法,并进行简单应用。【实验要求】(1) 逐程序进行简要分析、运行各程序并仔细阅读注释;(2) 查阅MSDN或其他资料,掌握相关系统调用使用方法和参数含义;(3) 完成实验报告。【相关知识】一、内核对象(一) 内核对象的概念内核对象是内核分配的一个内存块,这种内存块是一个数据结构,表示内核对象的各种特征。并且只能由内核来访问。应用程序若需要访问内核对象,需要通过操作系统提供的函数来进行,不能直接访问内核对象(Windows从安全性方面来考虑的)。内核对象通过Create来创建,返回一个用于标识内核对象的句柄,这些句柄(而不是内核对象)可在创建进程范围内使用,不能够被传递到其他进程中被使用。(二) 内核对象使用的计数因为内核对象的所有者是内核,而不是进程,所以何时撤销内核对象由内核决定,而内核做这个决定的依据就是该内核对象是否仍然被使用。那么如何判断内核对象是否被使用呢?可以通过内核对象的“使用计数”属性,一旦这个值变成0了,内核就可以释放该对象了。(三) 创建内核对象1、进程与句柄表每个进程在初始化的时候,将被分配一个句柄表,该句柄表中只存储内核对象的句柄,不存储用户对象的句柄。句柄表的详细结构微软没有公布,但是大致包含三个内容:内核对象句柄,内核对象地址,访问屏蔽标志。2、创建内核对象及操作系统内部机制利用CreateSomeObject的函数来创建内核对象。调用该函数的时候内核就为该对象分配一个内存块,并进行初始化,然后内核再扫描该进程的句柄表,初始化一条记录并放在句柄表中。3、进程中使用内核对象的内部机制假设函数F使用某个内核对象,其参数为Handle1,则该函数内部需要查找该进程的句柄表,找出参数句柄对应的记录,然后才能使用该内核对象。(四) 关闭内核对象无论进程怎样创建内核对象,在不使用该对象的时候都应当通过bool CloseHandle(HANDLE hobj)来向操作系统声明结束对该对象的访问。为什么叫声明呢?是因为此时也许还有其他进程对该对象的访问,操作系统可能并不立即释放该对象。操作系统需要做的是:从进程的句柄表中删除该内核对象的记录,另外再考察该内核对象的使用计数以决定是否需要释放该对象。(五)内核对象的共享说到共享,与之孪生的就是共享权限。Windows内核对象的共享有三种方式:1、继承式共享(父子进程间)只有当进程是父子关系的时候,才能使用此种方式的共享。特别要注意的是继承的是内核对象的句柄,内核对象本身是不具备继承性。要达到这种继承的效果需要做以下几件事:在进程创建内核对象的时候,需要一个安全结构sa(SECURITY_ATTRIBUTES类型,以向OS声明对象的访问方式)作为参数。继承式共享需要将结构的成员sa.bInheritHandle设置为TRUE。此时OS内部的处理式将进程的句柄表中的该对象的访问屏蔽字段设置成“可继承”。在创建子进程(CreateProcess函数)时,设置创建参数bInheritHandles为TRUE。表示被创建的子进程可以继承父进程中的所有可继承内核对象。OS内部的处理是:复制父进程句柄表中的记录到子进程的句柄表中,并使用相同的句柄值;为内核对象的使用计数器加1。特别说明:子进程能够继承的的内核对象仅局限于父进程创建它的时候所拥有的可继承内核对象。子进程诞生后,父进程再搞出什么可继承的东西,子进程是不能用的。这就需要在子进程中使用继承的内核对象的时候需要慎重,以确定内核对象是否已被继承了。利用SetHandleinformation方法可以随时修改内核对象句柄的一些属性,目前公开的句柄属性有两种,一种是该句柄是否能被继承,另一种是该句柄是否能被关闭。2、同名共享同名共享,不需要共享进程之间存在父子关系。但局限于内核对象是否支持这种共享方式。创建内核对象的Create函数中是否包含pszName是该内核对象是否支持同名共享的标志。l方法一:当Process1通过CreateObject(”someName”)创建了一个名字为someName的内核对象后,Process2也调用了CreateObject(”someName”),此时内核的动作是:在全局中查询发现已经存在someName1的对象;为Process2的句柄表添加一条Ojbect的记录,使用的句柄不确定;为someName这个Object的引用计数器加1。方法二:Process2使用OpenObject(”someName”)的方式来获得对名someName的Object的句柄。用这种Open方法的时候,需要提供一个参数让OS鉴权,以判定是否能够以参数指定的方式来访问内核对象。3、复制内核对象的句柄的方式共享跨进程边界的内核对象共享的另外一个方法是通过DuplicateHandle来复制内核对象句柄。如果要将ProcessS中的对象拷贝到ProcessT中则调用DuplicateHandle的进程一定要有对这两个进程的访问权,即句柄表中拥有这两个进程内核对象的句柄记录。二、线程的一般概念进程只是线程的容器,从来不执行任何东西;线程总是在某个进程中被创建;线程在进程的地址空间中执行代码;线程们共享进程中的所有内核对象。三、线程的创建HANDLECreateThread(PSECURITY_ATTRIBUTESpsa,DWORDcbStack,PTHREAD_START_ROUTINEpfnStartAddr,PVOIDpvParam,DWORDfdwCreate,PDWORDpdwThreadID);调用CreateThread后,OS进行如下几个动作:生成一个线程内核对象;在进程空间内为线程分配堆栈空间。因为线程的环境同于其所在进程的环境,所以创建的线程可以访问进程中的所有资源,包括线程中所有的内核对象。四、线程销亡(一)终止线程的方式l线程函数返回(最好使用这个方式,可以保证:线程中创建的C+对象正常析构;OS释放线程堆栈内存;OS将线程的退出码设置为线程函数的返回值;系统将递减该线程内核对象的的使用计数器【如果此时还有其他引用,见下面说明】。)l调用ExitThread(不能释放C+对象,所以最好不要使用这个方式。另外,如果非要调用也应当调用编译器推荐的,如_endThread【Windows核心编程P127】)l同进程内的其他线程(包括主线程)调用TerminateThread(被撤销线程得不到通知,不能释放资源,尽量避免这种方式。另外这个函数是个异步函数,返回时,线程不保证已经被撤销,如果要观察线程是否被撤销,应当使用WaitForSingleObject)包含线程的进程终止(应当避免这种方式)(二)线程退出时OS的行为l线程内的所有用户对象被释放。l线程的退出码从STILL_ACTIVE改为传递给ExitThread或TerminateThread的代码l线程内核对象的状态改为“已通知”如果线程为进程中的最后一个线程,则OS将进程当作已终止运行l线程内核对象的引用计数器减1(一旦线程终止了,其他引用改线程内核对象将不能够处理改线程的句柄,但是可以通过调用GetExitcodeThread来检查hThread代表的线程是否已经终止运行了。)【实验步骤】(1)阅读和理解1-1.cpp文件中的程序,多次运行1-1.cpp,认真观察结果。然后将main函数中注释掉的Sleep语句让其可用,即将其前面的注释号删掉,再多次运行,认真观察结果。比较修改程序前后运行结果发生的变化,并分析其原因。(2)阅读和理解1-2.cpp文件中的程序,多次运行1-2.cpp,认真观察结果。思考为什么1-2.cpp中可以不需要Sleep语句就可看到各线程都被调度了。(3)阅读和理解1-3.cpp文件中的程序,运行1-3.cpp,认真观察结果。然后将main函数中注释掉的Sleep语句让其可用,即将其前面的注释号删掉,再多次运行,认真观察结果。再将两个子函数中注释掉的Sleep语句让其可用,再多次运
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旋转的小蛇课件
- 课件标准化精细化的意义
- 保洁主管知识培训
- 新课程研究课件
- 培训驾驶安全的
- 课件最后一页动态图电影
- 2025年教师招聘之《小学教师招聘》通关试题库及答案详解(典优)
- 乐理考试题及答案古筝
- 广东法制史自考试题及答案
- 2025年中国真丝圆领短袖衫数据监测报告
- 《烽火岁月中的木刻》教学课件-2024-2025学年浙人美版(2024)初中美术七年级上册
- 公司外出施工管理制度
- 2024年新人教版小学一年级上册美术教案(11篇)
- 绿色算力新质生产力
- 2024法律职业资格(客观题)真题含答案
- 《蓝海集团企业战略》课件
- 中国美术史课件
- 高一下学期《学生宿舍卫生和内务》主题班会课件
- 学好普通话课件
- 新雨香沁项目外墙清洗高处坠落应急预案
- 食品防护知识培训
评论
0/150
提交评论