0

    架构师的操作系统

    2023.06.05 | admin | 245次围观

    作者丨零壹码

    来源丨

    操作系统

    操作系统是由两个主要部分组成的:硬件和软件。硬件是计算机的物理设备;软件则是使得硬件能够正常工作的程序集合。计算机软件分成两大类:操作系统和应用程序。应用程序使用计算机硬件来解决用户的问题;操作系统则控制用户对硬件访问。

    操作系统发展史

    分时处理系统

    实时处理系统

    完整的 OS

    OS 的功能

    GNU

    Knopix

    Slackware

    S.u.S.E(Novel)

    OpenSUSE

    Gentoo

    ArchLinux

    软件程序:版本号

    什么是操作系统

    操作系统是计算机硬件和用户(程序和人)的一个接口,它使得其他程序更加方便有效运行,并能方便地对计算机和软件资源进行访问。

    操作系统是介于计算机硬件和用户(程序或人)之间的接口;

    操作系统是一种用来使得其他程序更加方便有效运行的程序(或一个程序集);

    操作系统是通用管理程序,管理着计算机系统中每个部件的活动,并确保计算机系统中的硬件和软件资源能够更加有效地使用。当出现资源使用冲突时,操作系统应进行仲裁,排除冲突。

    操作系统主要目标

    1. 有效地使用硬件

    2. 容易的使用资源

    操作系统自举过程

    操作系统本身也是程序,它也需要被装入内存和运行,这个困境如何解决呢?

    如果使用 ROM 技术把操作系统存储(有制造商完成)在内存中,这个问题就能解决。CPU 的程序计数器可以被设置为这个 ROM 的开始处。当计算机被加电(Power-on Self-Test, POST)时,CPU 从 ROM 中读取指令,执行它们。但这种解决方案非常低效,因为内存的很大一部分需要由 ROM 构成,而不能被其他程序使用。

    在内存中很小一部分是 ROM 构成,其中存有称为自举程序的小程序。当计算机被加电时,CPU 计数器被设置为自举程序的第一条指令,并执行程序中的指令。这个程序唯一的职责就是把操作系统本身(需要启动计算机的那部分)装入 RAM 内存。当装入完成后,CPU 中的程序计数器就被设置为 RAM 中操作系统的第一条指令,操作系统就被执行。

    操作系统分类

    批处理操作系统设计于 20 世纪 50 年代,目的是为了控制大型计算机。但是,计算机十分庞大。用穿孔卡片进行输入数据,用行式打印机输出结果,用磁带设备作为辅助存储介质。

    每个运行的程序发出作业请求。穿孔卡有操作员送入计算机。如果程序运行成功,打印结果将传给程序员,如果不成功,则报错。

    为了有效使用计算机资源,多道程序的概念被引入。它可以将多个作业同时装入内存,并且仅当该资源可用时分配给需要他的作业。例如,当一个程序正使用输入/输出设备时,CPU 则处于空闲状态,并可以供其他程序使用。

    多道程序带来了分时的概念:资源可以被不同的作业分享。每个作业可以分到一段时间来使用资源。因为计算机裕兴速度很快,所以分时系统对用户是隐藏的,每个用户都感觉整个系统为自己服务。

    最终利用分时技术的多道程序极大地改进了计算机的使用效率。但是,它们需要有一个更加复杂的操作系统,它必须可以调度:给不同的程序分配资源,并决定哪一个程序什么时候使用哪一种资源。用户也可以直接与系统进行交互,而不必通过操作员。一个新的属于不也随之产生:进程。一个作业是一个要运行的程序,一个进程则是在内存中等待分配资源的程序。

    常见操作系统产品

    手机版操作系统

    服务器操作系统

    Unix 操作系统

    UNIX 是多用户、多道程序、可移植的操作系统,它被设计来方便编程、文本处理、通信。

    UNIX 简史

    1965 年,Bell Labs、GE(General Electric)和 MIT 合作的计划要建立一套 multi-user、multi-processor、multi-level 的 MULTICS 操作系统。后来工作进度太慢而被停了下来。

    Ken Thompson 有一个"Space Travel"的程序在 GE-635 的机器上跑,但是反应非常慢,正巧被他发现了一部被闲置的 PDP-7,使用汇编语言将此程序移植到 PDP-7 上。

    1971 年,Ken Thompson 申请到了一台 PDP-11/24 的机器。于是 Unix 第一版出来了。这台电脑只有 24KB 的物理内存和 500K 磁盘空间。Unix 占用了 12KB 的内存,剩下的一半内存可以支持两用户进行 Space Travel 的游戏。

    1973 年,用汇编语言做移植太困难想用高级语言来完成第三版,开始尝试用 Fortran,可是失败了。后来用 BCPL 的语言开发形成 B 语言,后来 Dennis Ritchie 觉得 B 语言还是不能满足要求,于是就改良了 B 语言为 C 语言。于是用 C 语言重写了 Unix 的第三版内核。

    1974 年 7 月的 Unix 第五版就以“仅用于教育目的”的协议,提供给各大学作为教学之用。

    20 世纪 70 年代,AT&T 公司开始注意到 Unix 所带来的商业价值。公司的律师开始寻找一些手段来保护 Unix,并让其成为一种商业机密。从 1979 年 Unix System V7 开始,Unix 的许可证开始禁止大学使用 Unix 的源码,包括在授课中学习。

    1978 年,第一家以商业方式包装发行的 Unix 系统,SCO 公司。卖第一个商用 C 编译器。

    1981 年,Microsoft 公司成立,销售 XENIC Unix。

    SCP:QDOS (Quick and Dirty Operating System)

    DOS 2.0 胜过 CP/M

    1990:在 Unix 平台上开发各种程序

    Ken Thompson 在 Berkeley 大学的任教,Berkeley Bill Joy 组织 BSRG 工作小组在 1977 年开发了 BSD(Berkeley System Distribution)。

    1980 年,美国国防部高级研究计划署 DARPA、TCP/IP(在 VAX,VMS 操作系统),1983年,在BSD结合正式使用TCP/IP。

    1980 年,两个最主要的 Unix 的版本线,一个是 Berkeley 的 BSD UNIX,另一个是 AT&T 的 Unix,在这个时候竞争最终引发了 Unix 的战争。

    1982 年,Bill Joy 创建了 Sun Microsystems 公司,开发了 Solaris OS。

    AT&T 则在随后的几年中发布了 Unix System V 的第一版

    1990 年,BSD 与 Unix 完全隔离。

    Apple 公司:XEROX 系统:PARK 实验室(mouse, 以太网),star(图形界面)

    Unix 结构

    Unix 特性

    1. 多用户,多任务的分时操作系统。

    2. Unix 的系统结构可分为三部分:操作系统内核(是Unix系统核心管理和控制中心,在系统启动或常驻内存),系统调用(供程序开发者开发应用程序时调用系统组件,包括进程管理,文件管理微软独立程序包没反应,设备状态等),应用程序(包括各种开发工具,编译器,网络通讯处理程序等,所有应用程序都在Shell的管理和控制下为用户服务)。

    3.Unix系统大部分是由 C 语言编写的,这使得系统易读,易修改,易移植。

    4.Unix提供了丰富的,精心挑选的系统调用,整个系统的实现十分紧凑,简洁。

    5.Unix提供了功能强大的可编程的 Shell 语言(外壳语言)作为用户界面具有简洁,高效的特点。

    6.Unix系统采用树状目录结构,具有良好的安全性,保密性和可维护性。

    7.Unix系统采用进程对换(Swapping)的内存管理机制和请求调页的存储方式,实现了虚拟内存管理,大大提高了内存的使用效率。

    8.Unix系统提供多种通信机制,如:管道通信,软中断通信,消息通信,共享存储器通信,信号灯通信。

    Unix标准

    Unix用户协会最早从 20 世纪 80 年 ××× 始标准化工作,1984 年颁布了试用标准。后来 IEEE 为此制定了 POSIX 标准(即 IEEE1003 标准)国际标准名称为 ISO/IEC9945。它通过一组最小的功能定义了在Unix操作系统和应用程序之间兼容的语言接口。POSIX 是由 Richard Stallman 应 IEEE 的要求而提议的一个易于记忆的名称,含义是 Portable Operating System Interface(可移植操作系统接口) ,而 X 表明其 API 的传承。

    Unix发行版

    IBM: AIX, Powerpc

    HP: HP-UX, alpha

    BSD, AIX, HP-UX 都是 License 有版权,付费才可使用。

    BSD:FreeBSD、OpenBSD(最安全)、NetBSD

    Unix:System V

    Linux 操作系统

    Linux 由芬兰赫尔辛基大学计算机系的林纳斯·托瓦兹(Linus Torvalds),根据荷兰一所大学 Andrew 教授开发的Minix操作系统(便于不受 AT&T 许可协议的约束,为教学科研提供一个操作系统。免费给全世界的学生使用)具有较多 Unix 的特点,但与Unix不完全兼容。于是在 1991 年 10 月 15 日,Linus 开发了基于 POSIX 和Unix的多用户、多任务、支持多线程和支持多种平台的操作系统的一套完全免费使用的类 Unix 操作系统,即 Linux 内核。后来加入了 GNU 项目计划基于 GPL 开源协议,命名为 GNU/Linux。其官网地址是 。

    Linux组成由process management、timer、interrupt management、memory management、module management、VFS layer(接口)、file system、device driver、inter-process communication、network management、system init 等操作系统功能的实现。

    目前有许多基于 Linux Kernel 开发的 Linux 发行版。常用的有 RedHat 系列(CentOS/Fedora)、Slackware(S.u.S.U)、Debain(Ubuntu、mint)、ArchLinux、Gentoo 等主流发行版。

    日常生活中的手机、平板电脑等系统使用的都是 Linux 系统。全世界的绝大多数超级计算机、股票交易、飞行航班控制系统、银行系统、国内 BAT、谷歌、亚马逊和 Facebook 等互联网巨头都使用Linux来运行不同的网络和云服务等,而且甚至还运行着核潜艇系统。

    Linux 有不同的 Linux 版本,但都使用了 Linux 内核。Linux 可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

    Linux 内核提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于 Linux 内核的完整操作系统叫作 Linux 操作系统,或是 GNU/Linux。设备驱动程序可以完全访问硬件。Linux 内的设备驱动程序可以方便地以模块化(Modularize)的形式设置,并在系统运行期间可直接装载或卸载。

    Linux 内核使用三种不同的版本编号方式。

    第一种方式用于1.0版本之前(包括1.0)。第一个版本是0.01,紧接着是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之后的1.0。

    第二种方式用于1.0之后到2.6,数字由三部分“A.B.C”,A代表主版本号,B代表次主版本号,C代表较小的末版本号。只有在内核发生很大变化时(历史上只发生过两次,1994年的1.0,1996年的2.0),A才变化。可以通过数字B来判断Linux是否稳定微软独立程序包没反应,偶数的B代表稳定版,奇数的B代表开发版。C代表一些bug修复,安全更新,新特性和驱动的次数。以版本2.4.0为例,2代表主版本号,4代表次版本号,0代表改动较小的末版本号。在版本号中,序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.2.5,而序号的第二位为奇数的版本一般有一些新的东西加入,是个不一定很稳定的测试版本,如2.3.1。这样稳定版本来源于上一个测试版升级版本号,而一个稳定版本发展到完全成熟后就不再发展。

    第三种方式从2004年2.6.0版本开始,使用一种“time-based”的方式。3.0版本之前,是一种“A.B.C.D”的格式。七年里,前两个数字A.B即“2.6”保持不变,C随着新版本的发布而增加,D代表一些bug修复,安全更新,添加新特性和驱动的次数。3.0版本之后是“A.B.C”格式,B随着新版本的发布而增加,C代表一些bug修复,安全更新,新特性和驱动的次数。第三种方式中不再使用偶数代表稳定版,奇数代表开发版这样的命名方式。举个例子:3.7.0代表的不是开发版,而是稳定版!

    Linux 发展简史

    Linux最早是由芬兰人Linus Torvalds设计的。当时由于UNⅨ的商业化,Andrew Tannebaum教授开发了Minix操作系统以便于不受AT&T许可协议的约束,为教学科研提供一个操作系统。当时发布在Internet上,免费给全世界的学生使用。Minix具有较多UNⅨ的特点,但与UNⅨ不完全兼容。1991年10月5日,Linus为了给Minix用户设计一个比较有效的UNⅨ PC版本,自己动手写了一个“类Minix”的操作系统。整个故事从两个在终端上打印AAAA...和BBBB...的进程开始的,当时最初的内核版本是0.02。Linus Torvalds将它发到了Minix新闻组,很快就得到了反应。Linus Torvalds在这种简单的任务切换机制上进行扩展,并在很多热心支持者的帮助下开发和推出了Linux的第一个稳定的工作版本。1991年11月,Linux0.10版本推出,0.11版本随后在1991年12月推出,当时将它发布在Internet上,免费供人们使用。当Linux非常接近于一种可靠的/稳定的系统时,Linus决定将0.13版本称为0.95版本。1994年3月,正式的Linux 1.0出现了,这差不多是一种正式的独立宣言。截至那时为止,它的用户基数已经发展得很大,而且Linux的核心开发队伍也建立起来了。

    Linux 操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。

    1987年,荷兰阿姆斯特丹的Vrije大学计算机科学系的Andrew教授编写Minix系统用于教学用途。全部的程序码共约12,000行。

    1991年的10月5日,林纳斯·托瓦兹正式向外宣布Linux内核的诞生

    1993年,发布了Linux 0.99,代码大约有十万行,用户大约有10万左右。

    1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。

    1995年1月,Bob Young创办了RedHat,以GNU/Linux为核心,集成了400多个源代码开放的程序模块,搞出了一种冠以品牌的Linux,即RedHat Linux,称为Linux发行版,在市场上出售。这在经营模式上是一种创举。

    1996年6月,Linux 2.0内核发布,此内核有大约40万行代码,并可以支持多个处理器。此时的Linux 已经进入了实用阶段,全球大约有350万人使用。

    1998年2月,以Eric Raymond为首的一批年轻的"老牛羚骨干分子"终于认识到GNU/Linux体系的产业化道路的本质,并非是什么自由哲学,而是市场竞争的驱动,创办了"Open Source Intiative"(开放源代码促进会)"复兴"的大旗,在互联网世界里展开了一场历史性的Linux产业化运动。

    2001年1月,Linux 2.4发布,它进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性:USB,PC卡(PCMCIA)的支持,内置的即插即用,等等功能。

    2003年12月,Linux 2.6版内核发布

    Larray Wall: diff, patch(协同开发工具)

    GNU/Linux

    GNU是“GNU is Not Unix”的递归缩写,Richard Stallman在1983年9月27日公开发起创建一套完全自由的操作系统。UNIX是一种广泛使用的商业操作系统的名称。由于GNU将要实现UNIX系统的接口标准,因此GNU计划可以分别开发不同的操作系统部件。GNU计划采用了部分当时已经可自由使用的软件,例如TeX排版系统、X Window视窗系统, GCC编译器、Emac和nano文本编辑器等。

    FSF: (Free Software Foundation,自由软件基金会)1985年Richard Stallman创立了来为GNU计划提供技术、法律以及财政支持。

    自由软件是什么?“自由软件”是权利问题,不是价格问题。要理解这个概念,自由应该是“言论自由”中的“自由”,而不是“免费啤酒”中的“免费”。自由软件关乎使用者运行、复制、发布、研究、修改和改进该软件的自由。

    自由:freedom, 免费:free

    Free含义:

    GNU通用公共许可协议(GNU General Public License,简称:GNU GPL、GPL)

    自由软件许可协议条款,保证终端用户有使用、学习、修改、发布和重新发布自由软件的源代码。

    GPL 开源许可协议最大的 4 个特点

    GPL 与 BSD 比较

    主要区别就在于GPL程序的演绎作品也要在 GPL之下(LGPL:可以库调用打包成自己的可以卖)。相反,BSD 许可证并不禁止演绎作品变成专有软件(修改 BSD 的一部分代码,然后打包封装之后自己开发的没问题。不要保留别的的公司的商标和版权声明)。

    GPLv1

    发布于 1989 年 1 月,其目的是防止那些阻碍自由软件的行为,而这些阻碍软件开源的行为主要有两种(一种是软件发布者只发布可执行的二进制代码而不发布具体源代码,一种是软件发布者在软件许可加入限制性条款)。因此按照 GPLv1,如果发布了可执行的二进制代码,就必须同时发布可读的源代码,并且在发布任何基于 GPL 许可的软件时,不能添加任何限制性的条款。

    GPLv2

    为了保障和尊重其它一些人的自由和权益,如果哪个人在发布源于 GPL 的软件的时候,同时添加强制的条款(在一些国家里,只能以二进制代码的形式发布软件,以保护开发软件者的版权),那么他将根本无权发布该软件。

    1991年6 月发布 GPL 的第二个版本同时第二个许可证程序库 GNU 通用公共许可证(LGPL, Library General Public License)也被发布出来并且一开始就将其版本定为第2版本以表示其和 GPLv2 的互补性。这个版本一直延续到 1999年,并分支出一个派生的 LGPL 版本号为2.1,并将其重命名为轻量级通用公共许可证(又称宽通用公共许可证,Lesser General Public License)

    GPLv3

    2005 年,GPL 版本 3 正由斯托曼起草。在所有的改动中,最重要的四个是:

    1. 解决软件专利问题;

    2. 与其他许可证的兼容性;

    3. 源代码分区和组成的定义;

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论