Linux引论 系列的第 1 篇 (本系列共2篇)

这个是我写的第一个系列。我不知道这个系列有多长,但是基本的会有三篇,这三篇,我会很有逻辑地去写。三篇之后,我想大家对Linux也有了个大概的了解,我可能就会想到什么就写什么。如果真的想成为一个Linux Hacker的话,持之以恒自学是绝对必不可少的(即使是在大学,Linux的课程还是很少的)。还有一点,我这个人经常跳票:p……

什么是Linux?

不知道大家当初买电脑的动机是什么(我估计大都是玩游戏:),,但是口口声声说是为了学习,我觉得玩游戏并不是什么糟糕的理由,待会你就知道原因了),但是我敢打包票,店老板给你装的操作系统绝对是微软的Windows!接着大家在Windows下面,每天点点鼠标,玩上了仙剑98柔情版(估计也是很多90后的爱情启蒙之作),飙起了极品飞车,玩着FIFA不爽就去玩实况模拟器版本……后来家里面拉了猫,连上了互联网,玩起了传奇,在形形色色的论坛里灌水。尝到电脑带来的甜头的人们似乎也可以毫不含糊地称盖茨伟大的导师伟大的舵手……对于那些不泡BBS就蛋疼的人,可能隐隐约约记得BBS上的技术高人总是在鄙视Windows,记性好的还可能记得这些高人们经常以自己使用一个叫做Linux的操作系统而为荣。

“说来说去,Linux就是一个操作系统嘛。”对,它就是一个操作系统,但是……就没有但是了……

“操作系统(英語:Operating System,简称OS)是一管理電腦硬體(Computer hardware)與電腦軟體(Computer software)資源的程式,同时也是计算机系统的核心与基石。”说实话,维基百科上面这段话对于很多人来说是没提供多少有效信息……可能大家对资源这个词有点拿捏不准。资源毕竟是一个指代很宽泛的一个词。通俗的说,硬件就是可以概括为这样的一堆小部件:
有些童鞋可能听过诸如“现代计算机的结构体系是冯诺依曼式的”之类的话,冯诺依曼式计算机指的就是那种输入/输出(Input/Output)+储存器(Memory)+处理器(PU)的结构的计算机(以后我们不再用电脑这个词,因为计算机才是我们现在探讨的这玩意的本身面目)。其实每一个组成计算机的小部件(比如CPU、内存、硬盘)都是这种结构。当然这个图是忽略了电路(现代计算机是电子计算机,以前还有手摇的计算机)的具体细节的(那是一个相当复杂的问题阿)。图中的箭头在实际中是一堆电路,Memory和PU本质也是一堆更复杂电路(应该是这个星球上最难设计的电路了)。那么硬件资源指的就是(电路资源……这么理解也可以吧……你一定是电气的)这些小部件的集合。值得注意的是CPU,这是计算机最核心的部分,也算是计算机王国的国王,这个王国是个标准的中央集权国家。还有主存,也就是我们平常说的内存,是这个王国里面的宰相,不过这个宰相似乎不会谋划一些重要的计划,只知道拿支笔拼命记下国王的话。
(每个Item表示一个I/O设备,事实上有些I/O设备与CPU的交流是单向的,这个图把所有I/O设备与CPU的交流都画成了双向的)
软件资源,相比硬件更难说明一点,简单地说,就是一行又一行的代码(命令)。硬件软件关系就是
即软件是要在硬件里面运行的。更具体一点,可以把软件展开
代码用比较接近自然语言的计算机语言写成,然后交给编译器,编译器把这些代码转换为计算机硬件可以识别的机器码,也就是一堆又一堆的二进制序列。硬件可以很轻松地把这些二进制序列转换为电信号,在电路里传送,经过一系列神奇的传输后,最后又输出一组电信号,这组电信号再经转换,就变为了我们(我们指代普通人,因为有些HACKER,输出什么他都知道这是神马东西)可以理解的信息。编译器器也是一个软件,那么编译器的机器码又是怎么得到的呢?编译器的机器码也是通过上面的过程得到的,我们称编译编译器1的编译器2是比编译器1更低级的。当然,这不可能是个无穷递降过程,到最后,会有一个编译器是用机器码写的(可能不是全部都用机器码,关键部分用了机器码),这样就可以直接交给计算机硬件处理。似乎有了这些软件和硬件,计算机就可以运行得很好了。但是现在我们来看看这么一个图
就是当我们遇到多个程序需要一起运行的情况时,怎么办?我们现在的大多计算机都没有并行运算的功能,在某个时刻,有且只有一条命令在CPU里面执行(虽然现在有了流水线技术,但因为硬件上的瓶颈,这仍算不上真正的并行计算)。目前的做法是利用CPU的快速运算,让计算机用户感觉到这几个程序是在“同时”运行的。这在以前CPU技术还不是很发达的年代是不可能实现的。举个例子,一个老板分别让两个工人用两台不同的机器做3个工件。一段时间后,老板去查看任务进度 情况,看到第一个工人做了1个工件,第二个工人做了3个工件。在老版的印象中,两台机器走完一个制作流程的时间是一样的,所以他就认为第二个工人使用的机器能同时做三个工件。而事实上,两个人的机器都是每道流程只能做1个工件,而第二个工人的机器速度较快,在第一个工人的机器一个流程的时间内,他的机器走完了三个流程(稍后我还会举一个例子来说明如何加强老板这种错觉)。
在冯诺依曼计算体系中,任何一个将要被运行的程序都必须先加载到内存,上图展示的是(中间那条箭头在硬件上就是前端总线(bus)),内存中储存有三道程序的例子。首先需要指出的是,在计算机的世界中,我们追求的是效率最大化,计算机这个工具本身就是为了提高效率而生的。然而从图上看,貌似把三道程序同时储存在内存中运行和一道接着一道程序装进内存再运行这两种情况效率是一样的。注意,我们得出这个结论的前提是,我们假设程序是一直处于运行状态 (running)。实际情况是程序还可能处于其它状态,比如在等待(waiting)把内存中的数据写到磁盘里面,那么在这段时间里边,CPU就可以去执行另一道程序——这就是运用统筹来提高效率。
现在问题来了,当我们把三道程序装进内存,我们如何完成程序之间的切换呢?当某个程序正要处于一个非运行的状态时,它应该把CPU的使用权交给哪个程序才能完成效率最大化呢?想一想,如果我们把实现程序切换和计算最优方案的代码写进每一个程序,那么世界上所有的程序都会有一大段相同的代码,这样的重复就会浪费很多储存器资源。解决这个问题的方法是,把这些相同的代码抽离出来,写成另一个程序,由这个程序完成其它程序间的切换,计算最优方案,这个程序就是操作系统(Operating System)(台译为作业系统,我认为这个翻译更靠谱)。
这里又有了另一幅图景:
老板有了一台超级机器和一些工人,他听说职业经理人这个东西会很好的管理他的机器和工人,让他的企业利益最大化,于是他把职业经理人请来了。由于只有一台机器,职业经理人给每个工人一定时间做他们的工作,时间到了就换另一个工人。这样老板来检查的时候,发现每个工人的工作都有一定的进度,他就认为这些工人是在这台机器上同时工作的。
把老板看成是我们用户,机器是CPU,经理人是操作系统,工人是程序,就是我们现在使用计算机的实际情况。其中职业经理人给拿着一个计时器给工人计时,他的这个计时器CPU里面也有。经理人喊:“停!”。这叫中断。所以经理人的分配工时的机制对应到操作系统方面就称为时钟中断技术。这就是现代操作系统的基本技术了。
操作系统有时也成为操作系统内核(Kernel)。上面说的很多方面只是从一个角度来说,比如操作系统还必须为程序分配内存,调度优先级别不同的程序的运行等等。就像操作系统定义的那样:是一个管理软硬件资源的程序,这是一个范围很大的定义,所以在这里不可能三言两语说完,只是展现一个大致的图景。

Unix、Minix、Linux的诞生

关于KR和Unix,Prof. Andrew S. Tanenbaum和Minix,Linus和Linux的历史,我在此不再赘述,因为网上可以找到很多史料。我把他们写这些操作系统的目的罗列一下:年轻的KR写Unix是为了玩一个太空射击游戏;Tanenbaum写Minix是为了教学需要;Linus写Linux是为了让自己的新机子能访问学校的网络,而且Linux原本不叫Linux,叫怪胎(Freax)。 大家可以从这里得到一点事业上的启发。

为什么要用Linux?

提这个问题的时候,我已经在假设你现在用的是Windows了。Linux总免不了要和Windows比较。现实是这样的:根据今年的数据,全球TOP500的计算机有455台运行的是Linux系统。排名第一的美洲虎使用的也是Linux系统。服务器方面,Linux系统的市场份额是13%。桌面方面,Linux系统的份额是1%左右。可以看到尽管Linux是自由、开源的,但是它在桌面市场可以说是可以忽略不计。大家知道桌面市场是面向大众的,从这点来说,Linux对人民大众是一点亲和力都没有(当然,我们还不得不承认Windows在商业上的成功)。一旦到了科学计算这种高精尖领域,Linux却是大放异彩。从性能上说,Linux运行更稳定,它的内存管理更棒。大家知道Windows经常有蓝屏一说,在Linux下面却有黑屏一说。黑屏是啥,就是没电了,Linux只有在没有电的情况下才不能正常运行。

关于为什么Linux那么没有亲和力,这里有个比方。Windows就是甲壳虫,买了就能上路,厂家还帮你装了空调、音响之类的。Linux只是个V10引擎,这个引擎是制造商白送给你的,还附带设计图,使用手册。但是他没给你车壳,轮胎。这些在另一些商店也有,也是白送的。你要做的就是依照这些图纸,手册,自己动手组装一部高性能跑车(现在情况好多了,有了Ubuntu这个组装商,虽说组装出来的不是布加迪威龙型的,保时捷型的总还说的过去)。DIY向来是那些精力过剩的Geek的最爱,所以他们当然乐此不疲地捣鼓Linux系统。普通大众也当然会对此望而却步,他们需要的无非是能快速地进行文档编辑,舒舒服服地坐在椅子上听千千静听放出来的音乐罢了。再说了,甲壳虫开得好好的,遵守交通规则,不超速驾车,不违规超车,干嘛要去开一部难以驾驭超级跑车。就连Linus自己都说”Wild Linux”(野性的Linux)。说一下题外话,如果大家搜一搜这方面的文章,可能会搜到一个叫王垠(很牛的一个人,曾经捉到过\TeX里面的臭虫)的清华博士生写的《完全用Linux工作》。我同意里面大部分观点,只是不太欣赏文章激烈的措辞。

如果觉得自己对DIY计算机之类的毫无兴趣,对计算机的要求就是能快速上手就行,Windows已经很棒了(毕竟每一个Windows版本是几千高级技术人才的几年工作的结晶)。

但是如果你是个Geek,而且对效率有很高的要求的话,Unix/Linux无疑是不二选择。你可能会问:“那么不易用的东西,效率怎么会高呢?”呵呵,这个问题就留到下一篇解答了。

本文由 Malloc 创作,转载或引用前请联系我们

相关文章:

  1. 每周软件推荐-TeX
  2. 素数有无穷多个的另类证明(一):两两互素的无穷序列
  3. 素数有无穷多个的另类证明(三):被遗忘的证明
  4. 无穷中的二分(一)
  5. 从(0,1]×(0,1]到(0,1]的双射

2010年7月29日 星期四

22条评论

留下您的足迹

2010 f(Program,Poet)=Programet.
Powered by Wordpress. Theme by Pharmacy Drugs and LastLeaf.