1.1.1 操作系统的概念
在信息化时代,软件是计算机系统的灵魂,而作为其核心的操作系统,已与现代计算机系统深度融合。从使用层次来看,计算机系统自下而上可分为四层:硬件、操作系统、应用程序和用户(该划分侧重人机交互视角,不同于计算机组成原理中的结构分层)。其中,硬件(如中央处理器、内存、输入/输出设备等)提供基本计算资源;应用程序(如文字处理软件、电子表格、编译器、浏览器等)则利用这些资源解决用户的实际问题。操作系统负责管理硬件资源,为应用程序提供运行环境,并充当硬件与用户之间的桥梁。
具体而言,操作系统通过有效协调多个应用程序对硬件资源的访问,确保系统高效、安全地运行。综上所述,操作系统(Operating System,OS)是控制和管理计算机系统软/硬件资源、合理调度任务与分配资源,并为用户及其他软件提供统一接口与运行环境的最基本的系统软件。
1.1.2 操作系统的功能和目标
为多道程序提供良好的运行环境,操作系统需具备四大核心功能:处理机管理、存储器管理、设备管理和文件管理。此外,为方便用户使用,操作系统还需提供用户接口;同时,它通过抽象与虚拟化技术扩充硬件功能,从而提供更便捷的服务并提升资源利用率。
下面用直观的例子来描述操作系统的角色。例如,将用户视为“雇主”,计算机(由处理机、存储器、设备和文件等组成)视为“机器”,而操作系统则如同一位“工人”。这位工人具备协调和控制各个部件工作的能力,这体现了操作系统对系统资源的管理功能;同时,工人接收雇主的命令并执行任务,这对应于操作系统提供的“用户接口”;由于工人的存在,让原本复杂的机器变得简单易用,并充分发挥其价值,这正是操作系统“扩充机器”的作用。
1. 操作系统作为计算机系统资源的管理者
(1) 处理机管理
在多道程序环境下,处理机的分配和运行都以进程(或线程)为基本单位,因此处理机管理本质上是对进程的管理。并发是指多个进程在一段时间内交替执行,宏观上呈现同时运行的特征。进程管理的主要任务包括进程控制、进程同步、进程通信、死锁处理以及处理机调度等。
(2) 存储器管理
存储器管理旨在为多道程序提供良好的内存运行环境,方便用户使用并提高内存利用率,主要功能包括内存分配与回收、地址映射、内存保护与共享,以及内存扩充等。
(3) 文件管理
用户可见的持久化信息通常以文件形式组织。操作系统中负责文件管理的部分称为文件系统,其功能包括文件存储空间的管理、目录管理、文件读/写操作及访问保护等。
(4) 设备管理
设备管理的主要任务是处理用户的I/O请求,屏蔽设备差异,方便用户使用各类外设,并提高设备利用率,主要包括缓冲管理、设备分配、设备驱动处理和虚拟设备等功能。
上述任务均由“工人”(操作系统)自动完成,“雇主”(用户)无须关注。
2. 操作系统作为用户与计算机硬件系统之间的接口
所谓操作系统,是指用户与计算机硬件系统的接口,即操作系统位于用户与硬件之间,是用户使用硬件的必经媒介。正是有了操作系统的支撑,用户才能更方便、更可靠地操作硬件设备和运行用户程序。操作系统处于计算机硬件与用户之间,充当二者之间的桥梁。
用户通过应用程序或直接交互方式访问系统服务,而这些请求最终均由操作系统统一管理和调度。从交互方式来看,终端用户通过命令行和图形界面与操作系统通信;应用程序则通过系统调用请求操作系统服务。根据服务对象与使用场景的不同,这些交互方式可以分为两大类:用户接口包括命令方式和图形方式,面向普通终端用户;程序接口即系统调用,专为应用程序设计。
(1) 用户接口
为了使用户能够直接或间接控制作业的执行,操作系统提供了以下三类用户接口。
联机用户接口(命令行接口):面向交互式用户,由键盘命令与命令解释程序组成。用户输入命令后,系统立即解释并执行,完成后返回控制权,适用于实时交互场景。可以这样理解:“雇主”说一句话,“工人”做一件事,并做出反馈,这就体现了交互性。
脱机用户接口(作业控制语言):用于批处理系统。用户将作业控制命令写入作业说明书,连同作业一并提交;系统调度到该作业时,自动解释并执行说明书中的命令,无须用户实时干预。可以这样理解:“雇主”预先将任务清单交给“工人”,“工人”按清单逐条完成这些任务。
图形用户接口(GUI):为提升易用性,通过图标、菜单、对话框等图形元素替代文本命令。用户借助鼠标等设备进行操作,底层通过系统调用与内核交互,显著降低了使用门槛。
(2) 程序接口
程序接口是应用程序在运行时请求操作系统服务、访问系统资源的唯一合法途径,其核心是一组系统调用。每个系统调用对应内核中实现某个特定功能的子程序。当应用程序需要操作系统服务时,必须通过调用相应的系统调用来完成。
早期的系统调用多基于汇编语言实现,仅能在汇编程序中直接使用;在高级语言(如C语言)环境中,程序员通常调用标准库函数(如 printf()、open() 等)来间接触发系统调用。注意,库函数本身并非操作系统接口,它们只是对系统调用的封装。例如,printf() 最终通过 write 系统调用输出数据,malloc() 在需要更多内存时可能调用 brk 或 mmap 系统调用;而 strlen()、sqrt() 等纯计算类库函数则完全在用户空间中运行,不涉及任何系统调用。因此,尽管库函数在编程中被频繁使用,但操作系统真正提供给应用程序的接口本质上仍是系统调用。
3. 操作系统实现了对计算机资源的扩充
未安装任何软件的计算机称为裸机,它仅构成计算机系统的物质基础。实际呈现在用户面前的计算机系统,是经过多层软件增强后的逻辑实体。裸机位于最内层,其外层覆盖着操作系统。操作系统通过资源管理功能和用户服务功能,将裸机抽象并扩展为一台功能更强、使用更便捷的逻辑机器。因此,通常将这种被操作系统抽象和扩展后的机器称为扩充机器。可以这样理解:操作系统作为“工人”,操作原始机器,使机器发挥远超本身的能力。
需要说明的是,本章的重点在于理解操作系统如何控制和协调处理机、存储器、设备和文件四大资源。关于接口与扩充机器的概念,读者只需理解其基本思想即可。
1.1.3 操作系统的特征
操作系统是一种系统软件,但与其他系统软件和应用软件有显著不同,具有自身的特殊性,即基本特征。操作系统的基本特征包括并发、共享、虚拟和异步。这些概念对理解和掌握操作系统的核心至关重要,将贯穿于后续各章节。
1. 并发(Concurrency)
并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,内存中同时驻留若干道程序,操作系统通过调度机制,在一道程序因I/O操作而暂停时,立即切换到另一道程序运行,从而实现多道程序的交替执行,使CPU保持高利用率。
需要注意的是,并行是指两个或多个事件在同一时刻真正同时发生。在单处理机系统中,尽管宏观上多道程序看似同时运行,但微观上任一时刻仅有一个程序在执行,因此属于并发而非并行;而CPU与I/O设备之间、多个I/O设备之间则可实现真正的硬件并行。若要实现进程级别的并行,则需多核CPU或多处理机等硬件支持。
可通过一个生活实例理解并发和并行的区别。例如,在 9:00-10:00 期间,你交替吃面包和写字:9:00-9:10 吃面包,9:10—9:20写字,9:20—9:30吃面包,9:3 9:00-10:00 。两种活动在同一时段内交错进行,但任一时刻仅执行一项,这属于并发。又如,在9:00—10:00期间,你在右手写字的同时,左手拿着面包吃,则两种行为在同一时刻真正同时进行,这属于并行。
在操作系统中,引入进程这一概念,其核心目的之一就是支持程序的并发执行。
2. 共享(Sharing)
共享是指系统中的资源可供内存中多个并发执行的进程共同使用。根据资源特性与访问方式的不同,共享主要分为互斥共享和同时访问两种形式。
(1) 互斥共享方式
系统中的某些资源,如打印机、磁带机等,虽然可供多个进程使用,但为避免所打印或记录的结果混淆,必须保证在任一时间段内仅有一个进程访问该资源。
具体而言,当进程A访问某个资源时,需先提出请求;若资源空闲,则系统将其分配给A;此后,若其他进程请求访问该资源而A尚未释放,则必须等待。仅当A使用完毕并释放资源后,才允许另一进程对该资源进行访问。我们将此类资源共享方式称为互斥共享,而将在一段时间内只允许一个进程访问的资源称为临界资源。计算机系统中的大多数独占型物理设备(如打印机),以及软件中的栈、变量、表格等,均属于临界资源,必须以互斥方式共享。
(2) 同时访问方式
系统中还存在另一类资源,允许多个进程在宏观上“同时”访问。此处的“同时”通常指逻辑上的并发访问,微观上这些进程可能通过分时交替方式访问资源,即分时共享。典型的可同时访问资源包括磁盘上的文件(尤其是只读文件),允许多个用户同时读取同一份文档;此外,用重入代码编写的程序也可被多个进程并发调用,而不会产生冲突。
需注意,互斥共享要求资源在任意时刻仅响应一个请求,否则将导致数据混乱(例如,若多个进程同时向打印机输出,可能导致文档A与文档B的内容交错混杂);而同时访问则允许多个请求分时完成,只要其最终效果对用户而言等同于连续访问即可。
并发与共享是操作系统两个最基本的特征,二者互为前提:
- 资源共享以程序的并发执行为前提,若系统仅支持单道程序,则无须考虑资源共享;
- 有效的资源共享机制是并发执行的基础,若无法协调资源访问,则并发程序将因竞争冲突而无法正确运行。
3. 虚拟(Virtual)
虚拟是指通过某种技术手段,将一个物理实体映射为多个逻辑上的对应物。物理实体是真实存在的硬件资源,而逻辑对应物则是用户或程序所感知的抽象资源。操作系统主要通过两类复用技术实现虚拟:时分复用(如处理器的分时共享)和空分复用(如虚拟存储器)。
利用多道程序设计技术,操作系统可让多道程序并发执行,分时共享同一个处理器。尽管系统中仅有一个物理CPU,但每个用户都仿佛独占一个CPU。这种通过时间片轮转实现的处理器抽象,使得单个物理CPU在逻辑上表现为多个处理单元。
采用虚拟存储器技术,可将有限的物理内存扩展为更大的逻辑地址空间。用户程序所面对的是虚拟存储器,其逻辑容量通常超过实际物理内存,从而在逻辑上实现了存储容量的扩充。
此外,通过虚拟设备技术(如SPOOLing),可将某些独占型物理I/O设备(如打印机)转化为多台逻辑设备。每个用户可独占一台逻辑设备,而系统在后台将请求排队处理。这样,原本需要互斥访问的临界资源,便转化为可并发使用的共享资源。
4. 异步(Asynchronism)
在多道程序环境下,多个进程并发执行。但由于系统资源有限,进程的执行并非连续进行,而是以不可预知的速度断续推进,这种特性称为进程的异步性。
异步性使操作系统运行于高度不确定的环境中,若对共享资源的访问缺乏协调,可能导致与时间相关的错误(例如,多个进程并发修改全局变量而未加同步保护)。然而,在程序正确使用操作系统提供的同步机制的前提下,其执行结果的正确性与可再现性能够得到保障。
