图解系统第一章硬件结构(小林coding)
学习自小林coding
冯诺依曼模型
内存
程序(指令)和数据都是存储在内存,存储的区域是线性的。
数据存储的单位是?个?进制位(bit),即 0 或 1。最?的存储单位是字节(byte),1 字节等于 8 位。
内存的地址是从 0 开始编号的,然后?增排列,最后?个地址为内存总字节数 - 1,这种结构好似我们程序
?的数组,所以内存的读写任何?个数据的速度都是?样的
中央处理器
位宽大能计算更?的数值
32位能操作4GB内存?
寄存器
通?寄存器,?来存放需要进?运算的数据,?如需要进?加和运算的两个数据。
程序计数器PC,?来存储 CPU 要执?下?条指令「所在的内存地址」,注意不是存储了下?条要执?
的指令,此时指令还在内存中,程序计数器只是存储了下?条指令的地址。
指令寄存器,?来存放程序计数器指向的指令,也就是指令本身,指令被执?完成之前,指令都存储
在这?。
总线
- 地址总线,?于指定 CPU 将要操作的内存地址;
- 数据总线,?于读写内存的数据;
- 控制总线,?于发送和接收信号,?如中断、设备复位等信号,CPU 收到信号后?然进?响应,这时也需要控制总线
输入输出设备IO
需要用到控制总线
程序执?的基本过程
- 第?步,CPU 读取程序计数器PC的值,这个值是指令的内存地址,然后 CPU 的「控制单元」操作
「地址总线」指定需要访问的内存地址,接着通知内存设备准备数据,数据准备好后通过「数据总
线」将指令数据传给 CPU,CPU 收到内存传来的数据后,将这个指令数据存?到「指令寄存器」。 - 第?步,CPU 分析「指令寄存器」中的指令,确定指令的类型和参数,如果是计算类型的指令,就把
指令交给「逻辑运算单元」ALU运算;如果是存储类型的指令,则交由「控制单元」CU执?; - 第三步,CPU 执?完指令后,「程序计数器」的值?增,表示指向下?条指令。这个?增的??,由
CPU 的位宽决定,?如 32 位的 CPU,指令是 4 个字节,需要 4 个内存地址存放,因此「程序计数
器」的值会?增 4;
CPU 从程序计数器读取指令、到执?、再到下?条指令,这个过程会不断循环,直到程序执?结束,这个
不断循环的过程被称为 CPU 的指令周期
程序执?的具体过程
从高级语言
编译成汇编语言再翻译成机器语言 也就是计算机指令
代码段 数据段
指令 指令集
编译器在编译程序的时候,会构造指令,这个过程叫做指令的编码。CPU 执?程序的时候,就会解析指
令,这个过程叫作指令的解码
流水线
现代?多数 CPU 都使?了流?线的?式来执?指令,所谓的流?线就是把?个任务拆分成多个?任务,于
是?条指令通常分为 4 个阶段,称为 4 级流?线
- CPU 通过程序计数器读取对应内存地址的指令,这个部分称为 Fetch(取得指令);
- CPU 对指令进?解码,这个部分称为 Decode(指令译码);
- CPU 执?指令,这个部分称为 Execution(执?指令);
- CPU 将计算结果存回寄存器或者将寄存器的值存?内存,这个部分称为 Store(数据回写);
上?这 4 个阶段,我们称为指令周期(Instrution Cycle),CPU 的?作就是?个周期接着?个周期,周
?复始
指令的类型
- 数据传输类型的指令,?如 store/load 是寄存器与内存间数据传输的指令,
- mov 是将?个内存地址的数据移动到另?个内存地址的指令;
- 运算类型的指令,?如加减乘除、位运算、?较??等等,它们最多只能处理两个寄存器中的数据;
- 跳转类型的指令,通过修改程序计数器的值来达到跳转执?指令的过程,?如编程中常?的 ifelse 、 swtich-case 、函数调?等。
- 信号类型的指令,?如发?中断的指令 trap ;
- 闲置类型的指令,?如指令 nop ,执?后 CPU 会空转?个周期
指令的执行速度
程序的CPU执行时间=指令数 (编译器)x 每条指令的平均时钟周期数(Cycles PerInstruction,简称 CPI 用流水线技术) x 时钟周期时间(硬件 GHz)
存储器
电脑存储结构
Cache SRAM 内存 DRAM
L1、L2、L3
只和相邻存储器打交道
Cache
Linux查cat
CPU Cache 的数据结构和读取过程
Cache从内存读取是一块一块读的 这样??块??块的数据,称为 Cache Line(缓存块)
直接映射
把内存块的地址始终「映射」在?个 CPU Line(缓存块) 的地
址,?于映射关系实现?式,则是使?「取模运算」,取模运算的结果就是内存块地址对应的 CPU Line(缓存块) 的地址
Linux查
执行得更快 ->提高缓存命中率
CPU缓存一致性
CPU如何执行任务
中断
概念
在计算机中,中断是系统?来响应硬件设备请求的?种机制,操作系统收到硬件的中断请求,会打断正在执?的进程,然后调?内核中的中断处理程序(中断服务函数)来响应请求
中断是?种异步的事件处理机制,可以提?系统的并发处理能?
操作系统收到了中断请求,会打断其他进程的运?,所以中断请求的响应程序,也就是中断处理程序,要尽可能快的执?完,这样可以减少对正常进程运?调度地影响。
?且,中断处理程序在响应中断时,可能还会「临时关闭中断」,这意味着,如果当前中断处理程序没有执?完之前,系统中其他的中断请求都?法被响应,也就说中断有可能会丢失,所以中断处理程序要短且快。
软中断
Linux 系统为了解决中断处理程序执?过?和中断丢失的问题,将中断过程分成了两个阶段,分别是「上半部和下半部分」。
- 上半部?来快速处理中断,?般会暂时关闭中断请求,主要负责处理跟硬件紧密相关或者时间敏感的事情。
- 下半部?来延迟处理上半部未完成的?作,?般以「内核线程」的?式运?。
?般对于?络 I/O ?较?的 Web 服务器, NET_RX ?络接收中断的变化速率相?其他中断类型快很多。
中断处理程序的上部分和下半部可以理解为:
*上半部直接处理硬件请求,也就是硬中断,主要是负责耗时短的?作,特点是快速执?;
*下半部是由内核触发,也就说软中断,主要是负责上半部未完成的?作,通常都是耗时?较?的事情,特点是延迟执?