linux 深入理解计算机系统
系统的硬件组成
基础模块拆分与解析
电子计算机三大核心部件
- CPU
- 内部存储器
- 输入/输出设备(IO设备)
是数据处理系统的关键外部设备之一,可以和计算机本体进行交互使用
中央处理器(CPU,central processing unit)
含义:
1. 作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
2. 计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作
功能:
1. 解释计算机指令
2. 处理计算机软件中的数据
结构:
1. 运算器: 计算机中进行各种算术和逻辑运算操作的部件, 其中算术逻辑单元是中央处理核心的部分。
1. 算术逻辑单元(ALU)
算术逻辑单元是指能实现多组 算术运算与逻辑运算的组合逻辑电路,其是中央处理中的重要组成部分。
算术逻辑单元的运算主要是进行二位元算术运算,如加法、减法、乘法。
2. 中间寄存器(IR)
其长度为 128 位,其通过操作数来决定实际长度。IR 在“进栈并取数”指令中发挥重要作用,在执行该指令过程中,
将ACC的内容发送于IR,之后将操作数取到ACC,后将IR内容进栈
3. 运算累加器(ACC)
当前的寄存器一般都是单累加器,其长度为128位。对于ACC来说,可以将它看成可变长的累加器。在叙述指令过程中,ACC长度的表示一般
都是将ACS的值作为依据,而ACS长度与 ACC 长度有着直接联系,ACS长度的加倍或减半也可以看作ACC长度加倍或减半。
4. 描述字寄存器(DR)
其主要应用于存放与修改描述字中
5. B寄存器
其在指令的修改中发挥重要作用,B 寄存器长度为32位,
在修改地址过程中能保存地址修改量,主存地址只能用描述字进行修改。
2. 控制器
按照预定顺序改变主电路或控制电路的接线和 改变电路中电阻值来控制电动机的启动、调速、制动与反向的主令装置。
3. 高速缓冲存储器及实现它们之间联系的数据、控制的总线。
工作流程:
1. 取指令阶段
即将一条指令从主存储器中取到指令寄存器的过程。程序计数器中的数值,
用来指示当前指令在主存中的位置。当一条指令被取出后,PC中的数值将根据指令字长度自动递增。
2. 指令译码阶段
取出指令后,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,
识别区分出不同的指令类 别以及各种获取操作数的方法。
3. 执行指令阶段
CPU的不同部分被连接起来,以执行所需的操作。
4. 访存取数
根据指令需要访问主存、读取操作数,CPU得到操作数在主存中的地址,
并从主存中读取该操作数用于运算。部分指令不需要访问主存,则可以跳过该阶段。
5. 结果写回。
结果写回阶段把执行指令阶段的运行结果数据“写回”到某种存储形式。结果数据一般会被写到CPU的内部寄存器中,以便被后续的指令快速地存取;
许多指令还会改变程序状态字寄存器中标志位的状态,这些标志位标识着不同的操作结果,可被用来影响程序的动作。
性能衡量指标:
1. 主频:
x32/x64
2. CPU的位数:
核数
3. CPU的缓存指令集。
CPU 的缓存可以分为一级缓存、二级缓存和三级缓存,而那些处理能力比较强的处理器则一般具有较大的三级缓存。
内部存储器(内存)
功能:
1. 是与CPU进行沟通的桥梁
2. 计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
3. 其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
频率:
1. 内存主频和CPU主频一样,习惯上被用来表示内存的速度,它代表着该内存所能达到的最高工作频率(MHz)
2. 内存主频越高在一定程度上代表着内存所能达到的速度越快。
3. 内存主频决定着该内存最高能在什么样的频率正常工作。
内存带宽:
1. 是什么
功能: 内存的容量决定“仓库”的大小,而内存的带宽决定“桥梁”的宽窄,两者缺一不可,这也就是我们常常说道的“内存容量”与“内存速度”。
除了内存容量与内存速度,延时周期也是决定其性能的关键。
流程: 当CPU需要内存中的数据时,它会发出一个由内存控制器所执行的要求,内存控制器接著将要求发送至内存,并在接收数据时向CPU报告
整个周期(从CPU到内存控制器,内存再回到CPU)所需的时间。
2. 重要性
系统工作的过程: 基本上当CPU接收到指令后,它会最先向CPU中的一级缓存(L1Cache)去寻找相关的数据,虽然一级缓存是与CPU同频运行的,
但是由于容量较小,所以不可能每次都命中。这时CPU会继续向下一级的二级缓存(L2Cache)寻找,同样的道理,当所需要的数据在二级缓存中也没有的话,
会继续转向L3Cache(如果有的话,如K6-2+和K6-3)、内存和硬盘。由于目前系统处理的数据量都是相当巨大的,
此几乎每一步操作都得经过内存,这也是整个系统中工作最为频繁的部件。
计算机系统: linux kernel
含义:
操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,
它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和
其他的电子设备组成计算机的发动机
主要模块:
存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。
系统调用接口
含义:
SCI 层提供了某些机制执行从用户空间到内核的函数调用。
SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务
进程管理
进程管理的重点是进程的执行。
内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。
进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。
这种算法就称为 O⑴ 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。
O⑴ 调度程序也可以支持多处理器(称为对称多处理器或 SMP)
内存管理
内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬管理虚拟内存,
内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。
Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止 4KB缓冲区。Linux 提供了对 4KB缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB缓冲区为基数,
然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,
哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
虚拟文件系统
功能:
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。
文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间
(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。