我对cpu的理解——version1.0

       林士鼎老师布置了一个作业--设计一个任务调度系统,两周以来我沉浸在计算机内部系统的构造与原理之中,玩得很high,释疑了很多我之前想不明白的问题,但是出现了更多不明白的问题--也许这就是做学问的必经之路吧。

       开始正题之前,我想先吐槽几句,现在手头的介绍计算机系统的好书太少了:要么作者自己(大部分是中国人,包括那些翻译国外经典教材的)脑子不清楚,瞎编乱造,毁人不倦;要么就是写的太高深,给我感觉他写书的目的是给那些高手看的,让我们这些小白还没真正进入这个领域,就已经被“博大精深”的术语吓怕了,失去了兴趣、好奇心以及继续探索的动力。总而言之,有趣的、不枯燥的入门书实在太少了(这难道是逼我出书的节奏?),当然有一部分原因是我涉猎不广、资源太少,没有能力找到这类好书(标记一下,以后会写一篇文章探讨一下什么才是我眼中好书)。不过,千辛万苦,还是找到了一些资源,比较满意,粘贴如下:http://202.116.24.124/computer/content/theory/web/main.htm

       感谢一下这位作者,让我重新感觉到其实计算机系统还是很好玩的。

       好的,进入正题。首先要明白一点,cpu的体系结构虽然很庞大,有各种版本,不同厂家有不同的型号,但是最基础最根本的那个框架几乎是“一致的“。我的意思是,只要明白了这个最简单的框架,其余的各种版本都可以在人类的自然逻辑下推理出来,因为他们就是衍生品而已。这篇文章的目的就是把cpu最核心的理念展示给小白(高手请绕道),剩下的事情就是靠自己推理了。

        先po图:

        

这是cpu结构的逻辑展示。为了少打一些字,我设定了一些假设做了很多简化,不再一一列举。

1)cpu是用来运行程序的,那么首先先要对程序有个概念,比如我们的QQ。简单来讲,程序=操作+数据。比如,1加1等于几?加就是操作,1就是数据,cpu就是把这个算式演算一遍。那么他怎么演算呢?

2)我们还要介绍一下存储。还是以QQ为例。一般情况下,我们把QQ放在D盘,或者说我们可以在D盘找到QQ。这个D盘是什么呢?他是硬盘的一部分。程序在不用的时候只是存在于硬盘中,比如我们D盘有QQ,但是在我们打开这个程序之前,他就是硬盘里面的一堆代码,是“死的”。

3)然后我们打开了QQ,谁知道这个过程是怎样的呢?我们用鼠标点击QQ这个图标的时候,其实给cpu发了一个信号,把硬盘里面的QQ的代码“全部”(这里其实不一定是全部,后面会专门分析)复制到内存。cpu喜欢和内存直接交流,因为他够快,能跟上cpu的节奏(为什么会这样?以后说)。所以代码先要复制到内存,这样cpu想要什么直接从内存找,而不必绕远去硬盘(硬盘存取数据比较慢,以后说)。注意,是复制到内存,而非剪切!因为电脑一关机,内存的数据就全没有了,下次开机我们的QQ就蒸发了。。。硬盘才是永久保存数据和女孩的王道!

4)数据到了内存之后会怎么办呢?先对这些数据有个概念。本质上,计算机能认识的数据只有1和0(为什么?以后说),所以硬盘的代码到了内存全部变成了0和1的组合(这点我还不确定)。0和1的不同组合就足以表达不同的信息,比如,0010表示加法,1010代表减法,这就好比有限个汉字可以表达无限种意思一样,或者说,虽然日常生活中说过的的话千千万,但用到的汉字还是那么几个——一个道理。

5)好了,现在我们明白内存中的数据实际上是由0和1组成的数字序列,比如01011111000011111002(我擦,怎么会有2?呵呵,bazinga)。但是这些0和1怎么排列是有规定的。前面说过,程序=操作+数据,然而一个程序会有一堆操作和一堆数据,这些东西在内存中是分开来放的。我们可以这样意淫内存:他就是一根尺子,就像小学时候用的那种,上面还有刻度,现在规定,前10厘米放操作,后面10厘米放数据。一个操作的代码大概是这样规定的:前面的几位数(叫操作码)表示这个操作要干的事,比如加法;后面的几位(叫地址码)表示要操作的数的地址。呃,终于出现了地址。地址就像是尺子的刻度,比如我们要加的两个数分别存在尺子的第14厘米处和第19厘米处,然后cpu就会根据这个标记找到操作数。那么为什么不直接在操作码后面列出数值本身而是列出他们的地址呢?呵呵,以后说。

6)前面罗嗦了一大堆,其实仍停留在内存阶段,现在正式进入核心——cpu。首先,从PC开始,这个东西叫程序计数器,里面存放着指令(操作)的地址,一个程序开始的时候显然会把自己第一个指令的地址传给PC(这是怎么做到的?我也不知道。。。),cpu根据这个地址从内存找到第一条指令,并把他读出来(或者叫取出来)并执行。似乎有点空,那我就说一下细节:首先,PC把地址传给AR(地址寄存器)同时自身加1指向下一条指令的地址,AR把地址放到地址总线(他跟内存直接相连),总线根据这个地址找到相应的位置,然后取出其中的内容(即指令)并传到数据总线,数据总线连着内存和DR(数据寄存器),那么内容就被传到了DR。DR之后会怎样?休息一下,且听下回分解。

7)从上面可以看出,cpu和内存的交流也非直接的,而是通过AR和DR,因为他俩比内存还快。这样我们可以看出计算机内部数据流动的一个大体过程:硬盘-内存-寄存器-执行单元。这种机制称为缓冲,就像古代皇帝下达命令一样,一级一级的,先是太监,然后。。。最后才是真正干活的。

8)DR之后,内容(指令)会被送往IR(指令寄存器),IR把指令分解(这一点我还没确定)成两部分:操作码和地址码,然后操作码被送往ID(指令译码器),而地址码被送往AR。从图中可以看出,ID直接连着控制器,这表示可以开始干活了;而同时AR的地址码也被处理取出相应的操作数到DR(过程同6),但是这次DR却把内容送往ALU,这时,控制器根据ID的输出(即加法信号)发信号给ALU执行加法,结果存放在AC(累加器)。然后结果传到DR再传回内存,完成。PC继续循环。

9)这里有个问题:即内容被从内存输入到DR之后,DR到底把内容送往AR还是ALU还是其他寄存器呢?依据是什么呢?我翻了一些资料,据说是根据执行周期。执行整个操作的过程叫做一个cpu周期:取操作的周期被称为取指周期;执行这个指令的周期被称为执行周期,显然这个周期包括了取操作数的过程。那么cpu凭什么分辨自己处在哪个周期呢?据说根据时序信号、时钟中断、脉冲。。。我也没看明白,谁能给我治疗一下?


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值