一. 冯诺依曼体系结构
操作系统利用一个或多个 CPU 的硬件资源, 为系统用户提供一系列服务, 此外, 它还代表用户来管理输入/输出 (I/O) 设备, 因此, 在开始分析操作系统之前, 了解一些计算机硬件知识是必要的.
常见的计算机, 如笔记本; 不常见的计算机, 如服务器, 大部分都遵守冯诺依曼体系结构.
-
输入设备: 向计算机输入数据和信息的设备, 如键盘, 鼠标, 话筒, 摄像头, 网卡, 硬盘等.
-
输出设备: 接受计算机数据或信息的输出, 并以数字, 字符, 图像, 声音等形式表现出来的设备, 如显示器, 音响, 打印机, 网卡, 硬盘等.
-
存储器: 一般指内存, 存储数据和程序. 此类存储器通常具有断电易失性, 即当计算机关闭时, 存储器的内容就会丢失.
-
CPU: 计算机系统的运算和控制核心, 是信息处理, 程序运行的最终执行单元.
二. 存储器层次结构
在CPU和一个较大较慢的设备(例如主存)之间插入一个更小更快的存储设备(例如高速缓存)的想法已经成为一个普遍的观念. 实际上, 每个计算机系统中的存储设备都被组织成了一个存储器层次结构, 如下图所示.
在这个层次结构中, 从上至下, 设备的访问速度越来越慢, 容量越来越大, 并且每字节的造价也越来越便宜.
三. 操作系统
任何计算机系统都包含一个名为操作系统的基本程序集合. 在这个集合里, 最重要的程序称为内核 (kernel). 当操作系统启动时, 内核被装入到 RAM (主存) 中, 内核中包含了系统运行所必不可少的很多核心过程 (procedure). 其他程序是一些不太重要的实用程序, 尽管这些程序为用户提供了与计算机进行广泛交互的体验 (以及用户购买计算机要做的工作), 但系统根本的样子和能力还是由内核决定. 内核也为系统中所有事情提供了主要功能, 并决定高层软件的很多特性. 因此, 我们将经此使用术语 "操作系统" 作为 "内核" 的同义词.
为什么要设计操作系统, 设计操作系统的目的是什么?
-
- 与硬件部分交互, 为包含在硬件平台上的所有底层可编程部件提供服务.
-
- 为运行在计算机系统上的应用程序 (即用户程序) 提供良好的执行环境.
一些操作系统允许所有的应用程序都直接与硬件部分进行交互 (典型的例子是 MS-DOS). 与此相反, 类Unix操作系统把与计算机物理组织相关的所有底层细节都对用户运行的程序隐藏起来. 当程序想使用硬件资源时, 必须向操作系统发出一个请求. 内核对这个请求进行评估 (防止硬件资源被失控的应用程序滥用), 如果允许使用该资源, 那么内核将代表应用程序与相关的硬件部分进行交互, 这样一来, 就可以向应用程序提供简单且一致的机制来控制复杂而又大不相同的底层硬件设备.
为了实施这种机制, 现代操作系统依靠特殊的硬件特性来禁止用户程序直接与底层硬件进行交互, 或者禁止直接访问任意的物理地址. 硬件为CPU引入了至少两种不同的执行模式: 用户程序的非特权模式和内核的特权模式. Unix 把它们分别称为用户态 (User Mode) 和 内核态(Kernel Mode).
所以简单来说, 操作系统就是一款对软硬件资源进行管理的软件.
那么操作系统又是如何管理软硬件资源的呢?
首先对软硬件资源进行描述性的抽象表示, 再使用具有规律的结构把相同种类的抽象组织起来.
以 Linux 操作系统为例, 来解释上述描述. 在 Linux 操作系统下, 用结构体(struct) 来对软硬件资源进行描述, 再使用各种各样的数据结构(如双向链表, 红黑树)将同类型的结构体对象组织起来.
所以操作系统对软硬件资源的管理, 实际上就是对各种内核数据结构的增删查改, 在后续对操作系统内核的了解中, 会对这一描述有更为深刻的理解.