文章目录
- 前言
- 1. 操作系统的目标和功能
-
- 1.1 作为用户/计算机接口的操作系统
- 1.2 作为资源管理器的操作系统
- 1.3 操作系统的易扩展性
- 2. 操作系统的发展
-
- 2.1 手工操作系统(无操作系统)
- 2.2 单道批处理系统
- 2.3 多道批处理系统
- 2.4 分时系统
- 3. 主要的成就
-
- 3.1 进程
- 3.2 内存管理
- 3.3 信息保护和安全
- 3.4 调度和资源管理
- 3.5 系统结构
- 4. 现代操作系的特征
- 5. 总结
前言
上一篇文章主要对计算机硬件部分作了简要的介绍,从本文开始将慢慢深入对操作系统的学习。本文将会介绍操作系统的发展史,操作系统的功能以及现代操作系统的特征,其中操作系统的功能将会在后文中进行具体介绍,本文只做简要介绍。
1. 操作系统的目标和功能
操作系统是控制应用程序执行的程序,屏蔽了底层硬件的细节,只暴露给上层应用程序接口以方便调用。它有下面三个目标:
- 方便:操作系统使计算机更容易使用。
- 有效:操作系统使计算机资源得到更有效的利用。
- 扩展能力:在不妨碍服务的前提下,操作系统更容易扩展新的功能。
接下来将依次介绍操作系统的这三个目标。
1.1 作为用户/计算机接口的操作系统
为用户提供的硬件和软件可以看做是一种层次结构,如图2.1 所示。终端用户通常不关心计算机的硬件细节。因此终端用户把计算机系统看做是一组应用程序。
简单来说,操作系统通常提供一下几方面的服务:
- 程序开发:操作系统提供各种各样的工具和服务,如编辑器和调试器,用于帮助程序员开发程序。通常,这些服务以实用工具的形式出现,严格来说并不属于操作系统核心的一部分;它们由操作系统提供,称做应用程序开发工具。
- 程序运行:运行一个程序需要很多步骤,包括必须把指令和数据载入到内存、初始化 I/O 设备和文件、准备一些其它资源。操作系统为用户处理这些调度问题。
- I/O 设备访问:每个 I/O 设备的操作都需要特有的指令集或控制信号,操作系统隐藏这些细节并提供了统一的接口,方便程序员使用接口来访问这些设备。
- 文件访问控制:对于操作系统而言,关于文件的控制不仅必须详细了解 I/O 设备(磁盘驱动器、磁带驱动器)的特性,而且必须详细了解存储介质中文件数据的结构。此外,对有多个用户的系统,操作系统还可以提供保护机制来控制对文件的访问。
- 系统访问
- 错误检测和响应
- 记账
1.2 作为资源管理器的操作系统
一台计算机就是一组资源,包括 CPU、内存、I/O 设备等,操作系统就是负责管理这些资源。
图2.2 显示了操作系统主要管理的资源。操作系统中有一部分在内存中,其中包括 内核程序(kernel) 和当前正在使用的其它操作系统程序,内核程序包含操作系统中最常使用的功能。内存的剩余部分包含用户程序和数据,它的分配由操作系统和处理器中的存储管理硬件联合控制。
操作系统决定在程序运行过程中何时使用 I/O 设备,并控制文件的访问和使用,以及运行一个用户程序时可以分配多少处理器时间等。
1.3 操作系统的易扩展性
一个好的操作系统应该能够不断发展,其原因如下:
- 硬件的升级和新型硬件的出现:例如,早期运行 Unix 的处理器没有 “分页” 的硬件,因此 Unix 也没有使用分页机制,而较新的版本经过修改,具备了分页的功能。
- 新的服务:为适应用户的要求或满足系统管理员的需要,需扩展操作系统以提供新的服务。
- 纠正错误:任何一个操作系统都会有bug,在发现bug后需要引入相应的补丁程序。
因此在构造操作系统时应该采用模块化的设计,清楚的定义模块间的接口。而对于现代操作系统来说,简单的模块化是不够的。
2. 操作系统的发展
2.1 手工操作系统(无操作系统)
对于早期的计算机,从 20 世纪 40 年代后期到 50 年代中期,程序员都是直接与计算机硬件打交道的,因为当时还没有操作系统。
当时的计算机每次只能运行一个程序,程序员在打孔纸卡上写程序,然后拿到一个计算机操作房间,交给操作员,等计算机空下来后,操作员会把程序放入,然后运行、输出结果、停机。 以前计算机慢,这种手动做法可以接受,运行一个程序通常需要几个小时,几天甚至几周。但随着计算机的计算能力变得越来越快,越来越快呈指数级增长,很快,放程序的时间比运行时间还长,我们需要一种方式让计算机自动运作,于是操作系统诞生了。
2.2 单道批处理系统
为了提高利用率,在 20 世纪 50 年代中期开发出了第一个单道批处理操作系统。
工作方式:
用户把卡片或磁带中的作业提交给计算机操作员,由他把这些作业按顺序组织成一批,并将整个作业输入到磁盘形成作业队列,操作系统依次自动处理队列中的每个作业:装入 → 运行 → 撤出……,运行完毕,通知用户取结果
工作特点:
批量:作业队列
自动:程序的装入和撤出自动完成,效率高
单道:依次、串行(在内存中总是只有一个程序在运行,所有的作业都是依次、串行运行的)
2.3 多道批处理系统
即便对于单道批处理系统提供的自动作业队列,处理器任然经常处于空闲状态。因为 I/O 设备相对于处理器的速度太慢,因此有了多道批处理系统。
工作方式:
在内存中存放多道程序,当某道程序因为某种原因(例如执行 I/O 操作时)不能继续运行而放弃 CPU 时,操作系统便调度另一程序投入运行。这样可以使 CPU 尽量忙碌,从而提高利用率。
工作特点:
多道:内存同时存放多道程序
并行:宏观上多道程序同时执行
串行:微观上处理器一次只能处理一道程序
多道批处理系统的缺点:
作业处理时间长
交互能力差
运行过程不确定
2.4 分时系统
分时操作系统出现的背景
- 事务性任务的涌现(交互性高,响应快速)
- 要求支持多任务/多用户
- 多终端计算机
由于多道批处理系统无法胜任这些需求,因而分时系统应运而生。
分时系统不仅可以同时处理多个批作业,它还可以用于处理多个交互作业。对于后一种情况,由于多个用户共享处理器时间,因而该技术称做 分时。在分时系统中,多个用户可以通过终端同时访问系统,由操作系统控制每个用户程序以很短的时间为单位交替执行。由于终端用户反应时间相对计算机比较慢,因而每个终端用户都感觉到是独占主机。
事务性任务与科学计算性任务
- 科学计算性任务:耗 CPU,在 CPU 上进行大量运算
- 事务性任务:用户在整个程序运行过程中需要不断和程序进行交互,输入和输出很频繁;要求计算机能够快速响应
3. 主要的成就
操作系统在发展过程中为了达到最初的目标(方便、有效和易扩展性)提出了 5 个重要的理论进展:进程、内存管理、信息保护和安全、调度和资源管理、系统结构。
每个进展都是为了解决实际的难题,并由相关原理或抽象概念来描述的。这 5 个领域包括了现代操作系统设计和实现中的关键问题。本节对这 5 个领域进行简要介绍。
3.1 进程
进程是操作系统分配资源的基本单位。
简单来说,一个进程可以看作是由以下三部分构成的:
- 一段可执行的程序
- 程序所需要的相关数据(变量、工作空间、缓冲区等)
- 程序执行的上下文
其中最后一部分是根本。执行上下文 又称做 进程状态,是操作系统用来管理和控制进程所需的内部数据。这种内部信息是和进程分开的,因为操作系统信息不允许被进程直接访问,上下文包括操作系统管理进程以及处理器正确执行进程所需要的所有信息。包括了各种处理器寄存器的内容,如程序计数器、和数据寄存器;还包括操作系统使用的信息,如进程的优先级以及进程是否在等待特定的 I/O 事件的完成。
下图2.8 给出了一种进程管理的方法。两个进程 A 和 B,存放在内存的某些部分。也就是说,给每个进程(包含程序、数据和上下文信息)分配一块内存区域,并且在由 操作系统创建和维护的进程表 中进行记录。进程表包含记录每个进程的表项,表项内容包括指向包含进程的内存地址的指针,还包括该进程的部分或全部执行上下文。进程索引器包含当前正在控制处理器的进程在进程表中的索引。程序计数器指向该进程中下一条待执行的指令。基址寄存器和界限寄存器定义了该进程所占据的内存区域:基址寄存器中保存该内存区域的开始地址,界限寄存器保存了该区域的大小(以字节或字为单位)。程序计数器和所有的数据引用相对于基址寄存器被解释,并且不能超过界限寄存器的值,这就可以保护内部进程间不会干涉。
图2.8 中进程索引寄存器表明进程 B 正在执行。以前执行的进程被临时中断,在 A 中断的同时,所有寄存器的内容被记录在它的执行上下文环境中,以后操作系统就可以执行切换,恢复进程 A 的执行。进程切换过程包括保存 B 的上下文和恢复 A 的上下文。当在程序计数器中载入指向 A 的程序区域的值时,进程 A 自动恢复执行。
因此,进程被当做数据结构来实现(可以和 C语言的结构体进行类比,所谓结构体就是把若干个数据项汇集到一处并赋予其名字后所形成的一个整体)。一个进程可以是正在执行,也可以是等待执行。任何时候整个进程状态都包含在它的上下文环境中。这个结构使得操作系统可以方便地扩展和引入新的功能(如优先级),这可以通过扩展上下文环境来支持这些新的功能。
3.2 内存管理
为了有效且有条理地控制存储器分配,操作系统负责以下 5 个基本的存储器管理责任:
- 进程隔离:操作系统必须保护独立进程,防止互相干涉各自的存储空间,包括数据和指令。
- 自动分配和管理:程序应该根据需要自动在存储层次间动态地分配,分配对程序员是透明的。
- 支持模块化程序设计:程序员应该能够定义程序模块,并且动态地创建、销毁模块,动态地改变模块大小。
- 保护和访问控制:不管在存储层次的哪一级,存储器的共享都会产生一个程序访问另一个程序存储空间的潜在可能性。
- 长期存储:许多应用程序需要在计算机关机后长期保存信息。
在典型情况下,操作系统使用 虚拟存储器 和 文件系统 机制来满足这些要求。文件系统实现了长期存储,它在文件中保存信息。对程序员来说,文件是一个很方便的概念;对操作系统来说,文件是访问控制和保护的一个有用单元。
虚拟存储器机制允许程序从逻辑的角度访问存储器,而不考虑物理内存上可用的空间数量。虚拟存储器的构想是为了满足有多个用户程序同时驻留在内存中的要求,这样,当一个进程被写出到辅助存储器中并且后继进程被读入时,在连续的进程执行之间将不会脱节。
由于进程大小不同,如果处理器在很多进程间切换,则很难把它们放在连续的内存中,因此引进了 分页系统。在分页系统中,进程由许多固定大小的块组成,这些块称做 页。程序通过 虚地址 访问字,虚地址由页号和页中的偏移量组成。进程的每一页都可以放在内存中的任何地方,分页系统提供了程序在使用的虚地址和内存地址中的 实地址 或物理地址之间的动态映射。
如图2.9,刚开始时,一个进程的所有页都保留在磁盘中,当进程执行时,一部分页在内存中。如果需要访问的某一页不在内存中时,存储管理硬件可以检测到,然后安排载入这个缺页。这个配置称做 虚拟内存。
可以通过给每个进程一个唯一的不重叠的虚拟存储空间来实现进程隔离;可以通过使两个虚拟存储器空间的一部分重叠来实现内存共享。
图2.10 显示了虚拟存储器方案中的寻址关系。存储器由内存和低速的辅助存储器组成,内存可以直接访问到(通过机器指令),外存可以通过把块载入内存间接访问到。地址转换硬件(映射器)位于处理器和内存之间。程序使用虚地址访问,虚地址将映射成真实的内存地址。如果访问的虚地址不在实际内存中,内存不够的话,实际内存中的一部分内容将换到外存中,然后换入所需的数据块。在这个活动过程中,产生的这个地址访问的进程必须被挂起。
3.3 信息保护和安全
信息保护是在使用分时系统是提出的。
大多数与操作系统相关的安全和保护问题可以分为 4 类:
- 可用性:保护系统不被打断
- 保密性:保证用户不能读到未授权访问的数据
- 数据完整性:保护数据不被未授权修改
- 认证:涉及用户身份的正确认证和消息或数据的合法性
3.4 调度和资源管理
操作系统的一个关键任务是管理各种可用资源(内存空间、I/O 设备、处理器),并调度各种活动进程使用这些资源。任何资源分配和调度策略都必须考虑三个因素:
- 公平性
- 有差别的响应性
- 有效性
3.5 系统结构
对于运行数百万到数千万条代码的大型操作系统,仅仅有模块化程序设计是不够的,软件体系结构和信息抽象的概念正得到越来越广泛的使用。现代操作系统的层次结构按照复杂性、时间刻度、抽象级进行功能划分。我们可以把系统看做是一系列的层。每一层执行操作系统所需功能的相关子集。它依赖于下一个较低层,较低层执行更为原始的功能并隐藏这些功能的细节。它还给相邻的高层提供服务。下图给出一张层次设计模型表。
4. 现代操作系的特征
现代操作系统的特征可以参考下面这篇文章,这篇文章和我所看书的内容差不多相同:
https://www.jianshu.com/p/5535f6301721
5. 总结
本文首先介绍了操作系统的三个目标 —— 方便、有效、扩展性,并对功能进行了简要的描述。之后介绍了操作系统的发展史:最初的批处理系统实现了自动加载程序,解决了人手工装填程序效率极其低下的问题,但由于 CPU 的速度很快,因此经常处于空闲状态;多道批处理系统的出现更大程度的提高了 CPU 的利用率,在宏观上一次可以执行多个程序,在微观上 CPU 交替执行每一个程序;分时系统可以使用户和计算机实时交互,并且支持多用户交互。本文还描述了操作系统发展过程中所取得的 5 个重要理论进展,最后叙述了现代操作系统的特征。从下一章开始将具体研究操作系统的进程部分。