Linux Kernel学习001——简介(一)

时间:2024-04-09 21:59:45

严格来说,Linux是一个像Unix内核一样设计的操作系统内核。而今天的UNIX是一个用Open Group拥有的商标。对于自称为UNIX的系统,它需要满足某些条件,通过一致性测试并许可名称。关于哪些操作系统通过了Open Group的认证,可以访问Open Group的官网。链接

Linux Kernel学习001——简介(一)
Apple

有趣的是,Mac OS X自10.5到最新的10.14(除了10.7)外,都通过了UNIX 03的认证。

虽然Linux类似于UNIX系统并提供与UNIX兼容的环境,但它尚未正式认证为UNIX系统。 另一方面,如果它看起来像一只鸭子,像鸭子一样走路,像鸭子一样嘎嘎叫,那么它可能就是一只鸭子。来源于APUE官网

因为Linux和Unix的密切关系,若要了解Linux,我们必须首先认识Unix系统。

1.1 Unix历史

UNIX是一个历史悠久的操作系统,早在MS DOS、Windows出现前就诞生了,到现在已经快有五十年的历史了。

1964年麻省理工学院,通用电气公司和贝尔实验室领导了一个合作项目——开发一个新的名为Multics的多用户、交互式操作系统。Multics旨在向大用户团体提供同时计算和存储的能力。但是,在1969年,贝尔实验室撤出了该项目组,麻省理工学院和通用电气继续开发Multics。贝尔实验室的一些主要开发人员仍在继续研究另一个课题。其中的Ken Thompson用Fortran编写了一个"太空旅行"(Space Travel)程序。与此同时,Thompson、Dennis Ritchie和贝尔实验室的其他人提出了一个新的文件系统原型,为了改善他们的程序设计环境。不久后,Thompson在GE-645计算机上实现了模拟这个文件系统的程序,但是任然无法满足"太空旅行"游戏的需要。因此,Thompson就用一台闲置的PDP-7实现了"太空旅行"游戏。此后,Thompson和Dennis Ritchie为PDP-7开发了一个操作系统环境,在这个系统中实现了之前的文件系统。不久后,该操作系统中又加入了进程子程序、一个简单的命令解释程序(后来演变成Bourne shell, sh)和一组管理文件系统的实用程序,并且实现了对两个用户分时使用的支持。这就是Unix操作系统的第一个用汇编完成的版本,当然当时它的名字不是Unix而是UNICS。在1970年,正式命名为Unix。

1971年,Unix的第一个汇编版本被移植到PDP-11中。1972年发布了Unix的第二版,该版本加入了用B语言写的管道和内核。由于B语言是一种解释型语言,因此受到了性能不高的困扰。之后,Ritchie将B语言改进成一门新的语言即C语言。1973年,第三版的Unix发布,它包含了C语言的编译器cc。同年,Unix被用C语言重写,与1973年11月发布了第四版。

1973年,Thompson和Dennis Ritchie共同撰写了第一篇关于Unix的论文"The UNIX Time Sharing System",发表在《ACM Symposium on Operating System》上,并在1974年1月发表在了《Communication of ACM》上。这篇论文第一次让外界看到了Unix,并且世界各地的学者开始对这个新系统感兴趣,并导致了对Unix源代码的需求。之后不久,Unix发布了第五版,该版本在一个简单的许可协议下可以*获取,第一个获得许可的是加州大学伯克利分校。

1975年贝尔实验室第一次通过Western Electric Company对外发布了Unix第六版,也称为V6。

1979年1月,Unix v7发布,这是第一个真正可移植的Unix系统。该版本包含了一个C语言编译器pcc(即Portable C Compiler),一个称为"Bourne Shell"的命令解释器以及其他许多特性。

加州大学伯克利分校获得Unix许可后,很多研究生和教授都对这个系统产生了很大的兴趣,其中包括Bill Joy和Chuck Holey。他们为这个Unix开发了一些实用程序,包括Pascal编译器和ed编辑器(后来演变为vi,vi演变为vim)。Bill Toy将这些新增的内容和一些广泛发布的软件集中起来,打成一个软件包,形成了"Berkeley Software Distribution"(BSD),并且在1978年以每个许可协议50美元的价格发售。之后不久,又退出了2BSD。

前两个BSD只包含了应用和实用程序,并没有修改也没有包含Unix操作系统,第一个包含操作系统的版本是1979年发布的2BSD。3BSD在内核加入了页式请求和虚拟内存等新特性。3BSD的虚拟内存功能引起了国防高级研究项目部(DARPA)的注意,他们为BSD系统的开发提供了资金。DARPA项目的主要目的之一是集成TCP/IP网络协议包。80年代产生了后来统称为4BSD的几个版本:4.0BSD(1980)、4.1BSD(1981)、4.2BSD(1983)、4.3BSD(1986)以及4.4BSD(1993)。

伯克利Unix的研究工作是由计算机科学研究组(CSRG,Computer Science Research Group)进行的。4.4BSD之后,由于Unix系统变得越来越大,以至于很难由一个小组来维护和发展,同时也由于经费问题,CSRG决定不再进行Unix的开发。

伯克利小组对Unix的发展做出了许多重要的共享。包括但不限于:虚拟内存、TCP/IP协议、快速文件系统、可靠信号和套接字等功能。

另一方面,贝尔实验室发布了综合各种变体的Unix System Ⅲ(1982)、System Ⅴ(1983)、System V R2(1984)、System V R3(1987)、System V R4(1989)。

在1982年,AT&T(贝尔实验室的母公司)与美国司法部的反垄断官司告结。作为结果之一,贝尔实验室独立出来并重新命名为AT&T实验室,同时AT&T被允许进入计算机商务。为此,AT&T提前宣布了Unix System V,并且宣布对Syste V以及将来的版本提供技术支持,且System V与未来的版本向上兼容。

System V引入了许多新的特征,比如:进程间通信(共享存储、信号量和消息队列等)、远程文件共享、共享库等。

Unix的广泛使用引起了不少计算机公司的兴趣。在1977年,AT&T公司向计算机厂商提供了制造许可证,这使得许多OEM厂商可以重写Unix的部分内核和外部结构,他们基于Unix推出了自己的商业版本。

版本演变历史可以参考下图:

Linux Kernel学习001——简介(一)
Unix_history-simple.png

1.2 Minix操作系统

Minix系统是由Andrew S. Tanenbaum开发的。Tanenbaum在荷兰一所大学的数学与计算机科学系任教,他与1987年编写了Minix,主要用于帮助学生学习操作系统原理。到1991年时版本是1.5,目前(2018)年最新版达到了3.3.0。官网:http://www.minix3.org/

作为一个操作系统,Minix也许算不上优秀,但是它同时提供了C语言和汇编语言编写的系统源代码。

1.3 GNU计划

GNU计划和*软件基金会(the Free Software Foundation, FSF)是由Richard M. Stallman与1984年一手船板的,旨在开发一个类似Unix并且是*软件的完整操作系统:GNU系统(GNU是GNU's Not Unix的递归缩写)。到20世纪90年代初,GNU项目已经开发出许多高质量的*软件,其中包括有名的Emacs文本编辑器、Bash、GCC、GDB等。这些软件为Linux操作系统的开发提供了一个合适的环境。也是Linux能够诞生的基础之一。

现在,各种以Linux为内核的GNU操作系统被广泛使用。虽然这些系统通常被称作Linux,但是Stallman认为,严格地说,它们应该叫做GNU/Linux。

1.4 POSIX标准

Unix变体的激增产生了许多兼容性问题,特别是各种商业Unix变体的出现使得情况变得更加复杂。System V和BSD在许多方面不同,比如:文件系统、网络机制和虚拟内存结构。这些不同中有一部分限制在内核设计和实现上,而另一部分出现在程序设计的接口层,这导致没有一个复杂的应用程序能够不加修改地同时运行与System V和BSD系统。

这种情形导致了对Unix标准的需求,1986年美国电子和电气工程协会IEEE制定了一个委员为正式形成试用标准POSIX 1003.1,这是关于可移植操作系统计算机环境标准的第一次尝试。因为AT&T保留了Unix名字的所有权,因此该标准使用POSIX(Portable Operating System Interface based on UNIX)作为其名称。自此以后,POSIX委员会提议了该标准的若干规范,其目的是产生一个关于可移植操作系统环境的ISO标准。目前最新的标准是POSIX 1003.1-2017。

POSIX的出现使得用户能够遵循由正式标准化组织承认的标准。此外,POSIX允许转换POSIX的调用至目标操作系统的调用,如DEC-Open VMS和微软的Windows NT。反过来说,任何操作系统都可以在源代码级用POSIX调用重写,因而用户可以继续使用他们喜欢的操作系统(不必是UNIX)。

现代Unix系统实现都采纳了POSIX1003.1,因而提供了源代码级的可移植性。

1.5 Linux

现在可以来讲Linux了。

Linux出现于1991年,作者是芬兰赫尔辛基大学的一名大二学生Linus Torvalds。Linus喜欢折腾计算机,测试计算机的性能和极限,但是缺乏一个专业级的操作系统。

在同一年间,GNU疾患已经开发出了许多工具软件。其中已经哟欧乐GNU C编译器,但是还没有开发出免费的GNU操作系统。而即使是教学用的Minix操作系统也有版本,需要购买才能获取。虽然GNU的内核HURD正在开发当中,当时在当时看来还不能在几年内完成。

此时Linus购买了一台386兼容电脑和一套Minix系统软件,之后他通过修改终端仿真程序和硬件驱动程序,开始编制自己的操作系统。在1991年10月5日,Linus在comp.os.minix新闻组上发布消息,正式向外宣布了Linux内核系统的诞生。最初发布的Linux很快赢得了众多用户,并且吸引了很多开发者、黑客对其代码进行修改和完善。由于其许可证条款,0.12版本之后使用用 GNU 通用公共许可证第二版。该协议允许任何人对软件进行修改或发行,包括商业行为,只要其遵守该协议,所有基于Linux的软件也必须以该协议的形式发表,并提供源代码。

目前我们可以访问Linux内核的官网https://www.kernel.org/,获取内核各个版本的内核源码,阅读内核文档等。截止到2019年初,最新的稳定版内核为4.20。

Linux目前被广泛移植到Alpha、arc、arm、ia64、mips、powerpc、sparc、x86-64等许多体系结构上。Linux是l类Unix(Unix-like)系统,但是它不是Unix系统(未经过Open Group的认证测试)。Linux用途广泛,包含的东西也非常多。Linux系统的基础是内核、C库(glibc)、工具集和系统的基本工具,如登录程序和Shell等。Linux系统也支持现代的X Window系统,这样就可以使用完整的图形用户桌面程序。在之后的博客中,一般用Linux一词指Linux内核。