• 程序的奇妙之旅
  • 发布于 1周前
  • 25 热度
    0 评论
  • Jimi
  • 0 粉丝 2 篇博客
  •   
神经质硬盘

我这个程序一直在硬盘上睡大觉,这个传统的机械硬盘容量超大,但是却非常脆弱。每当他移动磁头,读取数据的时候,他就在那里不断祈祷:千万别有什么大的震动啊。

时间久了,他就变得神神叨叨的,这也不能怪他,因为他那铝合金制成的盘片在高速旋转,每分钟要转几千甚至上万圈,磁头悬浮在盘片上方滑来滑去,经常需要在毫秒级的时间内滑到指定位置,磁头和盘片之间的距离是以纳米来计算的,实在是太近了,一不小心就会出错。多个盘片摞在一起(当然对应多个磁头),被封装在硬盘内,在一尘不染的环境内高速旋转。

在盘片上涂着薄薄的一层磁性材料, 这些磁性材料像无数个小磁铁,都有南极和北极。让人惊奇的是,所有的数据,都是由这些“小磁铁”来存储。盘最常做的事情就是用磁头去读写这些“小磁铁”,看看是南极(S)还是北极(N),由此来确定是0还是1。所有的数据在硬盘中只能以二进制的方式(0或者1)来存储,包括我这段程序。

健忘症患者内存

整天窝在硬盘上实在是没什么意思,我挺期待出去走走,比如到内存去逛逛。 另外一段程序给我说:“你要小心,到了内存,你的存储形式就要发生变化了。”

“什么变化?”
“内存是个纯电子的结构,没有机械部分,又稳定又快!”
“这不挺好嘛!” 我说道。
“内存中就不是‘小磁铁’了,他是由一个个电容+访问晶体管组成。每个电容可以存储1bit的数据,即0或者1。”
“太好了,我正好想去体验下不同的人生!” 我说。
“你要小心,这些电容中的电荷过一段时间就会丢失,电势不足,数据也就丢失了。因此内存得周期性地读出、然后重写来刷新电容的电荷,这样才能把数据给保持住。可悲的是这个刷新的操作一直要持续到数据改变或者断电。这就是为什么内存被大家称为‘健忘者’的原因。”

我丝毫不担心,人类既然这么设计,肯定能保证数据的完整性。
(注:RAM分为两类,一类是静态RAM,一类是动态RAM,前者不用刷新就能保存数据,但是造价高,只在高速缓存中使用。)

CPU阿甘

终于有一天,CPU阿甘又对DMA控制器发出了指令,让他从硬盘把我这个程序搬到内存。他总是这样,从来不亲力亲为,总是把任务交代给DMA以后,自己就忙着干别的事情去了。硬盘和内存刚开始还不理解,为什么要这么做呢?后来他们看到了阿甘那令人咂舌的运算速度,比内存快几百倍,比硬盘快几十万倍。 他们俩就明白了,CPU阿甘如果等着他们去搬运数据,那得等好几个月才行。

硬盘找到了我这段程序,判断是南极还是北极,他们是 ......SNNSSSSN......,也就是......01100001......。
DMA控制器把它们搬进入了内存,我摇身一变,成为了电容中的电荷。
内存则开始辛辛苦苦,不断地刷新这些电容,防止数据丢失。
当然,我们这些二进制数据不会在内存的电容中呆着不走,我们马上就通过总线奔向下一个目的地:显卡。

显卡

第一次来到显卡这里,我发现简直就是一个独立的王国:有自己的GPU, 显存,甚至还有一个BIOS。就拿GPU来说吧,居然像阿甘一样配备了高级装备:风扇! 足能显出其高贵的地位。 这也没办法,人家要渲染图形图像,必须执行复杂的数学和几何运算,发热量大嘛。

由于图形图像不是一下子就能生成的,需要有个地方暂存数据,于是显卡就装备了显存。如果显卡有独立的显存还行,有些集成的显卡居然和内存来争夺地盘,内存还不得不划出来一块儿给他,实在是让人无语。

对了,显存中还有一块区域叫做“帧缓冲区”,这是图像传输的一个关键区域,显卡所生成的一帧画面会先被写入帧缓冲区。而一台 72Hz 的显示器每秒能够显示 72 幅画面,也就是说每 1/72 秒(当显示器刷新完一幅画面时),显卡就需要把缓冲区的内容通过特定接口发给显示器。

如果接口是数字信号,那就比较简单,直接把显存的数据输出即可。如果接口不幸是模拟的(比如VGA),那显卡还需要完成一个额外的步骤:数模转换。

我比较好奇,问道:“为什么要做数模转换?”

显卡说:“模拟信号你懂不懂?不懂啊,举个例子,假设显示器所要求的电压的变化是[100V ,200V],你不可能从100V一下子跳到200V吧,肯定是连续变化的,这就是模拟的信号。我们整天面对的都是0和1,都是数字信号。肯定需要做数字<->模拟转换才行啊。”

显卡一边说,一边把我这段程序转化成了帧缓冲区的数据,然后进行数模转换,向显示器发送了出去。

最后,显示器把我展示给了程序员

用户评论