Memory management CS-存储程序概念-can';我不懂这个概念

Memory management CS-存储程序概念-can';我不懂这个概念,memory-management,computer-science,von-neumann,Memory Management,Computer Science,Von Neumann,我确实试图理解冯·诺依曼的体系结构,但有一件事我不明白,如果这个命令或者它是一个数据,用户如何知道计算机内存中的数字 我知道有一个“存储程序概念”,但我什么都不懂 有人能用两句话给我解释一下吗 thnx 简而言之,用户无法查看内存地址并确定它是命令还是数据。两者都可以 这一切都在解释中;如果指向内存地址,它将被解释为命令。如果它被读取指令引用,则它是数据 这一点是灵活性。程序可以将程序写入(或重新写入)内存,然后通过将程序计数器设置为起始地址来执行 现代操作系统限制这种行为,防止部分内存被解释为

我确实试图理解冯·诺依曼的体系结构,但有一件事我不明白,如果这个命令或者它是一个数据,用户如何知道计算机内存中的数字

我知道有一个“存储程序概念”,但我什么都不懂

有人能用两句话给我解释一下吗


thnx

简而言之,用户无法查看内存地址并确定它是命令还是数据。两者都可以

这一切都在解释中;如果指向内存地址,它将被解释为命令。如果它被读取指令引用,则它是数据

这一点是灵活性。程序可以将程序写入(或重新写入)内存,然后通过将程序计数器设置为起始地址来执行


现代操作系统限制这种行为,防止部分内存被解释为命令

存储程序概念的基本概念是将数据和指令一起存储在主存中

注意:这是一个过于简单的答案。为了说明问题,我故意漏掉了很多东西


记住,在现代机器上,所有计算机内存都是一长串字节。这些数字是没有意义的,除非把它们放在那里的东西有一个特定的目的

我可以把号码
5
放在地址
0
上。它可以代表我的CPU指令集手册中指定的第五条指令。它可以代表我上周的睡眠时间。除非给它赋值,否则它是没有意义的

那么,计算机如何知道如何实际“处理”这些数字呢

它是标准和规范的一个大组合,这些文件或代码规定了哪些数据应该放在哪里,每个数据段的意思是什么,数据的可接受值是什么,等等。这些标准(通常)得到了大众的同意

标准无处不在。BIOS有关于在引导介质(硬盘、live CD、可引导USB记忆棒等)上查找主操作系统入口点的规范

从那时起,操作系统将遵守规定VGA缓冲区在内存中的位置的标准(例如,x86机器上的0xb8000),以便输出启动机器时看到的所有启动文本

诸如此类

可移植可执行文件(windows)或ELF映像(linux)或Mach-O映像(MacOS)只是遵循规范的文件,通常由操作系统制造商强制执行,将代码片段放在文件中的特定位置。然后,该文件被简单地加载到内存中,在用户空间中指定一个特定的位置,然后操作系统就可以准确地知道程序的入口点在哪里

从那里,它设置(IP)以指向当前指令字节。在大多数CPU上,IP指向的当前字节激活CPU中的特定电路以执行某些操作

例如,在x86 CPU上,字节
0x04
是接收下一个字节(因此
IP+1
)的字节,将其作为无符号8位数字读取,并将其添加到
al
寄存器。这是x86规范的要求,所有x86 CPU都同意实现该规范

这意味着当IP寄存器指向值为
0x04
的字节时,它将执行加法并将IP增加2-第一个是跳过
add
指令本身,第二个是跳过
add
指令的“参数”(操作数)

IP的发展速度与CPU(以及操作系统的调度程序)允许的速度一样快,这相当于一个“正在运行”的程序



数据的含义完全由创建数据的内容和使用数据的内容来定义。在最好的情况下,双方通常通过某种标准或规范达成一致。

您所说的“如果读指令引用了它,它就是数据”是什么意思?thnx如果内存位置用作数据,则它是数据。从记忆的角度来看,没有区别——都在解释中<内存位置中的code>0x90可以是值144、字母“É”(在CP850中)、英特尔x86 CPU的
NOP
或完全不同的值。