第1节 流程控制问题
信号量的实现
信号量的实现必然会提醒注意一个基本仲裁问题:当某个信号出现时,怎样在同时等待的进程中进行选择呢?这涉及到实现技术中的一些基本原子性假设。
方法:
SVC实现,利用核心处理程序的原子性。引进分时处理器来共享单个非中断的内核。
通过特殊指令(比如,“测试和设置”)来实现,利用单条指令执行的原子性。与支持原子性的“读-修改-写”总线事务处理的共享总线多处理器一起工作。
利用单独的读或者写操作的原子性来实现。由Dijkstra设计的复杂、智能的2阶段方案在实践中并未使用。
自举:某个锁(“二进制信号量”)允许轻松地实现对全部信号量的支持。
将信号量作为管理程序进行调用
调用序列
将锁的地址
放入到R0中
CMOVE(lock, R0)
SVC(WAIT)
SVC调用是不可中断的,因为它在管理模式中执行。


