以下为个人学习笔记和习题整理
书籍:操作系统概念 (Opertating System Concepts)、操作系统导论 (OSTEP)
https://www.bilibili.com/video/BV1HN41197Ko
# 概述
An operating system
is software
that manages a computer’s hardware
. It also provides a basis for application programs
and acts as an intermediary
between the computer user and the computer hardware. An amazing aspect of operating systems is how they vary in accomplishing these tasks in a wide variety of computing environments.
- 操作系统 是 管理计算机硬件 的 软件。它还为 应用程序 的运行提供基础,并在 计算机用户 和 计算机硬件 之间充当 中介。
- 操作系统的一个令人惊异的方面是,它们是如何在 各种各样的计算环境 中以不同的方式完成这些任务的。
-
为了探索
操作系统
在现代计算环境
中的角色,首先理解计算机硬件
的组织和架构是很重要的。This includes the
CPU
,memory
, andI/O devices
, as well asstorage
. A fundamental responsibility of an operating system is toallocate these resources
to programs.- 计算机硬件包括 CPU、内存、I/O 设备 以及 存储。操作系统的一个基本职责是将这些 资源分配 给程序。
-
由于操作系统是即庞大又复杂的,它必须
一部分一部分地 (piece by piece)
被构造。Each of these pieces should be a
well-delineated portion
of the system, with carefully definedinputs
,outputs
, andfunctions
.- 每一部分都应该是系统中 明确定义的一部分,具有仔细定义的
输入
、输出
和功能
。
- 每一部分都应该是系统中 明确定义的一部分,具有仔细定义的
# 操作系统的功能
我们从 操作系统
在整个 计算机系统
中的角色开始讨论。计算机系统可以大致分为四个部分: 硬件
、 操作系统
、 应用程序
和 用户
,如图所示。
硬件
:CPU、内存和 I/O 设备等,为系统提供基本的计算资源
。应用程序
:如文字处理程序、电子表格程序、编译器和网页浏览器,定义了这些资源用来解决用户的计算问题
的方式。操作系统
:控制硬件
,并为不同的用户协调各种应用程序
对硬件的使用。
We can also view a computer system
as consisting of hardware
, software
, and data
. The operating system
provides the means for proper use of these resources
in the operation of the computer system. An operating system is similar to a government
. Like a government, it performs no useful function by itself. It simply provides an environment within which other programs can do useful work.
-
我们也可以把 计算机系统 看作是由 硬件、软件 和 数据 组成的。操作系统 提供了在计算机系统的运行中 恰当使用这些资源 的方法。
-
操作系统类似于 政府。就像政府一样,它自己不能发挥任何有用的功能。它只是 提供了一个环境,其他 程序 可以在其中完成有用的工作。
# 操作系统的定义
-
一般来说,我们 没有 一个关于操作系统的 完全充分的定义。操作系统之所以存在,是因为它们 提供了一种合理的方法 来解决 创建可用的计算系统 的问题。
计算机系统
的基本目标是执行程序
并使解决用户问题变得更容易,计算机硬件
就是为了这个目标而构建的。- 由于光有
硬件本身
并不是特别容易使用,所以开发了应用程序
。 - 这些程序需要某些
共同的操作
,例如控制 I/O 设备。这些控制和分配资源的共同的功能被整合到一个软件模块 ——操作系统
当中。
-
另外,对于究竟什么属于 操作系统的一部分,我们也 没有 一个普遍接受的定义。一个比较公认的定义,也是本书所采用的定义:
The
operating system
is the one programrunning at all times
on the computer —— usually called thekernel
.- 操作系统 是在计算机上 始终运行的程序 —— 通常称为 内核。
-
除了内核之外,还有两种其他类型的程序:
- 系统程序 (system programs):与操作系统相关,但不是内核的必要组成部分。
- 应用程序 (application programs):包括所有与系统的运行不相关的程序。
-
然而,如果我们着眼于如今的 移动设备的操作系统,我们会再次看到,构成操作系统的功能的数量正在增加。移动设备的操作系统通常不仅包括一个核心的内核,还包括一个 中间件 (middleware),它是为 应用程序开发人员 提供额外服务的一组 软件框架。
In summary, for our purposes, the
operating system
includes the always-runningkernel
,middleware frameworks
that ease application development and provide features, andsystem programs
that aid in managing the system while it is running.- 总之,就我们的目的而言,
操作系统
包括始终运行的 内核、简化应用程序开发并提供功能的 中间件框架,以及在系统运行时帮助管理系统的 系统程序。
# 计算机系统的组成
现代的通用 计算机系统
由 一个或多个 CPU
和许多 设备控制器
组成,它们之间通过 公用总线 (common bus)
相连,该总线提供了这些组件和共享的 内存
之间的访问,如图所示。
-
每个 设备控制器 (device controllers) 负责
一类特定的设备
(例如,磁盘驱动器、音频设备或图形显示器)。设备控制器维护一些本地缓冲区存储器 (local buffer storage)
和一组专用寄存器
,并负责在其控制的外围设备
与本地缓冲区存储器之间移动数据。Depending on the controller,
more than one device
may be attached. For instance, onesystem USB port
can connect to aUSB hub
, to which several devices can connect.- 根据控制器的不同,一个控制器可以 连接多个设备。例如,一个 系统 USB 端口 可以连接到一个 USB 集线器 上,该集线器可以连接多个设备。
-
通常,
操作系统
对于每个设备控制器都有一个 设备驱动程序 (device driver),该程序理解设备控制器,并为操作系统的其余部分提供设备的统一接口 (uniform interface)
。The
CPU
and thedevice controllers
canexecute in parallel
, competing formemory cycles
. To ensure orderly access to the shared memory, amemory controller
synchronizes access to the memory.- CPU 和 设备控制器 可以 并行执行,竞争 内存周期。为了确保对共享内存的有序访问,需要 内存控制器 来同步对内存的访问。
在接下来的小节中,我们将描述这样的一个系统是 如何运行的
的一些基础知识,重点关注系统的三个方面: 中断
、 存储结构
和 I/O 结构
。
# 中断
Interrupts: an introduction of interrupts
让我们首先考虑一个典型的计算机操作:一个执行 I/O 操作 的程序。
-
To start an I/O operation, the
device driver
loads theappropriate registers
in thedevice controller
.- 为了启动 I/O 操作,设备驱动程序 加载 设备控制器 中 相应的寄存器。
-
The
device controller
, in turn,examines the contents
of these registers to determine what action to take (such as “read a character from the keyboard”). The controller starts thetransfer of data
from the device to itslocal buffer
. Once the transfer of data is complete, the device controller informs the device driver that it has finished its operation.-
设备控制器 进而检查这些 寄存器的内容,以决定采取什么操作(例如,从键盘上读取一个字符)。控制器开始将 数据从设备传输 到它的 本地缓冲区。
-
一旦数据传输完成,设备控制器 通知设备驱动程序 它已经完成了它的操作。
-
-
The
device driver
then gives control to other parts of theoperating system
, possibly returning the data or a pointer to the data if the operation was a read. For other operations, the device driver returns status information such as “write completed successfully” or “device busy”.- 然后,设备驱动程序 将控制权交给 操作系统 的其他部分,如果操作是读操作,则可能返回数据或指向数据的指针。对于其他操作,设备驱动程序返回状态信息,如 “写操作成功完成” 或 “设备繁忙”。
但是设备控制器是如何 通知设备驱动程序 它已经完成了它的操作的呢?这是通过一个 中断 (interrupt) 完成的。
# 概览
-
硬件可以在
任何时候
通过向 CPU发送信号
来触发中断,通常是通过系统总线
的方式。(计算机系统中可能有许多总线,但系统总线是主要部件
之间的主要通信路径。) -
当 CPU 被中断时,它
停止正在做的事情
,并立即将执行跳转到一个固定的位置
。固定位置通常包含该中断的服务例程 (service routine)
所在的起始地址
。该中断服务例程进而开始执行。完成后,CPU 恢复被中断的计算。该操作的时间线,如图所示,IO 设备与 CPU 并行执行。 -
中断是
计算机体系结构 (computer architecture)
的重要组成部分。每种计算机设计都有自己的中断机制,但有几个功能是通用的。-
中断必须将
控制转移
到适当的中断服务例程 (interrupt service routine)
。管理这种转移的直接方法是调用一个
通用例程 (generic routine)
来检查中断信息,这个例程进而会调用特定于中断的处理程序(handler)
。通常,指针表存储在
低内存 (low memory)
中 (前 100 左右的位置)。这些位置保存着各种设备的中断服务例程的地址
。Windows 和 UNIX 等不同的操作系统都以这种方式调度中断。
-
中断体系结构还必须保存任何被中断的计算的
状态信息
,以便在为中断执行服务之后恢复这些信息。
-
# 中断的实现
# 基本的中断机制
CPU 硬件有一条叫做 中断请求线 (interrupt-request line)
的线,CPU 在 执行每条指令后
都会感知到这条线。
-
当 CPU 检测到一个控制器在中断请求线上
断言 (assert)
了一个信号时,它读取中断号 (interrupt number)
,并使用该中断号作为中断向量的索引跳转到中断处理程序例程 (interrupt–handler routine)
,然后在与该索引关联的地址处开始执行。 -
中断处理程序
保存
它在运行过程中将要改变的任何状态
,确定中断的原因,执行必要的处理,执行状态恢复,并执行return_from_interrupt
指令,使 CPU 返回到中断之前的执行状态。
# 现代操作系统的中断机制
刚才描述的基本中断机制使 CPU 能够响应 异步事件 (asynchronous event)
,比如当设备控制器 准备就绪 (ready for service)
时。
-
然而,在现代操作系统中,我们需要更复杂的中断处理特性:
- 我们需要在关键处理期间
延迟中断处理
的能力。 - 我们需要一种
高效的方法
来为设备调度合适的中断处理程序。 - 我们需要
多级中断 (multilevel interrupts)
,以便操作系统能够区分高优先级
和低优先级
的中断,并能够以适当的紧急程度
进行响应。
- 我们需要在关键处理期间
-
大多数 CPU 都有
两条
中断请求线:- 一条中断线是
不可屏蔽中断 (nonmaskable interrupt)
,它是为不可恢复的内存错误
等事件保留的。 - 第二条中断线是
可屏蔽的 (maskable)
,CPU 可以在执行不能被中断的关键指令序列之前关闭 (turned off)
它。
- 一条中断线是
-
回想一下,
向量化 (vectored)
的中断机制的目的是减少单个的中断处理程序
去搜索所有可能的中断源以确定哪个中断源需要服务的需要。(亦即,不使用通用例程,而使用中断向量直接索引中断处理程序。)解决这个问题的一种常见方法是使用
中断链接 (interrupt chaining)
,其中中断向量
中的每个元素都指向一个中断处理程序的列表 (list)
的头。当一个中断被引发时,相应列表上的处理程序将被逐个调用
,直到找到一个可以服务该请求的处理程序为止。Intel 处理器的中断向量设计
- 从 0 到 31 的事件是
不可屏蔽
的,用于发出各种错误条件
的信号。 - 从 32 到 255 的事件是
可屏蔽
的,用于设备产生的中断
等目的。
- 从 0 到 31 的事件是
-
中断机制还实现了一个
中断优先级级别 (interrupt priority levels)
的系统。
总之,中断在整个现代操作系统中都被使用,以处理 异步事件
。(至于其他目的,我们将在本文中讨论)
设备控制器
和硬件故障 (hardware faults)
会引发中断。- 为了使
最紧急的工作
先完成,现代计算机采用了中断优先级
系统。 - 由于中断在对时间敏感的处理中被大量使用,因此需要
高效的中断处理
来获得良好的系统性能。
# 存储结构
Wikipedia: Computer memory
In computing, memory is a device or system that is used to store information for immediate use
in a computer or related computer hardware and digital electronic devices. The term memory is often synonymous with the term primary storage
or main memory
. An archaic synonym for memory is store.
-
Computer
memory
operates at a high speed compared tostorage
that is slower but offers higher capacities. If needed, contents of the computer memory can be transferred to storage; a common way of doing this is through a memory management technique calledvirtual memory
. -
Modern memory is implemented as
semiconductor memory
, where data is stored withinmemory cells
built from MOS transistors and other components on an integrated circuit. There are two main kinds of semiconductor memory, volatile and non-volatile.- Examples of non-volatile memory are
flash memory
and ROM, PROM, EPROM and EEPROM memory. - Examples of volatile memory are
dynamic random-access memory (DRAM)
used for primary storage, andstatic random-access memory (SRAM)
used for CPU cache.
- Examples of non-volatile memory are
-
Most semiconductor memory is organized into
memory cells
each storing one bit (0 or 1). Flash memory organization includes both one bit per memory cell and multi-level cell capable of storing multiple bits per cell. The memory cells are grouped intowords
of fixed word length, for example, 1, 2, 4, 8, 16, 32, 64 or 128 bits. Each word can be accessed bya binary address of N bits
, making it possible to store words in the memory.
# 主存
CPU 只能从 内存 (memory)
中加载 指令 (instructions)
,所以任何 程序 (programs)
必须先加载到内存中才能运行。
-
通用计算机的大部分程序都是运行在
可重写的存储器 (rewritable memory)
,称为主存储器 (main memory)
中的。维基百科:动态随机存取存储器
动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种
半导体存储器
,主要的作用原理是利用电容内存储电荷的多寡
来代表一个二进制比特(bit)是 1 还是 0。由于在现实中晶体管会有漏电电流的现象,导致电容上所存储的电荷数量并不足以正确的判别资料,而导致资料毁损。因此对于 DRAM 来说,周期性地充电
是一个不可避免的条件。由于这种需要定时刷新
的特性,因此被称为“动态”
存储器。相对来说,静态存储器(SRAM)只要存入资料后,纵使不刷新也不会丢失记忆。-
与 SRAM 相比,DRAM 的优势在于结构简单 —— 每一个比特的资料都只需一个电容跟一个晶体管来处理,相比之下在 SRAM 上一个比特通常需要六个晶体管。正因这缘故,DRAM 拥有非常高的密度,单位体积的容量较高因此
成本较低
。但相反的,DRAM 也有访问速度较慢
,耗电量较大的缺点。 -
与大部分的随机存取存储器(RAM)一样,由于存在 DRAM 中的资料会在电力切断以后很快消失,因此它属于一种易失性存储器设备。
-
-
计算机也使用
其他形式的存储器
。例如,计算机上电后运行的第一个程序是引导程序 (bootstrap program)
,它运行后会加载操作系统
。-
由于 RAM 是易失性的,当电源关闭或其他情况下将丢失它的内容,因此我们不能信任它来保存引导程序。
-
取而代之的,计算机使用
电可擦可编程只读存储器 (EEPROM)
以及其他形式的固件 (firmware)
,这种不经常被写入的、非易失性的存储,来保存引导程序。
所有形式的内存都提供一个
字节数组 (an array of bytes)
,每个字节都有自己的地址
。- 与内存的交互是通过对特定的
内存地址 (memory addresses)
,执行一系列的load 指令
或store 指令
来实现的。- load 指令:将
一个字节 (byte)
或一个字 (word)
从主存
移动到CPU 内部的寄存器
,而 - store 指令:将一个
寄存器
中的内容移动到主存
。
- load 指令:将
- 除了显式的 load 和 store 指令,CPU 为了执行会
自动地
从主存中加载指令,该指令的位置从程序计数器
中获得。
-
-
一个典型的
指令-执行周期 (instruction-execution cycle)
,在具有冯诺伊曼体系结构
的系统上执行时,- 首先从内存中
取出 (fetch)
一条指令,并将该指令存储在指令寄存器 (instruction register)
中。 - 该指令随后被
解码 (decode)
,并可能导致操作数 (operands)
从内存中被取出并存储在某个内部寄存器
中。 - 在指令完成对操作数的
执行 (execute)
后,结果可能会被存储回内存中。
- 首先从内存中
# 辅存
-
理想情况下,我们希望程序和数据永久地驻留在主存中。这种安排在大多数系统上通常是不可能的,原因有二:
- 主存通常太小,无法永久存储所有需要的程序和数据。
- 如前所述,主存储器是易失性的,它在电源关闭或其他丢失时丢失其内容。
因此,大多数计算机系统都提供
辅助存储器 (secondary storage)
作为主存储器的扩展。对辅存的主要需求是它能够永久地保存大量的数据。 -
大多数程序(系统程序和应用程序),在
加载到内存之前
都存储在辅助存储器中,因而许多程序使用辅助存储器作为它们处理的源 (source)
和目的地 (destination)
。同时,辅助存储器也比主存储器慢得多
。因此,正如我们在第 11 章中讨论的那样,对辅助存储器的适当管理对于计算机系统是至关重要的。
# 存储器层次结构
然而,从更广泛的意义上说,我们所描述的存储结构(由 寄存器
、 主存储器
和 辅助存储器
组成),只是许多可能的存储系统设计中的一种。
- 其他可能的组件包括
高速缓存存储器 (cache memory)
、CD-ROM 或蓝光光盘、磁带等。 - 那些足够慢、足够大、只用于特殊目的的存储设备(例如,存储其他设备上的材料的备份副本),被称为
三级存储 (tertiary storage)
。
如图所示,各种各样的 存储系统 (storage systems)
可以根据 存储容量
和 访问时间
组织成一个 层次结构
。
-
一般的规则是,大小和速度之间要有
权衡
,越小的和越快的存储器越靠近 CPU
。-
如图所示,除了速度和容量不同之外,各种存储系统要么是
易失性的
,要么是非易失性的
。 -
图中最上面的四层存储器是用
半导体存储器 (semiconductor memory)
构成的,半导体存储器是由半导体电路组成的。 -
第四级的
NVM (nonvolatile memory)
设备有几种变体,但通常都比硬盘快
。
-
-
由于
存储 (storage)
在操作系统结构中扮演着重要的角色,我们将在本文中经常提到它。一般来说,我们会使用以下术语:-
易失性存储器 (Volatile storage):将会被简称为
内存 (memory)
。
如果需要强调特定类型的存储设备(例如,寄存器),我们将会显式地说明。 -
非易失性存储器 (Nonvolatile storage):在失电时保留其内容,它将被称为
NVS
(★)。我们在介绍 NVS 上花费的绝大多数时间,都是在
辅助存储
上。
-
-
一个完整的存储系统的设计,必须平衡刚才讨论的所有因素:它必须只使用
必要的
昂贵内存,同时提供尽可能便宜
的非易失性存储。
# I/O 结构
操作系统代码的 很大一部分
都用于 管理 I/O
,这既是因为它对系统的可靠性和性能很重要,也是因为设备有着不同的性质。
为了解决这个问题,使用了 直接内存访问 (direct memory access, DMA)
:在为 I/O 设备设置了缓冲区、指针和计数器之后, 设备控制器
直接在 设备
和 主存
之间传输将整个 数据块
,而不需要 CPU 的干预。图 1.7 显示了计算机系统中所有组件的相互作用。
每个块
只产生一个中断
,以告诉设备驱动程序操作已经完成,而不是像低速设备那样每个字节
产生一个中断。- 当设备控制器执行这些操作时,CPU 可以完成其他工作。