8.5 现代操作系统特性
随着计算机技术的发展,操作系统也在不断演进,出现了很多新的特性和设计思想,满足不同场景的需求。本节我们介绍现代操作系统的一些核心特性。
操作系统架构的演进
传统的宏内核和微内核架构已经发展了几十年,现在出现了很多新的架构设计:
1. 混合内核
我们之前讲过混合内核结合了宏内核和微内核的优点,是现在主流桌面和服务器操作系统的选择:
- Windows NT内核、macOS XNU内核、Linux内核(带动态模块)都属于混合内核的范畴
- 核心功能在内核态运行保证性能,非核心功能可以动态加载或者运行在用户态,兼顾性能和扩展性
2. 外核(Exokernel)
外核是一种更激进的设计思想,内核只负责资源的隔离和分配,不提供抽象接口:
- 内核只做最基本的资源隔离,把硬件资源直接暴露给应用程序
- 应用程序可以自己实现需要的抽象(文件系统、内存管理等)
- 性能极高,没有内核的额外开销
- 适合对性能要求极高的特殊场景,比如高性能计算、专用服务器
- 代表系统:MIT的Exokernel
3. 单内核模块化
现代的宏内核都在向模块化方向发展,功能都做成可动态加载的模块,需要的时候加载,不需要的时候卸载:
- Linux的内核模块机制就是典型代表,驱动、文件系统、网络协议都可以做成模块动态加载
- 既保留了宏内核的高性能,又有很好的扩展性
- 内核本身可以做得很小,只保留最核心的功能
容器与虚拟化技术
容器和虚拟化是现在云计算的基础技术,本质上都是操作系统提供的资源隔离能力。
虚拟化技术
虚拟化技术可以在一台物理机上运行多个独立的虚拟机,每个虚拟机有自己的操作系统:
- 原理:通过Hypervisor(虚拟机监控器)模拟硬件资源,每个虚拟机看到的都是独立的虚拟硬件
- 类型:
- 类型1虚拟化:Hypervisor直接运行在硬件上,性能高,比如VMware ESXi、KVM、Xen
- 类型2虚拟化:Hypervisor运行在宿主操作系统上,比如VMware Workstation、VirtualBox
- 优点:隔离性强,每个虚拟机独立操作系统,安全性高
- 缺点:开销大,每个虚拟机都需要运行完整的操作系统,占用资源多,启动慢
容器技术
容器是更轻量的虚拟化技术,多个容器共享同一个操作系统内核:
- 原理:利用操作系统的内核特性(Linux的Namespace和Cgroups)实现进程级的隔离
- Namespace:隔离PID、网络、文件系统、用户等资源,每个容器看到的是独立的系统环境
- Cgroups:限制容器的资源使用(CPU、内存、磁盘IO、网络等)
- 代表:Docker、Kubernetes
- 优点:
- 轻量,不需要运行完整操作系统,启动快,资源占用小
- 性能接近原生,几乎没有额外开销
- 一致性好,开发测试生产环境一致
- 缺点:隔离性比虚拟机弱,共享内核,一个容器影响内核可能会影响其他容器
- 适用场景:微服务部署、持续集成、云原生应用
容器和虚拟化的对比:
| 特性 | 虚拟机 | 容器 |
|---|---|---|
| 隔离级别 | 硬件级 | 进程级 |
| 性能 | 有一定开销 | 接近原生 |
| 启动时间 | 分钟级 | 秒级甚至毫秒级 |
| 资源占用 | 大,每个VM几GB | 小,每个容器几MB |
| 隔离性 | 强 | 中等 |
| 适用场景 | 异构系统、需要强隔离的场景 | 微服务、云原生、同构应用 |
实时操作系统(RTOS)
实时操作系统(Real-Time Operating System)是专门为实时场景设计的操作系统,要求任务必须在规定的时间内完成,确定性高。
实时系统的特点
- 确定性:任务的响应时间是确定的,最大响应时间有严格的保证
- 高优先级任务抢占:高优先级任务可以立即抢占低优先级任务,保证实时性
- 低延迟:中断响应和任务切换延迟极低,通常是微秒级
- 可靠性高:长时间稳定运行,不能崩溃
分类
- 硬实时系统:任务必须在截止时间前完成,超过截止时间会导致灾难性后果,比如航空航天、自动驾驶、工业控制、医疗设备等场景
- 软实时系统:允许偶尔超过截止时间,不会导致严重后果,比如视频播放、音频处理等场景
常见的实时操作系统
- FreeRTOS:小型嵌入式实时操作系统,开源,广泛应用于微控制器、物联网设备
- QNX:微内核实时操作系统,安全性高,广泛应用于汽车、医疗、工业控制领域
- VxWorks:工业级实时操作系统,可靠性极高,用于航空航天、军事、机器人等领域
- RT-Linux:Linux的实时补丁,给Linux增加实时特性,兼顾Linux的生态和实时性
分布式操作系统
分布式操作系统管理多台计算机的资源,让用户使用起来像使用一台计算机一样:
- 所有节点组成一个统一的系统,用户不需要关心资源在哪个节点上
- 透明性:访问远程资源和本地资源一样
- 高可用:单个节点故障不会影响整个系统的可用性
- 可扩展:可以通过增加节点线性提升系统性能
- 代表性的分布式系统:Google的Fuchsia、各类分布式存储和计算系统
操作系统安全机制
现代操作系统越来越重视安全,提供了很多安全机制:
1. 内存保护
- 地址空间隔离:每个进程有独立的虚拟地址空间,不能访问其他进程的内存
- DEP/NX:数据不可执行,防止缓冲区溢出攻击执行恶意代码
- ASLR(地址空间布局随机化):进程的地址空间布局每次启动都随机化,防止攻击者定位攻击目标
- Stack Canary:栈保护,检测栈溢出攻击
2. 权限控制
- 用户权限隔离:普通用户和管理员权限分离,最小权限原则
- 能力机制(Capability):基于能力的权限控制,每个进程只有必要的权限
- 强制访问控制(MAC):比如Linux的SELinux、Windows的Mandatory Integrity Control,系统强制控制资源访问,即使程序有漏洞也不能越权访问
3. 安全启动
- UEFI Secure Boot:只允许加载签名的内核和驱动,防止恶意软件篡改引导过程和内核
- Measured Boot:测量启动过程中的所有组件,存到TPM芯片中,可以远程验证系统是否被篡改
4. 沙箱机制
- 把不可信的程序放到沙箱中运行,限制其能访问的资源,即使被攻破也不会影响整个系统
- 浏览器的沙箱、移动应用的沙箱、Docker容器等都是沙箱机制的应用
5. 硬件安全支持
- TPM/SE/TrustZone:可信执行环境,安全存储密钥、敏感数据,执行敏感操作,和普通操作系统隔离
- 内存加密:加密内存中的数据,即使物理内存被窃取也无法获取数据
操作系统的发展趋势
- 云原生优化:针对容器、微服务、云计算场景优化,提升资源利用率和弹性
- 异构计算支持:支持GPU、NPU、FPGA等异构计算资源,满足AI、高性能计算等场景需求
- 安全强化:零信任、内存安全、可信执行环境等安全特性越来越重要
- 低延迟/实时性:满足自动驾驶、工业互联网、元宇宙等低延迟场景的需求
- 轻量化:针对物联网、边缘计算场景的轻量级操作系统,资源占用小,启动快
- 分布式:针对分布式场景优化,更好地支持多节点集群和分布式应用
思考问题
- 容器和虚拟机有什么区别?分别适合什么场景?
- 实时操作系统和普通操作系统相比有什么特点?适合什么场景?
- 操作系统有哪些常见的安全机制?它们是如何保护系统安全的?
- 你觉得未来操作系统会向什么方向发展?