计算机硬件组成笔记
Posted by Mars . Modified at
计算机硬件组成
CPU结构及工作原理
进程和线程
程序平时储存在硬盘中,当我们执行程序,程序就从硬盘中被加载到内存。
在内存中的程序就叫做进程。每一个进程都被分配了独立的资源(内存空间、网络端口等),进程是系统分配资源的最小单位。
进程在开始运行的时候,操作系统会帮助找到第一行待执行代码,叫做主线程。一颗CPU内核,同时只能运行一个线程。
多线程一定更快吗?
对于单核CPU来说,运行多线程程序需要在线程间进行切换。线程切换是需要花费额外时间的,因此并不是多线程一定速度更快。
CPU的组成
- 程序计数器PC(Program Counter);
- 寄存器(Register);
- 算术逻辑单元ALU();
- 缓存 (Cache);
CPU缓存
CPU寄存器和内存读取数据速度的比较
CPU从自身的寄存器读取数据的速度,大约比从内存读取数据速度快100倍。
多级缓存
对数据进行缓存,是解决这类问题的通用思路。
通过对从内存中读取的数据进行缓存,减少CPU下次读取数据的耗时。缓存可以设置若干级,距离CPU从近到远,读取速度从快到慢。
现在CPU一般设置三级缓存,各级缓存的功能有所不同:
- L1级缓存:CPU的指令缓存,用于缓存CPU的指令;
- L2级缓存:数据缓存,每个内核独立,用于缓存这个CPU内核的数据;
- L3级缓存:数据缓存,各内核共用,用于CPU内核间交换数据。
CPU缓存的工作顺序:
- 从L1调取指令;
- 从L2读取数据,如果没有则从L3尝试读取数据;
- 如果没有,从内存读取数据。
各级缓存的存取时间估计:
- L1:4个CPU时钟周期;
- L2:11个CPU时钟周期;
- L3:39个CPU时钟周期;
- 内存:107个CPU时钟周期;
缓存行
单独按字节访问内存,开销过大。现代CPU是按块访问内存的,一般是64Bit
,称为一个缓存行。
内存与缓存的映射关系
从内存中读取的数据,该存放到哪一块缓存区域呢?这个问题也就是内存与缓存的映射关系问题。
一般有三种形式:
- 直接映射:类似于将地址取模。固定的单个内存地址对应固定的单个缓存位置。
- 完全关联:任意对应。任意内存地址,对应任意缓存位置。
- N路组关联:将缓存地址分为
N
组,每个内存地址对应单独的一组缓存地址。查找缓存时先找到对应的组别,然后在组内遍历。
直接映射查找迅速,但是因为映射关系太过死板,缓存又不像哈希表一样可以使用拉链法等,缓存中后来的数据会替代先前的数据,导致缓存被频繁更替,命中率不高。
完全关联映射太过宽松,虽然可以保证最大程度地缓存数据,但是查找时必须完全遍历整个缓存,查找效率低。
因此现代CPU一般采用折中方案N-Ways
,即N路关联。