|
| 1 | +什么是操作系统 |
| 2 | +================================================ |
| 3 | + |
| 4 | +.. toctree:: |
| 5 | + :hidden: |
| 6 | + :maxdepth: 5 |
| 7 | + |
| 8 | +站在一万米的代码空间维度看 |
| 9 | +---------------------------------- |
| 10 | + |
| 11 | +现在的操作系统是一个复杂的系统软件,比如Linux操作系统达到了千万行的C源代码量级。在学习操作系统的初期,我们没有必要去分析了解这样一个规模的软件。但这样的软件也是有其特有的一些特征。如果我们站在一万米的高空来看操作系统,可以发现操作系统这个软件干的事主要有两件:一是向下管理计算机硬件和各种外设,而是向上给应用软件提供各种服务帮助。这样描述还太简单了一些,我们可对其进一步描述:操作系统是一个可以管理CPU、内存和各种外设,并管理和服务应用软件的软件。为了完成这些工作,操作系统需要知道如何与硬件打交道,如何更好地面向应用软件做好服务,这就有一系列操作系统相关的理论,抽象,设计等来支持如何做和做得好的需求。 |
| 12 | + |
| 13 | + |
| 14 | +站在计算机发展的百年时间尺度看 |
| 15 | +---------------------------------- |
| 16 | + |
| 17 | +虽然电子计算机的出现距今才仅仅七十年左右,但计算机技术和操作系统已经发生了巨大的变化。从计算机发展的短暂的历史角度看,操作系统也是从无到有地逐步发展起来的。操作系统主要完成对硬件控制和对应用程序的服务所必需的功能,操作系统的历史与计算机的发展史密不可分。操作系统的内涵和功能随着历史的发展也在一直变化,改进中,在今天,在二十一世纪初期的大众眼中,操作系统就是他们的手机/终端上的软件系统,包括各种应用程序集合。在用户的眼里,如果一个操作系统没有图形界面、网络浏览器,那它就称为一个操作系统了。 |
| 18 | + |
| 19 | +其实,操作系统的内涵和外延随着历史的发展,也一直在变化,并没有类似于“1+1=2”这样的明确定义。参考生物的进化史,我们也给操作系统的进化历史做一个简单的概述,从中可以看到操作系统在各个时间段上包含什么,具有什么样的特征。但无论操作系统的内在实现和具体目标如何变化,其管理计算机硬件,给应用提供服务的功能需求没有变化。 |
| 20 | + |
| 21 | +三叶虫时代 |
| 22 | +~~~~~~~~~~~~~~ |
| 23 | + |
| 24 | +电子计算机在1946年最开始出现的时候是没有操作系统(Operating System)的,只有操作员(Operator)。启动,扳开关,装卡片/纸带等比较辛苦的工作都是计算机操作员或者用户自己完成。操作员/用户带着记录有程序和数据的卡片\(punch card\)或打孔纸带去操作机器。装好卡片/纸带后,启动卡片/纸带阅读器,让计算机把程序和数据读入计算机机的内存中后,计算机就开始工作,并把结果也输出到卡片/纸带或显示屏上,最后程序停止。 |
| 25 | + |
| 26 | +由于人的操作效率太低,计算机的机时宝贵,所以就引入监控程序(Monitor)辅助完成输入,输出,加载,运行程序等工作,这是现代操作系统的起源。一般情况下,计算机每次只能执行一个任务,CPU大部分时间都在等待人的缓慢操作。这个“手工操作”过程一直持续到20世纪50年代。 |
| 27 | + |
| 28 | +.. note:: |
| 29 | + |
| 30 | + 可以在 :ref:`本书第一章 <link-chapter1>` 看到初级的操作系统其实就是一个给应用提供各种服务(比如输出字符串)的库,方便了单一应用程序的开发与运行。 |
| 31 | + |
| 32 | +恐龙时代 |
| 33 | +~~~~~~~~~~~~~~ |
| 34 | + |
| 35 | +在20世纪50年代~60年代,计算机发展到大型机阶段,而所对应的早期操作系统非常多样化,专用化,生产商生产出针对各自硬件的专用操作系统,大部分用汇编语言编写,这导致操作系统的进化比较缓慢,但进化再持续,从“手工操作”进化到了“批处理”阶段和“多道程序”阶段。在1964年,IBM公司开发了面向System/360系列机器的统一可兼容的操作系统——OS/360。OS/360是一种批处理操作系统。为了能充分地利用计算机系统,应尽量使该系统连续运行,减少空闲时间,所以批处理操作系统把一批作业(古老的术语,可理解为现在的程序)以脱机方式输入到磁带上,并使这批作业能一个接一个地连续处理:1)将磁带上的一个作业装入内存;2)并把运行控制权交给该作业;3)当该作业处理完成后,把控制权交还给操作系统;4)重复1-3的步骤。 |
| 36 | + |
| 37 | +批处理操作系统分为单道批处理系统和多道批处理系统。单道批处理操作系统只能管理内存中的一个(道)作业,无法充分利用计算机系统中的所有资源,致使系统整体性能较差。多道批处理操作系统能管理内存中的多个(道)作业,可比较充分地利用计算机系统中的所有资源,提升系统整体性能。 |
| 38 | + |
| 39 | +多道批处理操作系统为此采用了多道程序设计技术,就是指允许同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。 |
| 40 | + |
| 41 | +虽然批处理操作系统提高了系统的执行效率,但其缺点是人机交互性差。如果程序员的代码出现错误,必须重新编码,上传内存,再执行。这需要花费以小时和天为单位的时间开销,使得程序员修改和调试程序很不方便。 |
| 42 | + |
| 43 | +.. note:: |
| 44 | + |
| 45 | + 可以在 :ref:`本书第二章 <link-chapter2>` 看到单道批处理操作系统的设计实现,以及支持一个一个地执行应用程序的运行过程。而在 `本书第三章 <https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter3/index.html>`_ 的前三节可以看到多道批处理操作系统的设计实现,以及支持应用程序主动放弃CPU以提高系统整体执行效率的过程。 |
| 46 | + |
| 47 | +爬行动物时代 |
| 48 | +~~~~~~~~~~~~~~ |
| 49 | + |
| 50 | +20世纪60年代末,提高人机交互方式的分时操作系统越来越展露头角。分时是指多个用户和多个程序以很小的时间间隔来共享使用同一台计算机上的CPU和其他硬件/软件资源。1964年由贝尔实验室、麻省理工学院及美国通用电气公司所共同参与研发目标远大的MULTICS\(MULTiplexed Information and Computing System\)操作系统,MULTICS是一套安装在大型主机上多人多任务的操作系统。 MULTICS以兼容分时系统(CTSS)做基础,建置在美国通用电力公司的大型机GE-645,目标是连接1000部终端机,支持300的用户同时上线。因MULTICS项目的工作进度过于缓慢,1969年AT&T的 Bell 实验室从MULTICS 研发中撤出。但贝尔实验室的两位软件工程师 Thompson 与 Ritchie借鉴了一些重要的Multics理念,以C语言为基础,发展出UNIX操作操作系统。UNIX操作系统的早期版本是完全免费的,可以轻易获得并随意修改,所以它得到了广泛的接受。后来,它成为开发小型机操作系统的起点。由于早期的广泛应用,它已经成为的分时操作系统的典范。 |
| 51 | + |
| 52 | +.. note:: |
| 53 | + |
| 54 | + 可以在 :ref:`本书第三章 <link-chapter3>` 的第四节可以看到分时操作系统的设计实现,以及操作系统可强制让应用程序被动放弃CPU以提高系统整体执行效率的过程。并且UNIX还有虚存、文件、进程等当前操作系统的关键特性,这些内容也在本书的第四章~第七章中有详细的设计描述。 |
| 55 | + |
| 56 | +哺乳动物时代 |
| 57 | +~~~~~~~~~~~~~~ |
| 58 | + |
| 59 | +20世纪70年代,微型处理器的发展使计算机的应用普及至中小企及个人爱好者,推动了个人计算机\(Personal Computer\)的发展,也进一步推动了面向个人使用的操作系统的出现。其代表是由微软公司中在20世纪80年代为个人计算机开发的DOS/Windows操作系统,其特点是简单易用,特别是基于Windows操作系统的GUI界面,极大地简化了一般用户使用计算机的难度,使得计算机得到了快速的普及。这里需要注意的是,第一个带GUI界面的个人计算机原型起源于伟大却又让人扼腕叹息的施乐帕洛阿图研究中心PARC(Palo Alto Research Center),PARC研发出的带有图标、弹出式菜单和重叠窗口的GUI(Graphical User Interface),可利用鼠标的点击动作来进行操控,这是当今我们所使用的GUI系统的基础。支持便捷的图形交互界面也成为从20世纪70年代~21世纪初的操作系统的主要特征之一。 |
| 60 | + |
| 61 | +.. note:: |
| 62 | + |
| 63 | + 目前支持GUI交互接口的操作系统设计实现在本书中还没有对应的章节。但其操作系统的内核其实与分时操作系统的设计实现思路基本是一致的。如果在本书设计的简单分时操作系统的基础上,添加一个图形外设的驱动和一个简单的GUI窗口系统,也许是一个有趣的实验内容。 |
| 64 | + |
| 65 | +智人时代 |
| 66 | +~~~~~~~~~~~~~~ |
| 67 | + |
| 68 | +21世纪以来,Internt和移动互联网的迅猛发展,使得在服务器领域和个人终端的应用与需求大增。iOS和Android操作系统是21世纪个人终端操作系统的代表,Linux在巨型机到数据中心服务器操作系统中占据了统治地位。以Android系统为例,Android操作系统是一个包括Linux操作系统内核、基于Java的中间件、用户界面和关键应用软件的移动设备软件栈集合。这里介绍一下广泛用在服务器领域和个人终端中的操作系统内核--Linux操作系统内核。1991年8 月,芬兰学生 Linus Torvalds\(林纳斯·托瓦兹\)在 comp.os.minix 新闻组贴上了以下这段话: |
| 69 | + |
| 70 | + |
| 71 | + "你好,所有使用 minix 的人 -我正在为 386 ( 486 ) AT 做一个免费的操作系统 ( 只是为了爱好 )...″ |
| 72 | + |
| 73 | + |
| 74 | +而他所说的"爱好″成为了大家都知道的 Linux操作系统内核。这个时代的操作系统的特征是联网,发挥网络的吞吐量和低延迟是这个时代的网络操作系统追求的目标。 |
| 75 | + |
| 76 | +.. note:: |
| 77 | + |
| 78 | + 目前支持联网的操作系统设计实现在本书中还没有对应的章节。但其操作系统的内核其实与分时操作系统的设计实现思路基本是一致的。如果在本书设计的简单分时操作系统的基础上,添加一个网卡外设的驱动和一个简单的网络协议栈,也许是另一个有趣的实验内容。 |
| 79 | + |
| 80 | +神人时代 |
| 81 | +~~~~~~~~~~~~~~ |
| 82 | + |
| 83 | +当前,大数据、人工智能、机器学习、高速移动互联网络、AR/VR对操作系统等系统软件带来了新的挑战。如何有效支持和利用这些技术是未来操作系统的方向。 |
| 84 | + |
| 85 | +在2020年,我们看到了华为逐步推出的鸿蒙系统;小米也推出了物联网软件平台小米Vela;阿里推出了AliOS Thing;腾讯推出了Tencent OS;苹果公司接连推出A14、M1等基于ARM的CPU,逐步开始淘汰X86CPU;微软推出Windows 10 IoT,Google推出Fuchsia OS,也都在做着各种云、边、端的技术调整和创新。 |
| 86 | + |
| 87 | +大家好像都意识到,不仅仅是人工智能和机器学习,下一个具有分布式特征的操作系统的新突破即将到来,并试图通过这种具有分布式特征的操作系统带来的连贯用户体验,打通从数据中心、服务器、桌面、移动端、边缘设备等的整个AI+IoT(Internet of Things)的生态。也许这个时代的未来操作系统与之前的操作系统相比,其最大的不同是跳出了单个设备节点,而是通过高速的无线网络从多种维度来管理多个设备,形成分布式操作系统。 |
| 88 | + |
| 89 | +.. note:: |
| 90 | + |
| 91 | + 目前支持AIoT的操作系统设计实现在本书中还没有对应的章节,不过我们的同学也设计了 |
| 92 | + `zCore操作系统 <https://github.com/rcore-os/zCore>`_ , |
| 93 | + 欢迎看完本书的同学能够尝试参与或独立设计面向未来的操作系统。 |
0 commit comments