UNIX/Linux介绍(基础篇)
UNIX和Linux之间的关系是很有意思的话题。在目前主流的服务器端操作系统中,Unix诞生于20世纪60年代末,Windows诞生于20世纪80年代中期,Linux诞生于20世纪90年代初,可以说Unix是操作系统中的“老大哥”,后来的Windows和Linux都参考了UNIX。
现在的Windows系统已经朝着“图形界面”的方向发展了,和UNIX有了巨大的差异,从表面甚至看不出两者的关联。
UNIX的坎坷历史
UINX系统是由肯·汤姆森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)发明。它的部分技术来源可以追溯到从1965年开始的Multics工程计划,该计划是由贝尔实验室、麻省理工学院和通用电气公司联合开发,目标是开发一种交互式、具有多道程序处理能力的分时操作系统,以取代当时广泛的批处理操作系统。
说明:分时系统使一台电脑可以同时为多个用户服务,连接计算器的终端用户交互式发出命令,操作系统采用时间片轮转的方式处理用户的请求并在终端显示结果(操作系统将CPU的时间划分成若干个片段,称为时间片)。操作系统以时间片为单位,轮流为每个终端用户提供服务,每次服务一个时间片。
批处理是指计算机系统对一批作业自动进行处理的技术,它不具有交互性,而是为了提高CPU的利用率而提出的一种操作系统。批处理操作系统分单道批处理系统和多道批处理系统。
在单道批处理系统中,内存中仅有一道作业,它无法充分利用系统中的所有资源,致使系统性能较差。在多道操作批处理系统中,用户提交的作业都存放在外存中,并形成队列,这个队列称为“后备队列”,然后作业调度程序按照作业调度算法将若干作业调入内存,多个作业同时进行,已达到CPU和资源的共享、提高资源的利用率和系统的吞吐量的目的。
可惜,由于Multics工程计划所追求的目标太庞大、太复杂,以至于他的开发人员都不知道要做成什么样子,最终以失败告终。
以肯·汤姆森为首的贝尔实验研究员吸取了Mulitcs工程计划的失败的经验教训,于1969年实现了一种分时系统的雏形,1970年该系统x式取名为UNIX。
想一下英文中的前缀Multi和Uni就明白了UNIX的隐意。Multi是大的意思,大而且繁琐;Uni是小的意思,小而且巧。这就是Unix开发者的设计初衷,这个理念一直影响至今。
有意思的是,肯·汤姆森当年开发UNIX的初衷是运行它编写的一款游戏Space Travel,这款游戏模拟太阳系天体运动,由玩家驾驶飞船,观赏景色并尝试在各种行星和和月亮上登陆。他先后在多个系统上试验,但运行效果不甚理想,于是便决定开发自己的操作系统,就这样,UNIX诞生了。
自1970年后,UNIX系统在贝尔实验室内部程序员之间逐渐流行起来。1971-1972年,肯·汤姆森和他的同时丹尼斯·里奇发明了传说中的C语言,这是一种合适编写系统软件的高级语言,他的诞生是UNIX系统发展过程中一个重要的里程牌,他宣告在操作系统的开发中,汇编语言不再是主宰。
到了1973年,UNIX系统的绝大部分源码都用C语言进行了重写,这为提高UNIX系统的可移植性打下了基础(之前操作系统大多采用汇编语言,对硬件依赖性强),也为提高系统软件的开发效率开创建了条件。可以说,UNIX系统与C语言是一对孪生兄弟,具有密不可分的关系。
20世纪70年代初,计算机界还有一项伟大的发明——TCP/IP协议,这是当年美国国防部接手ARPAnet后所开发的网络协议。美国国防部把TCP/IP协议与UNIX系统、C语言捆绑在一起,由AT&T发行给美国各个大学非商业的许可证,这为UNXI系统、C语言、TCP/IP协议的发展拉开了序幕,他们分别在操纵系统、编程语言、网络协议着三个领域影响至今。肯·汤姆森和丹尼斯·里奇因在计算机领域做出的巨大贡献,与1983年获得了计算机科学最高奖——图灵奖。
随后出现了各种版本的UNIX系统,目前常见的有Sun Solaris、FreeBSD、IBM AIX、HP-UP等。
Linux的那些往事
linux内核最初是由李维斯·托瓦兹(Linus Torvalds)在赫尔辛基大学就读时出于个人爱好编写的,当时他觉得教学用的迷你版UNXI系统Minix太难用了于是决定自己开发一个操作系统。第一版本于1991年9月发布,当时仅有12000行代码。
李维斯·托瓦丝并没有保留Linux源码的版权,公开了代码,并邀请他人和自己一起完善Linux内核(操作系统的核心部分),并保留了选择新代码和需要合并的新方法的最终裁定权。现在大家使用的Linux我更倾向于是由李维斯·托瓦兹后来陆续加入的众多Linux爱好者共同开发完成的。
李维斯·托瓦兹无疑是这个世界上最伟大的程序员之一,更何况它还搞出了全世界最大的程序员交友社区GitHub(开源代码库及版本控制系统)。
关于Linux Logo的由来很有意思的话题是,他是一个企鹅。
为什么是企鹅,而不选择狮子、老虎、或者小白兔?有人说因为李维斯·托瓦兹是芬兰人,所以选择企鹅,有人说因为其他动物图案都被用光了,李维斯·托瓦兹只好选择企鹅。
我更愿意相信以下说法,企鹅是南极洲的标志性动物,根据国际公约,南极洲为全人类共同所有,不属于世界上任何国家,任何国家都无权将南极洲纳入其版图。Linux选择企鹅图案作为Logo,其含义是:开放源代码的Linux为全人类共同所有,任何公司无权将其私有。
UNIX和Linux的亲密关系
二者的关系不是大哥和小弟,“UNIX是Linux的父亲”这个说法更为恰当。之所以介绍他们的关系,是要告诉读者,在学习的时候,其实Linux和UNXI有很多共同之处,简单的说,如果你已经熟练掌握了Linux,那么在上手UNIX会非常容易。
二者有两大区别:
- UNIX系统大多是与硬件系统配套的,接就是说,大多数NUIX系统如:AIX、HP-UX等是无法安装在x86服务器和个人计算机上的,而Linux则可以运行在多种硬件平台。
- UNIX是商业软件,而Linux是开源软件,是免费的、公开源代码的。
Linux受人喜爱的原因:
- 它属于开源软件,用户不需要支付任何费用就能获得他的源代码,并且根据自己的需要对他进行必要的修改,无偿使用,无约束的继续传播。
- 它具有UNIX的全部功能,任何使用UNIX操作系统的或想学习UNIX操作系统的人都可以从Linux中获益。
开源软件是不同于商业软件的盈利模式,从字面上理解,就说开放源代码,大家不用担心里面搞什么猫腻,这会带来软件的革新和安全。
另外,开源其实不等同于免费,而是一种新的软件盈利模式。目前人多软件都是开源软件,对计算机行业与互联网影响深远。
UNIX/Linux系统结构
UNIX/Linux系统可以粗糙的抽象为3个层次(所谓粗糙,就是不够精细、精准、精致,但是便于初学者理解),如图所示是UNIX/Linux 操纵系统,即系统内核(Kernel);中间是Shell层,即命令解释层,高层则是应用层。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3eD3Tyr-1604321899954)(E:\C++体系\images\UNIX_Linux_Kernel.jpg)]
1)内核层
内核层是UNIX和Linux系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统资源(硬件资源和和软件资源),有效的组织进程运行,从而扩展硬件的功能,提高资源的利用率,为用户提供方便、高效、安全、可靠的应用环境。
2)shell层
shell层是与用户直接交互的界面,用户可以在提示符下输入命令,由Shell解释执行并输出相应结果或有关信息,所以,我们也把shell称为命令解释器,利用系统提供的丰富命令可以快捷而简单的完成许多工作。
3)应用层
应用层是基于X Window协议的图形环境。X Window协议定义了一个系统所必须具备的功能(就如同TCP/IP是一个协议,定义软件应具备的功能),若系统能满足此协议及符合X协会其他的规范,便可称为X Window。
现在UNIX系统上(包括Solaris、HP-UX、AIX等)都可以运行CDE(Common Desktop Environment,统用桌面环境,是运行于UNIX的商业桌面环境)的用户界面,而Linux上广泛应用的有Gnome、KDE等。
X Window与微软Windows图形环境有很大区别:
- UNIX/Linux系统与X Window没有必然的捆绑关系,也就是说UNIX/Linux可以安装X Window,也可以不安装;而微软的Windows图形桌面环境与内核捆绑紧密。
- UNIX/Linux系统下不依赖图像环境,依然可以通过命令完成100%的功能,而且不使用图形界面还会节省大量的资源。
的Windows图形桌面环境与内核捆绑紧密。
- UNIX/Linux系统下不依赖图像环境,依然可以通过命令完成100%的功能,而且不使用图形界面还会节省大量的资源。