“无模式位”的数据常规MV / 8000优点


10

我正在阅读Tracy Kidder的“新机器的灵魂”,Data General的团队在其中设计了新机器(代号为“ Eagle”,后来称为MV / 8000)。它是先前体系结构(16位Eclipse)的32位扩展。不断变化的主题之一似乎是,他们不想创建带有模式位的机器,并且他们成功做到了这一点。

但是,它没有说明如何从技术上实现这一点,也没有涉及为什么创建没有模式位的机器如此吸引人的原因。这本书不是一本技术性的书,因此细节可能以某种方式被扭曲了。但是,您会在阅读本书时感到“模式位”解决方案在当时很普遍(因此很可行),但工程师可能出于美学原因认为它没有吸引力。这本书还使得创建没有模式位的设计似乎是一项艰巨的任务,而这个特定团队却以某种方式克服了这一难题。

我发现了如何实现的描述:

http://people.cs.clemson.edu/~mark/330/kidder/no_mode_bit.txt

这似乎基本上是关于将操作码空间的先前未使用的部分用于新指令。我必须承认,我对“就是那样”感到有些失望。我也认为这仍然使一些问题无法解决:

首先,16位进程如何生活在32位地址空间中?因为我认为这是“不带模式位”进行32位扩展的关键挑战。另一方面,扩展指令集是一项相对常见的工作。由于没有描述它是如何发生的,因此可以假设16位代码像往常一样简单地访问内存,也许它看到某种类型的内存虚拟化/存储视图(由新的CPU寄存器控制第一个地址在哪里)或这样的事情。但是我不知道还有什么。在那种情况下,可以说它是一种“模式位”解决方案。16位模式进程可以通过添加到CPU的特殊功能与其他进程一起运行。

其次,为什么创建没有模式位的机器如此吸引人?书中吹捧的许多好处是客户希望运行旧软件。但这似乎并不反对使用模式位,因为使用模式位的全部目的是为了具有向后兼容性。当AMD将x86扩展到64位时,至少根据我对“模式位”一词的理解,他们所做的就是添加一个模式位。一个特殊的位,它将使CPU处于64位模式。还有一点将使进程在64位模式的“子模式”中执行(以实现与32位应用程序的兼容性)。子模式的本质是CPU将指令流解释为旧的32位指令,但是使用新的页表格式(由64位可识别的操作系统设置)可解决对32位存储器的访问。映射到完整的物理地址空间。同样,32位代码可以被64位代码取代。与Data General解决方案一样,这也允许32位程序在64位程序下运行(在DG情况下为16位vs 32位)。因此,从客户的角度看,根本没有区别。因此,唯一的好处可能是实现,简化了设计,但是书中并未讲到这就是要关注的问题,因为即使在那时,模式位似乎仍然很常见(而且以后的架构似乎也如x64案例所示使用它)。

我敢肯定我错过了一些东西,所以如果有人可以讨论更多有关这种“无模式位”设计的技术细节和优点的信息,那将是很棒的。


在那些日子里-将通用字长从16位转移到32位的日子-大多数新的32位体系结构完全在同一mfr的16位行上具有不同的指令集-即使它们也可以执行带“模式位”的16位指令集。由于人们将项目升级到新的32位计算机,因此没有市场上的理由,这导致了市场的不确定性-只要是架构,为什么不从任何mfr中选择最好的计算机。缺少“模式位”建议更轻松的“增量”转换:因此,请保留DG。
davidbak

Answers:


8

答案是,数据通用管理总裁Ed deCastro在北卡罗来纳州成立了一个工程师团队,专门设计下一代CPU。他向马萨诸塞州团队分配了支持和逐步增强的任务。我们三度提出了一个主要的新架构,每次都具有非常合理的模式位,并将其描述为适度的增量增强。每次Ed都看穿我们的伪装并拒绝了该提议,并希望北卡罗来纳州团队能够成功。Ed相信,无论我们如何试图掩饰我们的建议,他都会知道,如果有模式的话,它就是新一代架构。因此,我们不得不提出一种不带模式位的新一代架构,即使这样会使效率降低。这就是我们经过Ed deCastro的方式。参见新机器的灵魂,


嗨,卡尔,感谢您提供的信息,是的(从阅读本书中得出的)也是我的印象,即模式讨论主要涉及政治含义。内幕信息很好-听起来像MV / 8000是一个非常令人兴奋的项目。
莫蒂

6

从理论上讲,“无模式位”将允许您使用旧的16位操作系统,而无需进行任何修改,并且该操作系统将能够启动32位应用程序,尽管新的32位应用程序将被保留下来16位虚拟地址,因此将能够使用32位寄存器和新指令,但如果它们访问的虚拟地址大于,则会表现异常。216

如果使用模式位,则必须修改旧的16位OS才能确定程序是16位还是32位,然后在启动程序之前适当地设置模式位。

在实践中,似乎MV / 8000实际上具有模式位。在Mark Smotherman在Clemson的网页上的其他地方,他发布了数据总则,ECLIPSE MV / 8000操作原理,1980年。如果查看附录E(从第369页开始),您会发现MV / 8000具有两种完全不同的页表机制。MV / 8000向后兼容的特定机器是C / 350,而C / 350具有特定的16位内存分配和保护单元,并具有控制该单元的特定方式。对于32位逻辑到物理操作,您可以打开地址转换单元(如第3章所述,从第31页开始)。

在实践中,这意味着在32位模式下执行16位指令时,指定逻辑地址的高16位设置为0。高位发生的情况也必须有一些说明。在16位模式下执行32位指令时,地址的16位,但是在我简短阅读本手册的过程中,我找不到它。

因此,模式位是好事还是坏事不再是一个问题。更重要的是,没有特别好的理由使用模式位来区分16位和32位指令。16位指令使用16位逻辑地址(高16位设置为0)和16位寄存器,而32位指令使用32位逻辑地址和32位寄存器。旧操作系统“可以在新计算机上正常运行”,但是您也可以通过在旧操作系统下运行新程序来尝试新指令。


嗨,好的,这使“无模式位”的目标更加清晰了-因此目标是能够引导原始的16位操作系统,但仍从那里启动32位程序。但是,正如您所说,不可能在以该模式运行的32位程序中使用32位逻辑地址空间。在某种程度上,它类似于Intel从16位到32位过渡的过程。在这里,还可以从16位程序(例如,在MS-DOS下运行)中执行32位指令(访问寄存器的较高部分)。然而,与此同时,他们有...
莫蒂

...模式位,用于进入“真” 32位保护模式(也允许分页)。区别在于,尽管在32位模式下32位指令的编码与在16位模式下32位指令的编码不同(因为“默认”不同),但是功能是相同的。另一方面,随着x86转换为64位,指令编码已完全更改,因此32位程序(或16位程序)不能使用64位寄存器等。它需要更新o / s以64位模式(“长模式”)启动进程。
莫蒂

但是,人们仍然可能会质疑强调这种“无模式位”设计的优点,因为首先有一个模式位,而且似乎在一个极端的情况下(“运行旧操作系统和新应用程序”),它提供了任何功能。好处-大多数客户不是要运行可以充分利用硬件的新操作系统吗?这里的重要功能是新操作系统可以运行旧应用程序!但是正如我发送的链接所提到的,这甚至是不可能的,程序需要重新链接甚至重新编译(由于o / s的更改),从而使CPU兼容。方面有争议!
莫蒂
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.