计算机底层技术第二回:内存揭奥秘,总线解玄机

上回说到 , 阿飞从混沌中醒来 , 意外发现自己的大脑被数据化存储到了一台计算机内存中 , 根据神秘声音的指示 , 他需要赶紧联系网卡找到自己大脑的另一半然后逃离这里 。 不料内存却告诉他 , 如果不赶紧把自己持久化存储起来 , 一旦计算机关闭他就会消失···
“怎么 , 怎么持久化存储起来?” , 阿飞一下紧张起来 , 说话竟都有些结巴了 。
刚说完 , 阿飞的眼前又划出了一道光亮 , 光线指向的远处 , 他看到了另一个庞然大物 。
“这是硬 , 硬盘?”
计算机底层技术第二回:内存揭奥秘,总线解玄机
文章图片
计算机底层技术第二回:内存揭奥秘,总线解玄机】“没错 , 我这里不是久留之地 , 一旦断电了数据就都消失了 。 硬盘可以持久化存储数据 , 就算没有供电 , 数据也依然存在 , 你要是能到那里就安全了” , 内存说到 。
“那我怎么才能从这里到硬盘里去呢?”
“这事得找CPU , 这台计算机上是一个x86-64架构的CPU , 他有两条指令:in和out , 可以用来从硬盘上读写数据 , 他可以用mov指令把你读到寄存器中 , 再用out指令把你写到硬盘上”
movbx,addr;
.rep:
movax,[bx];
outport,ax;
addbx,2;
loop.rep
“寄存器?那才几个字节 , 这样折腾不得写好久?唉 , 说到这 , 我连我自己有多少数据量都还不知道 , 内存大哥 , 你看下我有多少字节?” , 阿飞问到 。
内存条顿了顿 , 计算了起来 , 片刻之后回答道:“20210529个字节 , 差不多20MB”
怎么才20MB , 我的大脑就这么点数据吗 , 就算只有一部分那也太少了吧?阿飞心里这样想着 , 感到有些诧异 。
“让我算一下 , 这得传输多少次···20MB , 一次2个字节···就是···” , 阿飞念念有词的计算起来 。
“不用算了 , 我给你算好了 , 就算一次传送4个字节 , CPU也得读写五百多万次” , 内存打断了阿飞 。
“什么?这也太慢了!” , 阿飞失望的说到 。
“你嫌慢?CPU大哥估计还不愿意干这活呢”
“啊?为什么?”
“这种传输方式叫ProgrammingInput/Output , 简称PIO , 因为传输效率低下 , 这会花去CPU大量时间 , 不能去执行其他程序了 , 所以现在他们很少用这方式来传输数据了”
“那言下之意 , 还有别的办法了?别卖关子了 , 快告诉我吧!” , 阿飞急的问到 。
“有 , 用DMA的方式 , 直接让DMA控制器通过总线把你传输到硬盘中 , 数据不用经过CPU老大哥”
DMA?阿飞一下想起了什么 , “这个东西我在大学课本上学过 , 叫直接存储器访问(DirectMemoryAccess) , 由DMAC , 也就是DMA控制器来负责数据的传输 , 我记得DMAC好像是一个编号叫8257的芯片 , 他现在在哪里?”
计算机底层技术第二回:内存揭奥秘,总线解玄机
文章图片
内存不禁笑出了声:“什么8257 , 那都是哪个年代的老黄历了 , 那玩意早就下岗了 。 ”
“那现在DMAC在哪里?”
“看到硬盘不远处的那块芯片了吗 , 那就是PCH , 也就是你口中说的南桥芯片 , 它里面集成了SATA控制器 , 用于控制那个SATA接口的硬盘 , SATA控制器中又集成了DMA控制器 , 一会儿就由他把你传输过去 。 ”
计算机底层技术第二回:内存揭奥秘,总线解玄机
文章图片
“看来我学的课本真过时了 , 你赶紧帮我联系一下 , 我很着急啊” , 阿飞催促到 。
“这可不行 , 我只是一个总线从设备 , 只能被动接收命令时使用总线 , 只有总线主设备才能主动使用总线 , 等着吧”
等?阿飞的心一下又悬了起来 , “那谁是主设备呢?”
“CPU老大 , 他是最大的主设备 , 还有DMA控制器们 , 他们也是主设备 , 等一会儿硬盘的DMA控制器找我通信时 , 我帮你给他带个话 , 让他把你传输过去” , 内存说到 。
阿飞只好耐着性子等了起来 , 不时又想起神秘老者的话 , 他急的像热锅上的蚂蚁 , 不知道如何是好 。
“这要等多久?” , 阿飞忍不住问到 。
不过这一次 , 内存没有理他 。
过了好一阵···
“快来了!我看到DMA控制器发出总线申请信号了” , 内存说到 。
“什么意思?” , 阿飞有些不太明白 。
“之前不是给你说过了吗 , 咱们主板上各部件之间通信都得通过总线系统 , 这总线系统英文名叫bus , 也就是公共汽车的意思 , 所有人共享的 。 但共享得有个章法 , 不能大家一起用 , 那就乱了套了 , 所以主设备们要使用之前 , 都得发出申请 , 交给总线仲裁器来判定由谁来使用”