只要你还记得我,我就会一直在你的身边。 收藏本站
登陆 / 注册 搜索

阅读: 7.4K   回复: 2

CPU的自述

仗剑天涯论坛大牛 2017-7-6 23:50 |显示全部楼层

今生相逢便是缘分,何苦去怨恨,何苦去仇视。

主题破百
        上帝把我制造出来,给我了一个很小的脑容量,为数不多的寄存器能临时的记一点东西,但是上帝给我打开了一扇特别的窗户,那就是像阿甘一样,跑的飞快。9 Z, E& A" i/ R$ L" j/ x( P

- U5 G& n- ]1 t2 g: a6 h0 P        到底有多快呢?我这么比喻一下吧,我的工作都是以纳秒为单位的,你们人间的一秒,我可能已经做了1000,000,000(10亿)次动作了。
" G' V8 t- u! V+ }/ s1 H5 j8 G0 G3 s0 s* k; x- ]3 x- f
CPU的自述 cpu-floating.jpg

: ~/ y$ K( N; Q6 N  D9 p        相比而言,内存比我慢100倍,硬盘比我慢1000多万倍,你说我快不快?
' c4 f' K/ d4 E7 j2 H0 a7 q9 ~        5 g6 [$ O4 T  z$ E
启 动
/ A/ \" ?" C8 Z) y8 u  ~  V- |
        我住在一个机箱里,每天早上一阵电流把我叫醒,还夹杂着嗡嗡的声音,我知道我忠实的护卫电风扇又开始工作了,我特别怕热,又运行的飞快,如果没有电风扇给我降温,我很快就会生病,生病的后果很严重,那就是我的伙伴们像内存了,硬盘了。。全部都要罢工了,没有我这个系统就会陷入的一片死寂。% T- `: S; ^( M0 }& p5 }

+ _# k1 x; S& e" L6 B; Z        我听说有些CPU的福利很好,竟然待在恒温恒湿,一尘不染的托管机房里,让我好生羡慕。
  ]5 j3 F4 @/ R/ ^3 l$ u' _1 g# U: d* H0 P- X7 z1 j2 t
        我的脑容量很小,所以醒来后只想起了我的创造者告诉我的几件事情:" Z; J5 i8 [5 R  l
        4 @9 J; ]  j2 J4 P) C8 x% G0 b
        1.你的工作就是运行指令
( C0 G% l4 h+ I9 n; I! o        2.你不能保存指令,你的指令全在内存里
. G# [/ {* y% V+ Z1 `        3.你的第一条指令在内存的最顶端处0xFFFFFFF0
, R8 _' |, I/ `" P2 u) s2 @
* N! Q) K1 w5 J2 x3 U1 g- c
CPU的自述 cpu流程图.jpg
- G. p+ B3 B3 N
        那还有什么可说的,赶紧打电话给内存要指令,电话通过系统总线,还得通过I/O桥电话局需要转接一下,再通过存储总线接通内存。: y6 g& o0 b% n" _
/ J& [1 W+ Z" @  ~9 t0 q; ~
        "哥们,把这个地址处的指令给我说一下吧"6 d6 E/ q5 c: Z" d: [3 H2 r
* _% u6 t0 {8 O( h8 n( d
        "你是谁?"内存竟然把我忘了,当然,他断了电和我一样,失忆了。#j347:
% v; ?! D9 p" a4 g' e1 m$ r. c( b/ R
        "我是阿甘啊,我们经常聊天来着,你忘了?"/ A! R, o  u! _! z6 l
6 `+ q; v/ S3 o; E- r& d
        内存磨磨唧唧半天才把数据发了过来(比我慢100倍啊),这是一条跳转指令,我立刻回忆起来了,这是我的老朋友BIOS等着我去运行他那一堆指令呢。
; I  f7 J  Z7 T+ H' }" M7 g  K- o3 x/ a( d! J
        我给BIOS打电话:“老弟,今天干点啥?”& q0 G4 N6 [3 Y) D, ^
5 e0 N% ]2 q- x& Q1 G8 ^5 [( v# U
        “阿甘,早上好"BIOS从不失忆,把所有人都记得清清楚楚“还不是老一套啊,无非做一下系统的自检,看看内存,硬盘,显卡等这些老伙计们有没有问题,有问题的话用小喇叭提示一下主人”1 u) M  o, z. z# w3 s/ f! n

) @$ U9 [; a  @" m        这些过程我已经轻车熟路了,很快搞定,像往常一样,没有问题,我还把一个叫做中断向量表的东西给弄好了,我知道一会而要用
6 F' ~4 c; I# `' k+ o  a. y/ s" B7 p
        这些东西都搞完了,BIOS果然告诉:"阿甘,int 0x19"
& B4 V2 }% ?& h1 \, A0 n; \- `( f6 Q" ~, `7 s, f. M
        我赶紧去刚弄好的中断向量表中去查第19号,顺藤摸瓜又找到对应0x19的一大堆指令。
& Z2 Q6 }3 G- `, V, }) \, w  I5 a9 \9 f4 Z  b! o: i
        执行吧,这堆指令把将磁盘的第一扇区(磁盘最开始的512字节)运到内存的0X0000:0X7C00处,然后我就从此处接着执行。
( @! ~0 q6 H# Z' v( O% J) [3 C' S4 [* ~" }+ A3 Y! @+ T
        我想起来了,接下来有一大堆精巧的指令把迷迷糊糊的操作系统从硬盘中唤醒,运输到内存中来。(此处实在是复杂,略去10万字。。。。)
# K; ?( l; Z0 f5 ^6 P; B7 Z
7 }! O. U& m9 s5 @        你看这就是为啥他们叫我阿甘,我做事飞快,但非得别人告诉去哪里执行才行,要不然我就只会坐在那里无所适从。
& B" d/ j0 t2 z$ D6 K        / V9 x' L2 V/ R1 |4 k
运 行

6 }+ t0 s0 K9 H* L/ g        操作系统一旦进入内存,立刻就是老大,所有人都得听他指挥。我也发现我的周围出现了一个屋子:进程屋。屋里堆着一大堆东西,什么进程描述信息包裹了,进程控制信息包裹了,我都不太关心,我只关心最最重要的两件东西:4 h5 n/ s1 R0 l' b* Z* W
       
% @0 h' b- j. _1 y; x" {* I        1.我工作必备的寄存器,就放在我面前的工作台上。3 L0 X; P; ]5 ]' M# i, E
        2.程序计数器,我用它记住我要执行的下一条指令地址。
2 d" i+ J7 q- _3 B; `0 }6 V  c: k9 [6 D9 w6 e, R
        "阿甘,别来无恙啊",操作系统对我还是挺不错的,先给我打招呼。
# C+ W6 I7 n6 t6 j6 r* f$ A" @8 o! p) z) n# l5 D( |0 A
        "Linux老大,今天有什么活啊",我每次都表现的积极主动。5 E' r% B, B2 ~9 {. }. |

+ o' P9 r: u" i- ^0 p" ~0 ~        "来,把这个hello world程序给运行了"。
7 i+ l& I6 @# l8 X0 f2 |$ ?4 r3 I
        Hello world程序还在硬盘上睡着呢,得先把他也装载到内存里,要不然我怎么执行啊。于是我就拿起电话打给硬盘,电话通过系统总线来到IO桥电话局,再转接到IO总线,这才来到硬盘这里。* \; \7 p+ a# L$ g, D3 F/ b

) p0 z% P4 h' @; @( t2 O        我在电话里请他把数据给我运过来,然后我就无所事事的坐在那里等。Linux老大立刻就怒了:阿甘,告诉你多少次了,你小子怎么还在等硬盘给你发数据!#j332:
7 M+ E! P+ V" ~* u# i: q6 m( a8 h3 s3 D
        是的,我忘了一件事,硬盘比我慢太多了,我执行一条指令大概是1ns,在用来读磁盘的16ms里,我能潜在的执行1600多万条指令啊。
! E+ Z* s8 V+ }8 l) N- k  R4 \0 w% G/ `- w0 d9 b; W, \
        我感到深深的愧疚,赶紧拿起电话打给硬盘:哥们,按我们之前商量好的,用直接内存访问(DMA)啊,你直接把数据装载到内存吧,不用经过我了,装载完成以后给我发个信号。' W5 i# ]% Q! r" v  T/ C
+ U/ e- x8 m/ q# V
        "这还差不多"!Linux老大心情好了些。
0 e$ j9 N. M3 C& C- d- j: {8 @1 s+ c1 O        . S( ~* u: `+ q( |  O7 ~
        “阿甘,数据还没来,别闲着,这有一个菲波那切数列数列,来算一下吧”。1 O9 `  A7 p+ J- O" a

" d+ S9 B4 }  K        "肥波纳妾数列?这名字好古怪,老大,其实你也知道,我脑子小,懒得去理解那是啥意思,你把进程屋切换下,把程序计数器设置好,指向下一条指令,我一条条指令执行就得了“我挺没追求的。
2 Z4 ~9 X% J. s6 R) K/ Z$ z. W$ _( o9 H7 \, l
        "真是个阿甘啊!”老大感慨到。
' h$ L# C. M* `0 v4 @. g
4 N$ d) p$ L9 Q7 d8 E9 x, o        我所处的进程屋立刻发生了变化(当然,这也是我辅助Linux老大干的),各种包裹的信息都变了,尤其是寄存器和程序计数器。
$ Z0 b; B- q0 C1 ]) e6 S8 \3 p  `& n. X( {! t% I) `/ T
        于是我就开始计算这个什么纳妾数列,但是这个数列似乎无穷无尽,哪个无脑子的程序员写了个无限循环吧。正在这时,我便收到了一个电话,说是Hello world的数据已经装载到内存了,让我去处理。  U5 r6 C0 O5 J
; ^% J  B. a. F- K3 x! w. S
        我放下手中的活,保存好现场,就去处理那个Hello world,果然数据已经都好了,那就切换过去运行吧。其实老大并不知道,任何人,只要你运行了相当多的数量的指令以后,你都能悟到这些程序的秘密。* {) D2 S, Y* M6 a) w+ Y6 l, }( f
       
8 u6 s) t8 m1 k% ?- w4 ~        我CPU阿甘虽然傻傻的,但也架不住执行这数以万万亿的指令给我的熏陶啊。这个秘密就是:程序都是由顺序,分支,循环来组成的。其实分支和循环在我看来都是跳转而已。" ?" r; c, q8 z& s  \; o' T8 @

: |( A# K/ r8 l        所以我的工作就是打电话问内存要一条指令,执行这个指令,如果是个跳转指令的话,我就问内存要跳转的目标地址的那一条指令,继续执行,生活就是这么简单。! ^7 K/ _) u& ~, C0 P& n
* P$ w) Y5 Q3 k* `7 [; E
        奥对了,当然也有复杂的,就是函数调用,我得和内存紧密配合才能完成。这个咱下回再说。
# |5 U3 K8 O3 {6 i4 T% E! J        7 U9 i* K8 ]* ?; H
新 装 备——缓 存
/ I7 V1 W2 P, Y
        提到内存,这真是我的好哥们,没有他,我几乎什么事儿都干不成,更重要的是他比硬盘快的多,读取一次数据,只需要100纳秒左右。这样我们俩说起话来就轻松多了。
# o2 m. D, R, K
( Q* F- W0 k/ ^        每次他都说:"阿甘,幸亏有你给我聊天,要不然我肯定被活活的闷死不可,那个硬盘说话是在太慢了"1 _+ a( {$ U5 F, [2 V+ S

2 B" K- v0 y7 e! M        "它为啥那么慢?"我每次都问。: l' w7 w) q- A
: t; C, L* L; W1 {) o1 O& L
        "硬盘是个机械是的玩意,一个磁头在一碟高速旋转的磁片上挪来挪去,光定位就慢死了"。' k" U! S2 r' A

+ b* R+ J, p( e9 a2 |* R        "那主人为什么要用硬盘?"
- K) |8 _$ k1 S- z6 ?- {5 Q
# G+ u9 H6 d% g        "人家虽然慢,但是不怕停电,哪像你和我,一停电全部都失去记忆了。"% \4 ]7 i" y! T/ ]' f5 Y/ L/ h

6 l7 \, o; d, t6 ^; C0 O+ Z        确实是,人不能把好事都占全了啊。2 C4 X6 U# K5 ]; q* }. W9 Y& r6 ]4 ]2 b

3 C5 Q- B2 e0 ?, @9 i3 O; I0 e        我的指令中有些完全用我的寄存器就能完成,但是有很多都需要读写内存的数据,再加上所有的指令都在内存中存着,虽然它只比我慢个100倍,但指令多了我还是有点受不了。
' e/ p) _3 s6 X0 u2 y2 H; M! P8 t  h5 Z7 ^& B; w* V
        我给内存说:"哥们,你能不能再快点!"6 s+ f$ \3 k3 s* _: W
5 g! T2 k5 ?& K9 }9 _1 d4 ?
        内存说:拜托,这已经是我的极限了,阿甘,你自己再想想办法吧!我给你说啊,我留意了你最近访问的指令和数据,我发现了个规律“。* L6 Q  T0 {3 l. n  R& L* f
1 B5 `' [' B8 j+ m% h' V- n( h& w
        "啥规律?"
2 d3 O" P; m: F5 {8 Y# `. R7 J$ `5 D( s4 c/ l
        "比如说吧,你访问了我一个内存位置以后过不多久还会多次访问,还有,一个内存位置被访问了,附近的位置很快也会访问到"(这其实叫程序的局部性原理)。
/ L) r2 t3 I' e' ^( }8 J. P$ y% @
( E$ t7 _/ o) L9 X+ P: H        我还以为是啥规律,其实我早就注意到了。
# t' q" o0 K  {. P6 D  \- B% k7 w& V
! K' Q* r# q; K9 ]: I        "这有啥用啊?”
5 g7 X7 [, U6 N2 F- t
/ F  |. ~9 s* R' x5 O4 v        "既然你经常访问同一块区域的东西,你想想如果把这些东西缓存在你那里会怎么样...."0 J: N9 R: n$ M  u/ K0 @1 d" Y( ^

: |1 w0 ]2 [+ K        我一想有道理啊!加个缓存试试!
. I2 S+ k3 [- y/ j# e) Y: w  W
& B" a" P- `4 O* E1 W) G6 B        从此以后,我每次读写指令和数据,都问缓存要,缓存没有才给内存打电话。
) Q. c9 n. C0 f( p# |4 p- ^+ K$ S7 H; h, c4 i, Y' m* x" p
        果然,由于局部性原理的存在,我发现的确是快了不少啊。) R  K6 [! T" J" S) ^3 p

3 i  v2 P" x* \; k        当然也有缺点,那就是Linux老大在做程序切换的时候,缓存就会失效,因为两个程序之间没什么联系,局部性原理不起作用,所以需要重建缓存。; Z$ y6 |( N: j# O+ z( `
# b7 p$ d- S3 f8 E: c2 M" }5 O
自 我 提 升——流 水 线
: m0 ^! E1 C  U& q! N0 n
        缓存让我的工作更有效率,得到了Linux老大的表扬:"阿甘,我看你很聪明嘛,都会用缓存了"。
& A% w! X9 d' f& \/ S, b$ S1 g. L/ [# r$ u; ?8 O6 l1 {! A9 V' X
        "我哪有那么聪明,都是内存的点子。老大,不过我学会了一个重要的东西:当你改变不了别人的话,抱怨也没用,还是先改变一下自己吧"。6 d2 Y8 ]( x) \* P2 r, Z* F
. G  ]' Z/ \0 @1 l* f% R
        "挺有哲理的吗,希望你明天重启后还能想起来!#379:"
. o8 ^( m, U; B9 B% s4 L4 V1 h
& e: E; C. B5 n( s4 t5 E8 Q0 X1 L% Z        "我最近又发现了一个问题,正苦恼着呢,你看我有四只手,第一只手负责打电话问内存要指令,第二只手翻译指令,第三只手真正执行,第四只手有时候还得把结果写回内存。问题是,我发现经常只有一只手在忙活,其他都在闲着,你看第一只手取指令,其他手只能等着。第二只手翻译指令的时候,其他三只也得等“: f9 P1 |7 `0 Q9 d* n" w8 w

9 j- Z2 {0 Y$ V+ M- Q* |2 U; f% k' l3 R        "看来以后我们不能叫你阿甘了,你已经开始思考了!#392:"
/ L  K' t& I, e; a; N6 H
3 _6 N+ A+ @" D: [7 c0 G" n) c0 o        “这问题好解决,给你举个例子,你听说过洗车没有?和你差不多,也是先喷水,再打洗洁剂,再擦洗,最后烘干,但人家的工作方式和你不一样,人家是流水线作业,你想想,一辆车在烘干的时候,后边是不是还有三辆车,分别在喷水,打清洁剂和擦洗,每个步骤都不会空闲。”& d) M3 R+ B. u; }' U

4 l# \& l& f: A; ~        "这么简单的道理我怎么都没有想到呢?我也可以搞个流水线啊,这样每只手都利用起来了"
3 \7 l) Z  i; s0 Z
. v# Y7 }9 A1 @6 B: D1 _6 q        别人都说我们高科技,但其实原理都蕴含在生活之中啊。
- q3 V8 R& h1 ?0 ]
& ]! j2 H* o6 I3 |        有了缓存和流水线的帮助,让我的工作大大的加快了,大家都对我刮目相看。 他们想给我起个新名字:超人,不过我还是更喜欢他们叫我“阿甘”,多亲切。
( P4 q! G& ]( Y  V/ W+ ^8 E       
( f# i  T8 t. i: j+ G1 Q, A) P
尾 声

: c" Y1 \5 n( M  Q+ R/ W        我一丝不苟,兢兢业业的运行指令,时不时和伙伴们聊天,很快一天就过去了,又到了晚上,我知道关机的时刻到了,赶紧挨个给他们道别。
. k; [1 M8 [& J" f: k  v; `7 }7 n. o9 c. z
        很快那些让我兴奋的电流消失了,风扇的嗡嗡声也没有了,我再也无法打出电话,整个世界沉寂了。明天将会是新的一天。) [- U7 L( k+ R/ d- A

$ c+ B8 Y4 Y. N5 _8 u9 m
上一篇
下一篇
小执念乐于助人,奖励 2 个 金币.


故事,还未完、 「锋芒初露」 2018-1-20 22:41 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

顶起出售广告位#j325:
梦纸 「出类拔萃」 2018-1-23 07:43 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

我水土不服就服你
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2021-5-9 00:57 , Processed in 0.030554 second(s), 20 queries , Redis On.

© 2015-2021 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表