1.Linux的概述
Linux是一种自由和开放源码的类UNIX操作系统。该操作系统的内核Linus Torvalds在1991年10月5日首次发布,在加上其他的软件之后,比如系统实用程序、应用程序、shell还有公用函数库等等,就构成了我们的Linux操作系统。严格来说,Linux是单指操作系统的内核,但是如今Linux常用来指基于Linux的完整操作系统,内核则改以Linux内核称之。通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本Ubuntu、Linux Mint还有国产的Deepin等等)、Fedora(及其相关版本Red Hat Enterprise Linux、CentOS)和openSUSE等。Linux发行版包含Linux内核和支撑内核的
实用程序和库,通常还带有大量可以满足各类需求的应用程序。
Linux最初仅仅支持英特尔x86架构的个人电脑。随着Linux的不断发展,当前的Linux已经被移植到更多的计算机硬件平台,远远超出其他任何操作系统。Linux可以运行在服务器和其他大型平台之上,如大型计算机和超级计算机。世界上500个最快的超级计算机90%以上运行Linux发行版或变种,包括最快的前10名超级电脑运行的都是基于Linux内核的操作系统。Linux也广泛应用在嵌入式系统上,如手机、平板电脑、路由器、电视和电子游戏机等。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上,另外苹果公司所使用的Mac OS X和iOS也是基于开源的类UNIX系统Darwin进行开发的。
2.Linux的历史
2.1unix操作系统
因为Linux是类Unix操作系统,所以在继续前进之前,有必要先了解一下Unix的历史:AT&T公司的贝尔实验室在70年代开发了Unix操作系统,它由Ken Thompson、Dennis Ritchie和Douglas McIlroy等人开发(在开发Unix系统的过程当中,为增加Unix系统的可移植性,Ken Thompson和Dennis
Ritchie使用C语言重写了Unix)。Unix操作系统有AT&T System V (目前依然存活的基本上只有Sun公司的Solaris系列)和 Berkeley BSD两个大系列。当今的各种操作系统大多继承自Unix,Unix的历史基本上就是商业计算机的历史。
Unix的体系结构分为3层,从内到外依次是:内核–系统调用–应用层
- 内核负责两个功能:控制计算机硬件资源;为其他程序运行提供环境
- 系统调用就是内核的接口,应用程序可以通过系统调用来使用内核提供的功能。
- Unix操作系统提供了shell来实现和用户之间的,shell是一个命令行解释器,它读取用户输入,然后执行命令。shell拥有很多版本,我们将介绍bash(Bourne-again shell),它位于/bin/bash,Linux和MacOS都可以使用bash。
- 应用程序可以直接使用系统调用来调用内核的功能,但是因为系统调用往往设计得比较繁琐复杂,通常的Linux发行版中还对系统调用进行了一次封装,称为系统库。相对于系统调用而言,系统库的函数设计更加用户友好,所以应用程序通常也会使用系统库来使用内核提供的功能。
2.2POSIX标准和其他标准
在早期,各个发行厂商拿到Unix的内核授权以后,会根据本身硬件和客户需求来设计各自的系统调用和公用函数库,这样就导致了在各个发行版本上开发的程序不能跨越发行版本使用,并且产生大量的重复开发成本。为了减少这种开发成本,提升代码的可移植性,POSIX标准便应运而生。POSIX为各个系统调用和系统库的接口提供规范(IEEE 1003.1),只需要进行少量甚至无需修改,遵守POSIX标准的代码就可以在不同的Unix发行版本的机器上使用。
之前我们在Windows的visual studio上所书写的C语言代码是具有良好的可移植性的,因为之前的所有代码都遵循ISO C标准。符合ISO C标准的C语言代码,可以在各个支持的平台上(包括且不限于Windows、Linux等)运行。
2.3开源运动兴起
1983年,Richard Stallman创立GNU计划,GNU的全名是Gnu’s Not Unix,它的目标就是开发出一个遵循GPL(即遵循GNU开源规范,满足这个规范的产品中,只要使用到GPL开源的代码,就必须将整个产品开源)的类Unix操作系统。在90年代初期,遵循GPL的库函数、编译器、调试工具和文本编辑器都已经开发完成,但是依然没有一个内核开发完成。当时,微内核构造的GNU Hurd正在开发中,但是进度极其缓慢。
2.4Linux诞生
由于Unix操作系统的各种优秀特性,它在市场上占据了庞大的份额。但是Unix操作系统是商业软件,使用它需要交纳昂贵的授权费用,这对个人用户以及科研院校十分不友好。一些类Unix系统,比如Minix,不支持任何类型的非学术领域使用,极大地限制了Unix系统的使用范围1990年,19岁大学生的Linus Torvalds开始在Minix上面学习操作系统相关课程。在1991年他在社区上提出要写出一个全新的开源的内核。1993年,宏内核构造的Linux内核面世,并且Linux内核的源代码遵循GNU的GPL。从此以后,广大的社区开发者便为新生的Linux内核积极贡献自己的力量。
2.4Linux操作系统成功原因
开源是Linux成功的核心原因。在Linus刚刚推出Linux内核的时候,它实际上只有不到1万行代码,实现了一个简单的内核。但是在开源社区(GNU)的推动之下,Linux开始迅速地发展起来,越来越多程序员开始为Linux系统贡献自己的力量另一方面,Linux系统也拥有良好的兼容性。Linux内核兼容POSIX标准,所以之前为其他Unix系统编写的旧程序可以无痛苦地转移到Linux操作系统上。除此以外,Linux操作系统也同时兼容System V和Berkeley BSD两大系列。
2.5Linux发行的版本
通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本Ubuntu、Linux Mint)、Fedora(及其相关版本Red Hat EnterpriseLinux、CentOS)和openSUSE等Linux发行版包含Linux内核和支撑内核的实用程序和系统库,通常还带有大量可以满足各类需求的应用程序。使用最多的是bash shell、GCC编译器、Vim文本编辑器和GDB程序调试器等等
2.6查看系统版本
Linux的内核代码可以在 https://www.kernel.org/上面进行查看
其中mainline代表着由Linus主导的主流开发版本。stable代表了稳定版本,longterm代表长期支持版本,linux-next代表着开发计划。
怎么查看自己操作系统的内核版本?打开shell,输入uname -a就可以查看内核版本。
$uname -a
在Ubuntu发行版中,在shell中输入cat /etc/issue 可以查看发行版的版本,版本信息当中的LTS字样是说明这个版本是长期支持版本的意思。
$cat /etc/issue
通常我们在机器上面应当部署稳定版本。当最新版本的内核的版本发布以后,开发人员也会对稳定版本发布补丁,让稳定版本也能使用最新的功能或者是修补一些安全漏洞。现有的机器,例如集群,就不需要消耗大量的时间和人力来重新安装系统,只需要安装上补丁就可以了。除了稳定版以外,在kernel.org上面还会提供开发版,上面会说明本期的开发计划和将要开发的功能。
参考资料
Linux内核的功能主要涉及这样几个方面:进程和进程调度、内存管理、文件系统管理和网络。硬件设备在使用的时候也会加载到内核里面。
可以参考书籍《深入理解LINUX内核》 (作者D.Bovet&M.Cesati,译者 陈莉君等)其他Linux参考书籍《Unix环境高级编程》《Linux_UNIX系统编程手册(两册)》