天津科技大学操系统实验.docVIP

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
天津科技大学操系统实验

2012-2013学年第一学期 专 业:软件工程 班 级:111033 学 号姓 名:赵孟翔 提交日期:2013年11月27日 目 录 实验一 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?内部的处理是:复制父进程句柄表中的记录到子进程的句柄表中,并使用相

文档评论(0)

vdi938 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档