# 1.4 操作系统的体系结构

## 1.4.1 架构

### 1、分层式架构

将操作系统划分为若干层，层与层之间**单向依赖**

![操作系统的层次结构](https://github.com/lijisheng27/option-system/blob/main/.gitbook/assets/qq-jie-tu-20210628165443.png)

* **优点**
  * 便于系统的调试和验证
  * 易于扩充和维护
* **缺点**
  * 合理定义各层较为困难
  * 效率较差，执行一个指令需要自上而下穿越多层

### 2、模块化架构

将操作系统分为多个具有独立性的子模块，规定好模块之间的接口使得模块之间可以相互通信

* **独立性**：模块的独立性越高，各模块之间的交互越少，系统结构越清晰
* **衡量独立性的指标**
  * **内聚性**：模块内部联系的紧密程度，内聚性越高，独立性越好
  * **耦合度**：模块间相互联系与影响的程度，耦合度越低，独立性越好
* **优点**
  * 提高了操作系统设计的正确性，可理解性和可维护性
  * 增强了操作系统的可适应性
  * 加速了操作系统的开发过程
* **缺点**
  * 模块间的接口规定很难满足实际需求
  * 各模块设计者齐头并进，没有可靠的决定顺序

## 1.4.2 内核

一般来说，底层的时钟管理、中断处理、原语等与硬件关系紧密；而上层的进程管理、存储器管理、设备管理等处理数据结构等相关，与硬件关系不大。

{% hint style="info" %}
转变CPU状态的过程是有成本的，要消耗不少时间，频繁地转变CPU状态会降低系统性能
{% endhint %}

### 1、大内核

这两层都在内核态下运行

* 优点
  * 性能高
* 缺点
  * 代码庞大
  * 结构混乱

### 2、微内核

只有底层保留在内核态下运行，运行时不断切换CPU状态

* **微内核的基本功能**：与硬件处理有关的部分、基本功能、客户与服务器之间的通信
  * 进程（线程）管理
  * 低级存储器管理
  * 中断和陷入处理
* **特点**
  * 内核足够小
  * 基于客户/服务器模式
  * 应用“机制与策略分离”原理
  * 采用面向对象技术
* **优点**
  * 扩展性和灵活性
  * 可靠性和安全性
  * 可移植性
  * 分布式计算
* **缺点**
  * 需要频繁的切换CPU状态，性能低

## 1.4.3 操作系统引导

1. 激活CPU
2. 读取ROM中的boot指令，开始执行BIOS程序
3. 硬件自检
4. 加载带有操作系统的硬盘，将引导扇区的内容加载进内存
5. 加载主引导记录MBR
6. 扫描硬盘分区表，并加载硬盘活动分区
7. 加载分区引导记录PBR：活动分区的第一个扇区，用于寻找根目录下的引导程序（启动管理器）
8. 加载启动管理器
9. 加载操作系统

## 1.4.5 虚拟机

运用虚拟化技术，将一台物理机虚拟化为多台虚拟机

### 1、第一类虚拟机

![](https://github.com/lijisheng27/option-system/blob/main/.gitbook/assets/%E7%AC%AC%E4%B8%80%E7%B1%BB%E8%99%9A%E6%8B%9F%E6%9C%BA.png)

虚拟机直接运行在硬件上，虚拟机管理程序将计算机的硬件分配给多个虚拟机

* 只有虚拟机管理程序运行在内核态
* 虚拟机处于虚拟内核态，**实际上是用户态**
* **特点**
  * 直接运行在硬件上，直接控制和分配硬件资源
  * 性能更好
  * 可支持的虚拟机数量更多
  * 虚拟机的可迁移性差

### 2、第二类虚拟机

![](https://github.com/lijisheng27/option-system/blob/main/.gitbook/assets/%E7%AC%AC%E4%BA%8C%E7%B1%BB%E8%99%9A%E6%8B%9F%E6%9C%BA.png)

虚拟机运行在宿主操作系统上，例如常用的VMware

* **特点**
  * 分配到的内存是虚拟内存
  * 性能更差
  * 可以支持的虚拟机数量少，需要和宿主OS争夺资源
  * 虚拟机迁移性更好
