上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
第7章 互斥和同步机制的实现
7.1 互斥和同步概述
在操作系统的设计中,尤其是在引入多任务的情况下,需要考虑下列几种可能的“竞争”状态:
(1)中断处理程序和应用程序之间的竞争,比如一个共享的数据对象既可以被应用程序修改,也可以被中断处理程序修改,这时候就需要充分考虑应用程序和中断处理程序之间的竞争关系,因为中断随时可能发生;
(2)应用程序与应用程序之间的竞争,比如两个应用线程共享同一个数据结构,且可以任意修改,这样就需要充分考虑如何避免修改过程中出现的冲突(一个线程修改了一半被替换出去,另一个线程继续修改同样的数据结构);
(3)在多CPU的情况下,除了考虑上述竞争关系之外,还需要考虑多个CPU之间的冲突关系。
Hello China当前版本对这几种可能的冲突情况都做了充分考虑,并实现了相应机制来处理这几种竞争关系。虽然当前版本的Hello China只支持单CPU,但在设计的时候,对多CPU的情况也做了充分考虑,并在数据结构和代码的设计中留下了余地,便于后续向多CPU平滑过渡。
在当前版本的实现中,关键区段用于完成中断处理程序和应用程序之间的同步,而应用程序之间的互斥与同步,则用来实现事件对象(Event Object)、互斥体对象(Mutex Object)和信号量对象(Semaphore Object),这些对象可支持标准的同步或互斥语义,也支持超时等待机制。在本章中,我们仅仅对信号量对象的实现做详细描述,其他对象的实现与信号量对象的实现类似,读者可自行查阅代码。