原文链接:计算机科学导论(6):操作系统 | 远行的舟

在第一章中,我们讲到,当今的计算机可以看做是硬件、软件和数据的结合体,而操作系统是今天计算机中最重要的软件,我们可以将今天的计算机软件分为操作系统和应用程序两大类。操作系统(Operating System,OS)是一个非常复杂的系统,因此很难给出一个普适性的定义。概括来说,操作系统是一种用来管理计算机硬件与软件资源的程序。本章,我们将依次介绍操作系统的加载过程、演化历史、四大基本功能以及现今主流的操作系统。

6.1 自举过程

操作系统存储于硬盘中,计算机通电后,首先执行硬件自检过程并将 CPU 程序计数器设置为自举程序的第一条指令对应的内存地址,硬件自检通过后,CPU 执行自举程序,将硬盘中的操作系统加载到内存中。自举/引导(bootstrapping, booting)是计算机科学中的一个术语,它描述的是在按下开机或重置按钮后将基础性软件(特别是操作系统)加载到内存中的过程,这一术语最早见于 19 世纪的美国短语“靠自己振作起来”(pull oneself up by one’s bootstraps)。自举过程包含一系列阶段,下一个阶段将执行比上一阶段更大、更复杂的程序,它首先执行硬件自检过程,如果通过,则接着加载固件(firmware)和软件到内存中,如:基本输入输出系统(BIOS)、管理程序/虚拟机监视器(hypervisor / virtual machine monitor)、操作系统、实用软件(utility software)等。图 6-1 向我们展示了自举程序加载操作系统的过程。

固件是一种特殊的软件,为硬件提供低级控制功能。它可以为设备的复杂软件提供标准化的操作环境,它也可以作为部分设备完整的操作系统。几乎所有的电子设备(除非过于简单)均包含固件,例如:嵌入式系统、家用电器(appliance)、计算机、计算机外设(computer peripherals)。固件保存在非易失性存储设备中,如 ROM、EPROM、EEPROM 等。BIOS 就是典型的固件。

图 6-1 自举过程

6.2 演化历史

虽然世界上第一台通用电子计算机并没有操作系统,但操作系统或至少说操作系统的前身几乎是伴随着通用电子计算机的诞生而诞生的,设计操作系统的本意仅仅是为了提供简单的工作排序能力。然而从上世纪 50 年代开始,伴随着计算机硬件和计算机网络的发展,操作系统历经了从批处理系统到分时系统、从串行系统到并行系统、从非分布式系统到分布式系统的发展过程,今天操作系统的复杂程度、其所能实现的丰富功能已经远远超出最初设计者们的意图。

批处理系统非常简单,它们仅仅用来在一个作业结束后将计算机所有资源转换到另一个作业上,作业(job)是计算机科学中的一个术语,一个程序从它被选中执行到运行结束并再次成为一个程序的过程中,该程序被称为一个作业。

与批处理系统不同,分时系统可以将多个作业同时装入内存,不同作业可以在同一时间使用计算机的不同资源,例如:当一个作业正使用输入/输出设备时,CPU 可供另一个作业使用。之所以称之为分时,是因为每个作业可以分到一段时间来使用资源,因为计算机运行速度很快,所以用户感受不到分时的存在,用户的感觉是整个系统在为自己服务。

并行系统是相对串行系统而言的,它是伴随着 CPU 从单核发展为多核而产生的,分布式系统是相对非分布式系统而言的,它是伴随着计算机互联而产生的,在分布式系统下,一个以往必须在一台计算机上运行的作业现在可以由远隔千里的多台计算机共同完成。

此外,除了上述提到的这些系统,还有实时系统。实时系统在交通控制、病人监控或军事控制系统中有广泛应用。

6.3 基本功能

现代操作系统应至少具备 4 种功能:内存管理进程管理设备管理文件管理。此外操作系统还有一个图形用户界面(GUI)或命令解释程序(Shell),它负责操作系统与用户之间的交互。下面我们将依次介绍内存管理、进程管理、设备管理和文件管理。

6.3.1 内存管理

过去,操作系统在管理内存时只允许单个程序载入内存,程序运行结束后再装入另一个程序,这种内存管理被称为单道程序。现在,操作系统在管理内存时允许多个程序载入内存,多道程序涉及四种技术:分区、分页、请求分页和请求分段。其中前两个属于非交换范畴,即程序在运行期间始终驻留在内存中,后两种则属于交换范畴。

分区(partitioning)将内存分为不定长的几个分区,每个分区加载一个程序,计算机硬件资源交替服务于各个程序,图 6-2 展示了分区。在分区中,每个程序完全载入内存并占用连续地址,虽然相较于单道程序,分区大大提高了计算机硬件资源特别是 CPU 的使用效率,但它仍存在如下几点问题:

  • 分区大小由内存管理器事先决定,这可能导致部分大程序无法载入内存以及部分大分区出现空闲区。
  • 虽然空闲区过多时,内存管理器能够紧缩分区、删除空闲区并创建新区,但这将增加系统的开销。

图 6-2 分区

分页(paging)将内存分成大小相等的若干部分(帧),程序也被分成大小相等的部分(页),页和帧的大小通常保持一致,并且与系统从存储设备中提取信息的块大小相等。在分页中,每个程序不必占用连续内存地址,即两个连续的页可以占用内存中两个不连续的帧。虽然分页解决了分区面临的上述两个问题,但整个程序仍需要在运行前全部载入内存,而这意味着当内存只有 4 个空闲的不连续帧时,一个 6 页程序无法载入内存,而这显然是对内存空间的浪费。图 6-3 展示了分页。

图 6-3 分页

请求分页(demand paging)改变了分页中整个程序需要在运行前全部载入内存的状况,也就是说,当内存有 4 个不连续帧时,一个 6 页程序可以将其中的 4 页载入内存。

请求分段(demand segmentation)类似于请求分段,只不过在请求分段中,程序将按程序员的角度划分成段,它们载入内存、执行,然后被同一个程序或其他程序的模块所代替。图 6-4 展示了请求分页和请求分段。

图 6-4 请求分页和请求分段

请求分页和分段是两者的结合,在请求分页和分段中,一个段可以分成很多页,内存可以分为很多帧。在请求分页和请求分段中,一部分程序在内存,一部分程序在硬盘,假设 10 MB 内存可以允许 10 个程序,每个程序 3 MB,则我们称内存大小为 10 MB,虚拟内存(virtual memory)大小为 20 MB. 如果存在虚拟内存,就意味着操作系统内存管理采用的是请求分页、请求分段或二者的结合。图 6-5 展示了虚拟内存。

虚拟内存是现代操作系统广泛采用的一种内存管理技术。它使得应用程序自认为拥有连续可用的内存(一个连续完整的地址空间),而实际上,应用程序通常被分割成多个碎片,部分碎片载入物理内存,部分碎片暂时存储在硬盘等外部存储设备上,在需要时才被载入物理内存。虚拟内存技术的应用让物理内存的使用变得更有效率,它使得程序员在编写大型应用程序时不必过多考虑物理内存的限制,也使得小内存计算机能更流畅地运行大型应用程序。

图 6-5 虚拟内存

6.3.2 进程管理

程序、作业和进程(process)是现代操作系统关于指令集的三个术语。程序是由程序员编写的一组存储于外部存储设备上的稳定的指令,它可能会也可能不会成为作业。作业在第二节中已有介绍,从程序被选中到运行结束再次成为一个程序的过程中,作业可能会或不会被执行,它或者驻留在外部存储设备上等待被调入内存(保持状态),或者在内存中等待被 CPU 执行(就绪状态),或者驻留在内存中等待一个输入/输出事件(等待状态),或者在内存中被 CPU 执行(运行状态)。当作业处于上述后三种状态时,它是一个进程,进程指的是一个运行中的程序,它是一个驻留在内存中运行的作业。从三者的定义我们不难看出三者之间的关系,即程序包含作业,作业包含进程。图 6-6 向我们展示了三者之间的关系(注:该图是简化版本,没有考虑虚拟内存)。

图 6-6 程序、作业和进程分界状态图

上图中,作业与进程的切换由作业调度器完成,进程各状态的切换则由进程调度器完成,当然,操作系统还使用其他类型调度器来实现更加有效的状态转换。上图只显示了一个作业或进程间状态的转换,但实际中会有很多的作业和进程相互竞争计算机资源,为处理多个作业和进程,进程管理器使用队列这一数据结构,队列中存有作业控制块或进程控制块。图 6-7 展示了进程管理队列,进程管理器可以采用多种策略从队列中选择下一个作业或进程,这些策略包括先入先出(FIFO)、最短长度优先、最高优先级等。

图 6-7 进程管理队列

进程管理要实现拥有不同资源的不同进程的同步,然而当资源可以被多个进程同时使用时,就可能出现两种有问题的状态:死锁(deadlock)和饿死(hungry)。图 6-8 向我们展示了死锁的情况,进程 A 占有文件 1,它需要得到文件 2 后才能释放文件 1,进程 B 占有文件 2,它需要得到文件 1 后才能释放文件 2,由于多数操作系统不允许文件共享,因此在这种情况下,如果没有一个强制进程释放文件的措施,就会成为一个死局,无论进程 A 还是进程 B 都将无法继续运行下去了。通常,当操作系统没有对进程的资源进行限制时会发生死锁,避免死锁出现的一种方法是限制进程占有资源的时间。

图 6-8 死锁

饿死是一种与死锁相反的情况,它发生在操作系统对进程分配资源有太多限制的时候。图 6-9 向我们展示了饿死的情况,进程 A 需要文件 1 和文件 2,进程 B 正在使用文件 1,进程 E 正在使用文件 2,接着进程 B 释放文件 1 但进程 E 不释放文件 2,此时进程 A 无法执行,由于进程 C 只需要文件 1,文件 1 被分配给进程 C 使用,随后进程 E 释放文件 2 但进程 C 不释放文件 1,此时进程 A 仍无法执行,由于进程 D 只需要文件 2,文件 2 被分配给进程 D 使用,这样由于要求进程 A 必须得到两个文件后才能执行,进程 A 将始终处于等待状态而无法执行。

图 6-9 饿死

关于死锁和饿死及其所涉及的进程同步问题,笔者还不是很理解,所以暂时也无法给出系统性的论述,一切还得等到系统学习完计算机操作系统之后再说了。

6.3.3 设备管理

设备管理(输入/输出管理)器负责访问输入/输出设备,它负责让输入/输出设备使用起来更有效。对设备管理器细节的讨论需要操作系统原理方面的知识,而这已经超出导论性课程的范围,这里我们仅列出设备管理器的一些功能:

  • 不间断监视输入/输出设备,了解设备何时完成一个进程的服务以及何时能够为队列中的下一个进程服务
  • 为每个输入/输出设备维护一个或多个队列
  • 控制用于访问输入/输出设备的不同策略,包括先入先出、最短长度优先等

6.3.4 文件管理

与设备管理器一样,对文件管理器的细节讨论也需要更高级的知识,文件管理器的功能包括:

  • 控制文件的访问
  • 管理文件的创建、删除和修改
  • 给文件命名
  • 管理文件的存储、存储方式和存储位置
  • 负责文件归档和备份

6.4 主流操作系统

目前,服务器等大型机的主流操作系统有 Unix 和 Linux,个人电脑的主流操作系统有 Windows 和 Mac OS,智能手机的主流操作系统有 Android 和 iOS.

Unix 由贝尔实验室的计算机科学研究小组的 ThomsonRitchie1969 年首先开发出来,由于大部分采用 C 语言编写,因而它是一个跨平台、可移植的操作系统,Unix 拥有一套功能强大的工具(命令),它们组合起来可以解决许多在其他操作系统中需要通过编程来解决的问题,此外,由于系统本身包含设备驱动程序,它还具有设备无关性。图 6-10 展示了 Unix 操作系统的组成部分,它包括内核(包含操作系统四大基本功能)、命令解释器、工具(Unix 标准程序,常用的有文本编辑器、搜索程序和排序程序)和应用。

图 6-10 Unix 的组成部分

Linux 是由芬兰 Helsinki 大学的学生 Linus Torvalds1991 年开发的一个类 Unix 操作系统,是如今在服务器等大型机中应用最广泛的开源操作系统。Linux 由内核、系统库(含有一组被应用程序使用的函数)和系统工具三部分构成,关于 Linux 的细节笔者将在后续专题文章中加以讨论。

Windows 是在 Dave Culter 领导下与上世纪 80 年代后期开发的替代 MS-DOS 的操作系统,图 6-11 展示了 Windows 的体系结构,它由硬件抽象层、内核、执行者和环境子系统四部分构成,限于篇幅和笔者目前知识水平,其具体细节这里就不讨论了。

图 6-11 Windows 的组成部分

Mac OS 是只能运行于苹果 Macintosh 系列电脑上的基于 Unix 内核的类 Unix 操作系统,它是首个在商用领域获得成功的图形用户界面操作系统。

Android 是一种基于 Linux 的开源操作系统。它最初由 Andy Rubin 于 2003 年创建的 Android 公司开发,2005 年 8 月 17 日 Google 低调收购成立仅 22 个月的 Android 及其团队,Andy Rubin 出任 Google 工程部副总裁,继续领导 Android 开发。2007 年 11 月,Google 与 84 家硬件制造商、软件开发商及电信营运商组建开放手持设备联盟(Open Handset Alliance)共同研发改良 Android 系统,随后 Google 以 Apache 开源许可证的授权方式,发布了 Android 的源代码。2008 年,在 GoogleI/O 大会上,谷歌提出了 AndroidHAL 架构图,同年 8 月 18 日,Android 获得了美国联邦通信委员会(FCC)的批准,2008 年 9 月,谷歌正式发布了第一个 Android 系统版本 Android 1.0. 2013 年的第四季度,Android 平台手机的全球市场份额已经达到 78.1%. Android 一词最早出现于法国作家利尔亚当(Auguste Villiers de l’Isle-Adam)在 1886 年发表的科幻小说 《未来的夏娃》(L’ève future)中,他将外表像人的机器起名为 Android.

iOS 则是由苹果公司开发的移动操作系统。苹果公司最早于 2007 年 1 月 9 日的 Macworld 大会上公布了这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS 操作系统一样,属于类 Unix 的商业操作系统。

计算机科学导论(6):操作系统相关推荐

  1. 计算机科学导论 第4版,计算机科学导论.第4版

    摘要: <计算机科学导论(第4版)/高等院校计算机教育系列教材>从理论讲解和应用推广的角度出发,严格根据教育部高教司主持评审的<中国计算机科学与技术学科教程2002>进行编写, ...

  2. 计算机科学与技术专业《计算机网络原理》课程实验指导书,计算机科学导论,课程实验指导书解读.pdf...

    计算机科学导论 实验指导书 聊城大学计算机学院聊城大学计算机学院 聊城大学计算机学院聊城大学计算机学院 2010 年年 8 月月 年年 月月 <计算机科学导论>课程实验指导书 目 录 &l ...

  3. 计算机科学导论第五版_五月份将开始提供438项免费在线编程和计算机科学课程

    计算机科学导论第五版 Five years ago, universities like MIT and Stanford first opened up free online courses to ...

  4. 有关计算机科学导论的说法,计算机科学导论__练习题_汇总.docx

    计算机科学导论__练习题_汇总.docx PAGE - 4 -A卷B卷 第 PAGE - 63 - 页 共 NUMPAGES 69页 计算机科学导论试题双击自动滚屏发布者:admin 发布时间:201 ...

  5. 计算机科学导论-绪论

    大一软件工程新生,曾经学过c语言,想要了解c语言的处理原理,减少出错. 本博客内容和图片来自于 佛罗赞的 计算机科学导论一书. 1.1 图灵模型 是图灵所设想的一种机器,可以完成某些计算,但图灵着重于 ...

  6. 计算机科学导论(原书第三版)框架总结

    计算机科学导论 文章目录 计算机科学导论 绪论 数字系统 数据存储 数据运算 计算机组成 计算机网络和因特网 操作系统 算法 程序设计语言 软件工程 数据结构 抽象数据类型 文件结构 数据库 数据压缩 ...

  7. 计算机科学导论(5):计算机网络

    原文链接:计算机科学导论(5):计算机网络 | 远行的舟 参考:① 纪录片 <互联网时代> ② <计算机科学导论> ③ <TCP/IP 入门经典> ④ 维基百科 ⑤ ...

  8. 计算机科学导论的探讨论文,计算机科学导论论文.doc

    计算机科学概论 计算机科学是研究计算机及其周围各种现象和规律的科学,亦即研究计算机系统结构.程序系统(即软件).人工智能以及计算本身的性质和问题的学科. 计算机的发展 算盘时代: 这一阶段出现了表示语 ...

  9. 计算机科学导论在线作业,南开21春学期《计算机科学导论》在线作业

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 [南开大学]21春学期(1709.1803.1809.1903.1909.2003.2009.2103)<计算机科学导论>在线作业 试卷总分: ...

最新文章

  1. python公共基础知识整理_python基础知识整理——字符串
  2. 面试必过之消息中间件RabbitMQ面试总结大全!
  3. RabbitMQ配置环境变量后启动不了的解决方法
  4. wxWidgets:窗口大小概述
  5. #面试!,一定要注意,避免踩这些雷!!
  6. svn 单独导出某一个目录文件
  7. storyboard搭建项目_swift项目第五天:swift中storyBoard Reference搭建主界面
  8. Keras---text.Tokenizer:文本与序列预处理
  9. vector中resize和reserve接口的异同
  10. java hashSet
  11. (转)asp.net c#如何采集需要登录的页面?
  12. crt连接中兴服务器,利用SecureCRT实现中兴C220自动登录
  13. 订单业务中如何保证接口的幂等性
  14. oracle pdb与cdb区别,浅谈oracle 12C的新特性-CDB和PDB
  15. 视频教程-SpringBoot核心技术-Java
  16. 美团面试——餐饮系统开发
  17. python 沪江_Python基础篇 -- 字符串
  18. esp8266最小系统似乎是可以直接用起来接在飞控上的
  19. 文件缓存FileCache
  20. 1月5日 负数的十六进制如何表示。

热门文章

  1. lesson 17 always young 青年永驻-用in with表穿戴的用法-must be-
  2. vr直播怎么做?vr直播平台有哪些?
  3. ZOJ 3328 Wu Xing (五行相生相克找关系)
  4. a标签里面title的使用
  5. Android 常用备忘
  6. TIA PORTAL 西门子博途中怎样设置DB块中的变量数据为保持型或不保持?
  7. Acrel-BUS智能照明控制系统的设计与应用
  8. 原来是这样的,我明白了,
  9. MACD金叉启动副图/选股指标 通达信 源码 有未来
  10. Windows Server 2008 R2安装教程