- 论坛徽章:
- 13
|
写这篇帖,并不是因为我很腻害,其实我学习内核也没多长时间,只是自己在学习前,畏却了很久,迟迟不敢迈出第一步,希望以下的内容,可以让你体会到计算机也就那么回事,克服心理障碍。
1. 硬件“活”了
计算机没有生命也能跟人类“交流”,哪来的思想?
交流=请求+响应。虽然计算机不可能主动请求,只会被动的响应(哪怕是“电子宠物”主动卖萌,也是程序员安排的,只是这种响应表现的像请求;或者是闹铃,也是响应了程序员设定的定时程序),即使“人工智能”、“大数据分析”这些东西,也推不倒这个道理,计算机毕竟没有生命,不像人类头上天生有就个电路,计算机的思想,最终输入的是人类思想(题外话:那人类是怎么出现的,大脑又是谁设计的?如果说大自然的风把一些电子元件吹在了一起,并且一个雷电将操作系统闪进了CPU,从而形成一个电脑,那大自然要花多少年才能造出人类,更何况人类这么复杂,还是有机物组成的,也不可能靠打雷上电)。
总之,计算机以电为驱动力,可以通过各种电路的配合,响应人类的操作,而且还可以在响应中表现请求,或者把响应再次交给请求,所以计算机“活”了,也没啥奇怪的。
2. 软硬件“融合”
人们是如何将思想这么抽象的东西“灌进”计算机的?
如果你对“打开开关,灯亮了”已习以为常。那么,通过程序,向计算机表达思想,同样也没什么好神秘的,因为程序本质上也是通过开关控制电脑,只是多了一些而已。英文26个字母可以组合无数的单词,而单词本质上是事先约定了含义的符号,从而可以写出无数篇文章。同理,开关的状态相当于2个“字母”(0、1),也可以组合无数的“单词”(二进制指令),从而可以写出无数的程序,最早的程序员就是通过大量的开关控制计算机。不要总认为计算机可以执行程序,就等同于计算机可以理解程序,计算机只是一些电路的组合,这些电路只是人类另一种“文字”的载体,就像将诗写在书上,不代表书能读得懂诗一样。
针对开关编程的缺陷,人类所做的努力:
① 每次表达同样的思想,必须重新按一遍大量的开关,所以人们后来发明了穿孔纸带(因为通过光电转换器,它同样可以起到开关的作用),再后来发明了磁盘。
② 开关只能表示2个“字母”,生成的单词难懂,又不方便书写,所以后来有了高级语言。
3. 先有鸡,先有蛋
如今我们写完程序,总是要经过编译,才能执行,那么世界上第一个编译器是通过什么编译出来的?
(脚本虽然不需要编译,但依赖一个解释程序,解释程序同样需要编译)
为了解决这个“先有鸡,先有蛋”的问题,只能猜测世界上第一个编译器是直接用二进制写的。在我们印象中,编译器太复杂了,用爱因斯坦的大脑,也不可能直接用二进制实现出来。所以可以再次猜测,这是一个滚雪球的过程,先用二进制写个简单的编译器,再用这个编译器编译更加强大的编译器,经过一代一代的发展,才形成了如今这么复杂的编译器。我没有验证这个猜测,但至少是可实现的,达到自我安慰的效果即可。
如今我们写程序不再是按开关,而是敲字,在还不能用字写程序的时候,程序员是如何将字“写进”显示器的?
其实只要我们知道存在开关编程这件事,就不存在“先有鸡,先有蛋”问题了,想必是程序员先辈们通过智慧,设计出了一种电路,可以控制“电子枪”指哪打哪,并设计了128个二进制位的矩阵(ascii表),只看这些矩阵中的0或1,就正好是一个工整的文字,然后通过按开关将这些矩阵保存在了电脑里,从此电脑中就可以使用文字了,再加上后来出现的编译器,就可以通过高级语言编写更多的字库制作程序了。
所以说,先有了最早的一批计算机科学家,才有如今大量的程序猿、攻城狮。
总结:
上面写的内容,其实和内核一点关系没有,只是当初我是冲着这些问题学习内核的,并且也被这些问题阻碍过。
另外一方面,上面的内容如果你真的都觉得理所当然了,相信你自然也不会觉得内核神秘了。内核的目的就是创造更幸福的编译环境,把硬件提供给的“文字”先用了一遍,站在一个管理者的全局视野,书写了一套方案,向用户程序提供基础环境和接口服务,以及协调保护用户进程。
相应的,学习内核向下一定要注意软件和硬件的边界,不要过于追究硬件的实现原理,向上要多考虑如何更好的为上层带来优惠。
目前的学习感受:
① 对用户空间和内核空间的理解最重要,最好最先搞懂;
② 完全理解进程调度,需要对其它几个基本模块理解比较到位才行,如果一时半会看不懂,可以先学习别的;
③ 其它的模块相对独立。
|
|