上回说到,阿飞从混沌中醒来,意外发现自己的大脑被数据化存储到了一台计算机内存中,根据神秘声音的指示,他需要赶紧联系网卡找到自己大脑的另一半然后逃离这里。不料内存却告诉他,如果不赶紧把自己持久化存储起来,一旦计算机关闭他就会消失···
“怎么,怎么持久化存储起来?”,阿飞一下紧张起来,说话竟都有些结巴了。
刚说完,阿飞的眼前又划出了一道光亮,光线指向的远处,他看到了另一个庞然大物。
“这是硬,硬盘?”
“没错,我这里不是久留之地,一旦断电了数据就都消失了。硬盘可以持久化存储数据,就算没有供电,数据也依然存在,你要是能到那里就安全了”,内存说到。
“那我怎么才能从这里到硬盘里去呢?”
“这事得找CPU,这台计算机上是一个x86-64架构的CPU,他有两条指令:in和out,可以用来从硬盘上读写数据,他可以用mov指令把你读到寄存器中,再用out指令把你写到硬盘上”
- mov bx, addr;
- ep:
- mov ax, [bx];
- out port, ax;
- add bx, 2;
- loop .rep
“寄存器?那才几个字节,这样折腾不得写好久?唉,说到这,我连我自己有多少数据量都还不知道,内存大哥,你看下我有多少字节?”,阿飞问到。
内存条顿了顿,计算了起来,片刻之后回答道:“20210529个字节,差不多20MB”
怎么才20MB,我的大脑就这么点数据吗,就算只有一部分那也太少了吧?阿飞心里这样想着,感到有些诧异。
“让我算一下,这得传输多少次···20MB,一次2个字节···就是···”,阿飞念念有词的计算起来。
“不用算了,我给你算好了,就算一次传送4个字节,CPU也得读写五百多万次”,内存打断了阿飞。
“什么?这也太慢了!”,阿飞失望的说到。
“你嫌慢?CPU大哥估计还不愿意干这活呢”
“啊?为什么?”
“这种传输方式叫Programming Input/Output,简称PIO,因为传输效率低下,这会花去CPU大量时间,不能去执行其他程序了,所以现在他们很少用这方式来传输数据了”
“那言下之意,还有别的办法了?别卖关子了,快告诉我吧!”,阿飞急的问到。
“有,用DMA的方式,直接让DMA控制器通过总线把你传输到硬盘中,数据不用经过CPU老大哥”
DMA?阿飞一下想起了什么,“这个东西我在大学课本上学过,叫直接存储器访问(Direct Memory Access),由DMAC,也就是DMA控制器来负责数据的传输,我记得DMAC好像是一个编号叫8257的芯片,他现在在哪里?”
内存不禁笑出了声:“什么8257,那都是哪个年代的老黄历了,那玩意早就下岗了。”
“那现在DMAC在哪里?”
“看到硬盘不远处的那块芯片了吗,那就是PCH,也就是你口中说的南桥芯片,它里面集成了SATA控制器,用于控制那个SATA接口的硬盘,SATA控制器中又集成了DMA控制器,一会儿就由他把你传输过去。”
“看来我学的课本真过时了,你赶紧帮我联系一下,我很着急啊”,阿飞催促到。
“这可不行,我只是一个总线从设备,只能被动接收命令时使用总线,只有总线主设备才能主动使用总线,等着吧”
等?阿飞的心一下又悬了起来,“那谁是主设备呢?”
“CPU老大,他是最大的主设备,还有DMA控制器们,他们也是主设备,等一会儿硬盘的DMA控制器找我通信时,我帮你给他带个话,让他把你传输过去”,内存说到。
阿飞只好耐着性子等了起来,不时又想起神秘老者的话,他急的像热锅上的蚂蚁,不知道如何是好。
“这要等多久?”,阿飞忍不住问到。
不过这一次,内存没有理他。
过了好一阵···
“快来了!我看到DMA控制器发出总线申请信号了”,内存说到。
“什么意思?”,阿飞有些不太明白。
“之前不是给你说过了吗,咱们主板上各部件之间通信都得通过总线系统,这总线系统英文名叫bus,也就是公共汽车的意思,所有人共享的。但共享得有个章法,不能大家一起用,那就乱了套了,所以主设备们要使用之前,都得发出申请,交给总线仲裁器来判定由谁来使用”
“共享?那么多设备,忙得过来吗?”
“很早以前的ISA总线只有几十MB/s,设备连得多了以后确实不太忙得过来,不过后来改成PCI总线就快多了,有几百MB/s了。到现在这台计算机中的PCIe总线,能达到好几GB/s,完全忙得过来”
“就这一根线,能传输的这么快?”
内存又忍不住笑了出来,“总线可不是一根线,那可是几十上百根线呢,数据、地址、时钟还有各种控制信号,一根线哪里够”
“原来如此,我一直以为总线就是一根线呢,看来又被课本上的图给误导了···”,阿飞若有所思的说到。
“来了来了,消息来了,我得去忙了,你等我一下,我把你的情况给DMA控制器说一下”,阿飞还沉浸在自己的思索中,内存又接着说到。
阿飞又开始紧张起来,一会儿就要去硬盘里了,那里又是怎样一副天地,心里一点数也没有,既期待又害怕。
无聊之际,阿飞又试图回忆自己是如何来到这里,却依旧是一阵头晕,看来自己的大脑数据真是缺失了一部分,忙完持久化存储的事情,得赶紧找网卡帮我把信息传递出去才行。
等了好久,内存条终于来了消息:“你快准备好,我已经跟硬盘的DMA控制器说好了,马上就来传输你”
话音刚落,还没等阿飞反应过来,只感觉一阵电流窜遍全身,接着像是在一股巨大的引力撕扯下,阿飞感觉自己被吸入了一个漩涡,身旁的一切飞速向后退去,心脏都快要从身体里跳了出来,打出生以来他哪里见过这阵仗。
“快看,来了一个新文件”
“这家伙是什么格式的,怎么从来没见过”
···
迷迷糊糊中,阿飞听到有人在说话,慢慢睁开眼睛,才发现自己不知什么时候竟然睡了过去,一定是刚才那阵引力把我弄晕了,阿飞心里这样想着。
阿飞环顾四周,仍旧是一片漆黑。
“内存大哥?内存大哥?”,阿飞叫了两声。
“什么内存大哥,这里是硬盘”,不远处一个声音传来。
看来成功来到硬盘了,阿飞长舒了一口气,再也不用担心断电了。
突然,一个巨大的东西从远处飞了过来,在阿飞眼前划出了一束电子流,刹那间,四周全被照亮。
这时,阿飞看到了刚才那声音的源头···
本文转载自微信公众号「编程技术宇宙」,可以通过以下二维码关注。转载本文请联系编程技术宇宙公众号。