计算机系统概述
计算机系统概述
系统结构图:
系统硬件结构图:
上图取自《深入理解计算机系统》p42
1. 处理器
中央处理单元(CPU),主要由控制器,运算单元,寄存器组组成,现代处理器还集成了高速缓存存储器(cache)。
- 控制器:控制器是整个CPU的指挥控制中心,由程序计数器PC、指令寄存器IR、指令译码器ID和操作控制器OC等组成。
- 运算器:主要负责各种运算,包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。
- 寄存器组:寄存器组分为专用寄存器和通用寄存器,这部分在微机原理里有详细描述。它们主要负责存储数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。
- 高速缓存存储器:又称CPU片内缓存。因为寄存器的容量很少,所以加入了容量较寄存器大很多倍的cache,它主要存储CPU近期需要的数据,访问它的速度比访问寄存器慢,但较CPU访问主存的速度快很多。通过访问高速缓冲里存放可能经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。
2 . 主存
主存又常被称作内存,是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是一组动态随机存取存储器(DRAM)芯片组成的;从逻辑上来说,存储器是一个线性的数组,每个字节都有其唯一的地址。
3. I/O设备
I/O(输入输出)设备是系统与外部通信的通道。上图中示例包括四个I/O设备:分别是作为用户输入的键盘与鼠标,作为输出的显示器,以及长期用于存储数据和程序的磁盘。
CPU的运行原理:
下面以一个hello.c程序的执行过程例子说明CPU的运行原理:
#include<stdio.h>
int main()
{
printf("hello world!\n")
return 0;
}
先说明一下程序生成可执行目标程序的过程:
hello.c源程序经过预处理,编译,汇编,链接后最终生成可执行的目标程序(二进制)。
运行原理:
当程序执行前,程序的目标代码和数据会先从磁盘被加载到内存中。一旦开始执行,CPU从程序计数器PC所指向的内存地址处读取机器指令到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,CPU会把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,然后命令运算单元对数据进行处理加工。当条指令执行完后,PC指向下一条指令,如此反复,一直到程序执行完成。
简言之就是以下四步:
- 取指令:CPU的控制器从内存读取一条指令并放入指令寄存器;
- 指令译码:指令寄存器中的指令经过译码,决定该指令应进行何种操作(就是指令里的操作码)、操作数在哪里(操作数的地址);
- 执行指令:分两个阶段“取操作数”和“进行运算”;
- 修改程序计数器,决定下一条指令的地址。
为什么要在CPU中加入高速缓存存储器
从上面我们可以看到,hello程序的执行先要将可执行目标程序从磁盘复制到内存,然后再将机器指令一条一条复制到指令寄存器中。程序执行完后,需要输出的内容(hello world!\n)先也是在磁盘上,然后被复制到内存,然后从主存复制到寄存器,再从寄存器复制到显示设备,最终显示在屏幕上。
这个实例揭示了一个重要的问题,即系统发费了大量的时间把信息从一个地方复制到另一个地方。
所以为了减少时间开销,要么加快内存的存储速度,要么加快处理器的运行速度,而加快处理器的运行速度比加快主存的运行速度容易和便宜得多,所以就提出了在CPU中加入高速缓存存储器(cache),这样就能将处理器近期需要的信息存放在其中,减少了CPU访问内存的次数。通常位于处理器芯片上的高速缓存存储器容量高达几万字节,它采用静态随机访问存储器(SRAM)的硬件技术实现的。它与CPU的关系如下图:
后记:
本文参考了《深入理解计算机系统》第三版,其次是网上的一些博文,再加上自己的一些理解,整理出来,作为分享。作为一名不是计算机专业出来的程序猿,由于前期没有系统的接触过这些知识,积累的不够,如果存在错误还望大家批评指正,后面还会继续深入,坚持总结、更新博文。