计算机硬件组成笔记

Posted by Mars . Modified at

计算机硬件组成

CPU结构及工作原理

进程和线程

程序平时储存在硬盘中,当我们执行程序,程序就从硬盘中被加载到内存。

在内存中的程序就叫做进程。每一个进程都被分配了独立的资源(内存空间、网络端口等),进程是系统分配资源的最小单位。

进程在开始运行的时候,操作系统会帮助找到第一行待执行代码,叫做主线程。一颗CPU内核,同时只能运行一个线程。

多线程一定更快吗?

对于单核CPU来说,运行多线程程序需要在线程间进行切换。线程切换是需要花费额外时间的,因此并不是多线程一定速度更快。

CPU的组成

  • 程序计数器PC(Program Counter);
  • 寄存器(Register);
  • 算术逻辑单元ALU();
  • 缓存 (Cache);

CPU缓存

CPU寄存器和内存读取数据速度的比较

CPU从自身的寄存器读取数据的速度,大约比从内存读取数据速度快100倍。

多级缓存

CPU的多级缓存

对数据进行缓存,是解决这类问题的通用思路。

通过对从内存中读取的数据进行缓存,减少CPU下次读取数据的耗时。缓存可以设置若干级,距离CPU从近到远,读取速度从快到慢。

现在CPU一般设置三级缓存,各级缓存的功能有所不同:

  1. L1级缓存:CPU的指令缓存,用于缓存CPU的指令;
  2. L2级缓存:数据缓存,每个内核独立,用于缓存这个CPU内核的数据;
  3. L3级缓存:数据缓存,各内核共用,用于CPU内核间交换数据。

cache

CPU缓存的工作顺序:

  1. 从L1调取指令;
  2. 从L2读取数据,如果没有则从L3尝试读取数据;
  3. 如果没有,从内存读取数据。

各级缓存的存取时间估计:

  • L1:4个CPU时钟周期;
  • L2:11个CPU时钟周期;
  • L3:39个CPU时钟周期;
  • 内存:107个CPU时钟周期;

缓存行

单独按字节访问内存,开销过大。现代CPU是按块访问内存的,一般是64Bit,称为一个缓存行

内存与缓存的映射关系

从内存中读取的数据,该存放到哪一块缓存区域呢?这个问题也就是内存与缓存的映射关系问题。

一般有三种形式:

  • 直接映射:类似于将地址取模。固定的单个内存地址对应固定的单个缓存位置。
  • 完全关联:任意对应。任意内存地址,对应任意缓存位置。
  • N路组关联:将缓存地址分为N组,每个内存地址对应单独的一组缓存地址。查找缓存时先找到对应的组别,然后在组内遍历。

直接映射查找迅速,但是因为映射关系太过死板,缓存又不像哈希表一样可以使用拉链法等,缓存中后来的数据会替代先前的数据,导致缓存被频繁更替,命中率不高。

完全关联映射太过宽松,虽然可以保证最大程度地缓存数据,但是查找时必须完全遍历整个缓存,查找效率低。

因此现代CPU一般采用折中方案N-Ways,即N路关联。

Keywords: Computer Science
previousPost nextPost
已经有 1000000 个小伙伴看完了这篇推文。