内核负责控制硬件资源分配,而如果只有内核,则只能让计算机硬件运行,而不能有任何功能,因此需要系统调用提供给开发者使用,从而开发应用程序;内核能够控制硬件,比如:让CPU可以运算、让硬盘可以读写数据等;只有内核的话,只能让计算机运行,但是我们不能控制计算机;而系统调用是操作系统提供给开发者的调用接口;任何硬件都不会默认就被操作系统控制,而需要开发商根据操作系统提供的接口开发驱动程序,只有安装了驱动程序才能够控制硬件设备。
MINIX 系统是由Andrew S. Tanenbaum(AST)开发的。AST 是在荷兰Amsterdam 的Vrije 大学数学与计算机科学系统工作,是ACM 和IEEE 的资深会员(全世界也只有很少人是两会的资深会员)。MINIX 是他1987 年编制的,主要用于学生学习操作系统原理。到1991 年时版本是1.5。目前主要有两个版本在使用:1.5 版和2.0 版。当然目前MINIX 系统已经是免费的,可以从许多FTP 上下载。
对于Linux 系统,他后来曾表示对其开发者Linus的称赞。但他认为Linux的发展很大原因是由于他为了保持MINIX 的小型化,能让学生在一个学期内就能学完,因而没有接纳全世界许多人对MINIX的扩展要求。因此在这样的前提下激发了Linus 编写Linux 系统。当然Linus 也正好抓住了这个好时机。
作为一个操作系统,MINIX 并不是优秀者,但它同时提供了用C语言和汇编语言编写的系统源代码。这是第一次使得有抱负的程序员或hacker能够阅读操作系统的源代码。在当时,这种源代码是软件商们一直小心守护着的秘密。
软件产业在70年代成就了两位针锋相对的领袖人物,来自哈佛大学的比尔·盖茨和Richard M.Stallman。前者宣布了Copyright(版权)时代的到来,并构建了微软帝国的辉煌;后者于1984年创立自由软件体系GNU,拟定普遍公用版权协议(GeneralPublicLicense,简称GPL),今天Linux的成功就得益于GPL协议。
所有GPL协议下的自由软件都遵循着Richard M. Stallman的"Copyleft"(非版权)原则:即自由软件允许用户自由拷贝、修改和销售,但是对其源代码的任何修改都必须向所有用户公开。
GNU计划和自由软件基金会FSF(the Free Software Foundation)是由Richard M. Stallman 于1984 年一手创办的。旨在开发一个类似UNIX 并且是自由软件的完整操作系统:GNU系统(GNU 是"GNU's Not Unix"的递归缩写,它的发音为"guh-NEW")。
各种使用Linux作为核心的GNU 操作系统正在被广泛的使用。虽然这些系统通常被称作"Linux",但是Stallman 认为,严格地说,它们应该被称为GNU/Linux系统。
到上世纪90 年代初,GNU 项目已经开发出许多高质量的免费软件,其中包括有名的emacs 编辑系统、bash shell 程序、gcc 系列编译程序、gdb 调试程序等等。这些软件为Linux 操作系统的开发创造了一个合适的环境。这是Linux 能够诞生的基础之一,以至于目前许多人都将Linux 操作系统称为“GNU/Linux”操作系统。
POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口。用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植和运行。它是在1980 年早期一个UNIX 用户组(usr/group)的早期工作基础上取得的。该UNIX 用户组原来试图将AT&T 的System V 操作系统和BerkeleyCSRG 的BSD 操作系统的调用接口之间的区别重新调和集成。并于1984 年定制出了/usr/group 标准。
在90 年代初,POSIX 标准的制定正处在最后投票敲定的时候,那是1991-1993 年间。此时正是Linux刚刚起步的时候,这个UNIX 标准为Linux 提供了极为重要的信息,使得Linux 能够在标准的指导下进行开发,并能够与绝大多数UNIX 操作系统兼容。在最初的Linux 内核源代码中(0.01 版、0.11 版)就已经为Linux 系统与POSIX 标准的兼容做好了准备工作。在Linux 0.01 版内核的/include/unistd.h 文件中就已经定义了几个有关POSXI 标准要求的符号常数,而且Linus 在注释中已写道:“OK,这也许是个玩笑,但我正在着手研究它呢”。
Linux核心理念:万物皆文件;
Linux:是一个内核,而不是一个操作系统;因此我们平常说的“操作系统用的是Windows、Mac还是Linux啊?”是错误的,Ubuntu、Fedora等才是操作系统的名字,他们都使用Linux内核;
1991年最初由Linus Torvalds针对386(个人计算机)开发;Linus Torvalds那时是芬兰的一名研究生;
Unix Like:很像Unix的操作系统;
苹果电脑为什么现在能装Windows操作系统?因为苹果使用了Intel的X86架构,而windows也是针对此架构的,因此按理论来说一般的PC上也可以安装mac操作系统;
Linux的吉祥物是企鹅(英文名:Tux),因为Torvalds在小时候被企鹅咬过,因此印象非常深刻;
Unix和Linux的代码是由90%的C语言和10%的汇编组成,因此只需要稍加修改,就能移植到其他硬件上;
1、Linux的优点
1.开放的学习环境;
2.漏洞快速修补;
3.因为内核只有几百k,因此适合嵌入式系统;
2、Linux的缺点
1.有些专业软件没有Linux版本;
早期的电脑并不像现在的个人电脑一样普遍,他可不是一般人碰的起的呢~ 除非是军事或者是高科技用途,或者是学术单位的学术研究,否则真的很难接触到。 非但如此,早期的电脑架构还很难使用,除了运算速度并不快之外,操作介面也很困扰的! 因为那个时候的输入设备只有读卡机、输出设备只有印表机, 使用者也无法与作业系统互动(批次型作业系统)。
在那个时候,写程式是件很可怜的事情,因为程式设计者,必须要将程式相关的资讯在读卡纸上面打洞, 然后再将读卡纸插入读卡机来将资讯读入主机中运算。光是这样就很麻烦了,如果程式有个小地方写错, 哈哈!光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了!
在那之后,由于硬体与作业系统的改良,使得后来可以使用键盘来进行资讯的输入。 不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?大家还是得要等待啊! 好在1960年代初期麻省理工学院(MIT)发展了所谓的: ‘相容分时系统(Compatible Time-Sharing System, CTSS)’, 它可以让大型主机透过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。 架构有点像这样:
Tips:这个相容分时系统可以说是近代作业系统的始祖呢!他可以让多个使用者在某一段时间内分别使用CPU的资源, 感觉上你会觉得大家是同时使用该主机的资源!事实上,是CPU在每个使用者的工作之间进行切换, 在当时,这可是个划时代的技术喔!
如此一来,无论主机在哪里,只要在终端机前面进行输入输出的作业,就可利用主机提供的功能了。 不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具任何运算或者软体安装的能力。 而且,比较先进的主机大概也只能提供30个不到的终端机而已。
为了更加强化大型主机的功能,以让主机的资源可以提供更多使用者来利用,所以在1965年前后, 由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE)共同发起了Multics的计画, Multics计画的目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标。 不过,到了1969年前后,计画进度落后,资金也短缺,所以该计画虽然继续在研究,但贝尔还是退出了该计画的研究工作。 (注:Multics有复杂、多数的意思存在。)
Tips:最终Multics还是有成功的发展出他们的系统,完整的历史说明可以参考: http://www.multicians.org/网站内容。 Multics计画虽然后来没有受到很大的重视,但是他培养出来的人才是相当优秀的! ^_^
在认为Multics计划不可能成功之后,贝尔研究室就退出该计画。不过,原本参与Multics计画的人员中,已经从该计画当中获得一些点子, Ken Thompson 就是其中一位!
Thompson因为自己的需要,希望开发一个小小的作业系统以提供自己的需求。 在开发时,有一部DEC(Digital Equipment Corporation)公司推出的PDP-7刚好没人使用, 于是他就准备针对这部主机进行作业系统核心程式的撰写。本来Thompson应该是没时间的(有家有小孩的宿命?), 无巧不巧的是,在1969年八月份左右,刚好Thompson的妻儿去了美西探亲, 于是他有了额外的一个月的时间好好的待在家将一些构想实现出来!
经过四个星期的奋斗,他终于以组合语言(Assembler)写出了一组核心程式,同时包括一些核心工具程式, 以及一个小小的档案系统。那个系统就是Unix的原型! 当时Thompson将Multics庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。(当时尚未有Unix的名称)。
Thompson 的这个档案系统有两个重要的概念,分别是:
* 所有的程式或系统装置都是档案这些概念在后来对于Linux的发展有相当重要的影响喔!
Tips:套一句常听到的广告词:‘科技始终来自于人性’,当初Thompson会写这套Unix核心程式,却是想要移植一套名为‘太空旅游’的游戏呢! ^_^。
由于Thompson写的那个作业系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。 但是因为Unics本来是以组合语言写成的,而如第零章计算机概论谈到的, 组合语言具有专一性,加上当时的机器都不太相同,所以每次要安装到不同的机器都得要重新编写组合语言,真不方便!
后来Thompson与Ritchie合作想将Unics改以高阶程式语言来撰写。当时现成的高阶程式语言有B语言。 但是由B语言所编译出来的核心效能不是很好。后来Dennis Ritchie将B语言重新改写成C语言,再以C语言重新改写与编译Unics的核心, 最后正名与发行出Unix的正式版本!
Tips:这群高级骇客实在很厉害!因为自己的需求来开发出这么多好用的工具! C程式语言开发成功后,甚至一直沿用至今呢!你说厉不厉害啊!这个故事也告诉我们,不要小看自己的潜能喔! 你想作的,但是现实生活中没有的,就动手自己搞一个来玩玩吧!
由于贝尔实验室是隶属于美国电信大厂AT&T公司的, 只是AT&T当时忙于其他商业活动,对于Unix并不支持也不排斥。此外,Unix在这个时期的发展者都是贝尔实验室的工程师, 这些工程师对于程式当然相当有研究,所以,Unix在此时当然是不容易被一般人所接受的!
需要特别强调的是,由于Unix是以较高阶的C语言写的,相对于组合语言需要与硬体有密切的配合, 高阶的C语言与硬体的相关性就没有这么大了!所以,这个改变也使得Unix很容易被移植到不同的机器上面喔!
虽然贝尔属于AT&T,但是AT&T此时对于Unix是采取较开放的态度,此外,Unix是以高阶的C语言写成的, 理论上是具有可移植性的!亦即只要取得Unix的原始码,并且针对大型主机的特性加以修订原有的原始码(Source Code), 就可能将Unix移植到另一部不同的主机上头了。所以在1973年以后,Unix便得以与学术界合作开发! 最重要的接触就是与加州柏克莱(Berkeley)大学的合作了。
柏克莱大学的Bill Joy在取得了Unix的核心原始码后,著手修改成适合自己机器的版本, 并且同时增加了很多工具软体与编译程式,最终将它命名为Berkeley Software Distribution (BSD)。这个BSD是Unix很重要的一个分支,Bill Joy也是Unix业者‘Sun(升阳)’这家公司的创办者! Sun公司即是以BSD发展的核心进行自己的商业Unix版本的发展的。 (后来可以安装在x86硬体架构上面FreeBSD即是BSD改版而来!)
由于Unix的高度可移植性与强大的效能,加上当时并没有版权的纠纷, 所以让很多商业公司开始了Unix作业系统的发展,例如AT&T自家的System V、IBM的AIX以及HP与DEC等公司, 都有推出自家的主机搭配自己的Unix作业系统。
但是,如同我们前面提到的,作业系统的核心(Kernel)必须要跟硬体配合, 以提供及控制硬体的资源进行良好的工作!而在早期每一家生产电脑硬体的公司还没有所谓的‘协定’的概念, 所以每一个电脑公司出产的硬体自然就不相同啰!因此他们必须要为自己的电脑硬体开发合适的Unix系统。 例如在学术机构相当有名的Sun、Cray与HP就是这一种情况。 他们开发出来的Unix作业系统以及内含的相关软体并没有办法在其他的硬体架构下工作的! 另外,由于没有厂商针对个人电脑设计Unix系统,因此,在早期并没有支援个人电脑的Unix作业系统的出现。
Tips:如同相容分时系统的功能一般,Unix强调的是多人多工的环境! 但早期的286个人电脑架构下的CPU是没有能力达到多工的作业,因此,并没有人对移植Unix到x86的电脑上有兴趣。
每一家公司自己出的Unix虽然在架构上面大同小异,但是却真的仅能支援自身的硬体, 所以啰,早先的Unix只能与伺服器(Server)或者是大型工作站(Workstation)划上等号!
但是这个高度开放的Unix系统在1979年有了重大的转折~因为AT&T由于商业的考量, 以及在当时现实环境下的思考,于是将想Unix的版权收回去。因此,AT&T在1979年发行的第七版Unix中,特别提到了 ‘不可对学生提供原始码’的严格限制! 同时,也造成Unix业界之间的紧张气氛,并且也引爆了很多的商业纠纷~。
Tips:AT&T这一版开发出来的Unix被称为System V,目前被称为纯种的Unix指的就是System V以及BSD这两套啰!
关于1979年的版权声明中,影响最大的当然就是学校教Unix核心原始码相关学问的教授了! 想一想,如果没有核心原始码,那么如何教导学生认识Unix呢?这问题对于Andrew Tanenbaum(谭宁邦)教授来说,实在是很伤脑筋的!不过,学校的课程还是得继续啊!那怎么办?
既然1979年的Unix第七版可以在Intel的x86架构上面进行移植, 那么是否意味著可以将Unix改写并移植到x86上面了呢?在这个想法上, 谭宁邦教授于是乎自己动手写了Minix这个Unix Like的核心程式! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix核心原始码! 并且强调他的Minix必须能够与Unix相容才行!谭宁邦在1984年开始撰写核心程式, 到了1986年终于完成,并于次年出版Minix相关书籍,同时与新闻群组(BBS及News)相结合~。
Tips:之所以称为Minix的原因,是因为他是个Mini的Unix系统啰!^_^。
这个Minix版本比较有趣的地方是,他并不是完全免费的,无法在网路上提供下载! 必须要透过磁片/磁带购买才行!虽然真的很便宜~不过,毕竟因为没有在网路上流传, 所以Minix的传递速度并没有很快速!此外,购买时,随磁片还会附上Minix的原始码! 这意味著使用者可以学习Minix的核心程式设计概念喔! (这个特色对于Linux的启始开发阶段,可是有很大的关系喔!)
此外,Minux作业系统的开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为Minix主要用在教育用途上面, 所以对于Minix是点到为止!没错,Minix是很受欢迎,不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了! 这样说,你明白吧?^_^。
Richard Mathew Stallman(生于1953年, 网路上自称的ID为RMS)从小就很聪明!他在1971年的时候,进入骇客圈中相当出名的人工智慧实验室(AI Lab.), 这个时候的骇客专指电脑功力很强的人,而非破坏电脑的怪客(cracker)喔!
当时的骇客圈对于软体的著眼点几乎都是在‘分享’,所以并没有专利方面的困扰! 这个特色对于史托曼的影响很大!不过,后来由于管理阶层的问题,导致实验室的优秀骇客离开该实验室, 并且进入其他商业公司继续发展优秀的软体。但史托曼并不服输,仍然持续在原来的实验室开发新的程式与软体。 后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力!
1983年以后,因为实验室硬体的更换,使得史托曼无法继续以原有的硬体与作业系统继续自由程式的撰写~ 而且他进一步发现到,过去他所使用的Lisp作业系统,是麻省理工学院的专利软体, 是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。于是他便放弃了Lisp这个系统。 后来,他接触到Unix这个系统,并且发现,Unix在理论与实际上,都可以在不同的机器间进行移植。 于是他开始转而使用Unix系统。
因为Lisp与Unix是不同的系统,所以,他原本已经撰写完毕的软体是无法在Unix上面运行的!为此, 他就开始将软体移植到Unix上面。并且,为了让软体可以在不同的平台上运作, 因此,史托曼将他发展的软体均撰写成可以移植的型态!也就是他都会将程式的原始码公布出来!
1984年,史托曼开始GNU计画, 这个计画的目的是想要:建立一个自由的开放的Unix作业系统(Free Unix)。 但是建立一个作业系统谈何容易啊!而且在当时的GNU是仅有自己一个人单打独斗的史托曼~ 这实在太麻烦,但又不能不做这个计画,于是史托曼反其道而行~‘既然作业系统太复杂, 我就先写可以在Unix上面运行的小程式,这总可以了吧?呵呵!’在这个想法上, 史托曼便开始了程式的写作。在写作期间,为了不让自己吃上官司,他绝对不看专利软体的原始码! 为了这个计画,他开始使用原本Unix上面跑的软体, 并自行撰写功能与Unix原有专利软体相仿的软体。
但不论是什么软体,都得要进行编译成为二进位档案(binary file)后才能够执行, 因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C Compiler(gcc)! 这个点相当的重要!这是因为C语言编译器版本众多,但都是专利软体, 如果他写的C编译器够棒,效能够佳,那么将会大大的让GNU计画出现在众人眼前!
Tips:电脑仅认识0/1的资料,但是人类不认识啊!人类对于纯文字的资料(就是所谓的ASCII档案格式)比较有感觉。 但是偏偏电脑又不认识ASCII格式的文字,很头痛,不是吗? 后来就有所谓的‘编译器’来辅助我们。
我们一般使用文字编辑器以ASCII纯文字格式来撰写程式, 再透过所谓的‘编译器(compiler)’将刚刚完成的文字档案‘编译’成为电脑认识的二进位制(binary file)的档案, 以让电脑认识且可以执行的程式啊!
但开始时并不顺利,为此,他先转而将Emacs编辑器写成可以在Unix上面跑的软体,并公开公布原始码。 Emacs是一种程式编辑器,他可以在使用者撰写程式的过程中就进行程式语法的检验,此一功能可以减少程式设计师除错的时间! 因为Emacs太优秀了,因此,很多人便直接向他购买。
此时网际网路尚未流行,所以,史托曼便藉著Emacs以磁带(tape)出售,赚了一点钱 ,进而开始全力撰写其他软体。并且成立自由软体基金会(FSF, Free Software Foundation),请更多工程师与志工撰写软体。终于还是完成了GCC,这比Emacs还更有帮助! 此外,了更他还撰写多可以被呼叫的C函式库(GNU C library),以及可以被使用来操作作业系统的基本介面BASH shell! 这些都在1990年左右完成了!
Tips:如果纯粹使用文字编辑器来编辑程式的话,那么程式语法如果写错时, 只能利用编译时发生的错误讯息来修订了,这样实在很没有效率。 Emacs则是一个很棒的编辑器!注意!是编辑(editor)而非编译(compiler)! 他可以很快的立刻显示出你写入的语法可能有错误的地方,这对于程式设计师来说, 实在是一个好到不能再好的工具了!所以才会这么的受到欢迎啊!
* Emacs
* GNU C (GCC)
* GNU C Library (glibc)
* Bash shell
造成后来很多的软体开发者可以藉由这些基础的工具来进行程式开发! 进一步壮大了自由软体团体!这是很重要的!不过,对于GNU的最初构想 ‘建立一个自由的Unix作业系统’来说,有这些优秀的程式是仍无法满足, 因为,当下并没有‘自由的Unix核心’存在...所以这些软体仍只能在那些有专利的 Unix平台上工作~~一直到Linux的出现...更多的FSF开发的软体可以参考如下网页:
* https://www.fsf.org/resources
有鉴于图形使用者介面(Graphical User Interface, GUI) 的需求日益加重,在1984年由MIT与其他协力厂商首次发表了X Window System ,并且更在1988年成立了非营利性质的XFree86这个组织。所谓的XFree86其实是 X Window System + Free + x86的整合名称呢! 而这个XFree86的GUI介面更在Linux的核心1.0版于1994年释出时,整合于Linux作业系统当中!
Tips:为什么称图形使用者介面为X呢?因为由英文单字来看,Window的W 接的就是X啦!意指Window的下一版就是了! 需注意的是,X Window并不是X Windows喔!
1、Ken Thompson:C语言之父和Unix之父
2.Dennis Ritchie:C语言之父和Unix之父;
3.Stallman:著名黑客,GNU创始人,开发了Emacs、gcc、bash shell;
4.Bill Joy:BSD开发者;
5.Tanenbaum:Minix开发者;
6.Linus Torvalds:Linux之父,芬兰赫尔辛基大学;