第 14 章 操作系统概述
14.1 基本概念
14.1.1 操作系统的基本概念
如图 14 - 1 所示,操作系统是计算机系统中的一个重要组成部分,它位于计算机硬件和用户程序(用户)之间,负责管理计算机的硬件资源,为用户和应用程序提供一个统一的、友好的、安全的接口,使计算机能够高效运行。
操作系统具有 4 个基本特征,包括并发性、共享性、虚拟性和异步性。并发性指的是操作系统可以在一段时间内处理多个任务。共享性指的是操作系统可以让多个进程共享计算机中的各类资源。虚拟性指的是操作系统可以为每个进程提供一个虚拟的计算机环境,包括通过时分复用虚拟 CPU,通过空分复用虚拟内存等。异步性是指操作系统可以响应不同的事件并采取相应的措施,而不必等待前一个事件处理完成。这种事件可以是来自用户的输入、来自硬件设备的中断、来自其他进程的信号等。例如,在一个多任务操作系统中,当一个进程被阻塞等待输入时,操作系统可以切换到其他进程并继续执行,而不必等待当前进程的输入完成。当输入完毕后,操作系统会再次切换回该进程并继续执行。
显然,如果要体现共享性,至少需要多个进程并发,而进程并发也必须共享资源,因此,虚拟性和异步性也需要依赖于并发性和共享性。由此可以说,并发性和共享性是操作系统最基本的两个特征。
14.1.2 操作系统的发展历程
操作系统的发展历程可以追溯到 20 世纪 50 年代。最初的操作系统是批处理系统,随后发展出分时系统、实时系统、分布式系统等多种类型的操作系统。现代操作系统一般具有多任务处理、多用户支持、虚拟内存、文件系统、网络支持等功能。批处理系统是过去 408 真题的重点,考生应该重点关注。由于近年 408 真题风格多变,与实时系统和分时系统相关的考题未必不会出现在未来的真题中。
14.1.3 程序运行环境
1. CPU 运行模式
CPU 运行模式分为内核模式和用户模式两种。内核模式下的程序可以访问所有的系统资源,包括内核数据结构和硬件资源等;而用户模式下的程序只能访问受限的系统资源,不能直接访问内核数据结构和硬件资源,必须通过系统调用等方式才能访问这些资源。
2. 中断和异常的处理
中断和异常是操作系统处理外部事件的重要机制。中断是由硬件设备发出的信号,表示设备已经完成了某个操作或发生了某个事件;异常则是由程序执行过程中遇到的错误或异常情况所触发的事件。操作系统可以通过中断和异常来响应外部事件,并采取相应的措施。
如图 14 - 2 所示,中断处理流程主要分为如下几个步骤。
(1)测定是否有未响应的中断信号。
(2)保护被中断进程的 CPU 环境。
(3)转入相应的中断处理程序。
(4)中断处理。
(5)恢复 CPU 的现场并退出中断。3. 系统调用
系统调用是程序访问操作系统服务的一种机制。程序在用户模式下通过系统调用向操作系统请求服务,例如读 / 写文件、创建进程、进程间通信等。系统调用是程序与操作系统之间的接口,操作系统根据系统调用提供相应的服务并返回结果。
图 14 - 3 所示为系统调用的基本流程。
(1)应用程序通过系统调用向操作系统发起请求,这个过程需要传递系统调用参数。
(2)执行 trap 指令,使 CPU 从用户模式转为内核模式。
(3)操作系统在内核模式下执行系统服务。
(4)操作系统完成系统服务后,返回到用户模式,继续执行。
4. 程序的链接与装入
程序的链接和装入是指将程序中的模块链接成一个可执行文件,并将可执行文件装入内存中执行的过程。链接过程将程序中的各个模块链接起来形成一个完整的程序,而装入过程将可执行文件装入内存中并分配相应的地址空间。程序的链接和装入过程如图 14 - 4 所示。
5. 程序运行时内存映像与地址空间
程序运行时,操作系统会为其分配一定的地址空间,包括代码段、数据段和堆栈段等。代码段存放程序的可执行代码,数据段存放程序运行时所需的数据,堆栈段则用于存放程序的运行时栈。操作系统还会维护程序运行时的内存映像,包括代码、数据、堆栈等的物理地址和虚拟地址的映射关系,以及页面置换和内存保护等机制,以保证程序运行的安全性和稳定性。操作系统为每个进程分配独立的虚拟地址空间,使每个进程都有自己独立的地址空间,可以独立地访问内存中的数据。进程之间的地址空间是相互独立的,每个进程只能访问自己的地址空间,不能直接访问其他进程的地址空间。
14.1.4 操作系统结构
根据应用场景的不同,操作系统可以设计成不同的结构,如图 14 - 5 所示,宏内核和微内核就是两种常见的结构。
1. 分层
分层式操作系统是一种将操作系统的不同功能划分为多个层次的操作系统设计范式,每个层次负责一定的功能,层与层之间通过标准接口进行通信。分层式操作系统具有良好的模块化结构和可扩展性,同时层次结构也有助于提高操作系统的可靠性和安全性。
2. 模块化
模块化操作系统是一种基于模块化设计的操作系统,将操作系统的各个组件划分为独立的模块,模块之间通过标准接口进行通信。模块化操作系统具有较好的可扩展性和可维护性,可以方便地添加新的功能模块或替换已有的模块,但由于模块之间的耦合性较高,因此模块化操作系统的性能和可靠性相对较差。