CPU 如何从 RAM 访问应用程序和数据

How are applications and data accessed by the CPU from RAM

在将应用程序加载到 RAM 并打开文件后,CPU 如何从 RAM 访问应用程序和数据(因此文件的数据也存储在 RAM 中),我有点难以理解).

据我了解,CPU 只是在程序计数器滴答或在中断后执行任务时从 RAM 获取指令。那么它如何访问应用程序和数据。是不是它仍然只是获取指令(例如在硬盘驱动器上加载一个文件以在应用程序中打开)并处理应用程序发出的任何请求,这些请求存储在 RAM 中作为此后的指令(比如保存一个文件)。或者与打开的文件相关的应用程序和数据(例如)是否仅保留在 RAM 中并且根本不会被 CPU 访问。

同样,看过一篇文章,说在RAM中存放了一份操作系统。 CPU 然后可以访问操作系统。 (我认为 CPU 只是使用来自 RAM 的指令)。它如何与操作系统通信以及如何将中断从 RAM 中的 OS 副本或硬盘驱动器中的 OS 发送到 CPU。

对不起,如果这真的很令人困惑,我有很多不明白。

CPU,如您所见,从 RAM 中逐条指令读取程序。当一条指令被执行时,它可能引用存储在内存中的数据,它要么显式地提取到寄存器([=20= 的内部存储],非常小 - 在 x86_64 上就像几个 64 位寄存器+ 其他东西,如段寄存器、IP、SP 等)带有单独的指令,或从内存中读取的数据(我们谈论的是少量数据)。这就是它真正要做的。

从磁盘加载文件将通过要求适当的控制器将数据提取到内存中的特定位置来完成。 CPU 连接到总线,总线将向适当的控制器传送指令。

至于中断,这些是特殊的东西 - CPU 有几条中断线,可以由各种设备激活,例如您的网卡。当它接收到这样的中断时,通常由中断处理程序处理,这只是一个位于内存中众所周知位置的程序。它们可以通过例如操作系统进行注册。每个中断线都有自己的中断处理程序。当中断发生时,CPU 保存它恰好正在执行的程序的当前状态,处理中断,恢复状态并恢复程序。

确实令人困惑。让我试着解释一下。

CPU 和 RAM

CPU 通过 'motherboard' 硬连线到 RAM,它们一起工作。 CPU 可以执行许多指令,但必须由 RAM 中的指令告诉它要做什么。 CPU 基本上处于一个循环中:它所做的一切就是从 RAM 中获取下一条指令并一遍又一遍地执行它。

那么这个 RAM 是如何填充指令的呢?

BIOS(基本input/output系统)

电脑刚开机的时候,一部分RAM被主板芯片(BIOS芯片)的数据填满,CPU开机并开始处理.这些是出厂设置。

从 BIOS 芯片复制到 RAM 的数据包括访问硬件设备(硬盘、CD/ROM、USB 存储器、网卡等)的指令库, 以及使用该库的程序将引导设备上的第一个扇区 bootsector 加载到 RAM 中,并将控制权转移给它(使用 jump指令)。

引导程序

BIOS程序从引导设备加载的引导扇区数据非常小——只有440字节——但是在BIOS库的帮助下,这足以能够加载更多扇区并执行这些扇区。 bootsector及其加载的数据称为bootloader,负责加载操作系统。

实际上,引导加载程序是 BIOS 的更动态版本:BIOS 程序驻留在 flash 内存中,而引导加载程序驻留在硬盘、U 盘、SSD 驱动器等,因此可能更大、更复杂。

操作系统

反过来,操作系统 (OS) 只是更高级版本的引导加载程序,因为它可以同时从多个位置加载和 运行 多个程序。

--

BIOS 了解驱动器。 Bootloader 了解驱动器和分区。 OS 了解驱动器、分区和文件系统。

你好像问的是寻址模式。冒着过度简化的风险(忽略缓存、段和逻辑内存),内存存储为整数地址访问的顺序数组。

CPU 有许多称为寄存器 的内部存储区域。我们称它们为 R0 到 Rn。处理器分配一些寄存器用于专用目的。其中一个寄存器是 PC。

一种常见的寻址方式被推迟。我将此模式表示为 (Rn)。像这样的指令:

MOV(R0),R1

使用 R0 中包含的值作为内存地址,获取存储在该内存位置的值,并将该值的副本存储在 R1 中。

这样的指令序列:

MOV (R0), R1 MOV (R2), R3

作为数据存储在内存中(忽略保护),代码、数据和变量都使用相同类型的内存。换句话说,任何内存位置都可以解释为代码、数据或变量。

CPU执行位于(PC)的下一条指令。指令执行后,CPU自动增加PC指向下一条指令。

您的问题根源:计算机硬件和计算机软件之间缺乏明确的区分。


计算机系统的组件

为了让大家清楚两者,了解它们的本质,特声明如下:

  • 硬件:包括CPU、RAM、Disk、Register、Graphics Card、Network Card、Memory BUS等一切你能触摸到并调用的东西'Computer'。这是 body.
  • 软件:它包括操作系统、程序、CPU指令、编译器、编程语言和几乎所有与计算机无关的东西。是灵魂。
  • 固件: 是硬件运行必不可少的基本代码。这存储在安装在硬件本身中的只读存储器中。这块软件对硬件来说是至关重要的,因此被认为是介于硬件和软件之间的,因此被称为固件。

我们将从我们说计算机已启动并且 运行 并正在正确执行我们的指令时开始理解。但是到时候你会说- 我是怎么到这里来的? 所以我提一下关于电脑启动的几点。


按下电源按钮时...

...最原始的basic input output system(因此称为BIOS),硬写在计算机硬件上开始执行。这是写在只读存储器上的,这将启动使机器独立运行的过程。它将软件(操作系统)从一个硬件(磁盘)加载到另一个硬件(RAM 和 CPU 寄存器),使软件能够与硬件正常工作。

现在body和灵魂在一起,个体(机器)可以工作了。


到目前为止,OS 已经在 RAM 中并且 CPU。 (如果你有疑问,请阅读When the power button is pressed。)现在让我们逐段处理你的问题-


第一段

I am having a bit of trouble understanding how applications and data are accessed by the CPU from RAM after the application has been loaded into RAM and a file opened (thus data for the file also stored in RAM).



解释如下:

  1. 这里的确切问题是您认为访问数据的是 CPU 和 RAM。 CPU和RAM只是执行单元。
  2. 通过CPU和RAM(硬件)访问数据的是OS(软件)。它位于执行应用程序的 OS 领域。
  3. 这就是为什么您可以在同一硬件上安装 Linux 和 Windows 但不能在 Linux 中执行 .exe 文件的原因,因为 OS 执行而不是 RAM/CPU.
  4. 此外,CPU 以及 RAM 和磁盘如何进行物理交互以引入数据、执行数据、保存数据等属于硬件领域。这将需要解释,其中涉及逻辑门(AND、OR、NOT...)、二极管、电路和电子专家可以解释的大量其他内容。

第二段

By my understanding, a CPU just gets instructions from RAM as the program counter ticks or carries out tasks after an interrupt. How then does it access the application and data. Is it that it doesn't and still just gets instructions (for example to load a file on the hard drive to be opened in the application) and processes any requests made by the application which are stored in RAM as instructions thereafter (like saving a file).



如您所猜 - CPU 无法获取指令,操作系统通过 CPU 获取指令。此外,就像大脑不直接指示手脚移动而是使用神经进行交互一样,CPU 不会告诉磁盘 give/take 数据。 CPU 仅适用于 RAM 和寄存器。 多个硬件单元协同工作,为数据和指令传输提供路径。涉及的重要硬件有:

  1. 处理器(CPU 和寄存器内置于 CPU)
  2. 缓存
  3. 内存(RAM)
  4. 磁盘
  5. 磁带

我喜欢 this answer 中提供的图像。这张图片不仅列出了硬件部分,还说明了这些部分执行速度的巨大差异。

让我们继续...


第三段

Similarly, after reading an article, it said that a copy of the operating system is stored in RAM. The CPU can then access the operating system. (I thought the CPU just worked with instructions from RAM). How does it then communicate with the operating system and how are interrupts sent to the CPU, from the copy of the OS in RAM or from the OS in the hard drive.



现在你已经知道 OS 确实存在于 RAM 和 CPU 寄存器中。那就是它生活的地方。这是它告诉 CPU 如何工作的地方。如果 OS 足够小(或者如果寄存器和缓存足够大),OS 会更接近 CPU.

  • CPU 不与 OS 通信。它不能。老板控制的是工人。 OS就是那个老板
  • CPU 无法 访问 操作系统。 CPU 是 body, OS是灵魂。灵魂告诉body该做什么,而不是vice-versa。
  • CPU 不适用于 RAM 中的指令。它仅执行操作系统(可能存在于 RAM 中)给出的指令。因此,即使有一条指令将 OS 的某些模块加载到 RAM 中,发出该指令的也不是 RAM/CPU 而是 OS 本身。
  • Interrupts 有两种类型——硬件和软件——你的查询是关于他的软件中断。由于 OS 的执行部分在 RAM 中,简单来说,我们可以说中断从 OS 发送到 CPU 生活在 RAM 中。

结论

没有区分硬件和软件是造成您困惑的根本原因。在 Coursera or Academic Earth 上学习一些关于操作系统的课程以加深理解。