计算机原理系列之一 ——– 初识计算机系统

这篇文章我们主要从整体上了解一下计算机程序是如何运行的。在此过程中,我们将会引出操作系统中一些很重要的概念,并在后续的文章中对这些概念将强化和深入理解。

首先从计算机的硬件开始谈起。在这里我们只考虑和程序运行直接相关的硬件。其基本的硬件如下图所示:
computer
图1. 一个典型的计算机系统构成

图片来源:Computer Systems: A Programmer’s Perspective 2nd Edition Page 8

各硬件及其作用如下:
1. 总线 总线是个抽象的概念,计算机中处理的程序和数据都是通过总线来传输的。
2. IO设备 即input/output设备,这里的输入输出都是相对于CPU来讲的。IO设备都通过对应的控制器与总线连接,这样就可以从总线上获取数据或者往总线上发送数据。典型的输入设备有鼠标、键盘和磁盘等,典型的输出设备有显示器。
3. 主存 就是我们常说的计算机中的内存。字面意思就可以看出来,它是一个存储设备,用来存储程序执行时的代码和数据。它可以理解成一个很大的数组,想访问数组的数据或者代码就需要数据索引,该地址我们称之为地址。
4. 中央处理器(CPU) CPU是计算机的“大脑”。计算机所有的指令执行和数据运算都是由CPU完成的。CPU内部有一些寄存器,程序在运行时就是直接从这些寄存器中获取指令和数据的。

那么,程序究竟是怎样在上述硬件组成的计算机中运行呢?

在思考这个问题之前,我们需要了解一些事实:
1. 计算机只能识别二进制的代码和数据,也就是说代码和数据不管是存放、传输还是运算都是以二进制形式进行的。
2. 总线总是以为单位传输数据的,构成字的基本单位是字节,一个字节有8位(bit)。我们所说的32位CPU或者64位CPU中的“32”或者“64”就是CPU所支持的总线的字长。
3. CPU的寄存器长度是一个的长度。

寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。

  1. 主存可以看做是一个数组,每个数组索引(地址)对应了一个长度的数据。
    memory
    图2. 32位系统中主存中地址与数据的对应关系

    左边数字表示内存的地址,右边每个格子表示一位(bit),其中存放“0”或者“1”,这些“0”或者“1”组成了一个二进制的数据,该数据表示对应的内存地址存放的数据。

  2. CPU是通过其内部一个叫做程序计数器(PC)的寄存器来读取指令的,其执行指令的中间结果,可以保存在其他寄存器中。

  3. PC寄存器总是指向下一条待处理指令,也就是说,PC寄存器中总是存放着下一条指令的地址。

其实,程序运行的基本逻辑很简单:
1. 我们编写好的代码是由ASCII字符组成的,需要经过编译生成计算机可以执行的二进制文件。
2. 当运行该可执行文件时,加载器将可执行文件加载到主存中去。
3. CPU根据PC寄存器中的地址,取出待执行的指令,开始执行,并将PC寄存器指向下一条指令。一般情况下,指令总是顺序执行的,除非遇到跳转指令。

那么请思考以下问题:
1. 代码是经过编译生成的二进制文件。编译的过程是什么样的呢?
2. 加载器根据什么把二进制文件加载到主存中去的呢?
3. CPU是如何加载指令和数据的呢?

后续我们将一一回答这些问题。

发表回复

您的电子邮箱地址不会被公开。