喜欢上你,爱上你,真是太好了,谢谢。 收藏本站
登陆 / 注册 搜索

阅读: 8K   回复: 2

CPU的自述

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

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

主题破百
        上帝把我制造出来,给我了一个很小的脑容量,为数不多的寄存器能临时的记一点东西,但是上帝给我打开了一扇特别的窗户,那就是像阿甘一样,跑的飞快。
0 R( K/ M8 A3 S- q% ~( Z
) }  h$ n- K1 s2 g, U! x% B* z        到底有多快呢?我这么比喻一下吧,我的工作都是以纳秒为单位的,你们人间的一秒,我可能已经做了1000,000,000(10亿)次动作了。/ E# C7 |. y' U: x
- N" y% o, S8 K5 \2 n) d. Q' m
CPU的自述 cpu-floating.jpg

; H8 z! J+ Y9 }3 [) i; l. P  C        相比而言,内存比我慢100倍,硬盘比我慢1000多万倍,你说我快不快?% m- r0 i. Y# H) E
       
! @* C4 W# X7 x+ f" {
启 动
) V6 x, j8 u3 c) E, W, E# P
        我住在一个机箱里,每天早上一阵电流把我叫醒,还夹杂着嗡嗡的声音,我知道我忠实的护卫电风扇又开始工作了,我特别怕热,又运行的飞快,如果没有电风扇给我降温,我很快就会生病,生病的后果很严重,那就是我的伙伴们像内存了,硬盘了。。全部都要罢工了,没有我这个系统就会陷入的一片死寂。
1 P6 D( u6 Z; Y& [/ n
  h4 [$ H/ L. y. j0 u' o2 ?1 o9 K        我听说有些CPU的福利很好,竟然待在恒温恒湿,一尘不染的托管机房里,让我好生羡慕。1 f, P% o( W. U  f

1 k3 v/ R$ R& z, c        我的脑容量很小,所以醒来后只想起了我的创造者告诉我的几件事情:8 D8 L, [6 \1 ~7 t( G# T
        # O! x3 W' ?; _; @7 |+ u; I
        1.你的工作就是运行指令# Q0 \& Q& O3 O  D0 R
        2.你不能保存指令,你的指令全在内存里
! Y2 y1 A; P) a9 X( H/ M# E        3.你的第一条指令在内存的最顶端处0xFFFFFFF03 G& p3 T" ~3 n, }
: U$ ?+ |1 z9 x2 ]; z% @3 q
CPU的自述 cpu流程图.jpg
5 A- k- F; p0 c! B- \+ i: B
        那还有什么可说的,赶紧打电话给内存要指令,电话通过系统总线,还得通过I/O桥电话局需要转接一下,再通过存储总线接通内存。
# `: x2 n2 V" y7 m; k, q' {3 j9 `: z
% L. ]4 ~5 E9 @' Z. F2 J& e        "哥们,把这个地址处的指令给我说一下吧"
# [/ O9 x  Z) ]7 p8 Q
7 k& A. i3 q4 e' J        "你是谁?"内存竟然把我忘了,当然,他断了电和我一样,失忆了。#j347:
# H: m8 m0 `; P4 i# ~' L  n9 V, A. `3 |; y# C9 {; m
        "我是阿甘啊,我们经常聊天来着,你忘了?"* E& h4 U( P/ z1 C
' h" d; r3 N1 F% S1 P9 X$ t3 q
        内存磨磨唧唧半天才把数据发了过来(比我慢100倍啊),这是一条跳转指令,我立刻回忆起来了,这是我的老朋友BIOS等着我去运行他那一堆指令呢。+ w: _0 t- a, i' v3 V

' a9 U9 ?# z8 Z+ M0 W# W        我给BIOS打电话:“老弟,今天干点啥?”$ j. M1 D# K6 p) k
" S$ x" c5 r" ]7 g0 ?" }/ {9 P
        “阿甘,早上好"BIOS从不失忆,把所有人都记得清清楚楚“还不是老一套啊,无非做一下系统的自检,看看内存,硬盘,显卡等这些老伙计们有没有问题,有问题的话用小喇叭提示一下主人”
, ?) ~( E3 G. f' C) w" A
0 O) n3 w$ u5 A0 l" |        这些过程我已经轻车熟路了,很快搞定,像往常一样,没有问题,我还把一个叫做中断向量表的东西给弄好了,我知道一会而要用) a% `, `/ P+ D, Q& C& U

) }8 q- F  l/ Y7 |% F6 t        这些东西都搞完了,BIOS果然告诉:"阿甘,int 0x19"
6 O1 f, Q4 a$ e8 {
- D% _1 r" k$ ^2 G9 f        我赶紧去刚弄好的中断向量表中去查第19号,顺藤摸瓜又找到对应0x19的一大堆指令。
, S) N4 O1 X! M, C$ k2 Z2 T. w) L; j' W0 |" j: D
        执行吧,这堆指令把将磁盘的第一扇区(磁盘最开始的512字节)运到内存的0X0000:0X7C00处,然后我就从此处接着执行。
2 N' g$ f1 W! e: r9 r1 A. G1 F, J7 s: p' y! ~/ x- X- I
        我想起来了,接下来有一大堆精巧的指令把迷迷糊糊的操作系统从硬盘中唤醒,运输到内存中来。(此处实在是复杂,略去10万字。。。。): {; j9 g/ z' g

. E: Y$ ^5 j4 n: L3 h' @  ?9 _' `        你看这就是为啥他们叫我阿甘,我做事飞快,但非得别人告诉去哪里执行才行,要不然我就只会坐在那里无所适从。" R- Z; E3 O! w3 @3 r5 ~' r$ H
       
$ O9 n! q9 n1 q+ ?+ X# T; C
运 行

4 ]$ d; q: M1 W4 D  i        操作系统一旦进入内存,立刻就是老大,所有人都得听他指挥。我也发现我的周围出现了一个屋子:进程屋。屋里堆着一大堆东西,什么进程描述信息包裹了,进程控制信息包裹了,我都不太关心,我只关心最最重要的两件东西:- ~: o# P  l! h2 {3 j/ b# n6 i
        ) ~/ |3 }! h3 g0 v
        1.我工作必备的寄存器,就放在我面前的工作台上。
- \% f: y/ u$ d( l4 m* T+ t        2.程序计数器,我用它记住我要执行的下一条指令地址。9 [) w9 t1 k; |( M0 J4 B

/ R7 S$ z( R" w$ ?6 r* O( x0 K5 y        "阿甘,别来无恙啊",操作系统对我还是挺不错的,先给我打招呼。
0 H* R" s. p! I/ y* h
8 W+ e( s8 q, S' _0 ?        "Linux老大,今天有什么活啊",我每次都表现的积极主动。
! X- j. j# X  S% g2 g  [8 m1 T; D) v; \
  k. G" \$ s+ B        "来,把这个hello world程序给运行了"。
6 {9 R2 J7 l6 z
0 ], @  F) {5 |4 F( _$ L% t, M        Hello world程序还在硬盘上睡着呢,得先把他也装载到内存里,要不然我怎么执行啊。于是我就拿起电话打给硬盘,电话通过系统总线来到IO桥电话局,再转接到IO总线,这才来到硬盘这里。+ X" D6 p/ w" l( j1 X
& W  e2 e! E1 h8 P7 q
        我在电话里请他把数据给我运过来,然后我就无所事事的坐在那里等。Linux老大立刻就怒了:阿甘,告诉你多少次了,你小子怎么还在等硬盘给你发数据!#j332:6 y0 B, W  N" z
9 Z1 k) j/ F* ?7 E) b
        是的,我忘了一件事,硬盘比我慢太多了,我执行一条指令大概是1ns,在用来读磁盘的16ms里,我能潜在的执行1600多万条指令啊。( k  ^5 ~/ I4 T: f- ^- ^
" }- O$ L' y; F6 k* a% K0 D
        我感到深深的愧疚,赶紧拿起电话打给硬盘:哥们,按我们之前商量好的,用直接内存访问(DMA)啊,你直接把数据装载到内存吧,不用经过我了,装载完成以后给我发个信号。  b' ~! s) C) @. l# A
2 I$ p# |8 c, O1 J3 t. A
        "这还差不多"!Linux老大心情好了些。; c( p9 m, q4 |5 ]
       
/ Y9 B- _$ W: P8 p& M3 n        “阿甘,数据还没来,别闲着,这有一个菲波那切数列数列,来算一下吧”。
& q% S$ }+ s& ]0 c, e' H9 P& J( u: c
        "肥波纳妾数列?这名字好古怪,老大,其实你也知道,我脑子小,懒得去理解那是啥意思,你把进程屋切换下,把程序计数器设置好,指向下一条指令,我一条条指令执行就得了“我挺没追求的。
' T! P% V( g/ ~0 z
- q+ q# Q" n7 R; C! g: c        "真是个阿甘啊!”老大感慨到。% _8 M& c: `* k) E" C: ~

- X+ d! `) p: g        我所处的进程屋立刻发生了变化(当然,这也是我辅助Linux老大干的),各种包裹的信息都变了,尤其是寄存器和程序计数器。
2 e- R# {! {( d' Q* h* V2 }. X
. R4 U5 D/ @* i4 z6 _9 y6 H        于是我就开始计算这个什么纳妾数列,但是这个数列似乎无穷无尽,哪个无脑子的程序员写了个无限循环吧。正在这时,我便收到了一个电话,说是Hello world的数据已经装载到内存了,让我去处理。
: T, H8 ]$ u" r( A5 u2 Y5 y$ X9 c5 F+ }4 Q& ^7 C) X- m
        我放下手中的活,保存好现场,就去处理那个Hello world,果然数据已经都好了,那就切换过去运行吧。其实老大并不知道,任何人,只要你运行了相当多的数量的指令以后,你都能悟到这些程序的秘密。
# t( B2 P, k- ?) }, W6 P9 a  P        2 O4 M- W' n  a* s. q% ^( o/ X
        我CPU阿甘虽然傻傻的,但也架不住执行这数以万万亿的指令给我的熏陶啊。这个秘密就是:程序都是由顺序,分支,循环来组成的。其实分支和循环在我看来都是跳转而已。; Y8 }0 m7 G3 v' b6 ?6 c! L6 y

# ?% p& `8 B5 y5 ^! M        所以我的工作就是打电话问内存要一条指令,执行这个指令,如果是个跳转指令的话,我就问内存要跳转的目标地址的那一条指令,继续执行,生活就是这么简单。
; P; D0 N3 r: z5 }2 j1 J. u  f  B
* N  X  B. [, r! I9 N6 [        奥对了,当然也有复杂的,就是函数调用,我得和内存紧密配合才能完成。这个咱下回再说。0 J% d, }$ k5 c, E8 f1 r
        1 v" o5 @  {  T% @) t
新 装 备——缓 存

( D8 x# B  A+ M+ {+ L        提到内存,这真是我的好哥们,没有他,我几乎什么事儿都干不成,更重要的是他比硬盘快的多,读取一次数据,只需要100纳秒左右。这样我们俩说起话来就轻松多了。: z; Z: o; Z) B! \# ?& ]  h# M8 _, V+ P
$ P9 j: K. l- m3 H& d: n
        每次他都说:"阿甘,幸亏有你给我聊天,要不然我肯定被活活的闷死不可,那个硬盘说话是在太慢了"* R' k, \; k# j9 _8 X) ?) X% a
+ H! ?8 o8 w. J' \. w4 p# t/ X! v( p
        "它为啥那么慢?"我每次都问。
9 i3 m- v  ]2 B, A3 E/ N2 A. w+ T- k( Z' H- c6 K
        "硬盘是个机械是的玩意,一个磁头在一碟高速旋转的磁片上挪来挪去,光定位就慢死了"。
9 [5 V9 x7 |- j* f2 k8 ]
) H. [1 p5 S% P4 [        "那主人为什么要用硬盘?"
, u( l' L2 o. v# b) Z, ~- c+ `# U$ {8 S# e6 F3 H
        "人家虽然慢,但是不怕停电,哪像你和我,一停电全部都失去记忆了。"
2 W, ^# J) _. ?) @6 E- v' ?' C: {  X' X4 C2 C* n' f
        确实是,人不能把好事都占全了啊。
3 P( }5 O( H, I+ ~
: i% e; ]! ?1 S* p: h        我的指令中有些完全用我的寄存器就能完成,但是有很多都需要读写内存的数据,再加上所有的指令都在内存中存着,虽然它只比我慢个100倍,但指令多了我还是有点受不了。
4 ~# [2 A  m* p: B
9 ]2 r, m0 A  V5 T  R0 N        我给内存说:"哥们,你能不能再快点!"
, H: j0 S* R# @0 n  e* [: T) {. A/ A( V+ P- \% E
        内存说:拜托,这已经是我的极限了,阿甘,你自己再想想办法吧!我给你说啊,我留意了你最近访问的指令和数据,我发现了个规律“。
: ?& y( u+ _1 j' }5 u. i# ~) G$ o& M# C5 ^$ v* ]
        "啥规律?": o: [+ O" U/ c2 p5 A

. F9 T3 |' E2 U# W6 t! Z* H1 C        "比如说吧,你访问了我一个内存位置以后过不多久还会多次访问,还有,一个内存位置被访问了,附近的位置很快也会访问到"(这其实叫程序的局部性原理)。/ n% Q/ c2 l! V+ g
+ ?. m! ]8 {. y* `, n2 V& r
        我还以为是啥规律,其实我早就注意到了。$ i# K" {  r7 G$ R8 @

; z$ r$ l; ?) p+ X% r/ B/ U. b  a+ r. y7 Z        "这有啥用啊?”% f1 M6 e1 M3 ?- A5 S- d
  b( {/ ~0 ^# G1 {
        "既然你经常访问同一块区域的东西,你想想如果把这些东西缓存在你那里会怎么样...."  S- S( k( q" e1 I6 W4 Y- X

( n9 ~+ a# g3 W. X, F        我一想有道理啊!加个缓存试试!/ j, M2 K8 r- k

  Y6 p1 Y- S% n* H        从此以后,我每次读写指令和数据,都问缓存要,缓存没有才给内存打电话。
/ c- O6 G# B' g2 b! r- J  I' p% F0 o
        果然,由于局部性原理的存在,我发现的确是快了不少啊。
2 n, V# _) _# q) g% M" p( j" ^5 N' q& v4 s/ H' h
        当然也有缺点,那就是Linux老大在做程序切换的时候,缓存就会失效,因为两个程序之间没什么联系,局部性原理不起作用,所以需要重建缓存。
# y/ p( z1 s) _- j1 y* o2 i* m, f
/ V3 C% ^" Q6 ?2 C8 ^
自 我 提 升——流 水 线

" _* m* N: S/ o- c6 @/ Y$ o        缓存让我的工作更有效率,得到了Linux老大的表扬:"阿甘,我看你很聪明嘛,都会用缓存了"。+ s5 S7 \) T  P! g% N
" T* z- R/ i% |4 \* P: U! k! Z: U
        "我哪有那么聪明,都是内存的点子。老大,不过我学会了一个重要的东西:当你改变不了别人的话,抱怨也没用,还是先改变一下自己吧"。
; u$ ^8 b$ a8 ^$ I5 M' k$ r# U8 \" K6 c% e" T1 J5 y4 z5 i
        "挺有哲理的吗,希望你明天重启后还能想起来!#379:"
; u, X# m: T% N0 I0 c) u1 ^
9 Q$ Q. ?( k( ?1 a/ a5 w( U        "我最近又发现了一个问题,正苦恼着呢,你看我有四只手,第一只手负责打电话问内存要指令,第二只手翻译指令,第三只手真正执行,第四只手有时候还得把结果写回内存。问题是,我发现经常只有一只手在忙活,其他都在闲着,你看第一只手取指令,其他手只能等着。第二只手翻译指令的时候,其他三只也得等“, ~+ N' c- E0 `5 t) }+ j

4 C+ ?4 s1 C6 Y- g% [" {        "看来以后我们不能叫你阿甘了,你已经开始思考了!#392:"
- E% a6 A8 w1 T3 n5 C6 E; f1 l( z1 W* F+ H7 a  R& j$ X2 q5 W
        “这问题好解决,给你举个例子,你听说过洗车没有?和你差不多,也是先喷水,再打洗洁剂,再擦洗,最后烘干,但人家的工作方式和你不一样,人家是流水线作业,你想想,一辆车在烘干的时候,后边是不是还有三辆车,分别在喷水,打清洁剂和擦洗,每个步骤都不会空闲。”5 q& P# u! \: _( H' s5 E0 y- j8 C/ Q
/ i  J, w! m) ]* q3 z; B
        "这么简单的道理我怎么都没有想到呢?我也可以搞个流水线啊,这样每只手都利用起来了"% e- K9 {0 j8 X" J/ D* Y+ l$ I
" c; ?! n* e) ~& a: k' ~
        别人都说我们高科技,但其实原理都蕴含在生活之中啊。: [/ @: V/ B! R# B: a

2 j* z) q: J& F& F9 L" e% v        有了缓存和流水线的帮助,让我的工作大大的加快了,大家都对我刮目相看。 他们想给我起个新名字:超人,不过我还是更喜欢他们叫我“阿甘”,多亲切。
2 @" z6 C' b; Y4 i       
: t1 U2 e9 i! I9 t3 ?- K% q6 y4 V# b
尾 声
$ ?, ^6 o  Z5 L: a$ Z1 p
        我一丝不苟,兢兢业业的运行指令,时不时和伙伴们聊天,很快一天就过去了,又到了晚上,我知道关机的时刻到了,赶紧挨个给他们道别。
& x+ S& ^) X1 n5 v5 a0 D% j$ f# X
  d* ^, ^! k+ H/ C        很快那些让我兴奋的电流消失了,风扇的嗡嗡声也没有了,我再也无法打出电话,整个世界沉寂了。明天将会是新的一天。
: d, O* Q" u/ a: k" z: g- U; v  v3 [2 h0 U
上一篇
下一篇
小执念乐于助人,奖励 2 个 金币.


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

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

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

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

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

本版积分规则

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

GMT+8, 2021-9-25 08:56 , Processed in 0.031388 second(s), 22 queries , Redis On.

© 2015-2021 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表