操作系统基础
操作系统基础
1. 操作系统发展
1.1 什么是操作系统
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)
以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,
1.2 操作系统的发展
开始是没有操作系统的,所有的程序设计(机器语言)都是直接操控硬件。
由于当时的计算机非常昂贵,自认很自然的想办法较少机时的浪费。通常采用的方法就是批处理系统。
许多程序员怀念第一代独享的计算机,可以即时调试自己的程序。为了满足程序员们很快可以得到响应,出现了分时操作系统。
为了进一步强化大型主机的功能,让主机的资源可以提供更多的使用者来利用,所以在1964年, 由AT&T旗下的贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE美国通用电气公司)共同发起了Multics(多路信息计算系统)的计划, Multics计划的目的是让大型主机可以同时支持300个以上的终端机连线使用。不过,到了1969年前后,由于计划进度缓慢,资金也短缺,所以该计划虽然继续在研究,但最终贝尔实验室还是选择了退出。
1966年从加州大学伯克利分校毕业的Ken Thompson(肯·汤普逊)加入了贝尔实验室。参与了Multics系统的研发。他基于Multics开发了“star travel” 游戏。不幸的是,1969年由于贝尔实验室退出Multics项目,这同时意味着肯·汤普逊将没有机器可以再玩这个游戏了。面对此情此景, 肯·汤普逊作为一个创造者的本性立即体现了出来,于是他决定自己写一个操作系统来满足他玩游戏的需要, Ken找到了一台废弃已久的老式PDP-7并在这台机器上重写了他的游戏。在这个过程中, 肯·汤普逊有了一个主意,要开发一个全新的操作系统。利用PDP-7上的汇编语言,肯·汤普逊只花了一个月就编写完了操作系统的内核,在这个一个月中,他一周一个内核,一个文件系统,一个编辑器和一个编译程序的完成。在丹尼斯·里奇的帮助下,肯·汤普逊用PDP-7的汇编语言重写了这个游戏,并使其在DEC PDP-7上运行起来。肯·汤普逊在公司内部推广他写的游戏,然后他的同事对他的游戏不感兴趣,反而对他写的操作系统特别感兴趣。1969年,肯·汤普逊提议在PDP-7上开发一个新的阶层式操作系统的计划。Multics的原有成员,加上Rudd Canady,都投入这个计划,,最终做出了一个分时多任务)操作系统为区别于Multics项目,新操作系统被命名为Unix。
第一版UNIX是用PDP-7汇编语言编写的,一些应用是由叫做B语言的解释型语言和汇编语言混合编写的。在进行系统编程时不够强大,所以汤普逊和里奇对其进行了改造,并于1971年共同发明了C语言。1973年汤普逊和里奇用C语言重写了Unix,形成第三版UNIX。在当时,为了实现最高效率,系统程序都是由汇编语言编写,所以汤普逊和里奇此举是极具大胆创新和革命意义的。用C语言编写的Unix代码简洁紧凑、易移植、易读、易修改,为此后Unix的发展奠定了坚实基础。
1974年,汤普逊和里奇合作在ACM通信上发表了一篇关于UNIX的文章,这是UNIX第一次出现在贝尔实验室以外。此后UNIX被政府机关,研究机构,企业和大学注意到,并逐渐流行开来。
1975年,UNIX发布了4、5、6三个版本。1978年,已经有大约600台计算机在运行UNIX。1979年,版本7发布,这是最后一个广泛发布的研究型UNIX版本。20世纪80年代相继发布的8、9、10版本只授权给了少数大学。
在当时AT&T垄断了美国长途电话业务,所以美国司法部在1958年与它签了一个和解协议。AT&T同意不进入计算机业,不销售任何与计算机有关的产品,以避免司法部起诉它违反《反垄断法》。Unix是计算机的操作系统,所以AT&T不能销售它,任何要求得到源码的机构,都能免费得到。
加州大学伯克利分校得到源码后,为Unix添加了许多功能。然后在1979年,推出了一个自家的Unix版本,取名为Berkeley Software Distribution(伯克利软件套件),简称BSD。
正当Unix蓬勃发展之际,发生了一件谁也没有想到的事情。
1974年,美国司法部再次起诉AT&T违反《反垄断法》。1982年,哥伦比亚地区法庭判决AT&T败诉,必须被拆成8家小公司。但是,这个判决也意味着1958年的和解协议失效,AT&T从此可以进入计算机业。
1983年,AT&T发布了Unix最新版system V,这是一个商业化版本,付费才能使用,并且不得传播源码。这个决定对BSD构成了限制,为了减少纠纷,伯克利分校规定,BSD本身依然保持免费,但是只能提供给持有AT&T源码许可的公司。不过,与此同时,伯克利的师生也开始着手另一项工作:将AT&T的专有代码从BSD中逐渐去除。
80年代后期,几个伯克利毕业的学生,成立了一家Berkeley Software Design Inc.公司,简称BSDi,专门销售BSD的一个商业版本。他们在广告中宣称,自己的产品不包含任何AT&T代码。这句话惹恼了AT&T,1990年BSDi被告上法庭,稍后伯克利分校也被追加为被告。AT&T起诉BSD侵犯了Unix的版权。
这场诉讼对BSD打击极大,所有的开发活动都被迫停止,用户人心惶惶,担心自己也遭到AT&T的追究,因此BSD的使用急剧减少。最后在1994年,双方达到和解,BSD才恢复开发。
AT&T与BSD之间的诉讼,是当代版权制度最恶劣的应用之一。
为什么这么说?
首先,起诉者其实与Unix毫无关系。这是AT&T经理层的决定,而不是开发者的决定。事实上,包括Ken Thompson在内的技术人员一直希望,公司能够公开源码。他们完全有理由这么要求,因为Unix从来不是AT&T的业务重点,最初是个人项目,后来也没有占用公司太多资源。销售Unix的利润,在公司全部业务中,几乎可以忽略不计。为了一点点钱,去打击一个使许多人受益的产品,何必这样做呢。
其次,AT&T根本不关心Unix的发展。它真正关心的是金钱和削弱对手。1994年,官司还没有结束,它就把Unix卖给了Novell公司,从此不再与Unix发生关系,官司也因此不了了之。
最后,所谓的侵权几乎是不存在的。因为Novell从AT&T买下Unix版权后,检查了BSD的源码,在18000个组成文件中删除了3个,并对其他文件做了一些小修改,然后BSD就重新获得了自由发布源码的许可。这意味着,至多只有千分之一的BSD代码有版权问题,但是就因为这千分之一的问题,导致百分之百的产品被迫中断,完全不符合比例原则。
所以,这场版权官司就是一家利益至上的公司,以微不足道的理由,为了一个自己根本不在乎的产品,悍然发动一场损人不利己的战争。
但是这场战争给Unix和BSD带来毁灭性的打击。
从八十年代中后期开始,AT&T固执地捍卫Unix版权,完全不顾它的创造者和开发者的愿望,导致Unix丧失活力、一蹶不振,大量开发者无法参与,只好离开了这个平台。
而BSD在1992~1994年期间,开发处于停滞,错过了发展的黄金时机。官司结束以后,又不幸发生分裂,变成了FreeBSD、NetBSD和OpenBSD三个版本。这些原因导致BSD直到今天,都还在操作系统的竞争中处在落后地位。
如果换个时间,官司的损失也许还没这么大。偏偏90年代初是计算机工业决定性的年代,错过了那几年,从此你就不要想翻身了。因为从80年代末期开始,Intel的80x86芯片有巨大的发展,性能快速上升,而成本快速下降,个人电脑的年代就要到来了。市场迫切需要能够运行在386芯片上的操作系统,但是Unix和BSD忙于打官司,都没有去做移植操作系统这件事。其他两个这样做的人,改变了人类历史。
一个是比尔·盖茨,他推出了Windows,占领了个人电脑市场,后来赚了几百亿美元。另一个是芬兰大学生Linus Torvalds,他想学习Unix,但是买不起工作站,就自己写了一个能在386上运行的Linux操作系统,现在全世界超过一半的网络服务器都在使用这个系统。Linus Torvalds后来说,如果他早知道BSD没有法律问题,并且可以被移植到386,他就会加入BSD的开发,而不是自己写一个。
Novell买到Unix版权后,也没在手里放多久,1995年又转手卖给了别人。从此,Unix原始版本的开发正式结束。
后来各个商业公司自己修改的Unix版本,比如Sun的Solaris,HP的HP-UX,IBM的AIX。
由于使用Unix有版权问题,而且AT&T特别是要求禁止对学生群体提供Unix系统源代码。使得当时大学里教学Unix系统的束缚很大。因此,当时的一个大学的教授,名字为Andrew Tanenbaum ,基于之前还在开源的Unix部分开发了一个可以运行于x86PC平台的系统,这个系统的名字为Minix,这个Minix系统的目的只是用于教学。
Minix没有任何代码抄袭Unix,所以它们之间并没有任何继承关系,由于Minix是教授一人所写,所以存在一些漏洞。这时候有使用者发现漏洞存在,想着去下载一些补丁或者自己写一些补丁来修补这些漏洞,修补之后发现效果不错,然后就建议教授利用这些补丁完善下Minix,结果呢,教授比较固执,意思是说:为了维持Minix的纯洁性,不需要任何外来代码。也就是说,根本不打算做商业发行,所以Minux保持了其最原始的风范。
1984年,Richard Stallman发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和GNU(GNU is Not Unix)项目。
当时发起这个自由软件运动和创建GNU项目的其实很简单,就是想开发一个类似Unix系统,并且是自由软件的完整操作系统,也就是要解决70年代末Unix版权问题以及软件源代码面临闭源的问题,这个系统叫做GNU操作系统。这个GNU系统后来没有流行起来。
GNU通用公共许可协议(GNU General Public License),允许用户任意复制、传递、修改及再发布,基于自由软件修改再次发布的软件,仍需遵守GPL.
1990年,芬兰赫尔辛基大学学生Linus Torvalds首次接触MINIX系统。
1991年,Linux Torvalds开始在MINIX上编写各种驱动程序等操作系统内核组件。
991年底,Linus Torvalds公开了Linux内核源代码0.02版,注意,这里公开的Linux内核源码并不是我们现在使用的Linux系统的全部,而仅仅是Linux内核kernel部分的代码。受到大家的肯定,相当多的朋友一起投入这个工作中。由于Linux kernel的发展是由虚拟团队所达成的,大家都是透过网络取得Linux的核心原始码,经由自己精心改造后再回传给Linux社群,进而一步一步的发展完成完整的Linux系统,至于Linus Torvalds是这个集团中的发起者。由于这个群策群力的缘故,Linus Torvalds将Linux定为同样造福大家的GNU授权模式!
1993年,Linux1.0版发行,Linux转向GPL版权协议。
现在的GNU系统通常是使用Linux系统的内核,以及使用了GNU项目贡献的一些组件加上其它相关程序组成,这样的组合被称为GNU/Linux操作系统。
Linux系统之所以受到广大计算机爱好者的喜爱,主要原因有两个:
一是,Linux属于自由软件,用户不用支付任何费用就可以获得系统和系统的源代码,并且可以根据自己的需要对源代码进行必要的修改,无偿使用,无约束地自由传播。
二是,Linux具有Unix的全部优秀特性,任何使用Unix操作系统或想要学习Unix操作系统的人,都可以通过学习Linux来了解Unix,同样可以获得Unix中的几乎所有优秀功能,并且Linux系统更开放,社区开发和全世界的使用者也更活跃。
大型机与嵌入式系统使用很多样化的操作系统。在服务器方面Linux、UNIX和Windows Server占据了市场的大部分份额。在超级计算机方面,Linux取代Unix成为了第一大操作系统。在世界超级计算机500强排名中基于Linux的超级计算机占据了462个席位,比率高达92%。个人电脑系统则windows一占据高不下,随着智能手机的发展,Android和iOS已经成为目前最流行的两大手机操作系统。
Linux发行版本
https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg
Marc Ewing早在卡内基梅隆大学读书的时候就戴着他祖父的红色曲球帽. Marc在Marc Ewing大学常把自己的软件命名为Red Hat — Red hat 1, Red Hat 2 用来区别他人的软件. 所以当他开始自己的Linux项目, 自然就会命名为RedHat Linux。
1993年, Bob Young 建立了ACC公司,营销Linux和UNIX的支持软件和书籍杂志
1995年, Bob Young 收购了Marc Ewing的业务,合并后的ACC公司成为新的Red Hat软件公司,发布了Red Hat Linux 2.0