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

时间:2015-09-17 22:14:17

标签: operating-system cpu interrupt ram instructions

在将应用程序加载到RAM并打开文件(因此文件的数据也存储在RAM中)后,了解CPU如何从RAM访问应用程序和数据时遇到了一些麻烦。

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

同样,在阅读文章后,它说操作系统的副本存储在RAM中。然后,CPU可以访问操作系统。 (我以为CPU只使用了RAM中的指令)。然后它如何与操作系统通信以及如何从RAM中的OS副本或硬盘驱动器中的OS发送到CPU的中断。

很抱歉,如果这真的令人困惑,很多我都不理解。

4 个答案:

答案 0 :(得分:4)

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

我没有声称拥有关于计算机硬件和软件的天才和完整知识,如果我到达答案中的任何地方,我将不会超越我的域名(即软件)。

计算机系统的组件

为了让我们清楚他们两个以及我们了解他们的性质,请允许我说明如下:

  • 硬件:它包括CPU,RAM,磁盘,注册表,图形卡,网卡,内存总线以及您可以触摸并称之为“计算机”的所有内容。这是身体。
  • 软件:它包括操作系统,程序,CPU指令,编译器,编程语言以及几乎所有关于计算机的无形资料。这是灵魂。
  • 固件:这是基本代码,对于硬件的工作来说绝对必不可少。它存储在硬件本身安装的只读存储器中。这个软件对于硬件至关重要,因此在硬件和软件中被认为是固件。

我们将从我们说计算机启动并运行并正确执行我们的指令时开始理解。但那时你会说 - 我是如何到达这里的?所以我会提到一些关于计算机启动的问题。

按下电源按钮时......

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

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

到目前为止,操作系统已经在RAM和CPU中。 (如果您对此有疑问,请阅读When the power button is pressed。)现在让我们逐段处理您的问题 -

第一段

  

我在理解应用程序和数据方面遇到了一些麻烦   加载应用程序后,CPU将从RAM访问   进入RAM和打开的文件(因此文件的数据也存储在   RAM)。

--------

解释如下:

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

      

    根据我的理解,CPU只是从RAM获取指令   程序计数器在中断后滴答或执行任务。怎么样   然后它访问应用程序和数据。这是不是没有   并且仍然只是获取指令(例如在文件上加载文件)   硬盘驱动器在应用程序中打开)并处理任何   应用程序发出的请求,存储在RAM中   此后的说明(如保存文件)。

    --------

    正如您所猜测的那样 - CPU没有获得指令,操作系统通过CPU完成指令。此外,就像大脑没有直接指示手和腿移动的方式,而是使用神经进行交互,CPU不会告诉磁盘提供/获取数据。 CPU仅与RAM和寄存器配合使用。多个硬件单元协同工作,为数据和指令提供行进路径。涉及硬件的重要部分是:

    1. 处理器(CPU和CPU内置的寄存器)
    2. 高速缓存
    3. 内存(RAM)
    4. 磁盘
    5. 磁带
    6. 我喜欢this answer中提供的图片。该图像不仅列出了硬件部分,还说明了这些部件执行速度的巨大差异。

      让我们继续......

      第三段

        同样,看完一篇文章后,就说了一份副本   操作系统存储在RAM中。然后CPU可以访问   操作系统。 (我认为CPU只是使用说明   来自RAM)。然后如何与操作系统进行通信   如何从RAM中的OS副本发送到CPU的中断   来自硬盘中的操作系统。

      --------

      到目前为止,您已经知道RAM和CPU寄存器中确实存在OS。这就是它的生活。这是从它告诉CPU如何工作的地方。如果操作系统足够小(或者如果寄存器和缓存足够大),操作系统将更接近CPU。

      • CPU不与OS通信。它不可能。这是由老板控制的工人。操作系统是那个老板。
      • CPU无法访问操作系统。 CPU是主体,OS是灵魂。灵魂告诉身体该怎么做。身体无法进入灵魂。
      • CPU不能处理来自RAM的指令。它只执行操作系统给出的指令(可能存在于RAM中)。因此,即使有指令将某些OS模块加载到RAM中,也不是RAM / CPU,而是OS本身会发出该指令。
      • Interrupts 有两种类型 - 硬件和软件 - 您的查询是关于软件中断的。由于OS的执行部分在RAM中,简单来说我们可以说中断是从RAM中的OS发送到CPU的。

      结论

      硬件和软件之间缺乏区别是导致混淆的根本原因。在CourseraAcademic Earth上学习一些关于操作系统的课程,以便更深入地了解。

      在我的回答中发现错误的人。

      • 如果它是微不足道的话,请随时编辑答案或指出我。
      • 如果它更重要,请告诉我,我很乐意更好地了解。
      • 另外,请阅读我的回答第二段。

答案 1 :(得分:2)

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

CPU和RAM

CPU通过主板硬连线到RAM,它们可以协同工作。 CPU可以执行许多指令,但必须告知RAM中的指令要做什么。 CPU基本上处于一个循环中:它只是从RAM获取下一条指令并一遍又一遍地执行它。

那么这个RAM如何充满指令?

BIOS (基本输入/输出系统)

当计算机首次启动时,一部分RAM充满来自主板芯片(BIOS芯片)的数据,CPU开启并开始处理。这些是出厂设置。

来自BIOS芯片的复制到RAM的数据包括访问硬件设备(硬盘,CD / ROM,USB存储器,网卡等)的指令库, 和一个程序使用该库将所谓的 bootsector (启动设备上的第一个扇区)加载到RAM中,并将控制转移到它(使用 jump 指令)

<强> BOOTLOADER

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

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

操作系统

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

<强> -

BIOS知道驱动器。 Bootloader了解驱动器和分区。 操作系统了解驱动器,分区和文件系统。

答案 2 :(得分:1)

正如您所注意到的,

CPU通过指令从RAM读取程序。当执行一条指令时,它可能是指存储在存储器中的数据,它可以明确地读取寄存器(CPU的内部存储器,非常小 - 在x86_64上,就像几个64位寄存器+其他东西,如段寄存器,IP ,SP等)具有单独的指令,或从存储器读取的数据(我们正在谈论少量数据)。这就是它真正做到的。

通过要求相应的控制器将数据提取到内存中的特定位置,可以从磁盘加载文件。 CPU连接到总线,这些总线将向适当的控制器发送指令。

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

答案 3 :(得分:1)

您似乎在询问寻址模式。存在严重过度简化的风险(忽略缓存,段和逻辑内存),存储为由整数地址访问的顺序数组。

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

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

MOV(R0),R1

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

这样的指令序列:

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

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

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