Linux 内核非常庞大,超过 600 万行的代码。所以我们介绍 Linux 内核,也不可能每一行代码去分析,但是我会提炼其中的重点出来。我们不管学习什么,最关键的是学会其中的思想。
虽然 Linux 内核非常庞大,但是横向对比计算机的发展史, Linux 的历史非常的简短,计算机出现的时候,还没有什么花里胡哨的包装,都是光着身子跑,用技术的语言说就是它只能执行一个任务,执行一个进程,也可以叫“裸跑”,或者称之为是批处理执行任务。学习计算机的同学应该很快明白什么是裸机程序,裸机程序只可以让一个进程使用硬件资源,一次只能完成一个任务,这无形上是对硬件资源的浪费。一开始硬件性能弱的时候这样也没什么问题,但是随着硬件不断地迭代发展,批处理对于硬件的浪费的问题就越来越凸显出来。
可以拿我们的手机来比喻,裸机的话,我们玩王者荣耀的时候,有人打电话进来的话,王者荣耀是要被终止的,后来就有了操作系统,操作系统可以保证多任务执行,同样的 CPU 芯片,有了操作系统,我可以开微信,QQ ,还同时做其他很多事情。
到了1970年,PDP-7 可以运行 GE-635程序了,但是却只能支持两个用户,当时 Brian Kernighan 就开玩笑的称他们的系统是 “UNiplexed Information and Computing Service”,这个缩写就是 UNICS,再后来,大家就取谐音,称为 UNIX。所以1970 年可以称为 UNIX元年。
Dennis Ritchie 和 Ken Thompson
2.13 BSD操作系统
kein toms 1976年去加州大学伯克利分校任教,伯克利软件套件(英语:Berkeley Software Distribution,缩写为 BSD ),也被称为伯克利UNIX(Berkeley UNIX),是一个操作系统的名称。衍生于UNIX(类UNIX)。19世纪70年代由伯克利加州大学的学生比尔·乔伊(Bill Joy)研发出来,也被用来代表其衍生出的各种套件。
BSD 常被当作工作站级别的 UNIX 系统,这得归功于 BSD 用户许可证非常地宽松,许多 1980 年代成立的计算机公司,不少都从 BSD 中获益。比较著名的例子如 DEC 的 Ultrix,以及 Sun 公司的 SunOS等等。1990 年代,BSD 很大程度上被 System V 4.x 版以及 OSF/1 系统所取代,但其开源版本被采用,促进了因特网的开发。BSD 比 Linux 早出现,稳定性和安全性都在 Linux 之上,甚至 Windows 和 OS X 都有来自 BSD 的代码,但是现在一提到开源自由软件,人们首先想到的是Linux,而不是资格更老的BSD。
UNIX创始人之一的 Ken Thompson 曾如此评价 Linux:”Linux不过是反微软思潮下的产物。“这个家伙觉得 Linux 不可能有多大的成就,非常自信的觉得 BSD 在任何时候都可以击败 Linux,甚至觉得Linux 是一个低端和下流的操作系统内核。
因为 UNIX 操作系统的商业化,原来的 UNXI 系统已经不能再被随意的使用,很多人都希望能有一款免费好用的操作系统,因为并不是每个人都很有钱,也不是每个人都有能力自己去写操作系统,此时,理查·斯托曼在麻省理工学院人工智能实验室发起 GNU 计划,希望发展出一套完整的开放源代码操作系统来取代 UNIX,计划中的操作系统,名为 GNU(GNU is Not Unix)。
1983年9月27日,理查·斯托曼在 net.UNIX-wizards 和 net.usoft 新闻组中公布这项计划。在此项计划中,开发出了很多我们现在熟悉的常用的工具,包括GNU编译器套装(GCC)、GNU的C库(glibc)、以及 GNU 核心工具组(coreutils)。另外也是 GNU 除错器(GDB)、GNU 二进制实用程序(binutils)的 GNU Cash shell中 和 GNOME 桌面环境,(但是软件还是基于Unix内核的)。
Linux 的第一个版本在 1991 年 9 月被大学 FTP server 管理员 Ari Lemmke 发布在 Internet上。最初 Torvalds 称这个内核的名称为 「Freax」,意思是自由「free」和奇异「freak」的结合字,并且附上「X」这个常用的字母,以配合所谓的类 UNIX 的系统。但是 FTP 服务器管理员嫌原来的命名「Freax」的名称不好听,把内核的称呼改成Linux。当时仅有 10000 行代码,仍必须运行于Minix操作系统之上,而且必须使用硬盘开机,随后在10月份第二个版本(0.02版)发布,与此同时这位芬兰赫尔辛基的大学生在 comp.os.minix 上发布了这样一则公告
Hello everybody out there using minix- I’m doing a (free) operation system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones.
1994 年 3 月,Linux1.0 版正式发布。为了让 Linux 可以在商业上使用,林纳斯·托瓦兹决定更改他原来的协议(这个协议会限制商业使用),以 GNU GPL 协议来代替。之后许多开发者致力融合 GNU 元素到 Linux 中,做出一个有完整功能的、自由的操作系统。
一些个人和企业开发的第三方的非 GNU 组件也在提供对 Linux 内核的支持,这些第三方组件包括大量的作品,有内核模块和用户应用程序和库等内容。
Linux 社区或企业都会推出一些重要的 Linux发行版,包括 Linux内核、GNU组件、非GNU组件,以及其他形式的的软件包管理系统软件。
Linux 内核现在覆盖的领域非常广,手机、平板、路由器等等,就大家非常喜欢的苹果操作系统,底层内核也是有 Linux的影子,Linux 的普及毋庸置疑,学习 Linux 应该作为每个技术人员的标配。学习完 Linux 内核你会对整个计算机体系有一个更深刻的认知,作为一个开发者,不管你从事的是驱动开发,应用开发,还是后台开发,你都需要理解计算机操作系统和内核的运行机制,才可能更好的编写你的代码,出现更少的错误。作为开发人员,不应该只局限在自己的小领域,因为你设计的模块,看起来非常小,但是你不了解进程的调用机制,不知道进程会阻塞,就绪,执行几个状态,你怎么可能编写好一个低容错率的代码呢?