微处理器在内存中创建的段与操作系统中进程的内存结构之间是否有任何联系?

问题描述

在 8086 微处理器中,由于 16 位寄存器(因为 20 位地址不能存储在 16 位寄存器中),我们将内存分段为 64K 每段。这些段分为代码段、数据段、堆栈段和额外段。这种结构类似于操作系统中进程创建的结构。这是否意味着每个进程占用的内存相当于 4 个段,在 8086 的情况下相当于 4*64K ?如果这是真的,那么通过做一些更多的数学计算,我们可以说 8086 微处理器一次只能处理 4 个进程(即,一个进程将处于运行状态,而其他进程将处于阻塞或就绪状态),因为最大可能有 16 个段(总内存大小/每个段的大小 = 1MB/64K = 16)。
我刚刚开始研究这个,看到了流程和段之间的这种等价性。记忆的片段和过程的记忆结构之间是否真的存在这种联系,或者只是我的疯狂想象?

解决方法

了解一点历史会有所帮助。早期的 UNIX(tm) 在 Digital pdp 小型计算机系列上运行。第一个流通的版本是 V6 和 V7,它们是 pdp-11 系列独有的。该系列可以支持高达 256K 的 RAM;但是 gp 寄存器集(用于地址形成)是 16 位宽。处理器中有一个有限的内存保护方案,允许内核(主管)拥有与用户(用户)分开的地址空间;和指令(由 pc 生成的地址)与数据(通过其他方式生成)分开。 This will probably get edited into the dust by pdp-11 fanbois

大约在这个时候,英特尔正在推出将成为 8086 的东西。当前的 8 位 CPU 已经在 64K 地址空间限制下吃紧,并且正在使用一个称为 bank switching 的概念来增加它。在 bank switching 中,64K 地址空间的一些子范围可以重新指向更大的内存库;因此,尽管您可以仔细处理更多内存。 Hitachi 64180 是将其集成到其芯片中的 CPU 之一。最常用的外部存储控制器。

8086 寻址方案是这些概念的融合。您可以生成一个操作系统,该操作系统支持动态重定位进程和共享文本,最多 64K 指令 + 64K 数据。一般的想法是您将段寄存器从编程模型中取出,因此如果操作系统必须重新定位进程,它知道该进程没有保存旧段值的副本。商业操作系统 QNX 1.x,2.x 将此作为模型提供;后者使用 286 扩展来防止使用段寄存器播放的程序。

对于不关心这些细节的程序(Lotus 123,...),你可以使用段寄存器在 8086 上有效地创建一个 2^20 的地址空间。在这种模式下这是一个丑陋的编程模型因为地址格式是 A=Seg*16+Base,所以 Seg=1,Base=0 和 Seg=0,Base=16 解析为相同的地址。

所以,你不是幻觉,这是故意的,如果有点半疯的话。