今天我一直在想这个问题。
如果 RAM 的 IC 包含存储在电容器中的位,那么您如何从某处提取位并将它们放在已经存在的位置?
例如,在启动时,我将在这里学究来说明我的困惑:
MOV AL, 07h
Run Code Online (Sandbox Code Playgroud)
那是代码,而不是数据,因此它将成为加载到 RAM 中的指令的一部分 - 但 RAM IC 内部有位“坐”。按照这个逻辑,怎么能把一点移到另一个已经存在的地方呢?
因为通常处理器会通过总线从 RAM 中提取字节,无论是代码还是数据,以确定是否要处理它。
所以我的问题,如果不清楚,是:
当 RAM 已经占用位时,将字节/位移动到 RAM 有什么意义,即“2 GB DIMM 无缓冲”。
RAM 的位位于电容器中,所以当 RAM始终保持时,BIOS/固件将 CPU 的 IP 寄存器设置为下一条指令有什么意义?在启动前占用位有何意义?
对不起,如果偏离主题。
如果 RAM 的 IC 包含存储在电容器中的位,...
RAM(随机存取存储器)是一个通用术语,但您以特定方式使用它。
通常,计算机使用三种主要类型的 RAM 作为其主存储器:
...你怎么能从某个地方提取一些东西并将它们放在已经存在的地方?
这被表述为好像位是不能被置换的物理实体。
四处移动的“位”只是值,而不是物理实体(除非实际上指的是诸如寄存器或存储单元之类的物理事物),即使这些值通常被视为项目。
RAM 中的“位”仅仅是逻辑状态或存在条件。你可以举手,也可以放下手:这是两种状态。
RAM 中的每个单元格都可以改变它的状态(就像你可以举起或放下你的手一样)。
写操作会引发这种状态变化。存储单元的先前状态将永远丢失。
...当 RAM 已占用位时,即“2 GB DIMM 无缓冲”。
说的挺别扭的。
RAM(物理项目)不能“占用”“位”(逻辑状态)。
DRAM(和 SRAM)在通电时将具有垃圾(随机)值,直到写入每个位置。
通常,先前未写入(因此具有已知值)的读取存储器是编程/逻辑错误。
RAM 的位位于电容器中,...
当您真正关心的属性仅仅是它们的值时,避免将“位”视为物理实体。
...那么 BIOS/固件将 CPU 的 IP 寄存器设置为下一条指令有什么意义...
“启动”的第一步是初始化程序计数器 (PC) 的“重置”操作,或者您似乎更喜欢将“IP 寄存器”(指令指针?)设置为已知值。
假定在该“复位地址”处存在引导程序。
使用铁氧体内存的计算机通常在“重置地址”处留出这个内存区域来保存引导程序。
现代计算机在“重置地址”处采用非易失性存储器,例如 PROM、EPROM、EEPROM 或闪存来保存引导程序。
什么时候 RAM 总是在启动前占用位?
又是那句难听的话。
计算机通常构建为“重置地址”指向非易失性存储器中的引导程序。
如果存储器是易失性的,那么某种机制(独立于上电和复位电路)将必须使用适当的引导程序来初始化该 RAM 。计算机的前面板(IBM 兼容 PC 中从未包含的东西)可用于将引导程序手动输入RAM。
附录
也许我的第一位编程老师在我们脑海中鼓吹的内容可能会有所帮助:
我看得出你很困惑。:-)
首先,代码就是数据,它只是对处理器具有特定含义的数据[1]。
其次,“位”是像自来水一样沿着逻辑线路移动的电荷水平。请注意,电荷水平(电压)并不是实际的电子移动:尽管电子确实移动,但与电压的变化相比,它们的移动速度相当缓慢。
RAM 表示随机存取存储器,DRAM 中的 D 表示“动态”,因为如果不刷新,它不会持续很长时间。现代芯片具有内部刷新逻辑,可以读取所有位并将其再次写回,从而对存储进行重新充电。几乎所有 RAM 都将位存储为两种电荷水平,例如,逻辑 0 的电势为 0 伏,逻辑 1 的电势为 1.5 伏。虽然并不常见,但有可能具有多值位,因此对于存储 2 位(二进制数字)数据的单元,0.. 0.1 伏用于 0,0.9 .. 1.1 伏用于 1,1.9 .. 2.1 伏用于 2,2.9 .. 3.1 伏用于 3。
逻辑(存储器或其他)中使用的实际电压并不重要,但是当然,连接组件的电线的每一端都必须就它们的电压达成一致。如果您查看电子数据表,您会发现有关芯片解释为每个逻辑电平的电压的声明。5 伏(标称)下 TTL 逻辑的常见电压范围是 0 到 0.5V 之间的逻辑 0,3.5 伏到 5.1 伏之间的逻辑 1。
当内存中的某个位置被写入时,电子设备会被设置为无论是 0 还是 1,都会被覆盖。有时,这种逻辑会以“错误”的方式工作:“自然”值为逻辑 1,并且必须强制的值是 0。无论哪种方式,这都在 DRAM 芯片中:其他一切都将内存视为可以根据需要多次和频繁地写入和重写的地方。如果您想知道“旧”数据发生了什么,电荷会被发送到地面,这也是芯片消耗功率的部分原因。
当处理器从内存中获取代码时,它会通过阶段管道发送:这些阶段用于加速处理器。许多现代处理器也是微编程的:内部逻辑从一个传入的指令运行多个“指令”,并且这些内部指令的级别甚至更低。要正确理解这一切,您需要了解处理器的内部结构,而 x86 不是开始的地方!更简单的是 Rockwell 6502(Acorn BBC / C= 64 等)。此外,人们已经编写了模拟器,因此您可以非常轻松地玩各种游戏。
启动时,大部分处理器将保持复位状态,直到所有外部逻辑都稳定下来并进入稳定状态。然后,它将一个值加载到指令指针中并从该点获取指令,或者将一个值从内存中的固定点加载到指令指针中,然后从该点获取指令。后者称为间接寻址。
PC 上的 BIOS 是 x86 处理器在启动时运行的代码。有一段时间,它也在操作系统的整个执行过程中使用。在启动时,它的工作是将所有硬件置于良好(不仅仅是稳定)状态,设置一个描述操作系统稍后将使用的硬件的表,找到可启动磁盘,如果成功将磁盘中的第一个扇区加载到RAM 并跳入其中,期望该扇区包含引导代码。
真正的 PC 比这更复杂,EFI 也让事情变得复杂,所以我强烈建议一开始就坚持使用 8 位微处理器,因为它们内部更简单,也更窄。
华泰
[1] 一些处理器将用于代码的内存芯片与用于数据的内存芯片区分开来,称为“哈佛”架构内存。然而,“代码就是数据”仍然是正确的。
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |