当我制作8086仿真器时,我注意到在多处理器环境中有用于同步的LOCK
前缀。然而,我知道x86拱门的唯一多任务处理。涉及使用APIC,直到Pentiums或486s才出现。
8086多任务处理是否有任何标准,还是由指令集和/或特殊端口的某些制造商特定扩展来完成?
按照标准,我的意思是:如果它们都使用相同的内存,你如何分开2个处理器?如果没有某种方法使每个处理器执行不同的代码,这是不可能的。 (或仅在一个处理器上造成中断)
答案 0 :(得分:3)
如何分开2个处理器 如果他们都使用相同的记忆?
如果他们通过英特尔的MULTIBUS访问相同的内存,那么LOCK前缀就会产生这种序列化。
如果内存本地安装在一个处理器的电路板上,那么LOCK前缀不会阻止其他处理器通过MULTIBUS进入并同时访问该板的内存。在这种配置中,程序员必须玩其他游戏来锁定总线(并在完成内存操作后解锁总线)。
答案 1 :(得分:1)
嗯,我不是这里的专家,但我会尝试。
要记住的一点:不要想“PC”或“PC架构”。早在IBM PC存在之前(更不用说标准的个人计算机设计),英特尔并没有制造PC CPU;它正在制造微处理器。对于可以与8086结合的硬件组件没有确切的期望。您可以使用它来制造硬件微控制器,电子计算器,航空电子设备,以及 - 哦,当然 - 家用电脑。
LOCK
前缀的作用(我记得,自从我上次查看英特尔程序员手册已近15年)是指示执行期间微处理器的“总线锁定”线路。这是否有任何影响,取决于你连线到那条线!通常,是的,线路被插入电路,阻止其他组件使用任何数据线;这就是使公共汽车成为“公共汽车”的原因(但我对细节不是很熟悉)。
混淆的一个原因是多任务处理与多处理器不同(或者我们应该将其称为多组件?)。我不知道是否有人试图将两台8086插入同一总线的PC放在一起,但CPU并不是连接到总线的唯一东西,即使在PC架构中也是如此。例如,8086中运行的软件在访问与外部输入设备共享的内存时可能需要锁定总线,因此外部输入设备无法在8086读取它的同时写入。我想,即使是旧时尚的PC BIOS也可以分享这种情况。
今天的多处理器架构仍然依赖于LOCK
前缀来协调不同的处理器;但这并不是它存在的主要原因,也不是它的唯一用途。
答案 2 :(得分:1)
现代Intel CPU的内存访问: CPU通过FSB(前端总线)连接到NorthBridge(内存控制器中心)。 NorthBridge共享内存总线,AGP和PCI(图形)以及与SouthBridge连接的内部总线。检查图表:
CPU通过几个硬件引脚控制FSB访问:
编辑I:
对于8086 CPU系统: 当CPU必须与其他外设共享数据总线和地址总线时,使用DMA 8237 controller
解决此问题在多个CPU 8086系统中,英特尔Multibus IEEE 796总线标准正在使用中。 检查Multibus description。
编辑II:
8086多CPU系统具有全局(系统)内存,此内存通过多总线共享。 因此系统中的任何CPU都有自己的代码和数据存储器,并通过multibus访问全局存储器。 CPU仲裁和传输总线控制比这里的串行和并行优先级方案。然而,很多硬件引脚可以控制总线访问。总线锁定由#LOCK引脚完成,所有其他CPU在高电平时都会有#BUSY引脚。