南昌大学操作系统实验概念.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实 验 报 告 实验课程: 计算机操作系统 学生姓名: 郭慧 学 号: 6100512019 专业班级: 电子商务121班 2014 年 5 月 30 日 目 录 实验一 ………………………………………………………03 实验二 ………………………………………………………12 实验三 ………………………………………………………19 南昌大学实验报告 学生姓名: 郭慧 学号: 6100512019 专业班级: 电子商务121班 实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 2014-5-16 实验成绩: 实验1 进程/线程同步 一、实验目的 本实验讨论临界区问题及其解决方案。首先创建两个共享数据资源的并发线程。在没有同步控制机制的情况下,我们将看到某些异常现象。针对观察到的现象,本实验采用两套解决方案: ? 利用Windows的mutex机制 ? 采用软件方案 然后比较这两种方案的性能优劣。 二、实验内容 2.1 进程/线程并发执行 Windows操作系统支持抢先式调度,这意味着一线程运行一段时间后,操作系统会暂停其运行并启动另一线程。也就是说,进程内的所有线程会以不可预知的步调并发执行。为了制造混乱,我们首先创建两个线程t1和t2。父线程(主线程)定义两个全局变量,比如accnt1和accnt2。每个变量表示一个银行账户,其值表示该账户的存款余额,初始值为0。线程模拟在两个账户之间进行转账的交易。也即,每个线程首先读取两个账户的余额,然后产生一个随机数r,在其中一个账户上减去该数,在另一个账户上加上该数。线程操作的代码框架如下: counter=0; do { tmp1 = accnt1 ; tmp2 = accnt2 ; r = rand ( ) ; accnt1 = tmp1 + r ; accnt2 = tmp2 ? r ; counter++; } while ( accnt1 + accnt2 == 0 ) ; print ( counter ) ; 两个线程执行相同的代码。只要它们的执行过程不相互交叉,那么两个账户的余额之和将永远是0。但如果发生了交叉,那么某线程就有可能读到新的accnt1值和老的accnt2值,从而导致账户余额数据发生混乱。线程一旦检测到混乱的发生,便终止循环并打印交易的次数(counter)。 请编写出完整的程序代码并运行,然后观察产生混乱需要的时间长短。因为这是我们编写的第一个程序,因此这里我给出了完整的代码,请参考。有能力的同学在参考下面的代码之前,请先自己尝试一下。 #include stdio.h #include stdlib.h #include windows . h int accnt1 = 0 ; int accnt2 = 0 ; DWORD WINAPI run ( LPVOID p) { int count e r=0; int tmp1 , tmp2 , r ; do { tmp1 = accnt1 ; tmp2 = accnt2 ; r = rand ( ) ; accnt1 = tmp1 + r ; accnt2 = tmp2 ? r ; count e r++; } while ( accnt1 + accnt2 == 0 ) ; printf ( ”%d\n” , count e r ) ; } int main ( int argc , char ?argv [ ] ) { CreateThread (NULL, 0 , run , NULL, 0 , NULL) ; CreateThread (NULL, 0 , run , NULL, 0 , NULL) ; system( “PAUSE”) ; return 0 ; } 反复运行该程序。请问,观察到了什么?你能解释这些现象吗? 2.2 临界区问题之解决方案 上面例子中,线程执行的代码叫做临界区,因为两个线程在这里访问了同样的数据, 在没有保护的情况下,有可能发生混乱。解决该问题有两套方案。其一,如果操作系统提 供了同步原语,例如mutex,那么就可直接利用该原语对临界区进行排它性的存取保护。其 二,如果操作系统不提供这样的原语,那么可用软件方案加以解决。本实验中,我们将实 现并比较这两种方案。 2.2.1 mutex方案 Windows操作系统提供了mutex对象。mutex状态可以是signaled (unlocked) 或者

文档评论(0)

ddf55855 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档