> For the complete documentation index, see [llms.txt](https://coding-girls-club.gitbook.io/python-turtle-tutorial/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coding-girls-club.gitbook.io/python-turtle-tutorial/1-yu-bei-zhi-shi/1.2-ji-suan-ji-ru-he-gong-zuo/1.2.1-cpu-cun-chu-she-bei.md).

# 1.2.1 CPU、存储设备

计算机中，CPU主要负责执行指令，存储设备则用来存储。

## CPU

**Learning By Reading 难度：★★★ 重要性：★★★**

* CPU有哪些部分组成？
* 一个典型的CPU有算术逻辑单元，寄存器和控制单元，算术逻辑单元（ALU）用来执行具体的指令，比如基本的数学计算（加减乘除等）、读写数据； “知道下一条指令是什么”由控制单元（Control unit）完成（CU还有其他功能），大多数时候指令是按照从前到后的顺序执行的， 但有时候，我们会希望突然跳到某条指令上。 寄存器（Register）是一种存储设备，它们数量比较少，64位计算机中每一个寄存器可以存8字节。 每个寄存器都有自己的名字，在x86中，它们叫`AX`，`BX`，……在ARM中，它们叫`R0`，`R1`，……
* 阅读了解[CPU的基本组成](http://218.5.241.24:8018/C35/Course/ZCYL-HB/WLKJ/jy/Chap05/5-1-2.HTM)

我们将通过实际的例子了解CPU的指令都能实现哪些功能。

不同厂商不同型号的CPU在设计和实现上差异较大。目前最常见的CPU架构是ARM和x86。

**Learning By Reading 难度：★★★★ 重要性：★**

* 在看看ARM和x86之前，我们先来了解一种比较简单，因而在教学中经常使用的指令集

  [MIPS](http://blog.csdn.net/frozenshore/article/details/44706299)。

**Learning By Reading 难度：★★★★ 重要性：★**

* ARM是一种指令集架构（Instruction set architexture），大多数智能手机用的都是这种架构。

  ARM指令集是精简指令集（

  [RISC](https://zh.wikipedia.org/wiki/精简指令集)

  ），意思是ARM在设计上通过减少单条指令的工作量来减少单条指令执行的时间（CPI）

  浏览[材料](http://infocenter.arm.com/help/topic/com.arm.doc.qrc0006ec/QRC0006_UAL16.pdf)，

  了解ARM指令集都可以做哪些事情。同时，也可以在维基百科中查询相应词条，了解更多关于ARM、RISC的信息。

**Learning By Reading 难度：★★★★ 重要性：★**

* x86是另一种指令集架构，大多数电脑用的是这种架构。

  阅读

  [材料](http://blog.csdn.net/thanklife/article/details/11065063)

  ，了解x86指令集有哪些指令。

**Learning By Reading 难度：★ 重要性：★**

* 阅读材料，了解ARM和x86之间的优劣比较。
  * [ARM、x86的比较](https://www.zhihu.com/question/19846434/answer/13438936)
  * [ARM、x86之争](https://hellolynn.hpd.io/2017/04/14/看arm如何搶走x86市場？英特爾被逆襲下的策略/)

## 存储设备

存储设备有很多种，从经常听到的“U盘”、“硬盘”、“内存”到相对较少听讲的“高速缓存”、“寄存器”，它们都是有不同使用场景的存储设备。

**Learning By Reading 难度：★ 重要性：★★**

* 了解不同[存储设备](http://blog.csdn.net/not_repeat/article/details/51570681)。

内存是CPU可以直接寻址的存储空间，用来存储数据和指令供CPU使用，完成人类大脑的“记忆”功能。 比如要计算`5+6`，计算机要存储：

* 数据
  * 数字5，存放在地址A
  * 数字6，存放在地址B
  * 计算结果，数字11，存放在地址C
* 指令
  * 指令“把地址A中存放的数字和地址B中存放的数字相加并存放在地址C中

注：这里只是举例，实际上需要用到更多的指令来完成这个任务。

需要注意的是，计算出来的结果也需要存储在某个地方。人类 用大脑进行计算的时候，其实也会存储（记住）这个结果，只是我们一般不去注意。

数据以多种多样的形式存在，它们在存储器中存储的方式可能也不同。

**Learning By Reading 难度：★★★ 重要性：★★**

* 阅读以下材料，了解[内存有什么用](https://www.crucial.cn/support/faq/the-role-of-memory-in-the-computer)，

  [内存中都有什么](http://www.cppblog.com/prayer/archive/2009/08/17/93594.html)（前几段）。

**Learning By Thinking 难度：★★★★★ 重要性：★**

* 查阅助教以及ARM、x86指令集，说一说`5+6`需要用到哪些指令？

衡量包括内存在内的存储器有两个重要的指标：[速度和大小](https://zh.wikipedia.org/wiki/記憶體階層) 。速度越快价格越高，大小越大价格也越高，这是显而易见的。 出于价格的考虑，两者之间需要权衡。 现代计算机中通常有不同速度的存储器，包括寄存器（Register）、高速缓存（Cache）、随机存取存储器（Random-access memory，RAM）。 从前到后越来越慢、越来越大。

作为一个比方，草稿纸可以看作存储设备。同样，人脑也是。人脑速度快、容量小；草稿纸速度慢、容量大。

**Learning By Reading 难度：★ 重要性：★**

* 阅读材料，了解[内存、cache和寄存器之间的关系及区别](http://blog.csdn.net/hellojoy/article/details/54744231)

**Learning By Reading 难度：★★★ 重要性：★★**

* 当需要数据的时候，计算机会先去高速的存储器中寻找，找不到的时候再去低速的存储器中寻找， 并把这部分数据载入到高速的存储器中。在很多情况下，一段数据被使用之后在未来短时间内会再次被使用，因此， 这种方法通常能节省大量时间。而这种特性叫做“时间局部性（Temporal locality）”。 除此之外，还有空间局部性（Spatial locality）等局部性原理（Principle of locality）保证代码高效运行。
* 阅读材料，了解空间局部性、时间局部性： [材料1](http://blog.csdn.net/qq_33083519/article/details/55106860)， [材料2](http://www.cnblogs.com/yanlingyin/archive/2012/02/11/2347116.html)
* 分支局部性：

  [材料1](https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array/11227902#11227902)
* 里面牵涉到具体的代码现在可能看不懂，但学习完之后请回头再来看这部分。
