目标和功能
操作系统(Operating Systems, OS)的主要目标有三点
- 方便用户使用计算机。
- 提高计算机系统资源的使用效率。就是尽可能地让计算机的所有部件都处于使用状态,减少处于空闲状态的时间。
- 在不妨碍当前 OS 提供的服务的前提下,给 OS 增添新的功能。这里的服务也就是 OS 提供的功能。
OS 作为接口
如果应用程序需要用到硬件提供的功能,没有 OS 时,直接编写操控硬件的指令是极其复杂的一件事情。为了降低复杂性,OS 一般情况下提供了直接操纵硬件的常用功能,以接口的方式提供。应用程序可以通过使用 OS 提供的接口实现操纵硬件的功能。总之,OS 作为接口时,提供的功能有:
- 为应用程序的开发提供可选的工具。
- 为应用程序运行过程中的部分步骤提供支持。
- 为应用程序对 I/O 设备的访问提供接口。
- 对文件的访问进行权限管理。
- 控制对特定资源的访问和保护。
- 对运行过程中出现的错误进行响应,尽可能减小对正在运行的应用程序的影响。
- 对运行过程中各种资源的使用情况进行监控。
三种接口
- 指令系统体系结构(ISA):定义了计算机遵循的机器语言指令系统,应用程序可以使用该指令系统的一个子集。
- 应用程序二进制接口(ABI):定义了程序之间的二进制可移植性标准,提供了系统调用接口,可使用通过 ISA 提供的硬件资源。
- 应用程序编程接口(API):定义了应用程序使用硬件资源的接口,由 ISA 的指令系统的子集和高级语言库(HLL)提供。
OS 作为资源管理器
每个计算机可以看作由一组计算机资源组成,OS 对这些资源的使用进行管理。这些资源包括 CPU 的使用、内存的使用等等。通过管理计算机资源,OS 控制计算机的基本功能。一般情况下,控制机制处于被控制对象之外。但是,OS 与之不同。OS 关于控制方面有两个特点。其一,OS 和其他应用程序一样,必须由处理器执行才能发挥作用;其二,OS 在管理计算机资源的过程中经常会失去对计算机的控制权,同时控制权的恢复依赖于处理器。
OS 的一部分处于内存中,这部分程序包括内核和其他一些正在使用的 OS 程序。内存中的其他区域由用户数据和程序使用,其分配由 OS 和处理器中的存储管理硬件共同控制完成。
OS 的扩展
由于硬件的升级或者新型硬件的出现,OS 需要不断扩展其功能来满足对硬件的控制,提供更合适的服务等。
发展史
串行处理
最开始的计算机,由用户自己将写好的源代码程序通过输入设备传入计算机中进行执行,执行成功则结果从输出设备中输出,执行失败(执行过程中发生错误)则通过指示灯标识。
此时使用计算机的方式存在两个问题。第一个问题是,用户申请使用计算机的时间是某个基本时间段的倍数。例如,如果用户申请了 1 个小时的时间,共计花费了不到 1 个小时的时间程序运行完毕,则剩余的时间都浪费掉了;第二个问题是,将源程序输入到计算机的时候,还需要将编译器、链接器、公有函数等按编译的顺序依次输入到计算机中。如果在程序编译到运行的过程中某个步骤出现了错误,需要重新按顺序输入到计算机中。为了尽可能减少发生错误的概率,在将程序输入到计算机中前需要花费大量的时间做准备工作。
简单批处理
为了解决上一阶段出现的两个问题,提出了批处理系统。每一个需要运行的程序和支撑程序运行的所有计算机外部的资源称为作业。此时,用户将自己需要运行的程序交给计算机操作员,计算机操作员将多个作业按顺序组织成一个整体,这个整体输入到计算机中依次处理,每次处理完将结果通过输出设备输出,同时处理器对下一个作业进行处理。
这时需要一个程序管理输入计算机中的多个作业构成的批作业,虽然此时内存中只有一个作业位于其中。这个程序称为监控程序(monitor)。从监控程序的角度来说,监控程序常驻于计算机内存中,当有批作业到来时,将批作业中的第一个作业调入内存中,然后将控制权交给该作业。该作业运行完毕后,将控制权返还给监控程序。监控程序将执行结果通过输出设备输出,同时调入下一个作业...直到批作业中所有作业运行完毕。从处理器的角度来说,控制权交给作业表示处理器取和执行的指令都是用户程序中的指令;控制权交给监控程序表示处理器取和执行的指令都是监控程序中的指令。
这种方式提高了计算机资源的利用率,主要是处理器的利用率。同时带来了新的问题,作业在执行时不能访问监控程序所在的内存区域,需要有内存保护机制;作业在运行开始时,启动一个定时器,在规定时间内该作业没有运行完成,则终止该作业,防止长时间占用处理器,需要定时器;作业在运行过程中有些指令不被允许执行,只能被监控程序执行,比如调用 I/O 设备的指令,作业只能通过请求监控程序执行对应的指令实现需要的功能。这一点又引申出了两种指令执行模式,作业执行时处于用户模式,监控程序执行时处于内核模式。
多道批处理
简单批处理过程中,当一个作业使用 I/O 设备时,处理器处于空闲状态,当 I/O 设备运行完成后,处理器才能执行。为了提高处理器的使用效率,推出了多道批处理系统。和简单批处理系统相比,当内存容量足够的情况下,将多个作业放入内存中,当一个作业在使用 I/O 设备时,此时处理器处于空闲状态,监控程序此时将控制权交给可能使用处理器的作业,使得在同一时间处理器和 I/O 设备同时处于执行状态。这种方式提高了计算机资源的使用效率。这种方式称为多道程序设计(multiprogramming)或者多任务处理(multitasking)。
同时,也带来了新的问题。内存中同时有多个作业,需要内存管理;在不同作业之间进行切换时需要某个算法进行指导。
分时系统
当多个用户同时访问同一个计算机时,特别是以交互式的方式使用时,需要同时给所有用户提供服务。交互式对于响应时间比较敏感。为了提供给用户较好的交互式体验,将处理器时间划分成特定的基本单元,首先给一个用户提供处理器时间执行该用户的程序,在规定的时间结束后,将处理器时间交给另一个用户使用,依次轮流使用处理器。这种方式称为时间片轮转技术。每个特定的使用处理器的时间称为时间片(time slicing)。由于所有用户分享处理器时间,称为分时(time sharing)。分时同样用到了多道程序设计,侧重点在于交互式响应。
OS 相关理论
进程
进程的定义
- 一个正在执行的程序。
- 计算机中正在运行的程序的一个实例。
- 可分配给处理器并由处理器执行的一个实体。
- 由一个单一顺序线程、一个当前状态和一组相关的系统资源所表征的活动单元。
出现错误的主要原因
- 不正确的同步。如一个进程P因事件 A 挂起时,当事件 A 完成时,其他进程不能正确的将进程 P 唤醒。
- 失败的互斥。如两个进程同时访问同一个资源。
- 不确定的程序操作。进程执行的结果和处理器调度算法相关。进程的不同执行顺序造成不同的运行结果。
- 死锁。多个进程占有不同的资源,但无法获得缺失的资源,造成资源被占用但没有进程能够正常运行。
进程的组成部分
- 一段可执行的程序。
- 程序需要的相关数据。
- 程序的执行上下文(execution context)。也称进程状态(process state), OS 用于管理进程需要的数据。
内存管理
- 进程隔离:进程不能访问其他进程的内存空间
- 自动分配和管理:程序加载到内存中时根据需要动态分配内存空间。
- 支持模块化程序设计。
- 保护和控制访问。OS 保证部分内存区域可以公开访问。其他内存区域只能由其内部进程访问。
- 长期存储。保证程序关机后能长时间保存。
信息保护和安全
- 可用性:保护系统不被中断。
- 保密性:不能访问未授权的数据。
- 数据完整性:保护数据不被未授权修改。
- 认证:身份认证或者数据合法性认证。
调度和资源管理
- 公平性。尽量使竞争同一个资源的进程有相同的访问机会。
- 有差别的响应。根据不同进程的特点使用不同的调度策略。
- 有效性。 使得计算机资源的利用率尽可能地高。
参考
[1] William Stallings, 操作系统——精髓与设计原理(8th), 2017.