Linux培训
达内IT学院
400-996-5531
在1991年9月17日,林纳斯把这个操作系统发布到FTP上,0.01版本的Linux终于出生了。在四个月之前,林纳斯发帖寻找POSIX标准的那天,这个FTP就已经被阿里·克莱姆设置好了,这四个多月,这个孤独的FTP文件夹,被命名为Linux,虽然林纳斯起初想把这个操作系统起名为Freax,这个英文单词是“怪胎”的意思,但是阿里·克莱姆并不喜欢这个名字,就使用了Linux这个名字。
在很多年以后,林纳斯在接受采访的时候说:我是个自大狂,我用我的名字来命名我做的软件,第一个是linux,第二个是git,git这个单词在英语中是饭桶的意思。
在自传里,林纳斯说,0.01版的linux大概只有1万行代码,如果用小一点的字体,肯定用不了100页纸,要知道,现在已经快2000万行代码了,打印出来,一辆金杯车装不下。
在他的自传里,林纳斯不无谦虚的说,那时候的linux只能运行shell程序而已。
这句话非常的谦虚,在我看来,能运行shell程序的,就已经算是操作系统了。在这本自传中,我们可以看出,林纳斯使用的是一个叫Bash的Shell。Bash到目前为止,是大多数Linux系统以及Mac系统默认的Shell,这个开源软件是在1987年由布莱恩·福克斯创造的。
当我们在使用Unix的时候,如果钻牛角尖的话,我们其实并不是在使用操作系统内核本身,而是使用一个叫shell的程序。这个叫shell的程序,是一个命令解释程序,由他再和系统内核进行交互。
换句话来说,shell相当于内核的秘书,我们只和这个秘书打交道,然后这个秘书再和操作系统的内核打交道。这个shell也不是什么奇特的东西,就是一个普通的秘书,所以,除了林纳斯选的这个bash以外,还有非常多的秘书可供选择,比如ksh,csh,tcsh等等,其实用会一个就可以了,我个人选择的是zsh。
这篇公众号文章主要分析自传中的这一句话,那时候的linux只能运行shell程序而已。为什么只要能运行了shell程序,林纳斯就把这个终端仿真器当操作系统发布了呢?因为所有的东西,包括操作系统,都有一个最核心的功能,这个最核心的功能,是不能丢的。只要把这个最核心的东西丢了,这个东西就散架了。
就像一个杯子,最核心的功能是喝水,杯子的花纹漂不漂亮,并不影响核心的功能,但是如果一个杯子不能喝水,这就不能叫杯子。
再比如朝鲜的政府,最核心的功能是为了让朝鲜2500万人吃饱饭,幸福的过一辈子,生活的有尊严,不能一会儿搞个炮决,一会儿搞个犬决,把那2500来万人的大脑洗的白白的。
对个人电脑的操作系统来说,最核心的功能是,通过一个界面,管理并且使用硬件就行了。至于用户界面丑不丑,是不是容易崩溃,那都是其次的。即使这两者都是,也算一个界面很丑的,很容易崩溃的操作系统。0.01版的linux就满足操作系统的核心功能,能管理并且使用硬件,使用的界面是shell,可能暂时丑点儿,也不稳定,但是已经算操作系统了,以前那个算终端模拟器。
因为在Unix系统中,shell程序是所有程序之母,只有先运行了shell,你才能运行其它的二进制程序。为什么这么说呢?为什么说shell是所有程序之母呢,其它的程序就是shell的孩子呢?shell的原理,简单来说就是:如果你要运行一个命令,shell就先生成一个子进程,让这个子进程去执行这个命令。
在Linux操作系统中,所有的进程都有一个共同的祖先,这个进程叫init进程。为啥会这样呢?我们可以从林纳斯发的帖子里找出原因,在发布0.01版的Linux的时候,他的介绍里这么说,因为我的操作系统和Minix有点儿雷同。
通过这句话,我们可以看出,其实Linux最初就是模仿Minix的,在Minix这个操作系统中,也有一个Init进程,作为所有其它进程的祖先。但是如果一个系统中只有init进程,也没什么卵用,因为如果操作系统中,只有init进程而没有其它进程,尤其是没有shell进程,这个操作系统还是一点用处都没有。所以,做一个操作系统,最重要的就是把shell给启动起来,也这正因为如此,林纳斯在他的自传里,用了大量的篇幅说shell的事情,他兴奋的说“一旦shell程序运行了,就等于进度是从接近0转眼间飞窜到100,因为所有的准备工作都已到位。有时,我会有一种创世的错觉,因为在此之前,还没有什么能真正运行起来。”
既然shell如此重要,我再花一些篇幅来说shell的工作原理。顺便介绍一些进程和内存管理的事情。
不知道大家有没有看过一部叫《致命魔术》的电影,是克里斯托弗·诺兰导演的,这个导演也是我最喜欢的导演之一。里面反派老大的绝活就是复制自己,每次表演魔术的时候,使用特斯拉提供的高科技,把自己复制一份。
在Unix上,每时每刻都在发生着复制自己的过程,这就是Unix上的进程fork操作的精髓,复制一份和自己一摸一样的进程。新的进程里所有的数据,包括变量,环境变量,程序计数器和原来的进程一摸一样,但是,是一个全新的进程。所以,在Linux下,进程都是呈树状结构,根节点肯定是init,其它的进程都有父亲,比如,你在shell下运行了一个命令,这个父亲就是这个shell的进程。
因为我们都是和shell进行交互,所以,这个shell就不停的喜当爹,他就负责创建子进程执行我们的操作。所以,shell程序就被称为进程之母。其实有点混乱,因为我们的教科书一会儿说进程之母,但是又不用母进程,而是用父进程。应该统一一下,要么统一把shell称为进程之父,然后每个进程有个父进程;要么统一把shell称为进程之母,然后每个进程有个母进程。
在这本自传里,林纳斯说,这个0.01版本的Linux,最多支持64个任务。也就是说,最多能有64个任务同时进行。因为进程都有唯一一个不可冲突的整数来标志进程。这个数字叫PID。在目前的Linux上,这个数字从1开始,一直到32768,其中1这个进程肯定是init这个进程。如果用完了这些数字以后,再从2开始,一直到32768,重新用一遍。
希望通过这篇公众号的文章,能让大家了解为什么林纳斯说,只要弄好了shell,就感觉开发的进度一下子从0快进到了100。从某种意义上来说,只要有了shell,就可以称为操作系统了。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved