计算机系统漫游

计算机系统是由硬件和软件组成的,接下来我们跟踪hello程序的生命周期开始学习。

#include <stdio.h>
int main()
{
	printf("hello, world\n");
	return 0;
}

hello程序从一个源文件(hello.c)开始,实际上就是由01组成的位序列,8个位被组织成一组,成为字节。从源文件到目标文件的转化是由编译器驱动程序完成的:

linux > gcc -o hello hello.c

计算机系统漫游

为了理解运行hello程序发生了什么,需要了解典型系统的硬件组织:

  • 总线:贯穿系统的一组电子管道,携带信息并负责在各个部件传递,总线被设计为传送特定长的字节快,也就是,字中的字节数(即字长)是一个基本系统参数,大多数机器要么4字节(32位),要么8字节(64位)。
  • I/O设备:系统与外部世界的联系通道,每个I/O设备通过一个控制器适配器与I/O总线相连,控制器是I/O设备本身或系统主印制电路板(主板)上的芯片组,适配器则是一块插在主板插槽上的卡(比如网卡),它们的功能都是在I/O总线和I/O设备间传递消息。
    计算机系统漫游
  • 主存:临时存储设备,存放程序和程序处理的数据,物理上来说,由一组动态随机存取器(DRAM)芯片组成,逻辑上来说,是一个线性字节数组,每个字节都有唯一地址(数组索引)
  • 处理器:解释存储在主存中指令的引擎,核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC),PC指向主存中某条机器语言指令(即含有该指令的地址)。
运行hello程序

初始时,键盘输入./hello,shell程序将字符逐一读入寄存器,再把它放到内存中,从键盘读取hello命令:
计算机系统漫游

当在键盘敲回车,shell程序知道已经结束命令输入,然后shell执行一系列指令加载可执行的hello文件,将hello文件中的代码和数据从磁盘复制到主存

利用直接存储器存取(DMA),数据可以不通过处理器直接从磁盘到主存,从磁盘加载可执行文件到主存:
计算机系统漫游

一旦目标文件hello的代码和数据加载到主存,处理器开始执行hello程序的main程序找那个的机器语言指令,这些指令将"hello,world\n"字符串的字节从主存复制到寄存器,再从寄存器复制到显示设备,最终显示在屏幕上
计算机系统漫游

系统花费大量时间把信息从一个地方挪到另一个地方,hello程序机器指令最初在磁盘,程序加载,被复制到主存,程序运行,又从主存复制到处理器,数据串“hello,world\n”也是类似,这些复制就是开销,减慢了程序真正工作,针对这种处理器与主存的差异,采用了高速缓存存储器(cache或高速缓存)
计算机系统漫游

在CPU和较大较慢的设备间插入一个更小更快的存储设备,计算机系统都被组织成了一个存储器层次结构
计算机系统漫游
主要思想就是上一层的存储器作为低一层存储器的高速缓存

操作系统管理硬件

回到hello程序,当shell加载和运行hello程序,以及hello输出消息,shell和hello程序都没有直接访问键盘、显示器、磁盘或主存,取而代之是依靠操作系统提供的服务,操作系统可以看成应用程序和硬件之间的一层软件,所有应用程序对硬件操作都必须通过操作系统,计算机系统分层视图:
计算机系统漫游

操作系统有两个基本功能:

  • 防止硬件被失控的应用程序滥用
  • 向应用程序提供简单单一的机制控制复杂不相同的低级硬件设备

通过抽象概念(进程、虚拟内存和文件)实现这两个功能,文件是对I/O设备的抽象,虚拟内存是对主存和磁盘I/O设备的抽象,进程是对处理器、主存和I/O设备的抽象

进程是操作系统对正在运行的程序的抽象,操作系统保持跟踪进程运行所需状态信息,这种状态,就是上下文,包括PC和寄存器文件当前值,以及主存内容。任何时刻,单处理器系统只能执行一个进程的代码,进程切换时就会进行上下文切换。

虚拟内存为每个进程提供一个假象,即每个进程独占使用主存,每个进程看到的内存都是一致,称为虚拟地址空间。在Linux中,地址空间最上面是保留给操作系统的代码和数据,地址空间底部存放用户进程定义的代码和数据
计算机系统漫游

文件就是字节序列,每个I/O设备,磁盘、键盘、显示器都可以看成文件,文件向应用程序提供了统一的视图

系统间利用网络通信

网络可视为一个I/O设备,当系统从主存复制一串字节到网络适配器,数据流经过网络到达另一台机器,而不是比如到达本地磁盘驱动器
计算机系统漫游

多核处理器

多核处理器将多个CPU(称为‘核’)集成到一个集成电路芯片上,如下图,微处理器芯片有4个CPU核,每个核都有自己的L1和L2高速缓存,这些核共享更高层次的高速缓存,以及到主存的接口
计算机系统漫游
工业界的专家预言他们能将几十个,最终会是上百个核做到一个芯片上

【完】????