操作系统概述

                             操作系统概述

对于一个真正的计算机系统来说,我们可以说它是由硬件+软件组成。没有软件的计算机,我们称它为裸机。当然,它也干不成什么事。所以,要想使得计算机真正的工作,还需要有软件的支持。软件又分为系统软件和应用软件,而操作系统就是一款我们所需要了解的系统软件。

1.2.1什么是操作系统

操作系统是计算机系统中的一个系统软件,是一些程序模块的集合——它们能以尽量有效、合理的方式组织和管理计算机的软硬件资源,合理的组织计算机的工作流程,控制程序的执行并向用户提供各种服务功能,使得用户能够灵活、方便、有效的使用计算机,使整个计算机系统能高效、顺畅地运行。

1.2.2操作系统的发展历史

批处理系统

早期在操作系统还没形成的过程中,写程序是一件很麻烦的事,程序员使用机器语言或汇编语言在读卡纸片上来编写程序,编写好的程序交给操作员,由操作员将纸片制作成卡片,然后再将卡片放入专门的I/O设备中,等待调入到内存中去让处理机去操作。

这样做的缺点:

*  系统资源的利用率低
在操作员操作卡片进入I/O设备的时候,处理机处于空闲状态,所有造成资源利用低

*  系统的吞吐量低
使用单道批处理系统,每次内存只存放一道作业,这样使得系统吞吐量低

*  交互性差
一旦程序的某个小地方出错了,就要重新开始。

UNIX的诞生

随着硬件设备的发展,为了增强系统的资源利用率,吞吐量,以及解决交互性问题,大概在60年代左右,由Bell实验室,MIT,GE共同发起了Multics的计划。从字面意思可以理解Multics为复杂的,多数的意思。它的计划就是想让一台大型主机可以提供300个以上的联机终端。

后来,由于计划进度落后,资金短缺,Bell实验室就退出了这项计划。在原先参加Multics的计划中,有一个叫Ken Thompson,他当时开发了一个小游戏,这个小游戏叫做 space travel。他就想测试一下这个小游戏。当时流行的主机是DEC(数字设备公司)下的PDP,VAX。在当时,比较主流的是PDP-11,VAX-11。在当时,这种主机的价格高达上万美元,这是一般用户消费不起的,这就让Thompson很烦恼,但是碰巧,在实验室里有一台被废弃的PDP-7没人使用,于是他就在这台主机上用汇编语言编写一个系统核心程序。终于在1969年,编写出了一个核心工具程序,以及一个小小的文件系统。这个系统被称为Unics。

没想到Thompson编写的这个操作系统这么好用,所以在Bell实验室就流行起来了。但是由于是以汇编语言编写的,所以它的移植性很差。因为当时的计算机的架构的不同,所以每次安装到不同架构上的机器上时,都要重新编写,真的不方便。到达1971年左右,一个叫Ritchie将B语言改写成C语言,再和Thompson重新用C语言来更改UNICS,最后正式更名为Unix.

bell实验室是属于AT&T公司的,AT&T公司对于UNIX是采取较开发的态度。所以Unix公开源代码,使得UNix的修改能够移植到不同架构的机器上去。所以UNix与当时的加州Berkeley大学合作。Berkeley大学取得源代码后,重新编写适合自己机器的版本,最终将它命名为:Berkeley Software Distribution(BSD)

Minux的诞生

由于UNIX的高移植性的强大功能,加上当时没有版权纠纷,所以让很多商业公司开始了Unix的发展,例如AT&T自家的 System V。当System V 发行到第七版UNIX后,它便开始将UNIX的版权收回去。因此也爆发了商业纠纷。导致unix发展停滞不前。

随后,个人PC机的发展使得UNIX的这些研究人员觉得有压力,他们想开始研究,但是由于版权问题,所以使用UNIX出现了很大的困难。在当时,有一个大学教授Andrew,他为了用于教学,避免版权纠纷,他在完全不看 UNIX核心源代码的情况下,自己编写了Minix,并且强调它与Unix能够兼容。这个Minix版本并不是完全免费的,无法在网络上提供下载,必须要透过磁盘/磁带购买才行。另外,这个教授不许任何人去修改或增加代码,所以让这个操作系统并没有广泛流传。

GNU计划

1983年,一个叫做Richard Stallman公开发起的自由软件集体协作计划。它的目标是创建一套完全自由的操作系统GNU。那么GNU是什么?GNU就是“GNU

is not UNIX”。因为在当时,UNIX由于版本问题造成大多数人都无法使用UNIX操作系统,所以Richard Stallman发起了这个运动。1985年,Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。为了维护GNU组织的合法权益,避免其他人拿着GNU组织开发的程序去进行一些不正当的行为,1989年Richard Stallman又撰写了GNU协议:GPL(General Public License)。这就是最初的第1版,它的大致内容就是:

*  如果发布了可执行的二进制代码,就必须同时发布可读的源代码。

*  发布任何基于GPL许可的软件时,不管你是基于这个软件源码进行二次开发还是怎样,修改之后软件依然要遵循GPL协议,且修改人不能添加任何限制的条款。

那么,对于某些商业公司,它只以而二进制的形式来发布软件,以此来保护软件开发者的合法权益。但是如果哪怕是软件开发者开发的程序里面有两三行基于GPL协议的代码,那么整个程序也属于GPL协议范围,版权也归GNU组织所有,所以这样做的结果就导致了GPL协议并没有应用的很广泛。所以GPL就有了另一个协议:LGPL(the Lesser General Public License)。这个协议就宽松了很多,它大致的内容就是:

软件开发者没有参考基于LGPL的全部代码,而是调用了遵循LGPL的库,那么这个就没关系,可以不用开源。

但是LGPL并没有多大的改观,仍然有很多的限制。后来,人们普遍认为一个限制性弱的许可证对于自由软件的发展是有战略意义上的好处的,于是通过不断的修改GPL协议,GPLv2、GPLv3出现了。但是要知道的是,GPL的出发点是代码的开源,我们能免费使用和引用、修改、衍生代码,但不允许修改后和衍生的代 码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商 业软件公司开发的免费软件了。

其它开源协议

由于GPL协议太严格了,所以后来也出来了一些宽松点的协议。比如:BSD协议,Apache协议。

BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

*  如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

*  如果再发布的只是二进制类库或软件,则需要在类库或软件的文档和版权声明中包含原来代码中的BSD协议。

*  不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对 商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。包括苹果的MAC OS,Webkit浏览器内核在内的软件都使用了BSD协议。

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

*  需要给代码的用户一份Apache Licence

*  如果你修改了代码,需要在被修改的文件中说明。

*  在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

*  如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布或销售。最后,用一句话概括 Apache License 就是,你可以用这代码,但是如果开源你必须保留我写的声明;你可以改我的代码,但是如果开源你必须写清楚你改了哪些;你可以加新的协议要求,但不能与我所公布的协议要求产生冲突;你用这代码干什么我不管,但是你不能让我承担任何责任。

Apache旗下的软件包括Apache web服务器、Hadoop、Open Office等软件都是采用的Apache License。

当然还有很多开源协议,这里就列出这两种,我们记住就好。

POSIX标准

自UNIX诞生之后,起初免费公开的源代码使得美国各大高校对其做研究,比较有名的就是加利福尼亚大学伯克利分校研发出的BSD Unix。当然还有AT&T公司自主研究的System V,很多商业厂家意识到了UNIX的价值,于是基于BSD或System V上各自都研发自己的UNIX。比较著名的有:sun公司研发的Solaris、IBM研发的AIX、DEC公司为自己的VAX主机研发的操作系统VMS、HP公司研究的HP-UX。

对于早期来说,程序员编写程序面临着这样一个问题,假如A主机和B主机的硬件架构不一样,那么基于A平台开发的程序无法在B主机上运行。那么可想而知,早期如果程序员想将在A主机上编写的代码移植到B主机上几乎是很难的。于是,POSIX计划就诞生了。我们可以理解为POSIX标准就是为了实现UNIX环境下应用程序的可移植性。于是,一款基于POSIX标准的库诞生了,这就是我们所说的:应用程序编程接口(API)。它的作用是,软件开发者在编写程序时不再直接和内核打交道,因为这种方式太过于底层,而且程序移植起来极其困难。而API将一些程序的公共功能组织到了一起,也就是说,程序员在需要某种功能的时候,不需要再直接编写这个功能,而是直接从API接口中调用相关的功能的共享库,这样大大提高了程序开发的效率和程序的可移植性。

但是,我们要知道的是,程序在基于API接口进行程序开发使得程序能在各种不同硬件架构的平台上进行移植。也就是说,假如windows和Linux的API接口相同,那么在Windows上能编译的程序移植到在Linux上也能够进行编译,这是站在开发角度来说。而在二进制程序的角度来看,我们在Windows上编译生成的二进制文件是不能在Linux上运行的,这是由于他们的应用二进制程序(ABI)的接口不同。只能这样说,目前,POSIX标准大多数都是对API的规定,而对ABI的规定很少,以至于出现我们上述所说的区别。

                                                

blob.png

  

然而至今,POSIX标准不局限于UNIX类的操作系统,包括我们即将要学的Linux也是参照POSIX规范而编写的。在 90 年代初,POSIX 标准的制定正处在最后投票敲定的时候,那是1991-1993 年间。此时正是Linux刚刚起步的时候,这个UNIX 标准为Linux 提供了极为重要的信息,使得Linux 的能够在标准的指导下进行开发,能够与绝大多数UNIX 系统兼容。在最初的Linux 内核代码中(0.01 版、0.11 版)就已经为Linux与POSIX 标准的兼容做好了准备工作。在0.01 版的内核/include/unistd.h 文件中就已经定义了几个有关POSXI 标准要求的常数符号,并且在注释中就写到“ok,这也许是个玩笑,但我正在着手研究它呢”。

Linux的诞生

1981 年IBM 公司推出享誉全球的微型计算机IBM PC。可是因为在向16位CPU的转化上错失机会,在以IBM的PC/AT以及兼容机为中心的16位PC市场上,惨败给Microsoft的MS-DOS、从而从市场上消失。在1981-1991 年间,MS-DOS 操作系统一直是微型计算机上操作系统的主宰。此时计算机硬件价格虽然逐年下降,但软件价格仍然是居高不下。当时Apple 的MACs 操作系统可以说是性能最好的,但是其天价没人能够轻易靠近。当时的另一个计算机技术阵营是Unix 世界。但是Unix 操作系统就不仅是价格贵的问题了。为了寻求高利率,Unix 经销商将价格抬得极高,PC小用户就根本不能靠近它。曾经一度受到Bell Labs 的许可而可以在大学中用于教学的UNIX 源代码一直被小心地守卫着不需公开。对于广大的PC 用户,软件行业的大型供应商始终没有给出有效的解决该问题的手段。正在此时,出现了MINIX 操作系统,并有一本详细的书本描述它的设计实现原理。由于Andrew的书写的非常详细,并且叙述有条有理,几乎全世界的计算机爱好者都在看这本书以理解操作系统的工作原理。其中也包括Linux 系统的创始者Linus Benedict Torvalds。

当时(1991 年),Linus Benedict Torvalds 是赫尔辛基大学计算机科学系的二年级学生,也是一个自学hacker。这个21 岁的芬兰年轻人喜欢鼓捣计算机,测试计算机的能力和限制。但当时缺乏的是一个专业级的操作系统。MINIX 虽然很好,但只是一个用于教学目的简单操作系统,而不是一个强有力的实用操作系统。

到 1991 年,GNU 计划已经开发出了许多工具软件。最受期盼的Gnu C 编译器已经出现,但还没有开发出免费的GNU 操作系统。即使是MINIX 也开始有了版权,需要购买才能得到源代码。而GNU 的操作系统HURD 一直在开发之中,但并不能在几年内完成。对于 Linus 来说,已经不能等待了。从1991 年4 月份起,他开始酝酿并着手编制自己的操作系统。刚开始,他的目的很简单,只是为了学习Intel 386 体系结构保护模式运行方式下的编程技术。但后来Linux的发展却完全改变了初衷。

1991 年初,Linux 开始在一台386sx 兼容微机上学习minix 操作系统。通过学习,他逐渐不能满足minix系统的现有性能,并开始酝酿开发一个新的免费操作系统。根据Linus 在comp.os.minix 新闻组上发布的消息,我们可以知道他逐步从学习minix 系统到开发自己的Linux 的过程。

Linus 第1 次向comp.os.minix 投递消息是在1991 年3 月29 日。题目是“gcc on minix-386 doesn’toptimize”,是有关gcc 编译器在minix-386 上运行的优化问题,由此可知,Linus在1991年的初期已经开始深入研究了minix 系统,并在这段时间有了改进minix 操作系统的思想,而且在进一步学习minix 系统中,逐步演变为想自己重新设计一个基于Intel 80386 体系结构的新操作系统。他在回答有人提出minix 上的一个问题时,所说的第一句话是“阅读源代码”(“RTFSC (Read the F**ingSource Code :-)”)。他认为答案就在源程序中。这也说明了对于学习系统软件来说,你不光需要懂得系统的工作基本原理,还需要结合实际系统,学习实际系统的实现方法。因为理论毕竟是理论,其中省略了许多枝节,而这些枝节问题虽然没有太多的理论含量,但却是一个系统必要的组成部分,就象麻雀身上的一根羽毛。

从 1991 年的4 月份开始,Linus 几乎花了全部时间研究386-minix 系统(hack the kernel),并且尝试着移植GNU 的软件到该系统上(GNU gcc、bash、gdb 等)。并于4 月13 日在comp.os.minix 上发布说自己已经成功地将bash 移植到了minix 上,而且已经爱不释手、不能离开这个shell 软件了。

第一个与Linux 有关的消息是在1991 年7 月3 日在comp.os.minix 上发布的(当然此时还不存在Linux这个名称,当时Linus 的脑子里想的可能是FREAX ,FREAX 的英文含义是怪诞的、怪物、异想天开等)。其中透露了他正在进行Linux 系统的开发,并且在Linux 最初的时候已经想到要实现与POSIX(UNIX 的国际标准)的兼容问题了。

在 Linus 的下一发布的消息中(1991 年8 月25 日 comp.os.minix),他向所有minix 用户询问“What wouldyou like to see in minix?”(“你最想在minix 中见到什么?”),在该消息中他首次透露出正在开发一个(免费的)386(486)操作系统,并且说只是兴趣而已,代码不会很大,也不会象GNU 的那样专业。开发免费操作系统这个想法从4 月份就开始酝酿了,希望大家反馈一些对于minix 系统中喜欢那些特色不喜欢什么等信息,由于实际的和其它一些原因,新开发的系统刚开始与minix 很象(并且使用了minix 的文件系统)。并且已经成功地将bash(1.08 版)和gcc(1.40 版)移植到了新系统上,而且在过几个月就可以实用了。

最后,Linus 申明他开发的操作系统没有使用一行minix 的源代码;而且由于使用了386 的任务切换特性,所以该操作系统不好移植(没有可移植性),并且只能使用AT 硬盘。对于Linux 的移植性问题,Linus当时并没有考虑。但是目前Linux 几乎可以运行在任何一种硬件体系结构上。到了 1991 年的10 月5 日,Linus 在comp.os.minix 新闻组上发布消息,正式向外宣布Linux 内核系统的诞生(Free minix-like kernel sources for 386-AT)。这段消息可以称为Linux 的诞生宣言,并且一直广为流传。因此10 月5 日对Linux 社区来说是一个特殊的日子,许多后来Linux 的新版本发布时都选择了这个日子。所以RedHat 公司选择这个日子发布它的新系统也不是偶然的。

通过上述说明,我们可以对上述Linux 的五大支柱归纳如下:

UNIX 操作系统 — UNIX 于1969 年诞生在Bell 实验室。Linux 就是UNIX 的一种克隆系统。UNIX 的重要性就不用多说了。

MINIX 操作系统 — Minix 操作系统也是UNIX 的一种克隆系统,它于1987 年由著名计算机教授Andrew S. Tanenbaum 开发完成。由于MINIX 系统的出现并且提供源代码(只能免费用于大学内)在全世界的大学中刮起了学习UNIX 系统旋风。Linux 刚开始就是参照Minix 系统于1991 年才开始开发。

GNU 计划– 开发Linux 操作系统,以及Linux 上所用大多数软件基本上都出自GNU 计划。Linux 只是操作系统的一个内核,没有GNU 软件环境(比如说bash shell),则Linux 将寸步难行。

POSIX 标准 — 该标准在推动Linux 操作系统以后朝着正规路上发展起着重要的作用。是Linux 前进的灯塔。

INTERNET — 如果没有Intenet 网,没有遍布全世界的无数计算机骇客的无私奉献,那么Linux 最多只能发展到0.13(0.95)版的水平。


原创文章,作者:N24_小辉,如若转载,请注明出处:http://www.178linux.com/54903

(0)
N24_小辉N24_小辉
上一篇 2016-10-27
下一篇 2016-10-27

相关推荐

  • 马哥教育网络班22期-第2周博客作业2

    2、bash的工作特性之命令状态返回值和命令展开所涉及的内容及其示例演示 bash的基础特性:命令的执行状态结果   命令执行的状态结果:   bash通过状态返回值来输出此结果:     成功:0     失败:1-255  &…

    Linux干货 2016-08-22
  • OpenSSL

    三个组件: openssl: 多用途的命令行工具; libcrypto: 加密解密库; libssl:ssl协议的实现; PKI:Public Key Infrastructure CA RA CRL 证书存取库  建立私有CA: OpenCA openssl  证书申请及签署步骤: 1、生成申请请求; 2、RA核验; 3、CA签署; 4…

    Linux干货 2015-03-21
  • sed命令用法

    sed命令 [option]  “script”  file sed命令是一种行编辑工具,他是逐行对文件进行编辑。sed命令有一个模式空间,他将一行命令读取进模式空间进行编辑,完成后将本行数据打印再读取下一行数据进行处理。 option: -n:静默模式不显示模式空间内容 -f:从指定文件中读取 -i:修改源文件(-i.###会自动将原文…

    Linux干货 2016-08-12
  • bash脚本之进阶

    bash脚本 1、终端打印 1、单双引号(echo) 双引号: ①在双引号里面打不出! ②双引号,可以在文本中使用“;”,“;”在bash中被用作命令定界符。 单引号: 变量替换在单引号中无效。 2、printf:不会自动添加换行符,要手动添加 如下: 结果: 3、补充: echo 要使用转义系列需要加e,!号除外 2、变量和环境变量 脚本语言通常…

    Linux干货 2016-11-28
  • MySQL备份与恢复

    备份与恢复 数据备份就是将数据以某种方式加以保留,以便在系统需要时重新恢复和利用。其作用主要体现在如下两个二方面: 在数据遭到意外事件破坏时,通过数据恢复还原数据 数据备份是历史数据保存归档的最佳方式 数据恢复就是把遭到破坏、删除和修改的数据还原为可使用的数据的过程 为什么要备份数据? 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分…

    Linux干货 2016-11-25
  • yum用法第一篇-简介及常见用法使用总结

    一、简介     yum( 全称为:Yellow dog Updater, Modified),是红帽(RedHat)家族(RedHat、Fedora、CentOS)中的前端shell的软件包管理器,主要基于对RPM包的管理,能够根据配置文件(类似于svn资源库配置文件)从指定的服务器自动下载RPM包进行安装,其最大的优势就是可…

    Linux干货 2015-09-22