今天我正在阅读有关同步的内容。读到临界区问题的彼得森解决方案是基于软件的解决方案后,我有点困惑。现在我的问题是:“基于软件的解决方案”是什么意思?
2 回答
要解决临界区问题并强制互斥,有几种方法:
首先是基于软件的解决方案。该解决方案基于Peterson 算法、Dekker 算法和Lamport 面包店算法(针对多个进程)等算法来保护临界区。这些解决方案仅假设内存访问级别的基本互斥。除此之外,假定不支持硬件、操作系统或编程语言。
软件方法的主要问题是它们的高进程开销和逻辑错误的风险(基于Stallings的操作系统内部)
除了软件解决方案,我们还有硬件解决方案,如中断禁用,比较&交换指令和交换指令。这些解决方案采用忙等待,存在饥饿和死锁的可能性。
另一个强制互斥的范例是使用信号量和监视器,它们是由操作系统和编程语言实现的机制。
基于软件的解决方案:
1)基于软件的解决方案,从某种意义上说,它们所依赖的硬件的唯一特征是,如果两个进程试图将一个值存储在同一个内存单元中,那么硬件将保证最终值与由两者中的一个写的,尽管没有任何关于订单的保证。
2)在软件解决方案中,我们不能保证变量在给定进程查看它的时间和它本身尝试更改它的时间之间不会被更改。这是因为检查一个值和更改一个值通常需要两个或多个机器指令,并且可能会出现中断(在单处理器上)或来自另一个处理器的访问。这增加了解决方案的复杂性。
基于硬件的解决方案:
1)这里做了特殊的硬件规定,使得执行的操作是原子的(作为单个操作)。
2)许多处理器都有一条指令,该指令在单个原子操作中测试和修改内存中的位置,这样在检查位置和修改位置之间没有其他操作可以干预。例如,英特尔 IA32 具有交换寄存器和内存位置的 XCHG 操作。