第六讲 进程的同步.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 院(系) : 计算机科学与技术学院 研究室: 软件支持技术 教 师: 王红滨 操作系统实验 主要内容 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 section Release 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

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档