关于BSD操作系统
2009-09-26 17:59:04 Administrator
BSD(Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(University of California, Berkeley)开创。BSD用来代表由此派生出的各种套件集合。
BSD 常被当作工作站级别的 Unix 系统,这得归功于 BSD 使用授权非常地宽松,许多1980年代成立的计算机公司,不少都从BSD 中获益,比较著名的例子如 DEC 的 Ultrix,以及 Sun 公司的 SunOS。1990年代,BSD 很大程度上被System V 4.x版以及 OSF/1 系统所取代,但其开源版本被采用,促进了因特网的开发。
历史
最初的 Unix 套件源自1970年代的贝尔实验室,操作系统中包含源码,这样研究人员以及大学都可以参与修改扩充。1974年,第一个伯克利的 Unix 系统被安装在 PDP-11 机器上,计算机科学系而后将其用作扩展研究。其他大学开始对伯克利的软件感兴趣,在1977年,伯克利的研究生 Bill Joy 将程序整理到磁带上,作为 first Berkeley Software Distribution(1BSD)发行。1BSD 被作为第六版 Unix 系列,而不是单独的操作系统。主要程序包括Pascal编译器,以及Joy的 ex行编辑器。
Second Berkeley Software Distribution(2BSD)于1978年发布,除了对 1BSD 中的软件进行升级,还包括了 Joy 写的两个新程序:vi 文本编辑器(ex 的可视版本),以及 C Shell。这两个新添的程序,在 Unix 系统中至今仍被使用。
2BSD 以后的版本逐渐从 PDP-11 结构向 VAX 计算机移植。最新的 2.11BSD 于1992年发布,更新维护一直持续到2003年。
VAX 版本
1978 年,伯克利安装了第一台 VAX 计算机,但将 Unix 移植到 VAX 构架的 UNIX/32V,并没有利用 VAX 虚拟内存的能力。伯克利的学生重写了 32V 的大部分内核,以实现虚拟内存的支持。1979年,3BSD诞生了,这个新系统完整包括了一个新内核、从 2BSD 移植到 VAX 的工具,还有 32V 原来的工具。
3BSD 的成功使得 Defense Advanced Research Projects Agency(DARPA,美国国防部高级研究规划署)决定资助伯克利的Computer Systems Research Group(CSRG,计算机系统研究组),以开发一个 Unix 标准平台,以供 DARPA 未来的研究。1980年10月,CSRG 发布了 4BSD,该版本对 3BSD 有许多改进。
相较于 VAX 机器的主流系统 VMS,用户对 BSD 时有批评,1981年6月终于发布了 4.1BSD 。Bill Joy 大幅度提高了 4.1BSD 内核的性能,可以跟 VMS 在多个平台上媲美。为了避免与 AT&T 的 UNIX System V(UNIX第五版)混淆,这个版本没有取名为 5BSD。
以后 4.2BSD 历经两年,实现了多项重大改进后才得以问世。之前有三个中间版本相继推出:4.1a 引入了修改版的 BBN 预试中 TCP/IP;4.1b 引入了由Marshall Kirk McKusick 实现的新型 Berkeley Fast File System(FFS);4.1c 是 4.2BSD 开发最后几个月的过渡版。
1983年8月,4.2BSD 正式发布。这是 1982年 Bill Joy 离开前去创建 Sun 公司后的第一个版本,此后 Mike Karels 和Marshall Kirk McKusick 一直负责领导该项目。值得一提的是,这次 BSD小恶魔正式出场,最初是 Marshall Kirk McKusick 的画作,出现在打印好的文档封面上,由 USENIX 发行。
1986 年6月,4.3BSD 发布。该版本主要是将 4.2BSD 的许多新贡献作性能上的提高,原来的 4.1BSD 没有很好地协调。在该版本之前,BSD 的 TCP/IP 实现已经跟 BBN 的官方实现有较大差异。经过数月测试后,DARPA 认为 4.2BSD 更合适,所以在 4.3BSD 中作了保留。
4.3BSD 后,BSD 逐渐抛开老式的 VAX 平台。Computer Consoles有限公司开发的 Power 6/32 平台(代号为"Tahoe"),当时看来大有可为,但不久即被他们的开发员所遗弃。然而1988年6月移植的 4.3BSD-Tahoe 却表现不俗,BSD将依赖于机器跟不依赖于机器的代码分离,为未来系统的可移植性打下了良好的基础。
到此为止,所有的 BSD 版本混合了专属的 AT&T UNIX 代码,这样继续使用就需要从 AT&T 获得许可证。源码许可证当时非常地昂贵,几个其他组织对单独的网络代码版感兴趣,完全独立于 AT&T,这样就可不受许可证的支配。1989年6月,Networking Release 1(Net/1)诞生了,没有 AT&T 授权也能使用,可遵照 BSD许可证进行自由再发布。
1990年初,推出了 4.3BSD-Reno。该版本是 4.4BSD 早期开发的过渡版,使用该版本被戏称为是一种赌博,因为 Reno 就是内华达州的赌城雷诺。
Net/2以及法律问题
Net/1 以后,Keith Bostic 提议,BSD 系统中应该有更多的非 AT&T 部分,以 Net/1 的协议发布。随后他开始一个项目,着手重新实现一些 Unix标准工具,其中不使用原来的 AT&T 代码。例如,Vi,也就是基于最初 UNIX 上 ed 的编辑器,被重写为 nvi(new vi)。18个月后,所有 AT&T 的工具被替换,剩下的只是存留在内核的一些 AT&T 文件。残馀文件被剔除后,1991年6月,Net/2 诞生了,这是一个全新的操作系统,并且可以自由发布。
Net/2 成为 Intel 80386 构架上两种移植的主要组成,包括由 William Jolitz 负责,自由的 386BSD;以及专属的BSD/OS,由Berkeley Software Design(BSDi)负责。386BSD 本身虽然短命,但不久即成为 NetBSD 和 FreeBSD 原始代码的基础。
BSDi 很快就与 AT&T 的 UNIX Systems Laboratories(USL)附属公司产生了法律纠纷,后者将拥有System V版权,以及UNIX商标。1992年,USL 正式对 BSDi 提起诉讼,这导致 Net/2 发布被中止,直到其源码能够被鉴定为符合 USL 的版权。
由于最后判决悬而未决,这桩法律诉 讼将 BSD 后裔的开发,特别是自由软件,延迟了两年,这导致没有法律问题的 Linux 内核获得了极大的支持。Linux 跟 386BSD 的开发几乎同时起步,林纳斯·托瓦兹曾说,当时如果有自由的Unix-like操作系统,基于 386 的,他就可能不会创造 Linux。尽管无法预料这给以后的软件业究竟造成了什么样的影响,但有一点可以肯定,Linux 更加丰富了这块土壤。
4.4BSD及其后裔
这 桩诉讼在1994年1月了结,更多地满足了伯克利的利益。伯克利套件的18,000个文件中,只有3个文件要求删除,另有70个文件要求修改,并显示 USL的版权说明。这项调解另外要求,USL 不得对下面的 4.4BSD 提起诉讼,不管是用户还是伯克利代码的分发者。
1994年6月,4.4BSD 以两种形式发布:可自由再发布的 4.4BSD-Lite,不包含 AT&T 源码;另有4.4BSD-Encumbered,跟以前的版本一样,遵照 AT&T 的许可证。
伯克利的最终版本是1995年的 4.4BSD-Lite Release 2,而后 CSRG 解散,在伯克利的 BSD 开发告一段落。在这之后,几种基于 4.4BSD 的套件(比如 FreeBSD、OpenBSD 和 NetBSD)得以继续维护。另外由于 BSD许可证的宽容,许多其他的操作系统,不管是自由还是专属,都采用了 BSD 的代码。例如,Microsoft Windows在 TCP/IP 的实现上引入了 BSD 代码;经过重新编译,在当前 Windows 版本中,还采用了许多BSD命令行下的网络工具。
尽管Linux占据了最重要的位置,ISP和系统管理员们也经常选择BSD里的一种作为操作系统,BSD是一类建立在代码共享基础上的操作系统,在过去的20多年里,美国的顶尖学院都一直在对它进行研究。
BSD究竟是什么呢?如果你在寻找一个非Windows操作系统,又为什么应该考虑使用它们呢? 学术渊源BSD是Berkeley Software Distribution的缩写,这是一个由加州大学伯克利分校开发的软件集合。最初BSD只是作为AT&T的Unix早期版本的附加软件包出现,后来它就逐渐地发展为一个完整的,高度复杂的具有Unix风格的操作系统——它第一个集成了网络功能。通过追求完美主义的学术机构的努力以及经过挑剔的几代学生的测试,BSD也许是最健壮、最安全和最值得信赖的操作系统。对以BSD为基础的操作系统来说运行几年无需维护或重启是很平常的事情。由于BSD是在代码公开的环境下发展起来的,因而它对所有的顾客(包括那些想把它植入商业产品的软件开发商)都是完全免费的。来自BSD的网络代码几乎是所有现代操作系统的中心部分,包括Linux、OS/2以及Windows 95以来几乎每个Windows版本。
如果BSD真是那么优秀,为什么他们没有像Linux那样成为市场的领先者呢?这其中最重要的原因就是文化。许多Linux开发商把他们自己看作软件革命者,但是学术团体(BSD真正扎根的地方)的成员们更注重于结果而不是让这个产品出名。BSD在系统管理员和ISP用户中也有一批忠实的追随者,但是这些人通常更喜欢把他们的BSD作为秘密武器,而不是到处宣扬他们正在使用这种操作系统。结果没有多少人认识到BSD的各个版本,对IBM InterJet和Maxtor的网络存储服务器这些高可靠性的嵌入式系统提供了有利的支持。BSD的一个变种NetBSD被认为是全世界最轻便的操作系统,它可以在不同的CPU(种类超过64个)和几百种不同品牌和型号的计算机上运行。现在共有5个流行的BSD操作系统,其中的三个——FreeBSD,NetBSD 和OpenBSD——得到了BSD的授权,操作系统和源代码都是免费的,任何人都可以用于任何目的。其馀的两个BSD/OS和Mac OS X是商业产品,它们以开放的BSD代码为基础,具有特殊的优势和与众不同的技术。在本文中将讨论免费的版本:
NetBSD 注重可移植性,侧重于多平台支持。
OpenBSD 注重安全,它上面已经有多款重要的安全类型软件了。
FreeBSD 兼顾安全和可移植性,同时更倾向于吸收其他操作系统的优点,侧重于稳定性上。
FreeBSD 的硬件驱动更多,SMP 支持比较好,但不如 DragonFlyBSD;NetBSD 的 Xen 支持最好,SMP 支持也比较好,不如 FreeBSD,NetBSD 的网络协议栈的 SMP 支持还不够,代码容易移植,发明了伟大的 pkgsrc,OpenBSD 的 SMP 支持较差,内核代码大多单线程的,性能最差的 BSD;对新硬件支持很差,代码许可证要求很严格,因此缺一些固件,没有 ZFS;DragonFlyBSD 的 SMP 支持最好,但还不成熟;安全性上 FreeBSD/NetBSD/OpenBSD 大致相当,OpenBSD 稍优,都比 Linux 强一个数量级。
所以结论是:生产服务器用 Linux 或者 FreeBSD,玩家或者嵌入式用 NetBSD,安全至上用 OpenBSD。
技术
BSD 开创了现代计算机的潮流。伯克利的 Unix 率先包含了库,以支持互联网协议栈(Stack)、伯克利套接字(sockets)。通过将套接字与Unix操作系统的文件描述符相整合,库用户通过计算 机网络读写数据,跟直接在磁盘上操作一样容易。AT&T 实验室最后也发布了他们的 STREAMS 库,在软件栈中引入了类似的功能,虽然结构层有所改进,但由于套接字库已经使用广泛,另外由于少了对开放套接字的轮询功能(类似于伯克利库中的 select调用),使得将软件移植到这个新的API很困难。
时至今日,BSD 仍在学术机构,乃至许多商业或自由产品的高科技实验中,继续被用作试验平台,甚至在嵌入式设备中,其使用也在增长。由于 BSD 设计出众,代码编写清晰,包括它的文档(特别是参考文档,常被称为“man pages”),使得这样的系统,几乎成了程序员眼中的乐土。
许多公司都使用 BSD 衍生出的代码,如此便可以支持他们的知识产权,许多自由软件,如 Linux、GNU 工程都遵照 GNU General Public License,与之相比,BSD 执照要更加灵活。当然这也导致人们的机器上在跑一些 BSD 软件,但自己却并不知情。有兴趣的话,可以试着找找符号 “University of California, Berkeley”,比如在产品文档内,二进制代码中的静态数据段,或者 ROM中,还有通过一些产品的用户界面看看“about”(关于)内容。
有意思的是,通过一个二进制兼容层(compatibility layer),在 BSD 操作系统上,可以运行相同构架下其他操作系统上的原程序。这比模拟器要快得多,通过这个方法,针对 Linux 的应用程序,也可以在 BSD 上全速运行。所以BSD 不仅适合作为服务器,也可作为工作站来使用,众所周知,现在针对 Linux 的商业或封闭源码软件越来越多了。管理员也可以将一些原本只用于商业UNIX 变种的专属软件,转移到 BSD,这样在保持原有功能的同时,操作系统更趋现代,可继续使用这些软件,直到有更好的替代。
结末,当前的 BSD 操作系统 变种支持各种通用标准,包括 IEEE、ANSI、ISO 以及 POSIX,同时保持了传统 BSD 的良好风范。
BSD 家族
不同的 BSD 操作系统针对不同的用途及用户,可应用于多种硬件构架。在政府机构中常能看到 BSD 的身影。虽然下面的 BSD 功能可能并非独有,但每种 BSD 在各自的领域,都逐渐具有了良好声誉,有的专注于性能,有的则以安全见长。
* FreeBSD在 BSD 家族中以易用性与高性能而著称,由于主要用作微处理器架构,如i386、AMD's 64-bit i386 扩展(AMD64),所以 FreeBSD 非常关注众多处理器。FreeBSD在 x86 和 AMD64 服务器上,运行得非常好,当然它也可以在其他硬件构架上运行。
* NetBSD 拥有出色的可移植性,能在多达54种平台上运行,小到嵌入式的掌上设备,大到服务器群,NetBSD 甚至还在国际空间站中服务。
* OpenBSD 在密码学和安全方面特别出众,可移植性也很好,但是略逊于 NetBSD。安全功能如 OpenSSH,是由 OpenBSD 率先开创的。以 OpenBSD 作为严格与高度安全的机器运行,普遍的受到好评。
* DragonflyBSD 是一个由 FreeBSD 4-STABLE 分支出来的项目,重点在于轻量级而高效能的线程、多处理支持以及其它用户工具、第三方软件管理系统的改进。它同时是最年轻的 BSD 。提供比 FreeBSD 更优秀的对称多处理机系统,并使内核直接支持SSI集群,以取得更好的计算效果。这个项目在此方向上,才开始数年,主要关注 x86 平台。
* Darwin是苹果公司的项目、Mac OS X的基础,很大程度上使用 FreeBSD 的代码和工具。
* FreeSBIE 项目提供 FreeBSD各个发行版本的 live CD,类似于基于Linux的Knoppix项目。
* Frenzy 是另一个基于 FreeBSD 的 live CD 项目,主要针对俄语用户。启动中按“e”才是英文版界面。
* BSDeviant 是一个 FreeBSD 的 live CD 项目,目的在于产生可以存在一张迷你CD-R上的系统。
* PicoBSD 为了在单张 1.44MB磁片 执行而设计的 FreeBSD 精简版本。
* m0n0wall 是一个基于 FreeBSD 的防火墙项目。
* FreeNAS 是一个基于 FreeBSD 的 NAS 轻量级伺服器。
* PC-BSD 为桌面/个人环境设计的 BSD 分支。
* relaxBSD 为桌面/个人环境设计的 BSD分支,由华人开发,注重中文环境。
* RedBSD 嵌入式的影像,使用BSD和Ruby内核。
必须注意的是,上面所罗列的,更多地是基于感性认识,并针对其开发焦点,并没有严格地比较规则。实际而言,每种具体的 BSD 都可担当许多角色任务。
结构
跟 AT&T Unix 一样,BSD 也采用单内核,这意味着内核中的设备驱动,在核心态下运行,从而作为操作系统的核心部分。BSD 的早期版本被用作组建 Sun公司的SunOS,造就了 Unix 工作站的第一波热潮。
BSD的后裔
当前衍生自BSD的Unix类操作系统:
* BSD/OS(已倒闭)
* FreeBSD
o DragonFly BSD
+ FireFlyBSD
o Freesbie(live CD版,光盘自启动版)
o DesktopBSD(采用Userland/Kernel,与FreeBSD同步)
o PC-BSD(采用Userland/Kernel,与FreeBSD同步)
o PicoBSD
o TrustedBSD -(非操作系统,而是为FreeBSD和Darwin构件扩展的一个项目)
o ClosedBSD
o pfSense
o m0n0wall
o FreeNAS
* NetBSD
o OpenBSD
+ ekkoBSD(已倒闭)
+ MicroBSD
+ MirOS BSD
* NeXTSTEP
o OpenStep(已被Mac OS X和Mac OS X Server取代)
* Darwin(Mac OS X的核心, 由FreeBSD 4.5和NeXTSTEP混合派生)
o Mac OS X
* HPBSD(已倒闭)
关于FreeBSD
FreeBSD 是什么
FreeBSD 是一种先进的操作系统,它支持 x86 兼容(包括 Pentium 和 Athlon)、amd64 兼容(包括 Opteron、Athlon64 和 EM64T)、 ARM、IA-64、PC-98以及 UltraSPARC 架构的计算机。其源于 BSD ──美国加州大学伯克利分校开发 UNIX 版本它由来自世界各地的志愿者开发和维护,为不同架构的计算机系统提供了不同程度的支持。
先进特性
FreeBSD 提供了网络、性能、安全以及兼容性等多方面的先进特性,这些特性即使是在当今最优秀的商业操作系统中亦有所欠缺。
强大的互联网解决方案
FreeBSD 是理想的 Internet 和 Intranet 服务器。即使是在超重负载下,它仍然能够有效地使用内存,为同时运行的数以千计的用户进程提供良好的响应时间。
能够运行大量可供选择的应用
FreeBSD 的卓越品质,配合当今廉价而高速的 PC 硬件,使其成为经济地代替商业 UNIX 工作站的绝佳系统。另外还集成了大量的桌面 和服务器应用程序,使它能够很好的满足您的各种需要。
易于安装
FreeBSD 能通过多种介质进行安装,包括普通光盘、DVD 光盘、软盘、磁带以及 MS-DOS分区等,如果您拥有网络连接,您甚至可以直接通过匿名 FTP,或者 NFS 服务器安装它。您只需按照我们为您准备的安装指导操作就可以了。
FreeBSD 是 free 的
您或许认为如此优秀的操作系统必定需要花费大笔金钱来购买,而 FreeBSD 却从发行版本到它的全部源代码都免费提供!您可以购买或下载一份来体验一下它所能带给您的惊喜。
帮助 FreeBSD
帮助FreeBSD 并不是一件困难的事情。您需要做的,就是找出 FreeBSD 需要改进的地方,并将您 (经过精心编写和整理过) 的改进通过 send-pr 发回 FreeBSD 计划,或者直接把它们转交给您认识的 FreeBSD committer。我们欢迎包括从文档到艺术作品,乃至源代码在内的任何改进。此外,您还可以通过帮助 FreeBSD这篇文章了解更多的信息。
即使您不是开发人员,也仍然可以通过其他途径帮助 FreeBSD。FreeBSD 基金会是一个非赢利性组织,对其捐款是完全课税减免的。要了解更多有关其基金会的信息,请和 board@FreeBSDFoundation.org 联系,或致信: The FreeBSD Foundation, 7321 Brockway Dr. Boulder, CO 80303, USA.
关于FreeBSD 技术上的先进性
FreeBSD 提供了许多先进特性。无论运行何种应用, 总会希望系统资源发挥其最大潜能。FreeBSD 的先进特性,能够帮助您达成这一目的。
基于 4.4BSD 的完整操作系统。
FreeBSD 的高贵根基,派生于来自加州大学伯克利分校计算机系统研究小组最新的 BSD 软件版本。 因此由 4.4BSD 系统架构师们撰写的 The Design and Implementation of 4.4BSD Operating System (4.4BSD 操作系统的设计与实现) 也详细地介绍了 FreeBSD 的大部分核心功能。
来自全球各地的富有经验和开发技能的志愿者的长期努力,使得 FreeBSD Project 得以在许多方面拓展 4.4BSD 操作系统的能力, 并不断使这一操作系统的每一个新版本更为稳定、性能更好,并提供用户所需的各种新功能。
FreeBSD 不仅提供了更好的性能,也提供了更好的与其它操作系统的兼容性,于此同时,其所需要的人工管理和干预却比其他操作系统更少。
FreeBSD 的开发人员解决了许多操作系统设计上的疑难问题, 能够为您提供许多先进特性:
* 与虚拟内存整合的文件系统快取缓存能够持续地调整用于程序和磁盘快取缓存的内存量。其结果是,不仅为应用程序提供了良好的内存管理,也提供了更高的磁盘访问性能,并将系统管理员从调整快取缓存尺寸的工作中解放出来。
* 兼容性模块 使得其他操作系统的应用程序能够在 FreeBSD 上正确运行,目前已经能够兼容为 Linux、 SCO UNIX,以及 System V Release 4 所编译的二进制形式的程序。
* Soft Updates 在不牺牲安全性和可靠性的情况下,大大改善了文件系统性能。它能够分析文件系统的元数据操作,并避免以同步方式执行全部操作。它维护关于元数据操作的一组内部状态,并利用这些信息对元数据进行缓存,并通过重新组织元数据操作的方法,来合并对同一文件的后续操作,并重新排列元数据操作,以便使其更为有效地进行处理。 包括后台文件系统检查,以及文件系统快照等在内的一系列功能,均是在 soft updates 所提供的一致性和性能基础之上完成的。
* 文件系统快照,使得管理员能够获得文件系统的原子快照,并利用文件系统中的剩馀空间来实现备份以及 后台 fsck,使系统立即进入多用户模式,而无需等待突然断电之后所需的文件系统清理操作。
* 支持安全 IP (IPsec) 为网络提供了更好的安全性,并支持下一代 Internet 协议,IPv6。FreeBSD 的 IPsec 实现同时还支持许多硬件加密加速设备。
* 直接可用的 IPv6 支持 来自 KAME 的 IPv6 协议栈,使得 FreeBSD 得以无缝地接入下一代网络环境。FreeBSD 甚至还附带了许多支持 IPv6 的应用程序!
* 多线程的 SMP 架构 能够在多个处理器上并行地运行内核,配合抢占式内核,使得高优先级的内核任务能够抢占其他内核动作,从而缩短响应时间。这包括了多线程的网络协议栈以及多线程的虚拟内存子系统。从 FreeBSD 6.x 开始,完全并行执行的VFS,使得 UFS 文件系统能够同时在多个处理器上执行,从而使得 CPU-密集的 I/O 优化所造成的负荷得以分担。
* 通过 pthread 接口提供的 M:N 应用程序线程支持 使得线程能够以具有强适应性的方式在多个 CPU 上执行,并将许多用户线程映射为少量 内核调度实体(KSE)。通过采用 调度器激活(Scheduler Activation) 模型,线程支持能够适应更多应用程序的需要。
* Netgraph 可插入式网络协议栈,使开发人员能够很容易地通过清晰的网络层次抽象来动态扩展网络协议栈。Netgraph 节点能够实现各式各样的新网络服务,包括封装、隧道、加密,以及性能适配。其结果是,能够轻易地迅速完成原形构建,以及产品级的部署,也减少了引入新问题的机会。
* 可扩展的内核安全 TrustedBSD MAC 框架,能够使开发人员为特定的环境定制操作系统的安全模型,无论是建立强化的安全策略,还是部署完整性策略的强制性机密标签。示范的安全策略包括多级别安全 (MLS),以及 Biba 完整性保护。第三方模块包括 SEBSD,一种基于 FLASK 实现的 Type Enforcement。
* GEOM 可插入式存储层,使您能够迅速开发并将新的存储服务完全集成进 FreeBSD 存储系统。 GEOM 提供了一致和连贯的模型,用于发现和堆叠存储服务,从而使层次式服务,如 RAID 和卷管理更为容易。
* FreeBSD 基于 GEOM 的磁盘加密 (GBDE),通过 GEOM 框架提供了强加密保护,并能用于保护文件系统、交换区设备,以及其他保存在存储介质上的数据。
* 内核队列(Kernel Queues, kqueue) 使得应用程序能够更为高效地响应各种异步事件,包括文件和 socket IO,从而改善应用程序和系统性能。
* 数据接收过滤器 (Accept Filters) 使得类似 web 服务器这样的连接密集型应用,能够将它们的部分功能,完全放入操作系统内核进行,从而改善性能。
FreeBSD 提供了一系列用于保护网络和服务器的安全功能。其开发人员在关注性能和稳定性的同时,也同样非常关注安全。FreeBSD 包含了内核级的状态式 IP 防火墙,以及许多其他服务,如 IP 代理网关、访问控制表、强制式访问控制、基于 jail 的虚拟主机,以及加密保护的存储。这些功能可以用于支持高度安全地为不同的不受信客户或消费者提供托管服务,为网络进行可靠的分区,以及建立安全的信息净化和信息流传递途径。还包含了对于加密软件、安全 shell (SSH)、Kerberos 认证、通过 jail 建立 "虚拟服务器"、 通过 chroot 服务限制应用程序访问文件系统的能力,安全 RPC 机制,以及为支持 TCP wrapper 的服务建立访问控制表等多种能力。FreeBSD对新用户来说具有最多的参考资料。FreeBSD Handbook 为新的顾客提供了极好的使用说明,许多出版公司都推出了针对初级和高级用户所写的指导书。简而言之,FreeBSD对Linux来说是一个强大的挑战者,它也许能提供出众的稳定性,安装的简易性和方便。
关于OpenBSD
OpenBSD 致力于开发一个自由,基于 4.4BSD 的多平台,与 UNIX 兼容的操作系统。我们重点致力于可移植性,标准化,正确性,前瞻的安全性和完整的加密技术。OpenBSD 支持 SVR4(Solaris),FreeBSD,Linux,BSD/OS,SunOS 和 HP-UX 下大多数程序的二进制仿真运行。
我们提供密码系统
简单的说: 因为我们有这个能力。OpenBSD 项目基地设在加拿大。加拿大出口控制列表没有对密码学软件的出口设置特别的限制性条款,甚至明文规定允许自由出口自由的密码学软件。Marc Plumb 已经做了一些研究来验证相关的法律。
因此,OpenBSD 项目把密码学技术嵌入了操作系统的很多地方。我们要求所使用的加密软件可以免费获取并拥有良好版权许可。我们不会直接使用那些带有令人厌恶的专利权的加密 软件。我们还要求这些软件是从有出口许可的国家输出的,因为我们并不想违反任何国家的法律。我们当前使用的密码学软件组件来自阿根廷,澳大利亚,加拿大,德国,希腊, 挪威和瑞士。
当我们制作 OpenBSD 发行版本和快照版本的时候,在允许自由输出的国家来完成,以保证我们提供的源码和二进制代码可以被用户自由使用。在过去提供的编译好的版本是在加拿大,瑞士和德国完成的。
OpenBSD 包含了 Kerberos V。其基本代码来自瑞士的可以出口的 Heimdal 版本。我们的 X11 源码也已经扩展到可以使用 Kerberos 验证机制了VPNC TEST PARTNER OpenBSD 是第一个带 IPsec 栈的操作系统。从1997年发行的 OpenBSD 2.1 版本就开始带 IPsec。完全内嵌在内核里面的 IPsec 栈,加上可基于多种卡的硬件加速,以及我们自由的 ISAKMP 守护进程, 被用于 VPNC 中的一些 IPsec 兼容性测试主机。
今天,密码学技术成为了增强操作系统安全性的一个重要手段,OpenBSD 中对密码学技术的利用可以分为以下几个方面。
OpenSSH
从版本 2.6 开始,OpenBSD 包含 OpenSSH,一个完全自由免费,没有任何专利权限制的 ssh 实现。 OpenSSH 除了兼容 ssh 版本 1 之外还增加了很多新特性:
* 所有受限制的组件(也就是专利权,参见 ssl(8)) 都已被直接从源码中去除掉;任何有版权或者专利权的软件用外部函数库的形式提供。
* 已经更新到支持 ssh 协议 2。
* 增加对 Kerberos 验证和票据传递的支持
* 支持使用 skey(1) 进行一次性密码验证。
粗略的说,我们发行的是 OpenBSD 自由的兼容版 ssh。大约过了一年后,我们把 OpenSSH 扩展至支持 SSH 2 协议,从而 OpenSSH 就可以支持所有主要的 3 个 SSH 协议: 1.3,1.5 和 2.0。
伪随机数生成器
伪随机数生成器(PRNG)为应用程序提供数字流,并且为系统安全提供了重要的特性:
* 对外界来说,即使知道上次的输出,也不可能推测出随机数生成器下次的输出。
* 产生的数字不应该有重复模式,这意味着 PRNG 应该有很长的周期。
PRNG 通常只是算法,相同的初始值将产生同样的输出序列。在一个多用户操作系统上,有很多来源为 PRNG 产生种子。OpenBSD 内核使用鼠标中断时间,网络数据中断延时,键盘按键间隔时间,和磁盘 IO 信息来填充熵池。内核例程可以读取随机数,而且也通过设备输出到了用户空间程序。到目前为止,随机数用于如下场合:
* Dynamic sin_port allocation in bind(2).
* PIDs of processes.
* IP datagram IDs.
* RPC transaction IDs (XID).
* NFS RPC transaction IDs (XID).
* DNS Query-IDs.
* Inode generation numbers, see getfh(2) and fsirand(8).
* Timing perturbance in traceroute(8).
* Stronger temporary names for mktemp(3) and mkstemp(3)
* Randomness added to the TCP ISS value for protection against spoofing attacks.
* random padding in IPsec esp_old packets.
* To generate salts for the various password algorithms.
* For generating fake S/Key challenges.
* In isakmpd(8) to provide liveness proof of key exchanges.
密码学散列函数
散列函数在接收输入的数据后,将其压缩到一个恒定的大小。对散列函数来说,不可能出现以下情况:
* 两个输入产生同样的输出(抵抗冲突)。
* 对于一个给定的输入,找到一个不同的输入得到了相同的输出(抵抗前象)。
在 OpenBSD 中,MD5,SHA1,和 RIPEMD-160 用于散列函数,举例来说:
* In S/Key(1) to provide one time passwords.
* In IPsec(4) and isakmpd(8) to authenticate the data origin of packets and to ensure packet integrity.
* For FreeBSD-style MD5 passwords (not enabled by default), see passwd.conf(5)
* In libssl for digital signing of messages.
密码学变换
密码学变换被用于数据的加密和解密。通常是一个加密密钥用于数据加密,一个解密密钥用作数据的解密,一个密码学变换的安全性取决于密钥自身。OpenBSD 提供了 DES, 3DES, Blowfish 和 Cast 用于内核与用户空间的程序,它们用于许多场合,例如:
* In libc for creating Blowfish passwords. See also the USENIX paper on this topic.
* In IPsec(4) to provide confidentiality for the network layer.
* In isakmpd(8) to protect the exchanges where IPsec key material is negotiated.
* In AFS to protect the messages passing over the network, providing confidentiality of remote filesystem access.
* In libssl to let applications communicate over the de-facto standard cryptographically secure SSL protocol.
像FreeBSD和NetBSD一样,OpenBSD也有很多应用软件支持,它包含了许多免费软件包的定制版本。它的软件库没有FreeBSD中的那么大,但是包含了大多数你想给Unix服务器或者工作站安装的工具。OpenBSD的x86版本也能够运行针对FreeBSD、Linux和 Solaris创建的程序。OpenBSD支持10种计算机体系结构——比FreeBSD还多,但是没有NetBSD多。从OpenBSD自身或者 Cheap Bytes那儿就可以得到其光盘。然而你可能得不到ISO映射文件,因为开发组更愿意通过出售CD的方式作为对他们努力的支持。可以通过网络来安装操作系统,只不过安装者的用户界面没有FreeBSD那么美观而已。在这三种免费BSD中,OpenBSD的开发成员最少并且对Unix新手来说是最难学的。但是如果你确实需要一个牢靠的网络防火墙或者服务器的话,OpenBSD正是合适的选择。
关于NetBSD
NetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit Alpha 服务器到手持设备和嵌入式设备。NetBSD计划的口号是:"Of course it runs NetBSD"。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。
特色
NetBSD 应用在广大的硬件平台范围而且是非常易于移植的,可能是世界上最容易移植的操作系统。NetBSD 核心和应用程序的完整原始码在所支持的平台上,都是有效的,NetBSD 的基本特色有:
可移植性(超过 20 种平台被支持)
程序代码的品质与正确度高
稳定性
研究与革新
上述的特性也带来了间接的优势。举例来说,如果只在单一平台上工作, 可能认为你的兴趣并不在可移植性方面,但是可移植性早已是程序代码的品质特性之一:没有良好的撰写和组织的基础,要同时支持许多平台是不可能的,而且高品质的程序代码是任何完善且稳定的软件系统的基础,不用担心只有少数人能理解它。由于着重于架构性与品质性的问题,这有助于增进 NetBSD 程序代码的潜力和驱动程序的品质。
经由区分这些 NetBSD 特性的差异,我们可得知它是无法满足于只在某些方 面能得以实行的情况。某些系统似乎有着如此的设计哲学"如果它能运作,它便是良好的 "。而就 NetBSD 方面来说,它可以描写成"除非它是对的,不然它将无法工作"。想想看,有多少重量级和"有特色" 的程序在今日早已被伤心地丢弃了;所以你将了解为什么 NetBSD 要避免这种浪费成本的情形发生。
目标使用者
在 NetBSD 网站上有着如此叙述:" NetBSD 项目提供了一个可以免费自由散布的系统,不论是专家,玩家和研究者都可以随心所欲的使用它 "。我要补充的是如果你想要学习 Unix,NetBSD 是一个蛮理想的系统,主要是因为它所坚持的标准(此项目的目标之一)以及在有专有作 业系统的硬件平台上,能执行得和它们一样好;我们可以说"想要学习和使用 Unix,你不需要购买昂贵的硬件:你可以再利用在你仓库里堆放 的老旧 PC 或 Mac"。当然,如果你需要在种种不同的平台上执行,NetBSD 可能是你最佳的(唯一的)选择。
哲学
与同时代的很多操作系统不同的是, NetBSD安装程序充分体现了占用空间小的特性,它坚持生产出一个稳定的完整的不冗馀的基系统。在执行安装后你得到的是一个完整的可运行系统,但是还缺少很多应用程序,比如举例说,浏览器(NetBSD与其它的操作系统相反,不将浏览器作为一系统的一个组成部分):你有决定安装什么样的程序在你的机器上的自由,包安装的方式也使得你安装新的程序非常地便捷。
这种途径的另一个优势就是基系统的运行可以独立与这些附加的包;如果你想升级你的Perl的版本,你根本没必要去担心这样会破坏你系统的一些其他部分。当你安装NetBSD时,你不会发现有巨大的应用程序的预打包:你现在可能认为这是个缺点,但是如果你开始理解了在这个现象之后的理念你就会感到这样提供给你很大的自由度。当你安装这些软件集合时(其他认为你设计好的) 你会发现你的硬盘里存储了大量的程序,但这些中的大部分你都不会用到(甚至根本不知道它是什么),这只能浪费空间(或许使你的系统稳定性减弱):这些可是典型的BSD用户所不希望的。
即使你开始了解NetBSD,还总是会有一些东西使你感到迷惑,极端一致性,系统的逻辑结构以及对细节的关注:什么事情都不会发生的很偶然,任何事情都在预料之中。是的,这就是质量,在我看来,这就是NetBSD与其他操作系统特性上的最大差别。
我们可以花上数天去争论操作系统相对的优点(有些人就喜欢这么做),但是如果你不去认真的尝试你就不能做出真正的判断。我深信我的观点,因为我在我的邮件列表当中看到很多次:如果你尝试着使用NetBSD,你就会被它在复杂性与高效性之间的完美的平衡所征服;所有的问题都有不止一种解决方案:NetBSD不会满足于寻求“一种”解决方案,而总是尽力去发掘最简便,最一流的方法。NetBSD是一种能使你用你自己的方式去做你的工作的工具。在这个意义上他就是一个可供选择的工具;就像用钢笔一样:你努力的去学如何去用他,但一旦你学会了你就可以忘记所有与这钢笔有关的事情,去尽情的写尽情的画。
像FreeBSD和OpenBSD一样,NetBSD有一个巨大的应用软件库(比FreeBSD少而比OpenBSD多),并且能够运行针对 Linux和其它版本Unix编译的商业程序。从Wasabi Systems,Cheap Bytes和其它一些NetBSD Web站点列出来的资源那里可以得到NetBSD光盘。可以下载ISO光盘映射文件,也可以通过FTP进行安装。
关于OpenBSD与NetBSD的一些对比
OpenBSD在安全体系结构方面做得更多,比如编译器支持防止缓冲区溢出,地址随机化,这样攻击者就无法预测任何东西,严格的内存保护,因此可写内存是不可执行的,这种机制会使开发人员更难窥探信息和无法利用任何漏洞。这也使得运行不安全的软件更加安全。
其也是第一个引入许多新技术的公司,特别是在实用密码领域,例如更强的密码哈希(bcrypt)、交换加密等。不会影响任何漏洞利用率的东西(这并不是一个安全指标,如果一个人没有发现一个bug,也许他只是不够努力),但对于实际的安全性有很大帮助。在实际的安全部分,可以看到广泛的特权分离,经典的chrooting,因为如果发生了坏事情,会使它变得不那么糟糕。
通常来看,NetBSD绝不缺乏安全性,但其核心项目目标并未明确提及安全性:
提供设计良好、稳定、快速的BSD系统,
避免许可证麻烦,
提供可移植系统,可在多种硬件平台上运行,
与其他系统良好的互操作性,
尽可能符合开放系统标准。
NetBSD和OpenBSD是非常相似的内核和共享。内核具有几乎完全相同的体系结构,并且共享许多相同的特性。两者之间的项目目标是不同的,NetBSD试图与不同的处理器架构兼容。所有的*BSD的首要目标是非常安全,这也意味着很少有功能。
两者使用随机的方式提升内核安全性
问:“你在哪内存哪里存放内核?” 答:“对不起,我不知道”
NetBSD 的团队发布了他们的第一个代码片段来实现 64 位 AMD 处理器的内核 ASLR - 地址空间布局随机化。KASLR 版本随机将 NetBSD 内核加载到内存中,为内核提供与 ASLR 提供给应用程序相同的安全保护。随机代码的内存位置使得诸如缓冲区溢出之类的错误类更难利用,因为攻击者不能轻易预测(并访问)错误所暴露的内存位置。开发人员 Maxime Villard 解释说,目前的实现在引导程序和内核之间放置了一个专门的内核“prekern”。
“内核被编译为具有 GENERIC_KASLR 配置文件的原始库,而 prekern 被编译为静态二进制文件。当机器启动时,引导程序将跳入 prekern。prekern 将内核以随机虚拟地址(VA)重新定位,然后跳转到其中。最后,内核执行一些清理,并正常执行”。Villard 补充说,实现还不够完整。例如,内核放在 prekern 的地方,它都位于连续的内存块中。这也确立未来的发展方向,主要是:
独立的内核部分
修改几个内核入口点,不会将内核地址泄露给用户界面
随机内核堆(现在仍然是静态的)
OpenBSD 项目在2017年6月份首次提供了类似的方法,称为内核随机化地址链接(kernel address randomised link 或 KARL),用于加固内核,防止内核级的缓冲溢出。类似地址空间布局随机化 (ASLR) 应用于随机应用程序的内存地址,KARL 随机化了内核加载,使得攻击者无法预测出一个内核缓冲溢出的内存分配地址。其创始人 Theo de Raadt 称,以前的内核二进制总是在相同的物理内存和相同的虚拟地址空间。这将在 OpenBSD 6.2 版本成为 mainstream 特性。
看完了“站上之家”的评论,再多说几句:如果服务器生产环境使用,个人比较推荐使用FreeBSD;另外FreeBSD有几个比较出名的分支,感觉有必要介绍下:
FreeNAS is an open source storage platform based on FreeBSD and supports sharing across Windows, Apple, and UNIX-like systems.
pfSense is a free, open source customized distribution of FreeBSD tailored for use as a firewall and router.
以上是来自freeBSD官网对它们的介绍。如是是出于安全方面的考量,OpenBSD是个不错的选择;不过其所支持包比较少,所以比较适合做为防火墙使用。NetBSD对硬件平台支持是最多的,所以一些较老旧的硬件在转不到所支持的系统驱动时,可以旧物利用,装下NetBSD。
Main differences between main bsd-os
None of the BSDs are distributions, they are all complete operating systems.
OpenBSD
Each developer working on OpenBSD has their priorities, but the main focus of the project is to be the number one most secure and robust operating system.
Other common goals are:
Provide the best development platform possible. Provide full source access to developers and users, including the ability to look at CVS tree changes directly.
Try to make the software stable and robust.
Greater integration of cryptographic software.
Track and implement standards (ANSI, POSIX, parts of X/Open, etc.)
Support as many different systems and hardware as feasible.
Be as politics-free as possible; solutions should be decided on the basis of technical merit.
Focus on being developer-oriented in all senses.
Do not let serious problems sit unsolved.
Make a release approximately every six months.
FreeBSD
FreeBSD is an operating system for a variety of platforms which focuses on features, speed, and stability.
Some of the main goals of the project are:
Cutting edge features.
Powerful and very fast Internet solutions.
Advanced embedded platform.
Run a huge number of applications.
Easy to install.
NetBSD
NetBSD users enjoy a simple, well-documented, and fully integrated UNIX-like system that feels minimal, and in many ways traditional, while including many modern and interesting features, and support for recent hardware.
Some of the main goals of the project are:
Provides a portable system, which runs on many hardware platforms.
Provides a well designed, stable, and fast BSD system.
Avoid encumbering licenses.
Interoperate well with other systems.
Conforms to open systems standards as much as is practical.
DragonFly BSD
One of the original goals of the DragonFly BSD project was performance-oriented, the project sought to do SMP in more superior ways to the work being done in other operating system kernels. The results of this process has been an immense improvement in scalability.
Some of the main goals of the project are:
Extreme scaling with autotuning kernel resources and scaling metrics such as kernel hash-tables based on available memory.
Kernel modifications with advanced thread scheduling.
Development of the the DragonFly BSD device filesystem.
Implement a virtual kernel feature for running DragonFly BSD kernels in userland inside DragonFly BSD kernels.
Implement a revamped NFSv3 implementation which gets rid of the nfsiod threads and implements a fully asynchronous RPC mechanism using only two kernel threads.
Development of the DragonFly BSD HAMMER filesystem.
初识操作系统(Operating System, OS)
每天都会使用操作系统。*BSD、Windows、Linux、安卓、iOS都是非常经典的操作系统。有了它们才能够更好地使用电脑、手机这样的硬件终端设备。那么,操作系统的本质是什么?到底具有哪些功能和特性?常说的进程、线程、内核、中断、GUI、CLI……又是什么意思?
接下来,我们一起寻找答案。
1、什么是操作系统
从本质来看,操作系统其实就是一套软件。同样是代码写出来的,像目前普遍使用的Windows10,主要就是C/C++写的。操作系统属于软件,但又是非常特别的软件。在整个计算机架构中,它距离硬件最近,是最重要、最基础的软件。它负责控制和管理整个计算机系统的资源,并进行合理组织、调度和分配。
计算机的层次架构
对于用户(user)和上层应用软件(application)来说,操作系统把很多底层的细节都封装隐藏起来了,通过标准接口以供调用,大大简化了上层应用软件的开发。与此同时,它又提供了很多辅助性的工具和功能,让用户可以更好地掌控计算机的运行状态。换言之,操作系统就是一个超级大管家。它什么都管,为用户服务,向用户负责。
2、操作系统的核心功能
可以把操作系统的核心功能分为以下几个方面:
首先,是进程管理。进程(Process)和线程(Thread)是操作系统里非常重要的两个概念。
进程是资源分配的基本单位。进程的创建、终止、调度、同步以及进程间的通信,都是由操作系统负责的。应用程序的运行,包括操作系统本身核心功能的运行,都是以进程的形式存在。
每个进程都包括程序的代码、数据、状态,以及操作系统为该程序分配的资源(如内存空间、文件句柄、网络端口等)。操作系统通过进程管理,来确保各个进程能够高效、安全地共享CPU时间。使用“Ctrl+Alt+Del”快捷键调出Windows的任务管理器,就可以看到很多的进程:
线程,则是操作系统进行运算调度的最小单位。线程比进程更低一级,是进程内的一个可以独立调度和指派的执行单元。一个进程中可以有多个线程,共享相同的内存空间和资源,可以更容易地进行通信和数据共享。
进程与线程
例如启动了一个浏览器程序,那么操作系统就会开启一个相应的进程。这个进程里面,又会有多个线程,如HTTP请求线程、事件响应线程、渲染线程等。如果关闭这个浏览器程序,从任务管理器可以看到,这个进程和对应的线程都没有了。当然也可以在任务管理器里,直接右键关闭某个进程,程序也就强制退出了。Unix里干掉一个进程,用的命令就是“kill(杀掉)”。
线程是操作系统发展到后期才引入的。它进一步提供了程序执行的并发性,提高了系统的效率。进程和线程,都可以包括执行态、就绪态、阻塞态等状态。对进程和线程进行管理,本质上是为了实现对CPU资源的分配调度。
进程的状态变化
需要注意的是,一个程序可以对应一个或多个进程。而一个进程同样可以对应一个或多个程序(虽然比较罕见)。
其次,是内存管理。
冯·诺依曼架构:程序要从硬盘到内存,才能够被运算器(CPU)处理。每个程序都有足够的内存空间,才能够确保正常运行。
冯·诺依曼架构
运行之后,内存也需要被及时释放,才能让别的程序能够继续占用。内存的分配和回收,也是操作系统负责的。
除了内存分配之外,操作系统还要负责进行内存保护(确保每道程序都只在自己的内存区中运行,进程间不会互相干扰)、地址映射(将程序装入内存运行时,需要将逻辑地址转化成内存单元所限定的物理地址)、内存扩充(借助于虚拟存储技术,从逻辑上去扩充内存容量)等工作。
第三,是设备管理。
这是操作系统的重要任务之一。它管理和控制外部设备(如打印机、硬盘驱动器、键盘、鼠标等)的使用。
具体来说,它可以完成用户进程提出的I/O(输入/输出)请求,为用户进程分配其所需的I/O设备,提高CPU和I/O设备的利用率,提高I/O速度等。高效的I/O调度,可以避免I/O设备拖累系统的运行。
第四,是文件系统管理。
文件系统是操作系统用来组织、存储和检索数据的一套规则。
操作系统提供了一套机制来组织、存储、检索和保护文件,包括文件的创建、删除、读写操作以及目录结构的维护。我们也可以将其理解为操作系统对存储设备和资源的管理和调用。
第五,安全和权限管理。
有了硬件和软件资源,我们还要指定到底谁能够使用他们。操作系统提供了完善的安全机制,确保用户数据的安全性和完整性,包括用户身份验证、访问控制和加密等。
最后一个核心功能,是交互界面。
操作系统是用户使用计算机的一个工具。想要让计算机工作,就需要一个好的交互界面,以便下达命令、查询结果和状态。
操作系统提供图形用户界面(GUI,Graphical User Interface)或命令行界面(CLI,Command Line Interface),让用户能够方便地与计算机交互。这是计算机在社会全面普及的一个前提条件。
很多人都用过“cmd”调出来的命令行界面,那种叫做联机命令接口,也叫交互式命令接口。以前还学过写批处理文件(.bat文件),给出好几个命令,让计算机逐一执行。这种叫做脱机命令接口。
值得一提的是,除了(联机、脱机)命令接口之外,操作系统还提供了程序接口。程序接口由一组系统调用(system call)组成,允许应用程序间接调用资源。
现在有很多应用程序通过高级语言提供的库函数,间接地进行系统调用。我们可以把这些库函数视为对系统调用的进一步封装。
需要注意,凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式,向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性。
3、操作系统的主要特性
除了上面说的六大功能之外,操作系统还有四个特性,分别是:并发、共享、异步和虚拟。
并发(concurrency)
并发是指两个或多个事件在同一时间间隔内发生。操作系统具有并发特性,是指其具有处理和调度多个程序同时执行的能力。
并发和并行(parallellism)是有区别的。并行是两个或多个事件在同一时刻内发生。举例来说,一边吃苹果一边看电视,是并行。在1分钟之内,吃掉苹果、香蕉和橘子,就是并发。
很显然,并发从宏观上看是同时发生的,但从微观上看是分时交替发生的(和通信里面的“时分复用”有点像)。并发考验的是资源调度的能力,而并行需要硬件的支持,例如采用多核处理器。
共享(sharing)
共享,是指系统中的资源可以被多个并发进程共同使用。它分为两种方式,互斥共享和同时共享。
互斥共享,顾名思义,就是不能同时用。仅当某一进程访问完并释放该资源后,才允许另一进程对该资源进行访问。这类资源称为临界资源或独占资源。计算机系统中的大多数物理设备,都属于临界资源。
同时共享,就是能够多个进程同时用。最典型的设备,就是硬盘。
大家应该也能看出来,共享的底层逻辑也和通信里的“复用”很像,要么是分时间进行共享(时分复用),要么是分物理资源空间进行共享(空分复用),主要看资源本身的属性。
异步(asynchronous)
异步,是同步的反义词。同步是大家保持节奏统一。而异步,是各走各的路。
异步的前提是并发性,如果没有并发性,所有任务只能one by one串行执行,那么,整个系统的效率就会很低。
虚拟(virtualization)
最后是虚拟。在云计算里经常会提到,把一个物理实体,变成若干个逻辑实体,就是虚拟。虚拟的本质,还是资源的复用;只不过通过软件来实现了,用户感受到的,是多个逻辑实体。
4、操作系统的组成架构
再来看看操作系统的组成架构。
操作系统的核心,就是大家经常听说的内核(Kernel)。
内核直接与硬件进行交互,并为其他系统软件和应用程序提供服务。前面提到的操作系统核心功能,除了交互界面之外,大部分都和内核紧密相关。计算机里的CPU,工作状态可以分为内核态(也叫管态)和用户态(也叫目态)。运行内核程序时,是内核态。运行应用程序时,是用户态。
操作系统有“非特权指令”和“特权指令”两种指令。
应用程序只能使用“非特权指令”,如:加法指令、减法指令等。 操作系统内核作为 “管理者”,有时会让CPU执行一些high level的“特权指令”,如:内存清零指令。这些指令影响重大,只允许操作系统内核来使用。
操作系统处于内核态时,可以执行特权指令。如果处于用户态,则只能执行非特权指令。
一般情况下,开机后,用户启动某个应用程序,操作系统内核程序会在合适的时候主动让出CPU,转为用户态。这时,如果发生了中断,操作系统内核会强行夺回CPU控制权,让CPU从用户态变成内核态。
这里刚好说说中断(Interrupt)。
处理器收到信号,提示发生了某个事件,应予以注意,这种情况就称为中断。中断分为内中断和外中断。
内中断也叫异常,是指来自CPU内部的事件,与当前执行的指令有关。如程序的非法操作码、地址越界、运算溢出等。异常不能被屏蔽,一旦出现,就应该立即处理。
内中断的三种典型类型包括:陷入(trap,由陷入指令引发)、故障(fault,由错误条件引发,内核程序可以修复)、终止(abort,由致命错误引发,内核程序无法修复)。
外中断是狭义的中断,信号来自CPU外部的事件,与当前执行的指令无关。很典型的是时钟中断以及I/O中断,或人为干预。
继续说内核。
内核也分为多种类型,例如大内核、微内核。所有的操作系统服务都在内核空间运行,就是大内核,也叫宏内核、单内核。
只有最基本的系统服务在内核空间运行,其它服务移出内核,放在用户空间运行,是微内核。
相比大内核,微内核更灵活,架构更清晰,代码没有那么庞大,维护起来也容易一些。
操作系统负责交互界面的,叫做外壳(Shell);前面介绍过,包括命令解释器和图形用户界面等。
除了内核和外壳以外,操作系统还包括许多其它工具和服务,例如备份工具、恢复工具、防火墙、网络服务等。
下面是一个操作系统整体架构的示意图:
这个是Linux系统的架构示意图,供参考:
5、操作系统的常见分类
随着技术的发展,现代操作系统已经经历了数十年的演变。
计算机硬件不断升级,用户需求不断增加,系统功能不断迭代,最终导致整个操作系统的架构变得越来越复杂,代码体积也越来越庞大。
以前的操作系统只有几MB,一个软盘就能装得下。现在的操作系统,动辄几个GB,甚至几十GB,DVD光盘都装不下。
针对不同的设备终端类型,以及不同的应用场景,操作系统也出现了细化分的趋势,演变出很多类别。
通常来说,操作系统大致可以分为桌面操作系统、服务器操作系统、移动终端操作系统、嵌入式操作系统、物联网操作系统等类别。
如下表所示:
BSD 常被当作工作站级别的 Unix 系统,这得归功于 BSD 使用授权非常地宽松,许多1980年代成立的计算机公司,不少都从BSD 中获益,比较著名的例子如 DEC 的 Ultrix,以及 Sun 公司的 SunOS。1990年代,BSD 很大程度上被System V 4.x版以及 OSF/1 系统所取代,但其开源版本被采用,促进了因特网的开发。
历史
最初的 Unix 套件源自1970年代的贝尔实验室,操作系统中包含源码,这样研究人员以及大学都可以参与修改扩充。1974年,第一个伯克利的 Unix 系统被安装在 PDP-11 机器上,计算机科学系而后将其用作扩展研究。其他大学开始对伯克利的软件感兴趣,在1977年,伯克利的研究生 Bill Joy 将程序整理到磁带上,作为 first Berkeley Software Distribution(1BSD)发行。1BSD 被作为第六版 Unix 系列,而不是单独的操作系统。主要程序包括Pascal编译器,以及Joy的 ex行编辑器。
Second Berkeley Software Distribution(2BSD)于1978年发布,除了对 1BSD 中的软件进行升级,还包括了 Joy 写的两个新程序:vi 文本编辑器(ex 的可视版本),以及 C Shell。这两个新添的程序,在 Unix 系统中至今仍被使用。
2BSD 以后的版本逐渐从 PDP-11 结构向 VAX 计算机移植。最新的 2.11BSD 于1992年发布,更新维护一直持续到2003年。
VAX 版本
1978 年,伯克利安装了第一台 VAX 计算机,但将 Unix 移植到 VAX 构架的 UNIX/32V,并没有利用 VAX 虚拟内存的能力。伯克利的学生重写了 32V 的大部分内核,以实现虚拟内存的支持。1979年,3BSD诞生了,这个新系统完整包括了一个新内核、从 2BSD 移植到 VAX 的工具,还有 32V 原来的工具。
3BSD 的成功使得 Defense Advanced Research Projects Agency(DARPA,美国国防部高级研究规划署)决定资助伯克利的Computer Systems Research Group(CSRG,计算机系统研究组),以开发一个 Unix 标准平台,以供 DARPA 未来的研究。1980年10月,CSRG 发布了 4BSD,该版本对 3BSD 有许多改进。
相较于 VAX 机器的主流系统 VMS,用户对 BSD 时有批评,1981年6月终于发布了 4.1BSD 。Bill Joy 大幅度提高了 4.1BSD 内核的性能,可以跟 VMS 在多个平台上媲美。为了避免与 AT&T 的 UNIX System V(UNIX第五版)混淆,这个版本没有取名为 5BSD。
以后 4.2BSD 历经两年,实现了多项重大改进后才得以问世。之前有三个中间版本相继推出:4.1a 引入了修改版的 BBN 预试中 TCP/IP;4.1b 引入了由Marshall Kirk McKusick 实现的新型 Berkeley Fast File System(FFS);4.1c 是 4.2BSD 开发最后几个月的过渡版。
1983年8月,4.2BSD 正式发布。这是 1982年 Bill Joy 离开前去创建 Sun 公司后的第一个版本,此后 Mike Karels 和Marshall Kirk McKusick 一直负责领导该项目。值得一提的是,这次 BSD小恶魔正式出场,最初是 Marshall Kirk McKusick 的画作,出现在打印好的文档封面上,由 USENIX 发行。
1986 年6月,4.3BSD 发布。该版本主要是将 4.2BSD 的许多新贡献作性能上的提高,原来的 4.1BSD 没有很好地协调。在该版本之前,BSD 的 TCP/IP 实现已经跟 BBN 的官方实现有较大差异。经过数月测试后,DARPA 认为 4.2BSD 更合适,所以在 4.3BSD 中作了保留。
4.3BSD 后,BSD 逐渐抛开老式的 VAX 平台。Computer Consoles有限公司开发的 Power 6/32 平台(代号为"Tahoe"),当时看来大有可为,但不久即被他们的开发员所遗弃。然而1988年6月移植的 4.3BSD-Tahoe 却表现不俗,BSD将依赖于机器跟不依赖于机器的代码分离,为未来系统的可移植性打下了良好的基础。
到此为止,所有的 BSD 版本混合了专属的 AT&T UNIX 代码,这样继续使用就需要从 AT&T 获得许可证。源码许可证当时非常地昂贵,几个其他组织对单独的网络代码版感兴趣,完全独立于 AT&T,这样就可不受许可证的支配。1989年6月,Networking Release 1(Net/1)诞生了,没有 AT&T 授权也能使用,可遵照 BSD许可证进行自由再发布。
1990年初,推出了 4.3BSD-Reno。该版本是 4.4BSD 早期开发的过渡版,使用该版本被戏称为是一种赌博,因为 Reno 就是内华达州的赌城雷诺。
Net/2以及法律问题
Net/1 以后,Keith Bostic 提议,BSD 系统中应该有更多的非 AT&T 部分,以 Net/1 的协议发布。随后他开始一个项目,着手重新实现一些 Unix标准工具,其中不使用原来的 AT&T 代码。例如,Vi,也就是基于最初 UNIX 上 ed 的编辑器,被重写为 nvi(new vi)。18个月后,所有 AT&T 的工具被替换,剩下的只是存留在内核的一些 AT&T 文件。残馀文件被剔除后,1991年6月,Net/2 诞生了,这是一个全新的操作系统,并且可以自由发布。
Net/2 成为 Intel 80386 构架上两种移植的主要组成,包括由 William Jolitz 负责,自由的 386BSD;以及专属的BSD/OS,由Berkeley Software Design(BSDi)负责。386BSD 本身虽然短命,但不久即成为 NetBSD 和 FreeBSD 原始代码的基础。
BSDi 很快就与 AT&T 的 UNIX Systems Laboratories(USL)附属公司产生了法律纠纷,后者将拥有System V版权,以及UNIX商标。1992年,USL 正式对 BSDi 提起诉讼,这导致 Net/2 发布被中止,直到其源码能够被鉴定为符合 USL 的版权。
由于最后判决悬而未决,这桩法律诉 讼将 BSD 后裔的开发,特别是自由软件,延迟了两年,这导致没有法律问题的 Linux 内核获得了极大的支持。Linux 跟 386BSD 的开发几乎同时起步,林纳斯·托瓦兹曾说,当时如果有自由的Unix-like操作系统,基于 386 的,他就可能不会创造 Linux。尽管无法预料这给以后的软件业究竟造成了什么样的影响,但有一点可以肯定,Linux 更加丰富了这块土壤。
4.4BSD及其后裔
这 桩诉讼在1994年1月了结,更多地满足了伯克利的利益。伯克利套件的18,000个文件中,只有3个文件要求删除,另有70个文件要求修改,并显示 USL的版权说明。这项调解另外要求,USL 不得对下面的 4.4BSD 提起诉讼,不管是用户还是伯克利代码的分发者。
1994年6月,4.4BSD 以两种形式发布:可自由再发布的 4.4BSD-Lite,不包含 AT&T 源码;另有4.4BSD-Encumbered,跟以前的版本一样,遵照 AT&T 的许可证。
伯克利的最终版本是1995年的 4.4BSD-Lite Release 2,而后 CSRG 解散,在伯克利的 BSD 开发告一段落。在这之后,几种基于 4.4BSD 的套件(比如 FreeBSD、OpenBSD 和 NetBSD)得以继续维护。另外由于 BSD许可证的宽容,许多其他的操作系统,不管是自由还是专属,都采用了 BSD 的代码。例如,Microsoft Windows在 TCP/IP 的实现上引入了 BSD 代码;经过重新编译,在当前 Windows 版本中,还采用了许多BSD命令行下的网络工具。
尽管Linux占据了最重要的位置,ISP和系统管理员们也经常选择BSD里的一种作为操作系统,BSD是一类建立在代码共享基础上的操作系统,在过去的20多年里,美国的顶尖学院都一直在对它进行研究。
BSD究竟是什么呢?如果你在寻找一个非Windows操作系统,又为什么应该考虑使用它们呢? 学术渊源BSD是Berkeley Software Distribution的缩写,这是一个由加州大学伯克利分校开发的软件集合。最初BSD只是作为AT&T的Unix早期版本的附加软件包出现,后来它就逐渐地发展为一个完整的,高度复杂的具有Unix风格的操作系统——它第一个集成了网络功能。通过追求完美主义的学术机构的努力以及经过挑剔的几代学生的测试,BSD也许是最健壮、最安全和最值得信赖的操作系统。对以BSD为基础的操作系统来说运行几年无需维护或重启是很平常的事情。由于BSD是在代码公开的环境下发展起来的,因而它对所有的顾客(包括那些想把它植入商业产品的软件开发商)都是完全免费的。来自BSD的网络代码几乎是所有现代操作系统的中心部分,包括Linux、OS/2以及Windows 95以来几乎每个Windows版本。
如果BSD真是那么优秀,为什么他们没有像Linux那样成为市场的领先者呢?这其中最重要的原因就是文化。许多Linux开发商把他们自己看作软件革命者,但是学术团体(BSD真正扎根的地方)的成员们更注重于结果而不是让这个产品出名。BSD在系统管理员和ISP用户中也有一批忠实的追随者,但是这些人通常更喜欢把他们的BSD作为秘密武器,而不是到处宣扬他们正在使用这种操作系统。结果没有多少人认识到BSD的各个版本,对IBM InterJet和Maxtor的网络存储服务器这些高可靠性的嵌入式系统提供了有利的支持。BSD的一个变种NetBSD被认为是全世界最轻便的操作系统,它可以在不同的CPU(种类超过64个)和几百种不同品牌和型号的计算机上运行。现在共有5个流行的BSD操作系统,其中的三个——FreeBSD,NetBSD 和OpenBSD——得到了BSD的授权,操作系统和源代码都是免费的,任何人都可以用于任何目的。其馀的两个BSD/OS和Mac OS X是商业产品,它们以开放的BSD代码为基础,具有特殊的优势和与众不同的技术。在本文中将讨论免费的版本:
NetBSD 注重可移植性,侧重于多平台支持。
OpenBSD 注重安全,它上面已经有多款重要的安全类型软件了。
FreeBSD 兼顾安全和可移植性,同时更倾向于吸收其他操作系统的优点,侧重于稳定性上。
FreeBSD 的硬件驱动更多,SMP 支持比较好,但不如 DragonFlyBSD;NetBSD 的 Xen 支持最好,SMP 支持也比较好,不如 FreeBSD,NetBSD 的网络协议栈的 SMP 支持还不够,代码容易移植,发明了伟大的 pkgsrc,OpenBSD 的 SMP 支持较差,内核代码大多单线程的,性能最差的 BSD;对新硬件支持很差,代码许可证要求很严格,因此缺一些固件,没有 ZFS;DragonFlyBSD 的 SMP 支持最好,但还不成熟;安全性上 FreeBSD/NetBSD/OpenBSD 大致相当,OpenBSD 稍优,都比 Linux 强一个数量级。
所以结论是:生产服务器用 Linux 或者 FreeBSD,玩家或者嵌入式用 NetBSD,安全至上用 OpenBSD。
技术
BSD 开创了现代计算机的潮流。伯克利的 Unix 率先包含了库,以支持互联网协议栈(Stack)、伯克利套接字(sockets)。通过将套接字与Unix操作系统的文件描述符相整合,库用户通过计算 机网络读写数据,跟直接在磁盘上操作一样容易。AT&T 实验室最后也发布了他们的 STREAMS 库,在软件栈中引入了类似的功能,虽然结构层有所改进,但由于套接字库已经使用广泛,另外由于少了对开放套接字的轮询功能(类似于伯克利库中的 select调用),使得将软件移植到这个新的API很困难。
时至今日,BSD 仍在学术机构,乃至许多商业或自由产品的高科技实验中,继续被用作试验平台,甚至在嵌入式设备中,其使用也在增长。由于 BSD 设计出众,代码编写清晰,包括它的文档(特别是参考文档,常被称为“man pages”),使得这样的系统,几乎成了程序员眼中的乐土。
许多公司都使用 BSD 衍生出的代码,如此便可以支持他们的知识产权,许多自由软件,如 Linux、GNU 工程都遵照 GNU General Public License,与之相比,BSD 执照要更加灵活。当然这也导致人们的机器上在跑一些 BSD 软件,但自己却并不知情。有兴趣的话,可以试着找找符号 “University of California, Berkeley”,比如在产品文档内,二进制代码中的静态数据段,或者 ROM中,还有通过一些产品的用户界面看看“about”(关于)内容。
有意思的是,通过一个二进制兼容层(compatibility layer),在 BSD 操作系统上,可以运行相同构架下其他操作系统上的原程序。这比模拟器要快得多,通过这个方法,针对 Linux 的应用程序,也可以在 BSD 上全速运行。所以BSD 不仅适合作为服务器,也可作为工作站来使用,众所周知,现在针对 Linux 的商业或封闭源码软件越来越多了。管理员也可以将一些原本只用于商业UNIX 变种的专属软件,转移到 BSD,这样在保持原有功能的同时,操作系统更趋现代,可继续使用这些软件,直到有更好的替代。
结末,当前的 BSD 操作系统 变种支持各种通用标准,包括 IEEE、ANSI、ISO 以及 POSIX,同时保持了传统 BSD 的良好风范。
BSD 家族
不同的 BSD 操作系统针对不同的用途及用户,可应用于多种硬件构架。在政府机构中常能看到 BSD 的身影。虽然下面的 BSD 功能可能并非独有,但每种 BSD 在各自的领域,都逐渐具有了良好声誉,有的专注于性能,有的则以安全见长。
* FreeBSD在 BSD 家族中以易用性与高性能而著称,由于主要用作微处理器架构,如i386、AMD's 64-bit i386 扩展(AMD64),所以 FreeBSD 非常关注众多处理器。FreeBSD在 x86 和 AMD64 服务器上,运行得非常好,当然它也可以在其他硬件构架上运行。
* NetBSD 拥有出色的可移植性,能在多达54种平台上运行,小到嵌入式的掌上设备,大到服务器群,NetBSD 甚至还在国际空间站中服务。
* OpenBSD 在密码学和安全方面特别出众,可移植性也很好,但是略逊于 NetBSD。安全功能如 OpenSSH,是由 OpenBSD 率先开创的。以 OpenBSD 作为严格与高度安全的机器运行,普遍的受到好评。
* DragonflyBSD 是一个由 FreeBSD 4-STABLE 分支出来的项目,重点在于轻量级而高效能的线程、多处理支持以及其它用户工具、第三方软件管理系统的改进。它同时是最年轻的 BSD 。提供比 FreeBSD 更优秀的对称多处理机系统,并使内核直接支持SSI集群,以取得更好的计算效果。这个项目在此方向上,才开始数年,主要关注 x86 平台。
* Darwin是苹果公司的项目、Mac OS X的基础,很大程度上使用 FreeBSD 的代码和工具。
* FreeSBIE 项目提供 FreeBSD各个发行版本的 live CD,类似于基于Linux的Knoppix项目。
* Frenzy 是另一个基于 FreeBSD 的 live CD 项目,主要针对俄语用户。启动中按“e”才是英文版界面。
* BSDeviant 是一个 FreeBSD 的 live CD 项目,目的在于产生可以存在一张迷你CD-R上的系统。
* PicoBSD 为了在单张 1.44MB磁片 执行而设计的 FreeBSD 精简版本。
* m0n0wall 是一个基于 FreeBSD 的防火墙项目。
* FreeNAS 是一个基于 FreeBSD 的 NAS 轻量级伺服器。
* PC-BSD 为桌面/个人环境设计的 BSD 分支。
* relaxBSD 为桌面/个人环境设计的 BSD分支,由华人开发,注重中文环境。
* RedBSD 嵌入式的影像,使用BSD和Ruby内核。
必须注意的是,上面所罗列的,更多地是基于感性认识,并针对其开发焦点,并没有严格地比较规则。实际而言,每种具体的 BSD 都可担当许多角色任务。
结构
跟 AT&T Unix 一样,BSD 也采用单内核,这意味着内核中的设备驱动,在核心态下运行,从而作为操作系统的核心部分。BSD 的早期版本被用作组建 Sun公司的SunOS,造就了 Unix 工作站的第一波热潮。
BSD的后裔
当前衍生自BSD的Unix类操作系统:
* BSD/OS(已倒闭)
* FreeBSD
o DragonFly BSD
+ FireFlyBSD
o Freesbie(live CD版,光盘自启动版)
o DesktopBSD(采用Userland/Kernel,与FreeBSD同步)
o PC-BSD(采用Userland/Kernel,与FreeBSD同步)
o PicoBSD
o TrustedBSD -(非操作系统,而是为FreeBSD和Darwin构件扩展的一个项目)
o ClosedBSD
o pfSense
o m0n0wall
o FreeNAS
* NetBSD
o OpenBSD
+ ekkoBSD(已倒闭)
+ MicroBSD
+ MirOS BSD
* NeXTSTEP
o OpenStep(已被Mac OS X和Mac OS X Server取代)
* Darwin(Mac OS X的核心, 由FreeBSD 4.5和NeXTSTEP混合派生)
o Mac OS X
* HPBSD(已倒闭)
关于FreeBSD
FreeBSD 是什么
FreeBSD 是一种先进的操作系统,它支持 x86 兼容(包括 Pentium 和 Athlon)、amd64 兼容(包括 Opteron、Athlon64 和 EM64T)、 ARM、IA-64、PC-98以及 UltraSPARC 架构的计算机。其源于 BSD ──美国加州大学伯克利分校开发 UNIX 版本它由来自世界各地的志愿者开发和维护,为不同架构的计算机系统提供了不同程度的支持。
先进特性
FreeBSD 提供了网络、性能、安全以及兼容性等多方面的先进特性,这些特性即使是在当今最优秀的商业操作系统中亦有所欠缺。
强大的互联网解决方案
FreeBSD 是理想的 Internet 和 Intranet 服务器。即使是在超重负载下,它仍然能够有效地使用内存,为同时运行的数以千计的用户进程提供良好的响应时间。
能够运行大量可供选择的应用
FreeBSD 的卓越品质,配合当今廉价而高速的 PC 硬件,使其成为经济地代替商业 UNIX 工作站的绝佳系统。另外还集成了大量的桌面 和服务器应用程序,使它能够很好的满足您的各种需要。
易于安装
FreeBSD 能通过多种介质进行安装,包括普通光盘、DVD 光盘、软盘、磁带以及 MS-DOS分区等,如果您拥有网络连接,您甚至可以直接通过匿名 FTP,或者 NFS 服务器安装它。您只需按照我们为您准备的安装指导操作就可以了。
FreeBSD 是 free 的
您或许认为如此优秀的操作系统必定需要花费大笔金钱来购买,而 FreeBSD 却从发行版本到它的全部源代码都免费提供!您可以购买或下载一份来体验一下它所能带给您的惊喜。
帮助 FreeBSD
帮助FreeBSD 并不是一件困难的事情。您需要做的,就是找出 FreeBSD 需要改进的地方,并将您 (经过精心编写和整理过) 的改进通过 send-pr 发回 FreeBSD 计划,或者直接把它们转交给您认识的 FreeBSD committer。我们欢迎包括从文档到艺术作品,乃至源代码在内的任何改进。此外,您还可以通过帮助 FreeBSD这篇文章了解更多的信息。
即使您不是开发人员,也仍然可以通过其他途径帮助 FreeBSD。FreeBSD 基金会是一个非赢利性组织,对其捐款是完全课税减免的。要了解更多有关其基金会的信息,请和 board@FreeBSDFoundation.org 联系,或致信: The FreeBSD Foundation, 7321 Brockway Dr. Boulder, CO 80303, USA.
关于FreeBSD 技术上的先进性
FreeBSD 提供了许多先进特性。无论运行何种应用, 总会希望系统资源发挥其最大潜能。FreeBSD 的先进特性,能够帮助您达成这一目的。
基于 4.4BSD 的完整操作系统。
FreeBSD 的高贵根基,派生于来自加州大学伯克利分校计算机系统研究小组最新的 BSD 软件版本。 因此由 4.4BSD 系统架构师们撰写的 The Design and Implementation of 4.4BSD Operating System (4.4BSD 操作系统的设计与实现) 也详细地介绍了 FreeBSD 的大部分核心功能。
来自全球各地的富有经验和开发技能的志愿者的长期努力,使得 FreeBSD Project 得以在许多方面拓展 4.4BSD 操作系统的能力, 并不断使这一操作系统的每一个新版本更为稳定、性能更好,并提供用户所需的各种新功能。
FreeBSD 不仅提供了更好的性能,也提供了更好的与其它操作系统的兼容性,于此同时,其所需要的人工管理和干预却比其他操作系统更少。
FreeBSD 的开发人员解决了许多操作系统设计上的疑难问题, 能够为您提供许多先进特性:
* 与虚拟内存整合的文件系统快取缓存能够持续地调整用于程序和磁盘快取缓存的内存量。其结果是,不仅为应用程序提供了良好的内存管理,也提供了更高的磁盘访问性能,并将系统管理员从调整快取缓存尺寸的工作中解放出来。
* 兼容性模块 使得其他操作系统的应用程序能够在 FreeBSD 上正确运行,目前已经能够兼容为 Linux、 SCO UNIX,以及 System V Release 4 所编译的二进制形式的程序。
* Soft Updates 在不牺牲安全性和可靠性的情况下,大大改善了文件系统性能。它能够分析文件系统的元数据操作,并避免以同步方式执行全部操作。它维护关于元数据操作的一组内部状态,并利用这些信息对元数据进行缓存,并通过重新组织元数据操作的方法,来合并对同一文件的后续操作,并重新排列元数据操作,以便使其更为有效地进行处理。 包括后台文件系统检查,以及文件系统快照等在内的一系列功能,均是在 soft updates 所提供的一致性和性能基础之上完成的。
* 文件系统快照,使得管理员能够获得文件系统的原子快照,并利用文件系统中的剩馀空间来实现备份以及 后台 fsck,使系统立即进入多用户模式,而无需等待突然断电之后所需的文件系统清理操作。
* 支持安全 IP (IPsec) 为网络提供了更好的安全性,并支持下一代 Internet 协议,IPv6。FreeBSD 的 IPsec 实现同时还支持许多硬件加密加速设备。
* 直接可用的 IPv6 支持 来自 KAME 的 IPv6 协议栈,使得 FreeBSD 得以无缝地接入下一代网络环境。FreeBSD 甚至还附带了许多支持 IPv6 的应用程序!
* 多线程的 SMP 架构 能够在多个处理器上并行地运行内核,配合抢占式内核,使得高优先级的内核任务能够抢占其他内核动作,从而缩短响应时间。这包括了多线程的网络协议栈以及多线程的虚拟内存子系统。从 FreeBSD 6.x 开始,完全并行执行的VFS,使得 UFS 文件系统能够同时在多个处理器上执行,从而使得 CPU-密集的 I/O 优化所造成的负荷得以分担。
* 通过 pthread 接口提供的 M:N 应用程序线程支持 使得线程能够以具有强适应性的方式在多个 CPU 上执行,并将许多用户线程映射为少量 内核调度实体(KSE)。通过采用 调度器激活(Scheduler Activation) 模型,线程支持能够适应更多应用程序的需要。
* Netgraph 可插入式网络协议栈,使开发人员能够很容易地通过清晰的网络层次抽象来动态扩展网络协议栈。Netgraph 节点能够实现各式各样的新网络服务,包括封装、隧道、加密,以及性能适配。其结果是,能够轻易地迅速完成原形构建,以及产品级的部署,也减少了引入新问题的机会。
* 可扩展的内核安全 TrustedBSD MAC 框架,能够使开发人员为特定的环境定制操作系统的安全模型,无论是建立强化的安全策略,还是部署完整性策略的强制性机密标签。示范的安全策略包括多级别安全 (MLS),以及 Biba 完整性保护。第三方模块包括 SEBSD,一种基于 FLASK 实现的 Type Enforcement。
* GEOM 可插入式存储层,使您能够迅速开发并将新的存储服务完全集成进 FreeBSD 存储系统。 GEOM 提供了一致和连贯的模型,用于发现和堆叠存储服务,从而使层次式服务,如 RAID 和卷管理更为容易。
* FreeBSD 基于 GEOM 的磁盘加密 (GBDE),通过 GEOM 框架提供了强加密保护,并能用于保护文件系统、交换区设备,以及其他保存在存储介质上的数据。
* 内核队列(Kernel Queues, kqueue) 使得应用程序能够更为高效地响应各种异步事件,包括文件和 socket IO,从而改善应用程序和系统性能。
* 数据接收过滤器 (Accept Filters) 使得类似 web 服务器这样的连接密集型应用,能够将它们的部分功能,完全放入操作系统内核进行,从而改善性能。
FreeBSD 提供了一系列用于保护网络和服务器的安全功能。其开发人员在关注性能和稳定性的同时,也同样非常关注安全。FreeBSD 包含了内核级的状态式 IP 防火墙,以及许多其他服务,如 IP 代理网关、访问控制表、强制式访问控制、基于 jail 的虚拟主机,以及加密保护的存储。这些功能可以用于支持高度安全地为不同的不受信客户或消费者提供托管服务,为网络进行可靠的分区,以及建立安全的信息净化和信息流传递途径。还包含了对于加密软件、安全 shell (SSH)、Kerberos 认证、通过 jail 建立 "虚拟服务器"、 通过 chroot 服务限制应用程序访问文件系统的能力,安全 RPC 机制,以及为支持 TCP wrapper 的服务建立访问控制表等多种能力。FreeBSD对新用户来说具有最多的参考资料。FreeBSD Handbook 为新的顾客提供了极好的使用说明,许多出版公司都推出了针对初级和高级用户所写的指导书。简而言之,FreeBSD对Linux来说是一个强大的挑战者,它也许能提供出众的稳定性,安装的简易性和方便。
关于OpenBSD
OpenBSD 致力于开发一个自由,基于 4.4BSD 的多平台,与 UNIX 兼容的操作系统。我们重点致力于可移植性,标准化,正确性,前瞻的安全性和完整的加密技术。OpenBSD 支持 SVR4(Solaris),FreeBSD,Linux,BSD/OS,SunOS 和 HP-UX 下大多数程序的二进制仿真运行。
我们提供密码系统
简单的说: 因为我们有这个能力。OpenBSD 项目基地设在加拿大。加拿大出口控制列表没有对密码学软件的出口设置特别的限制性条款,甚至明文规定允许自由出口自由的密码学软件。Marc Plumb 已经做了一些研究来验证相关的法律。
因此,OpenBSD 项目把密码学技术嵌入了操作系统的很多地方。我们要求所使用的加密软件可以免费获取并拥有良好版权许可。我们不会直接使用那些带有令人厌恶的专利权的加密 软件。我们还要求这些软件是从有出口许可的国家输出的,因为我们并不想违反任何国家的法律。我们当前使用的密码学软件组件来自阿根廷,澳大利亚,加拿大,德国,希腊, 挪威和瑞士。
当我们制作 OpenBSD 发行版本和快照版本的时候,在允许自由输出的国家来完成,以保证我们提供的源码和二进制代码可以被用户自由使用。在过去提供的编译好的版本是在加拿大,瑞士和德国完成的。
OpenBSD 包含了 Kerberos V。其基本代码来自瑞士的可以出口的 Heimdal 版本。我们的 X11 源码也已经扩展到可以使用 Kerberos 验证机制了VPNC TEST PARTNER OpenBSD 是第一个带 IPsec 栈的操作系统。从1997年发行的 OpenBSD 2.1 版本就开始带 IPsec。完全内嵌在内核里面的 IPsec 栈,加上可基于多种卡的硬件加速,以及我们自由的 ISAKMP 守护进程, 被用于 VPNC 中的一些 IPsec 兼容性测试主机。
今天,密码学技术成为了增强操作系统安全性的一个重要手段,OpenBSD 中对密码学技术的利用可以分为以下几个方面。
OpenSSH
从版本 2.6 开始,OpenBSD 包含 OpenSSH,一个完全自由免费,没有任何专利权限制的 ssh 实现。 OpenSSH 除了兼容 ssh 版本 1 之外还增加了很多新特性:
* 所有受限制的组件(也就是专利权,参见 ssl(8)) 都已被直接从源码中去除掉;任何有版权或者专利权的软件用外部函数库的形式提供。
* 已经更新到支持 ssh 协议 2。
* 增加对 Kerberos 验证和票据传递的支持
* 支持使用 skey(1) 进行一次性密码验证。
粗略的说,我们发行的是 OpenBSD 自由的兼容版 ssh。大约过了一年后,我们把 OpenSSH 扩展至支持 SSH 2 协议,从而 OpenSSH 就可以支持所有主要的 3 个 SSH 协议: 1.3,1.5 和 2.0。
伪随机数生成器
伪随机数生成器(PRNG)为应用程序提供数字流,并且为系统安全提供了重要的特性:
* 对外界来说,即使知道上次的输出,也不可能推测出随机数生成器下次的输出。
* 产生的数字不应该有重复模式,这意味着 PRNG 应该有很长的周期。
PRNG 通常只是算法,相同的初始值将产生同样的输出序列。在一个多用户操作系统上,有很多来源为 PRNG 产生种子。OpenBSD 内核使用鼠标中断时间,网络数据中断延时,键盘按键间隔时间,和磁盘 IO 信息来填充熵池。内核例程可以读取随机数,而且也通过设备输出到了用户空间程序。到目前为止,随机数用于如下场合:
* Dynamic sin_port allocation in bind(2).
* PIDs of processes.
* IP datagram IDs.
* RPC transaction IDs (XID).
* NFS RPC transaction IDs (XID).
* DNS Query-IDs.
* Inode generation numbers, see getfh(2) and fsirand(8).
* Timing perturbance in traceroute(8).
* Stronger temporary names for mktemp(3) and mkstemp(3)
* Randomness added to the TCP ISS value for protection against spoofing attacks.
* random padding in IPsec esp_old packets.
* To generate salts for the various password algorithms.
* For generating fake S/Key challenges.
* In isakmpd(8) to provide liveness proof of key exchanges.
密码学散列函数
散列函数在接收输入的数据后,将其压缩到一个恒定的大小。对散列函数来说,不可能出现以下情况:
* 两个输入产生同样的输出(抵抗冲突)。
* 对于一个给定的输入,找到一个不同的输入得到了相同的输出(抵抗前象)。
在 OpenBSD 中,MD5,SHA1,和 RIPEMD-160 用于散列函数,举例来说:
* In S/Key(1) to provide one time passwords.
* In IPsec(4) and isakmpd(8) to authenticate the data origin of packets and to ensure packet integrity.
* For FreeBSD-style MD5 passwords (not enabled by default), see passwd.conf(5)
* In libssl for digital signing of messages.
密码学变换
密码学变换被用于数据的加密和解密。通常是一个加密密钥用于数据加密,一个解密密钥用作数据的解密,一个密码学变换的安全性取决于密钥自身。OpenBSD 提供了 DES, 3DES, Blowfish 和 Cast 用于内核与用户空间的程序,它们用于许多场合,例如:
* In libc for creating Blowfish passwords. See also the USENIX paper on this topic.
* In IPsec(4) to provide confidentiality for the network layer.
* In isakmpd(8) to protect the exchanges where IPsec key material is negotiated.
* In AFS to protect the messages passing over the network, providing confidentiality of remote filesystem access.
* In libssl to let applications communicate over the de-facto standard cryptographically secure SSL protocol.
像FreeBSD和NetBSD一样,OpenBSD也有很多应用软件支持,它包含了许多免费软件包的定制版本。它的软件库没有FreeBSD中的那么大,但是包含了大多数你想给Unix服务器或者工作站安装的工具。OpenBSD的x86版本也能够运行针对FreeBSD、Linux和 Solaris创建的程序。OpenBSD支持10种计算机体系结构——比FreeBSD还多,但是没有NetBSD多。从OpenBSD自身或者 Cheap Bytes那儿就可以得到其光盘。然而你可能得不到ISO映射文件,因为开发组更愿意通过出售CD的方式作为对他们努力的支持。可以通过网络来安装操作系统,只不过安装者的用户界面没有FreeBSD那么美观而已。在这三种免费BSD中,OpenBSD的开发成员最少并且对Unix新手来说是最难学的。但是如果你确实需要一个牢靠的网络防火墙或者服务器的话,OpenBSD正是合适的选择。
关于NetBSD
NetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit Alpha 服务器到手持设备和嵌入式设备。NetBSD计划的口号是:"Of course it runs NetBSD"。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。
特色
NetBSD 应用在广大的硬件平台范围而且是非常易于移植的,可能是世界上最容易移植的操作系统。NetBSD 核心和应用程序的完整原始码在所支持的平台上,都是有效的,NetBSD 的基本特色有:
可移植性(超过 20 种平台被支持)
程序代码的品质与正确度高
稳定性
研究与革新
上述的特性也带来了间接的优势。举例来说,如果只在单一平台上工作, 可能认为你的兴趣并不在可移植性方面,但是可移植性早已是程序代码的品质特性之一:没有良好的撰写和组织的基础,要同时支持许多平台是不可能的,而且高品质的程序代码是任何完善且稳定的软件系统的基础,不用担心只有少数人能理解它。由于着重于架构性与品质性的问题,这有助于增进 NetBSD 程序代码的潜力和驱动程序的品质。
经由区分这些 NetBSD 特性的差异,我们可得知它是无法满足于只在某些方 面能得以实行的情况。某些系统似乎有着如此的设计哲学"如果它能运作,它便是良好的 "。而就 NetBSD 方面来说,它可以描写成"除非它是对的,不然它将无法工作"。想想看,有多少重量级和"有特色" 的程序在今日早已被伤心地丢弃了;所以你将了解为什么 NetBSD 要避免这种浪费成本的情形发生。
目标使用者
在 NetBSD 网站上有着如此叙述:" NetBSD 项目提供了一个可以免费自由散布的系统,不论是专家,玩家和研究者都可以随心所欲的使用它 "。我要补充的是如果你想要学习 Unix,NetBSD 是一个蛮理想的系统,主要是因为它所坚持的标准(此项目的目标之一)以及在有专有作 业系统的硬件平台上,能执行得和它们一样好;我们可以说"想要学习和使用 Unix,你不需要购买昂贵的硬件:你可以再利用在你仓库里堆放 的老旧 PC 或 Mac"。当然,如果你需要在种种不同的平台上执行,NetBSD 可能是你最佳的(唯一的)选择。
哲学
与同时代的很多操作系统不同的是, NetBSD安装程序充分体现了占用空间小的特性,它坚持生产出一个稳定的完整的不冗馀的基系统。在执行安装后你得到的是一个完整的可运行系统,但是还缺少很多应用程序,比如举例说,浏览器(NetBSD与其它的操作系统相反,不将浏览器作为一系统的一个组成部分):你有决定安装什么样的程序在你的机器上的自由,包安装的方式也使得你安装新的程序非常地便捷。
这种途径的另一个优势就是基系统的运行可以独立与这些附加的包;如果你想升级你的Perl的版本,你根本没必要去担心这样会破坏你系统的一些其他部分。当你安装NetBSD时,你不会发现有巨大的应用程序的预打包:你现在可能认为这是个缺点,但是如果你开始理解了在这个现象之后的理念你就会感到这样提供给你很大的自由度。当你安装这些软件集合时(其他认为你设计好的) 你会发现你的硬盘里存储了大量的程序,但这些中的大部分你都不会用到(甚至根本不知道它是什么),这只能浪费空间(或许使你的系统稳定性减弱):这些可是典型的BSD用户所不希望的。
即使你开始了解NetBSD,还总是会有一些东西使你感到迷惑,极端一致性,系统的逻辑结构以及对细节的关注:什么事情都不会发生的很偶然,任何事情都在预料之中。是的,这就是质量,在我看来,这就是NetBSD与其他操作系统特性上的最大差别。
我们可以花上数天去争论操作系统相对的优点(有些人就喜欢这么做),但是如果你不去认真的尝试你就不能做出真正的判断。我深信我的观点,因为我在我的邮件列表当中看到很多次:如果你尝试着使用NetBSD,你就会被它在复杂性与高效性之间的完美的平衡所征服;所有的问题都有不止一种解决方案:NetBSD不会满足于寻求“一种”解决方案,而总是尽力去发掘最简便,最一流的方法。NetBSD是一种能使你用你自己的方式去做你的工作的工具。在这个意义上他就是一个可供选择的工具;就像用钢笔一样:你努力的去学如何去用他,但一旦你学会了你就可以忘记所有与这钢笔有关的事情,去尽情的写尽情的画。
像FreeBSD和OpenBSD一样,NetBSD有一个巨大的应用软件库(比FreeBSD少而比OpenBSD多),并且能够运行针对 Linux和其它版本Unix编译的商业程序。从Wasabi Systems,Cheap Bytes和其它一些NetBSD Web站点列出来的资源那里可以得到NetBSD光盘。可以下载ISO光盘映射文件,也可以通过FTP进行安装。
关于OpenBSD与NetBSD的一些对比
OpenBSD在安全体系结构方面做得更多,比如编译器支持防止缓冲区溢出,地址随机化,这样攻击者就无法预测任何东西,严格的内存保护,因此可写内存是不可执行的,这种机制会使开发人员更难窥探信息和无法利用任何漏洞。这也使得运行不安全的软件更加安全。
其也是第一个引入许多新技术的公司,特别是在实用密码领域,例如更强的密码哈希(bcrypt)、交换加密等。不会影响任何漏洞利用率的东西(这并不是一个安全指标,如果一个人没有发现一个bug,也许他只是不够努力),但对于实际的安全性有很大帮助。在实际的安全部分,可以看到广泛的特权分离,经典的chrooting,因为如果发生了坏事情,会使它变得不那么糟糕。
通常来看,NetBSD绝不缺乏安全性,但其核心项目目标并未明确提及安全性:
提供设计良好、稳定、快速的BSD系统,
避免许可证麻烦,
提供可移植系统,可在多种硬件平台上运行,
与其他系统良好的互操作性,
尽可能符合开放系统标准。
NetBSD和OpenBSD是非常相似的内核和共享。内核具有几乎完全相同的体系结构,并且共享许多相同的特性。两者之间的项目目标是不同的,NetBSD试图与不同的处理器架构兼容。所有的*BSD的首要目标是非常安全,这也意味着很少有功能。
两者使用随机的方式提升内核安全性
问:“你在哪内存哪里存放内核?” 答:“对不起,我不知道”
NetBSD 的团队发布了他们的第一个代码片段来实现 64 位 AMD 处理器的内核 ASLR - 地址空间布局随机化。KASLR 版本随机将 NetBSD 内核加载到内存中,为内核提供与 ASLR 提供给应用程序相同的安全保护。随机代码的内存位置使得诸如缓冲区溢出之类的错误类更难利用,因为攻击者不能轻易预测(并访问)错误所暴露的内存位置。开发人员 Maxime Villard 解释说,目前的实现在引导程序和内核之间放置了一个专门的内核“prekern”。
“内核被编译为具有 GENERIC_KASLR 配置文件的原始库,而 prekern 被编译为静态二进制文件。当机器启动时,引导程序将跳入 prekern。prekern 将内核以随机虚拟地址(VA)重新定位,然后跳转到其中。最后,内核执行一些清理,并正常执行”。Villard 补充说,实现还不够完整。例如,内核放在 prekern 的地方,它都位于连续的内存块中。这也确立未来的发展方向,主要是:
独立的内核部分
修改几个内核入口点,不会将内核地址泄露给用户界面
随机内核堆(现在仍然是静态的)
OpenBSD 项目在2017年6月份首次提供了类似的方法,称为内核随机化地址链接(kernel address randomised link 或 KARL),用于加固内核,防止内核级的缓冲溢出。类似地址空间布局随机化 (ASLR) 应用于随机应用程序的内存地址,KARL 随机化了内核加载,使得攻击者无法预测出一个内核缓冲溢出的内存分配地址。其创始人 Theo de Raadt 称,以前的内核二进制总是在相同的物理内存和相同的虚拟地址空间。这将在 OpenBSD 6.2 版本成为 mainstream 特性。
看完了“站上之家”的评论,再多说几句:如果服务器生产环境使用,个人比较推荐使用FreeBSD;另外FreeBSD有几个比较出名的分支,感觉有必要介绍下:
FreeNAS is an open source storage platform based on FreeBSD and supports sharing across Windows, Apple, and UNIX-like systems.
pfSense is a free, open source customized distribution of FreeBSD tailored for use as a firewall and router.
以上是来自freeBSD官网对它们的介绍。如是是出于安全方面的考量,OpenBSD是个不错的选择;不过其所支持包比较少,所以比较适合做为防火墙使用。NetBSD对硬件平台支持是最多的,所以一些较老旧的硬件在转不到所支持的系统驱动时,可以旧物利用,装下NetBSD。
Main differences between main bsd-os
None of the BSDs are distributions, they are all complete operating systems.
OpenBSD
Each developer working on OpenBSD has their priorities, but the main focus of the project is to be the number one most secure and robust operating system.
Other common goals are:
Provide the best development platform possible. Provide full source access to developers and users, including the ability to look at CVS tree changes directly.
Try to make the software stable and robust.
Greater integration of cryptographic software.
Track and implement standards (ANSI, POSIX, parts of X/Open, etc.)
Support as many different systems and hardware as feasible.
Be as politics-free as possible; solutions should be decided on the basis of technical merit.
Focus on being developer-oriented in all senses.
Do not let serious problems sit unsolved.
Make a release approximately every six months.
FreeBSD
FreeBSD is an operating system for a variety of platforms which focuses on features, speed, and stability.
Some of the main goals of the project are:
Cutting edge features.
Powerful and very fast Internet solutions.
Advanced embedded platform.
Run a huge number of applications.
Easy to install.
NetBSD
NetBSD users enjoy a simple, well-documented, and fully integrated UNIX-like system that feels minimal, and in many ways traditional, while including many modern and interesting features, and support for recent hardware.
Some of the main goals of the project are:
Provides a portable system, which runs on many hardware platforms.
Provides a well designed, stable, and fast BSD system.
Avoid encumbering licenses.
Interoperate well with other systems.
Conforms to open systems standards as much as is practical.
DragonFly BSD
One of the original goals of the DragonFly BSD project was performance-oriented, the project sought to do SMP in more superior ways to the work being done in other operating system kernels. The results of this process has been an immense improvement in scalability.
Some of the main goals of the project are:
Extreme scaling with autotuning kernel resources and scaling metrics such as kernel hash-tables based on available memory.
Kernel modifications with advanced thread scheduling.
Development of the the DragonFly BSD device filesystem.
Implement a virtual kernel feature for running DragonFly BSD kernels in userland inside DragonFly BSD kernels.
Implement a revamped NFSv3 implementation which gets rid of the nfsiod threads and implements a fully asynchronous RPC mechanism using only two kernel threads.
Development of the DragonFly BSD HAMMER filesystem.
初识操作系统(Operating System, OS)
每天都会使用操作系统。*BSD、Windows、Linux、安卓、iOS都是非常经典的操作系统。有了它们才能够更好地使用电脑、手机这样的硬件终端设备。那么,操作系统的本质是什么?到底具有哪些功能和特性?常说的进程、线程、内核、中断、GUI、CLI……又是什么意思?
接下来,我们一起寻找答案。
1、什么是操作系统
从本质来看,操作系统其实就是一套软件。同样是代码写出来的,像目前普遍使用的Windows10,主要就是C/C++写的。操作系统属于软件,但又是非常特别的软件。在整个计算机架构中,它距离硬件最近,是最重要、最基础的软件。它负责控制和管理整个计算机系统的资源,并进行合理组织、调度和分配。
计算机的层次架构
对于用户(user)和上层应用软件(application)来说,操作系统把很多底层的细节都封装隐藏起来了,通过标准接口以供调用,大大简化了上层应用软件的开发。与此同时,它又提供了很多辅助性的工具和功能,让用户可以更好地掌控计算机的运行状态。换言之,操作系统就是一个超级大管家。它什么都管,为用户服务,向用户负责。
2、操作系统的核心功能
可以把操作系统的核心功能分为以下几个方面:
首先,是进程管理。进程(Process)和线程(Thread)是操作系统里非常重要的两个概念。
进程是资源分配的基本单位。进程的创建、终止、调度、同步以及进程间的通信,都是由操作系统负责的。应用程序的运行,包括操作系统本身核心功能的运行,都是以进程的形式存在。
每个进程都包括程序的代码、数据、状态,以及操作系统为该程序分配的资源(如内存空间、文件句柄、网络端口等)。操作系统通过进程管理,来确保各个进程能够高效、安全地共享CPU时间。使用“Ctrl+Alt+Del”快捷键调出Windows的任务管理器,就可以看到很多的进程:
线程,则是操作系统进行运算调度的最小单位。线程比进程更低一级,是进程内的一个可以独立调度和指派的执行单元。一个进程中可以有多个线程,共享相同的内存空间和资源,可以更容易地进行通信和数据共享。
进程与线程
例如启动了一个浏览器程序,那么操作系统就会开启一个相应的进程。这个进程里面,又会有多个线程,如HTTP请求线程、事件响应线程、渲染线程等。如果关闭这个浏览器程序,从任务管理器可以看到,这个进程和对应的线程都没有了。当然也可以在任务管理器里,直接右键关闭某个进程,程序也就强制退出了。Unix里干掉一个进程,用的命令就是“kill(杀掉)”。
线程是操作系统发展到后期才引入的。它进一步提供了程序执行的并发性,提高了系统的效率。进程和线程,都可以包括执行态、就绪态、阻塞态等状态。对进程和线程进行管理,本质上是为了实现对CPU资源的分配调度。
进程的状态变化
需要注意的是,一个程序可以对应一个或多个进程。而一个进程同样可以对应一个或多个程序(虽然比较罕见)。
其次,是内存管理。
冯·诺依曼架构:程序要从硬盘到内存,才能够被运算器(CPU)处理。每个程序都有足够的内存空间,才能够确保正常运行。
冯·诺依曼架构
运行之后,内存也需要被及时释放,才能让别的程序能够继续占用。内存的分配和回收,也是操作系统负责的。
除了内存分配之外,操作系统还要负责进行内存保护(确保每道程序都只在自己的内存区中运行,进程间不会互相干扰)、地址映射(将程序装入内存运行时,需要将逻辑地址转化成内存单元所限定的物理地址)、内存扩充(借助于虚拟存储技术,从逻辑上去扩充内存容量)等工作。
第三,是设备管理。
这是操作系统的重要任务之一。它管理和控制外部设备(如打印机、硬盘驱动器、键盘、鼠标等)的使用。
具体来说,它可以完成用户进程提出的I/O(输入/输出)请求,为用户进程分配其所需的I/O设备,提高CPU和I/O设备的利用率,提高I/O速度等。高效的I/O调度,可以避免I/O设备拖累系统的运行。
第四,是文件系统管理。
文件系统是操作系统用来组织、存储和检索数据的一套规则。
操作系统提供了一套机制来组织、存储、检索和保护文件,包括文件的创建、删除、读写操作以及目录结构的维护。我们也可以将其理解为操作系统对存储设备和资源的管理和调用。
第五,安全和权限管理。
有了硬件和软件资源,我们还要指定到底谁能够使用他们。操作系统提供了完善的安全机制,确保用户数据的安全性和完整性,包括用户身份验证、访问控制和加密等。
最后一个核心功能,是交互界面。
操作系统是用户使用计算机的一个工具。想要让计算机工作,就需要一个好的交互界面,以便下达命令、查询结果和状态。
操作系统提供图形用户界面(GUI,Graphical User Interface)或命令行界面(CLI,Command Line Interface),让用户能够方便地与计算机交互。这是计算机在社会全面普及的一个前提条件。
很多人都用过“cmd”调出来的命令行界面,那种叫做联机命令接口,也叫交互式命令接口。以前还学过写批处理文件(.bat文件),给出好几个命令,让计算机逐一执行。这种叫做脱机命令接口。
值得一提的是,除了(联机、脱机)命令接口之外,操作系统还提供了程序接口。程序接口由一组系统调用(system call)组成,允许应用程序间接调用资源。
现在有很多应用程序通过高级语言提供的库函数,间接地进行系统调用。我们可以把这些库函数视为对系统调用的进一步封装。
需要注意,凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式,向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性。
3、操作系统的主要特性
除了上面说的六大功能之外,操作系统还有四个特性,分别是:并发、共享、异步和虚拟。
并发(concurrency)
并发是指两个或多个事件在同一时间间隔内发生。操作系统具有并发特性,是指其具有处理和调度多个程序同时执行的能力。
并发和并行(parallellism)是有区别的。并行是两个或多个事件在同一时刻内发生。举例来说,一边吃苹果一边看电视,是并行。在1分钟之内,吃掉苹果、香蕉和橘子,就是并发。
很显然,并发从宏观上看是同时发生的,但从微观上看是分时交替发生的(和通信里面的“时分复用”有点像)。并发考验的是资源调度的能力,而并行需要硬件的支持,例如采用多核处理器。
共享(sharing)
共享,是指系统中的资源可以被多个并发进程共同使用。它分为两种方式,互斥共享和同时共享。
互斥共享,顾名思义,就是不能同时用。仅当某一进程访问完并释放该资源后,才允许另一进程对该资源进行访问。这类资源称为临界资源或独占资源。计算机系统中的大多数物理设备,都属于临界资源。
同时共享,就是能够多个进程同时用。最典型的设备,就是硬盘。
大家应该也能看出来,共享的底层逻辑也和通信里的“复用”很像,要么是分时间进行共享(时分复用),要么是分物理资源空间进行共享(空分复用),主要看资源本身的属性。
异步(asynchronous)
异步,是同步的反义词。同步是大家保持节奏统一。而异步,是各走各的路。
异步的前提是并发性,如果没有并发性,所有任务只能one by one串行执行,那么,整个系统的效率就会很低。
虚拟(virtualization)
最后是虚拟。在云计算里经常会提到,把一个物理实体,变成若干个逻辑实体,就是虚拟。虚拟的本质,还是资源的复用;只不过通过软件来实现了,用户感受到的,是多个逻辑实体。
4、操作系统的组成架构
再来看看操作系统的组成架构。
操作系统的核心,就是大家经常听说的内核(Kernel)。
内核直接与硬件进行交互,并为其他系统软件和应用程序提供服务。前面提到的操作系统核心功能,除了交互界面之外,大部分都和内核紧密相关。计算机里的CPU,工作状态可以分为内核态(也叫管态)和用户态(也叫目态)。运行内核程序时,是内核态。运行应用程序时,是用户态。
操作系统有“非特权指令”和“特权指令”两种指令。
应用程序只能使用“非特权指令”,如:加法指令、减法指令等。 操作系统内核作为 “管理者”,有时会让CPU执行一些high level的“特权指令”,如:内存清零指令。这些指令影响重大,只允许操作系统内核来使用。
操作系统处于内核态时,可以执行特权指令。如果处于用户态,则只能执行非特权指令。
一般情况下,开机后,用户启动某个应用程序,操作系统内核程序会在合适的时候主动让出CPU,转为用户态。这时,如果发生了中断,操作系统内核会强行夺回CPU控制权,让CPU从用户态变成内核态。
这里刚好说说中断(Interrupt)。
处理器收到信号,提示发生了某个事件,应予以注意,这种情况就称为中断。中断分为内中断和外中断。
内中断也叫异常,是指来自CPU内部的事件,与当前执行的指令有关。如程序的非法操作码、地址越界、运算溢出等。异常不能被屏蔽,一旦出现,就应该立即处理。
内中断的三种典型类型包括:陷入(trap,由陷入指令引发)、故障(fault,由错误条件引发,内核程序可以修复)、终止(abort,由致命错误引发,内核程序无法修复)。
外中断是狭义的中断,信号来自CPU外部的事件,与当前执行的指令无关。很典型的是时钟中断以及I/O中断,或人为干预。
继续说内核。
内核也分为多种类型,例如大内核、微内核。所有的操作系统服务都在内核空间运行,就是大内核,也叫宏内核、单内核。
只有最基本的系统服务在内核空间运行,其它服务移出内核,放在用户空间运行,是微内核。
相比大内核,微内核更灵活,架构更清晰,代码没有那么庞大,维护起来也容易一些。
操作系统负责交互界面的,叫做外壳(Shell);前面介绍过,包括命令解释器和图形用户界面等。
除了内核和外壳以外,操作系统还包括许多其它工具和服务,例如备份工具、恢复工具、防火墙、网络服务等。
下面是一个操作系统整体架构的示意图:
这个是Linux系统的架构示意图,供参考:
5、操作系统的常见分类
随着技术的发展,现代操作系统已经经历了数十年的演变。
计算机硬件不断升级,用户需求不断增加,系统功能不断迭代,最终导致整个操作系统的架构变得越来越复杂,代码体积也越来越庞大。
以前的操作系统只有几MB,一个软盘就能装得下。现在的操作系统,动辄几个GB,甚至几十GB,DVD光盘都装不下。
针对不同的设备终端类型,以及不同的应用场景,操作系统也出现了细化分的趋势,演变出很多类别。
通常来说,操作系统大致可以分为桌面操作系统、服务器操作系统、移动终端操作系统、嵌入式操作系统、物联网操作系统等类别。
如下表所示:
该文章最后由 阿炯 于 2024-09-10 14:21:10 更新,目前是第 3 版。