20多年来,Lmux一直引领着软件开源运动。在全球500强超级计算机中,有497台运行Limux,全球73%以上的智能手机以及嵌入式设备都在运行衍生自Limax的操作系统。网络中的服务器、路由器、交换机、防火墙等设备,它们大部分采用Linux系统。

▶1.类UNIX系统的发展

20世纪60年代中期,国际上开始研制一些大型通用操作系统。这些操作系统试图达到功能齐全,可适应各种应用范围和操作方式的目标。但是,这些操作系统过于复杂和庞大,不仅付出了巨大的研发代价,而且在解决可靠性、可维护性等方面遇到了很大困难。
1969年,AT&.T(贝尔)公司开发了UNIX操作系统,UNIX是一个通用的多用户分时交互式操作系统。早期UNIX版本完全免费,而且可以轻易获得并随意修改,所以很快得到了广泛的应用和不断完善,UNIX对现代操作系统的设计和应用有着重大影响。UNIX的设计原则是:简洁至上;提供机制而非策略。
UNIX包含了部分商业UNIX操作系统,如UNIX Ware、Mac OS X、AIX、HP-UX、Solaris等;以及众多的开源UNIX系统,如BSD(伯克利大学软件包)、Linux(读[li-n-ks,里那克斯])、Android(安卓)等。由于UNIX是注册商标,因此,人们将其他从UNIX发展而来的操作系统称为类UNIX(Unix-like)。

▶2.Linux系统的基本特征

1991年,芬兰学生林纳斯·托瓦兹(Linus Torvalds)根据Minix(用于教学的小型操作系统)编写了Linux系统内核。Linux系统包含了Linux内核和桌面图形环境,Linux是遵循GNU(开源软件项目)和GPL(通用公共许可协议)规范的操作系统。
一个典型的Linux发行版包括:Linux内核、GNU程序库和工具、命令行shell、图形窗口X-Window系统、图形桌面环境(如KDE或GNOME),并包含办公套件、编译器、文本编辑器,以及各种应用软件。Linux的发行版本大体可以分为两类:一类是商业公司维护的发行版本,以著名的Red Hat Linux(红帽子)为代表;另外一类是网络社区组织维护的发行版本,如Ubuntu、CentOS、Debian、Linux Mint、Fedora等。
Linux操作系统最流行的桌面图形环境有KDE(K桌面环境)和GNOME(GNU网络对象模型环境)。桌面图形环境由大量的各类工具软件和应用程序组成,它为Linux系统提供了一个更加完善的用户界面。
Linux可安装在各种计算机设备中,如手机、平板计算机、路由器、防火墙、游戏机、台式计算机等。Linux由于具有完备的网络功能,较好的安全性和稳定性,而且是开源免费软件,因此广泛应用于网络服务器和大型计算机系统。

▶3.Linux系统的基本结构

Linux的基本设计思想有两点:一是一切都是文件;二是每个软件都有确定的用途。第一条详细来讲就是系统中所有的事物都可以归结为一个文件,包括命令、硬件设备、软件、操作系统、进程等,对操作系统内核而言,它们都被视为拥有各自特性的文件。

2016年发布的Linux4.9版包含了56233个文件,由22345566行代码组成(不包含X-Window),其中2230万行代码为非核心代码,三分之二的代码由驱动程序组成。Linux2,6.27版本内核文件源代码为640万行。

▶4.Linux系统内核层

Linux系统内核层由驱动程序层、内核(kernel)、系统调用接口(SCI)层等组成。

1)驱动程序层

每一种硬件设备都有相应的设备驱动程序。驱动程序运行在高特权级环境中,与硬件设备相关的具体操作细节由设备驱动程序完成,正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。

2)内核

Linux采用单内核,多模块设计。Linux汲取了微内核设计思想,具备模块化设计;内核调度机制支持实时抢占模式;支持内核线程以及动态装载内核模块的能力;所有模块全部运行在内核模式,直接调用函数,无须消息传递;支持对称多处理器(SMP)机制等功能。Linux内核由内存管理、进程管理、文件系统和网络接口等部分组成。

3)系统调用接口层

系统调用就像是函数,可以在应用程序中直接调用。Linux有200多个系统调用。系统调用给应用程序提供了一个内核功能接口,隐藏了内核的复杂结构。一个操作可以看作是系统调用的结果。

▶5.Linux系统用户层

1)shell

shell(壳)是一个命令解释器。没有运行用户图形界面时,shell是用户的操作界面。用户运行应用程序时,需要在shell中输入操作命令。shell可以执行符合shell语法的脚本文件,shell脚本可以执行系统调用,也可以执行各种应用程序,这些特性让shell脚本可以实现非常强大的功能。shell有很多种,最常见的是bash,另外还有sh、csh、tcsh、ksh等。

2)库函数

由于系统调用使用起来很麻烦,Linux定义了一些库函数将系统调用组合成某些常用操作,以方便用户编程。例如,分配内存操作可以定义成一个库函数(C语言)。使用库函数对计算机来说并没有效率上的优势,但可以将程序员从程序细节中解救出来。当然,程序员也完全可以不使用库函数,而直接调用系统函数(SCI)。

3)X窗口系统

X-Window system是麻省理工学院(MIT)研发的类UNIX系统下的窗口系统。通常使用的X-Window是XFree86 Project公司研发的XFree86。X-Window的界面类似于微软公司的Windows和苹果公司的Mac OS X,但是它们在控制机制上截然不同。例如,X-Window提供的基本窗口管理器可能只是个框架(如twm),也可能提供了全套的桌面环境功能(如KDE)。绝大多数用户在使用X-Window时,多是使用已经高度集成化的桌面环境,桌面环境不仅有窗口管理器,还具有各种应用程序,以及协调一致的界面。目前最流行的桌面环境是GNOME和KDE,两者已普遍应用于Linux操作系统。

4)应用程序层

Linux应用程序可以通过以下方法运行:一是直接调用系统调用接口函数;二是调用库函数;三是运行shell脚本;四是运行X-Window窗口系统。
由以上讨论可见,Linux利用内核实现软件与硬件的对话;通过系统调用接口(SCI),将上层的应用与下层的核心完全隔离开,为程序员隐藏了底层的复杂性,同时也提高了上层应用程序的可移植性。当升级系统内核时,可以保持系统调用的语句不变,从而让上层应用感受不到下层的改变;库函数利用系统调用接口创造出模块化的功能;而shell则提供了一个用户界面,让我们可以利用shell的语法编写脚本,以整合程序功能。

01-29 16:54