- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 院(系) : 计算机科学与技术学院 研究室: 软件支持技术 教 师: 王红滨 操作系统实验 主要内容 1.实验目的 2.概念回顾 3.EOS内核提供的同步对象 4.在EOS应用项目中创建线程 5.Main函数流程图 6.Producer函数流程图 7.Consumer函数流程图 1. 实 验 目 的 使用 EOS 的信号量编程解决生产者—消费者问题,理解进程同步的意义。 调试跟踪 EOS 的信号量的工作过程,理解进程同步的原理。 修改 EOS 的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。 2. 概念回顾 多个并发执行的进程可以同时访问的硬件资源(打印机、磁带机)和软件资源(共享内存)都是临界资源。 每个进程中访问临界资源的那段代码称为临界区(Critical Section)。Lock mutex and enter critical section Critical sectionRelease mutex and exit critical section 2.1 临界资源和临界区 2.2 进程的同步 进程同步的主要任务是使并发执行的各进程之间能有效的共享资源和相互合作。 互斥体(Mutex)信号量(Semophore)事件(Event) 生产者-消费者问题读者-写者问题哲学家进餐问题 2.3 生产者-消费者问题 有一群生产者进程在生产某种产品,并将此产品提供给一群消费者进程去消费。为使生产者进程和消费者进程能并发执行,在他们之间设置了一个具有 n 个缓冲区的缓冲池,生产者进程可以将它生产的一个产品放入一个缓冲区中,消费者进程可以从一个缓冲区中取得一个产品消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已经装有产品的缓冲区中放入产品。 3. EOS 内核提供的同步对象 互斥(Mutex)对象 信号量(Semaphore)对象 事件(Event)对象 进程对象和线程对象 3.1 EOS内核提供了唯一的API函数用于各种同步对象的等待操作 ULONG WaitForSingleObject (//P操作 HANDLE Handle,//同步对象句柄 ULONG Milliseconds//超时的时间 ); 当等待对象Handle无效时,等待不返回。 当等待对象Handle有效时,返回成功。 在等待过程中对象一直无效,超过Milliseconds时间,返回WAIT_TIMEOUT。 3.2 Mutex 对象 typedef struct _MUTEX { PVOID OwnerThread;// 当前拥有 Mutex 的线程指针 //当有线程Mutex对象(即OwnerThread不空),为无效 ULONG RecursionCount;// 递归拥有 Mutex 的计数器 LIST_ENTRY WaitListHead;// 等待队列 }MUTEX, *PMUTEX; HANDLE CreateMutex(//创建Mutex对象 BOOL InitialOwner,//FALSE表示创建Mutex对象有效,TRUE表示对象无效 PCSTR Name//名称,一般为NULL,表示匿名 ); BOOL ReleaseMutex(//释放Mutex对象,V操作 HANDLE Handle ); 3.3 Semaphore 对象 typedef struct _SEMAPHORE { LONG Count; // 信号量的整形值 LONG MaximumCount; // 允许最大值 LIST_ENTRY WaitListHead; // 等待队列 }SEMAPHORE, *PSEMAPHORE; HANDLE CreateSemaphore(//创建Semaphore对象 LONG InitialCount,//初始资源数 LONG MaximumCount,//最大资源数 PCSTR Name//名称,一般为NULL,表示匿名 ); BOOL ReleaseSemaphore (//释放,V操作 HANDLE Handle,//句柄 LONG ReleaseCount,//一次增加几个 PLONG PreviousCount//返回值 ); 3.4 Event 对象 typedef struct _EVENT { BOOL IsManual; // 是否手动类型事件 BOOL IsSignaled; // 是否处于 Signaled 状态 LIST_ENTRY WaitListHead
您可能关注的文档
最近下载
- 2025徽商银行合肥分行社会招聘笔试参考题库附答案解析.docx VIP
- 人教部编版三年级下册语文期末测试题(含答案).docx VIP
- 金属增材制造安全规程 .pdf VIP
- 2069-3-3101-002 WKB产品判定准则-外发.docx VIP
- 建筑节能工程专项施工方案.doc VIP
- 《生物质燃料气化燃烧清洁供暖技术规范》(TCRES 0025-2025).pdf VIP
- 2025全国小学生“学宪法、讲宪法”活动知识竞赛题库及答案.docx VIP
- 武汉沿途讲解.pdf VIP
- 2014款一汽大众宝来_汽车使用手册用户操作图解驾驶车主车辆说明书电子版.pdf
- 面向制造企业的增材制造应用.pdf VIP
文档评论(0)