Skip to content

Commit

Permalink
update ch0
Browse files Browse the repository at this point in the history
  • Loading branch information
chyyuu committed Jul 18, 2022
1 parent e9f6506 commit 7272381
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 27 deletions.
17 changes: 15 additions & 2 deletions source/chapter0/0intro.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,19 @@

在目前的操作系统教学中,已有一系列优秀的操作系统教材,例如 William Stallings 的《Operating Systems Internals and Design Principles》,Avi Silberschatz 、 Peter Baer Galvin 和 Greg Gagne 的《Operating System Concepts》,
Remzi H. Arpaci-Dusseau 和 Andrea C. Arpaci-Dusseau 的《Operating Systems: Three Easy Pieces》等。

有待思考的问题
--------------------------

然而,从我们自 2000 年以来的教学实践来看,某些经典教材对操作系统的概念和原理很重视,但还有如下一些问题有待思考:

- 原理与实践脱节:与操作系统的具体实现而言,操作系统的原理与概念相对过于抽象。目前的一些教材缺乏在“**操作系统的原理与概念**”和“**操作系统的设计与实现**”之间建立关联关系的桥梁,使得二者之间存在较大的鸿沟。这导致学生即使知道了操作系统的概念,还只能停留在“纸上谈兵”的阶段,依然不知如何实现一个操作系统。另外,学生在完成设计与实现操作系统的实验过程中,容易“一叶障目,不见泰山”,陷入到硬件规范、汇编代码、数据结构、编程优化等细节中,不知这些细节与操作系统概念的关系,缺少全局观和系统思维,难以与课堂上老师讲解的操作系统基本概念对应起来,。
- 缺少历史发展的脉络:以史为鉴,可以知兴替。操作系统的概念和原理是从实际操作系统设计与实现的历史发展过程中,随着计算机硬件和应用需求的变化,从无到有逐步演进而产生的,有其发展的历史渊源和规律。但目前的大部分教材只提及当前主流操作系统的概念和原理,有“凭空出现”的感觉,学生并不知道这些内容出现的前因后果,只知道“How”,而不知道“Why”。而且操作系统发展史上的很多设计思路和实践方法起起伏伏,不断演进,它们并没有过时,而是以新的形态出现。如操作系统远古阶段的 **LibOS** 设计思路在当前云计算时代重新焕发青春,成为学术机构和各大互联网企业探索的新热点。
- 忽视硬件细节或用复杂硬件:很多教材忽视或抽象硬件细节,使得操作系统概念难以落地,学生了解不到软硬件是如何具体协同运行的。部分教材把复杂的 x86 处理器作为操作系统实验的硬件参考平台,缺乏对当前快速发展的 RISC-V 等精简体系结构的实验支持,使得学生在操作系统实验中可能需要花较大代价了解相对繁杂的 x86 硬件细节,编程容易产生缺陷(bug),影响操作系统实验的效果,以及对操作系统核心概念的掌握。

解决问题的思路
--------------------

这些现存问题增加了学生学习和掌握操作系统的难度。我们尝试通过如下方法来解决上面三个问题,达到缓解学生的学习压力,提升学习兴趣,能在一个学期内比较好地掌握操作系统的目标。

具体而言,为应对“原理与实践脱节”的问题,我们强调了实践先行,实践引领原理的理念。MIT 教授 Frans Kaashoek 等师生设计实现了基于 UNIX v6 的 xv6 教学操作系统用于每年的本科操作系统课的实验中,并在课程讲解中把原理和实验结合起来,在国际上得到了广泛的认可,也给了我们很好的启发。经过十多年的操作系统教学工作,我们认为:对一位计算机专业的本科生而言,设计实现一个操作系统(包括CPU)有挑战但可行,前提是这样的操作系统要简洁小巧,能体现操作系统中最基本的核心思想,并能把操作系统各主要部分的原理与概念关联起来,形成一个整体。而且还需要丰富的配套资源,比如对操作系统的整体框架、核心算法、关键组件之间的联系等的分析文档、配套的图示和视频讲解、能够自动测试操作系统功能的测试用例和测试环境、能展现操作系统逐步编写过程的在线版本管理环境,以及逐步递进的综合性在线实验环境等,这样就能够让学生很方便地通过实践来加深对操作系统原理和概念的理解,并能让操作系统原理和概念落地。
Expand All @@ -17,11 +24,17 @@ Remzi H. Arpaci-Dusseau 和 Andrea C. Arpaci-Dusseau 的《Operating Systems: Th

为应对“忽视硬件细节或用复杂硬件”的问题,我们在硬件(x86, ARM, MIPS, RISC-V 等)和编程语言(C, C++, Go, Rust 等)选择方面进行了多年尝试。在 2017 年把 复杂 x86 架构换为 简洁 RISC-V 架构,作为操作系统实验的硬件环境,降低了学生学习硬件细节的负担。在 2018 年引入 Rust 编程语言作为操作系统实验的可选编程语言之一,通过Rust语言特有的编译时内存/并发安全检查、强类型静态分析、高级数据结构支持、抽象封装支持、内嵌汇编和丰富的第三方库,来提高编程效率、降低调试成本,从而减少了用C语言编程和对硬件操作出现较多运行时缺陷的情况。使得学生以相对较小的开发和调试代价进行操作系统实验。同时,我们把操作系统的概念和原理直接对应到程序代码、硬件规范和操作系统的实际执行中,加强学生对操作系统内涵的实际体验和感受。

目标与步骤
--------------------

所以本书的目标是以简洁的 RISC-V 基本架构为底层硬件基础,根据上层应用从小到大的需求,按 OS 发展的历史脉络,逐步讲解如何设计实现能满足“从简单到复杂”应用需求的多个“小”操作系统。并且在设计实现操作系统的过程中,逐步解析操作系统各种概念与原理的知识点,做到有“理”可循和有“码”可查,最终让同学通过操作系统设计与实现来深入地掌握操作系统的概念与原理。


在具体撰写过程中,第零章是对操作系统的一个概述,让同学对操作系统的历史、定义、特征等概念上有一个大致的了解。后面的每个章节体现了操作系统的一个微缩的历史发展过程,即从对应用由简到繁的支持角度出发,每章会讲解如何设计一个可运行应用的操作系统,满足应用的阶段性需求。从而同学可以通过配套的操作系统设计实验,了解如何从一个微不足道的“小”操作系统,根据应用需求,添加或增强操作系统功能,逐步形成一个类似 UNIX 的相对完善的“小”操作系统。每一步都小到足以让人感觉到易于掌控。而在每一步结束时,你都有一个支持不同应用执行的“小”操作系统。另外,通过足够详尽的测试程序和自动测试框架,可以随时验证同学实现的操作系统在每次更新后是否正常工作。由于实验的代码规模和实现复杂度在一个逐步递增的可控范围内,同学可以结合对应操作系统实验的原理/概念分析,来建立操作系统概念原理和实际实现的对应关系,从而能够通过操作系统实验的实践过程来加强对理论概念的理解,并通过理论概念来进一步指导操作系统实验的实现与改进。

编程语言与硬件环境
--------------------

在你开始阅读与实践本书讲解的内容之前,你需要决定用什么编程语言来完成操作系统实验。你可以选择你喜欢的编程语言和你喜欢的CPU上来实现操作系统。我们推荐的编程语言是 Rust ,我们推荐的架构是 RISC-V。

..
Expand All @@ -41,7 +54,7 @@ Remzi H. Arpaci-Dusseau 和 Andrea C. Arpaci-Dusseau 的《Operating Systems: Th
- Process OS: 支持APP动态创建新进程,增强进程管理和资源管理能力
- Filesystem OS:支持APP对数据的持久保存
- IPC OS:支持多个APP进程间数据交互与事件通知
- Tread&Coroutine OS:支持线程和协程APP,简化切换与数据共享
- Thread&Coroutine OS:支持线程和协程APP,简化切换与数据共享
- SyncMutex OS:在多线程APP中支持对共享资源的同步互斥访问
- Device OS:提高APP的I/O效率和人机交互能力,支持基于外设中断的串口/块设备/键盘/鼠标/显示设备

Expand Down Expand Up @@ -70,7 +83,7 @@ Remzi H. Arpaci-Dusseau 和 Andrea C. Arpaci-Dusseau 的《Operating Systems: Th

**目前常见的指令集架构是 x86 和 ARM ,为何要推荐 RISC-V ?**

- 目前为止最常见的架构是 x86 和 ARM ,它们已广泛应用在服务器、台式机、移动终端和很多嵌入式系统中。由于它们的通用性和向后兼容性需求,它们需要支持非常多(包括几十年前实现)的软件系统和应用需求,导致它们越来越复杂
- 目前为止最常见的指令集架构是 x86 和 ARM ,它们已广泛应用在服务器、台式机、移动终端和很多嵌入式系统中。由于它们的通用性和向后兼容性需求,需要支持非常多(包括几十年前实现)的软件系统和应用需求,导致这些指令集架构越来越复杂
- x86 后向兼容的策略确保了它在桌面和服务器领域的江湖地位,但导致其丢不掉很多已经比较过时的硬件设计,让操作系统通过冗余的代码来适配各种新老硬件特征。
- x86 和 ARM 在商业上都很成功,其广泛使用使得其 CPU 硬件逻辑越来越复杂,且不够开放,不能改变,不是开源的,难以让感兴趣探索硬件的学生了解硬件细节,在某种程度上让CPU成为了一个黑盒子,并使得操作系统与硬件的交互变得不那么透明,增加了学习操作系统的负担。
- 从某种角度上看,新出现的 RISC-V 的核心目标是灵活适应未来的 AIoT (人工智能物联网, AI + IoT)场景,保证基本功能,提供可配置的扩展功能。其开源特征使得学生都可以深入CPU的运行细节,甚至可以方便地设计一个 RISC-V CPU。从而可帮助学生深入了解操作系统与硬件的协同执行过程。
Expand Down
4 changes: 2 additions & 2 deletions source/chapter0/1what-is-os.rst
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
侏罗纪 [#侏罗纪]_ 与白垩纪 [#白垩纪]_ 的恐龙时代
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

摩尔定律(“当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。”)的累积效应使得计算成本逐渐下降,这意味着软件开发者不必将全部精力用于提高处理器利用率,而是可以开始努力提升用户的使用体验。例如,UNIX 是在 70 年代初在当时没有人使用的备用计算机上开发的。20 世纪 50 年代末,提高人机交互方式的分时操作系统越来越崭露头角。分时是指多个用户和多个程序以很小的时间间隔来共享使用同一台计算机上的 CPU 和其他硬件资源。1961 年,麻省理工学院的Fernando Corbató带领团队成功研发了在 IBM 709 计算机上的 CTSS(Compatible Time-Sharing System, 兼容时间共享系统)操作系统 [#UNIX25Y]_ ,它拥有分时系统必须有的特征:支持多个用户分享使用同一台计算机,即宏观上的同一时间段内能完成多个人机交互工作。在 CTSS 的鼓舞下,1964 年,麻省理工学院、贝尔实验室及美国通用电气公司共同参与研发一个目标远大的操作系统:MULTICS (MULTiplexed Information and Computing System) ,它是一套安装在大型主机上、支持多人多任务的操作系统。 MULTICS 以兼容分时系统 (CTSS) 做基础,建置在美国通用电力公司的大型机 GE-645 ,目标是连接 1000 部终端机,支持 300 位用户同时上线。因 MULTICS 的目标太宏大,而研发工作进度过于缓慢,1969 年 AT&T 的 Bell 实验室从 MULTICS 研发中撤出。CTSS 和 MULTICS 这就像侏罗纪时期体型庞大的食肉恐龙--霸王龙,称霸一时,但进化缓慢,最终灭绝。
摩尔定律(“当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。”)的累积效应使得计算成本逐渐下降,这意味着软件开发者不必将全部精力用于提高处理器利用率,而是可以开始努力提升用户的使用体验。例如,UNIX 是在 70 年代初在当时没有人使用的备用计算机上开发的。20 世纪 50 年代末,提高人机交互方式的分时操作系统越来越崭露头角。分时是指多个用户和多个程序以很小的时间间隔来共享使用同一台计算机上的 CPU 和其他硬件资源。1961 年,麻省理工学院的Fernando Corbató带领团队成功研发了在 IBM 709 计算机上的 CTSS(Compatible Time-Sharing System, 兼容时间共享系统)操作系统 [#UNIX25Y]_ ,它拥有分时系统必须有的特征:支持多个用户分享使用同一台计算机,即宏观上的同一时间段内能完成多个人机交互工作。在 CTSS 的鼓舞下,1964 年,麻省理工学院、贝尔实验室及美国通用电气公司共同研发一个目标远大的操作系统:MULTICS (MULTiplexed Information and Computing System) ,它是一套安装在大型主机上、支持多人多任务的操作系统。 MULTICS 以兼容分时系统 (CTSS) 做基础,建置在美国通用电力公司的大型机 GE-645 ,目标是连接 1000 部终端机,支持 300 位用户同时上线。因 MULTICS 的目标太宏大,而研发工作进度过于缓慢,1969 年 AT&T 的 Bell 实验室从 MULTICS 研发中撤出。CTSS 和 MULTICS 这就像侏罗纪时期体型庞大的食肉恐龙--霸王龙,称霸一时,但进化缓慢,最终灭绝。

但贝尔实验室的两位软件工程师 Ken Thompson 与 Dennis Ritchie借鉴了一些重要的 MULTICS 设计思想和理念,以 C 语言为基础发展出小巧灵活的 UNIX 操作系统 [#UNIX]_ 。UNIX 操作系统的早期版本是完全免费的,可以轻易获得并随意修改,所以它得到了广泛的接受。后来,它成为开发小型机操作系统的起点。由于早期的广泛应用,它已经成为分时操作系统的典范。这好像一种生活在侏罗纪晚期的小型恐龙--始祖鸟,它可能是鸟类的祖先,最终进化为可以展翅高飞的飞鸟。

Expand Down Expand Up @@ -178,7 +178,7 @@

21 世纪以来, Internet 和移动互联网的迅猛发展,使得在服务器领域和个人终端的应用与需求大增,数据中心和个人终端已经进入了人们的日常生活中。现在我们拥有种类繁多的计算设备,在这些设备上运行着许多不同的操作系统,操作系统设计者面临的功能权衡取决于硬件的物理能力以及应用程序和用户需求。下面是一些目前常见类型的操作系统:

- 面向服务器的操作系统:当前大家常用的主流搜索引擎、新媒体、电子商务网站和大数据处理系统等一般都托管在数据中心的计算机上。每台计算机都是强大的服务器,运行着服务器操作系统,典型的例子是Linux。通常每台服务器只运行一个应用服务程序,例如 数据库服务器或Web 服务器等,处于处理成千上万个用户传入的网络服务请求,所以吞吐量(每秒处理的请求数量)是一个关键的优化目标。而安全和可靠也是服务器操作性系统需要重点应对的目标。服务器操作系统的一种形态是虚拟机(Virtual Machine Monitor,VMM),它可在一台物理机上虚拟出多台虚拟计算机,可以像运行应用程序一样运行另一个操作系统。通过虚拟机可以充分利用数据中心中资源利用不高的物理服务器,提供整个数据中心的运行效率。典型的服务器操作系统有:FreeBSD、微软的Windows Server、基于Linux系的RHLS、Ubuntu、openEuler、龙蜥操作系统、麒麟服务器操作系统等。
- 面向服务器的操作系统:当前大家常用的主流搜索引擎、新媒体、电子商务网站和大数据处理系统等一般都托管在数据中心的计算机上。每台计算机都是强大的服务器,运行着服务器操作系统,典型的例子是Linux。通常每台服务器只运行一个应用服务程序,例如 数据库服务器或Web 服务器等,处于处理成千上万个用户传入的网络服务请求,所以吞吐量(每秒处理的请求数量)是一个关键的优化目标。而安全和可靠也是服务器操作性系统需要重点应对的目标。服务器操作系统的一种形态是虚拟机(Virtual Machine Monitor,VMM),它可在一台物理机上虚拟出多台虚拟计算机,可以像运行应用程序一样运行另一个操作系统。通过虚拟机可以充分利用数据中心中资源利用率不高的物理服务器,提高整个数据中心的运行效率。典型的服务器操作系统有:FreeBSD、微软的Windows Server、基于Linux系的RHLS、Ubuntu、openEuler、龙蜥操作系统、麒麟服务器操作系统等。

- 面向台式机/笔记本电脑和上网本的操作系统:典型的例子是:Windows 8、Mac OS X、Linux、Chrome OS等。这些计算机系统是单用户的,运行许多应用程序,并具有各种 I/O 设备。有人可能认为只有一个用户,就没有必要将系统设计为支持共享,而最初的个人计算机操作系统确实采用了这种方法。

Expand Down
Loading

0 comments on commit 7272381

Please sign in to comment.