操作系统¶
0. 要点汇总¶
本篇文章的要点整理如下
操作系统:管理计算机硬件与软件资源的系统软件,为用户提供服务
内核:操作系统的核心,负责资源管理和调度
系统调用:用户程序请求操作系统服务的接口
进程:正在执行的程序的实例,是资源分配的基本单位
线程:进程内的执行单元,是调度的基本单位
进程状态:就绪、运行、阻塞
进程调度:选择哪个进程占用CPU的策略
进程同步:协调多个进程的执行顺序,避免竞争条件
进程通信:进程之间交换信息的方式
进程控制块(PCB):存储进程信息的控制结构
上下文切换:保存当前进程状态,加载下一个进程状态
死锁:多个进程互相等待对方释放资源,导致都无法继续执行
内存管理:分配和管理内存资源
虚拟内存:将程序的一部分装入内存即可运行
分页:将内存和程序分成固定大小的页
分段:将程序按逻辑单位分段
页面置换算法:选择哪个页面换出内存的策略
文件系统:组织和存储文件的系统
文件:具有名称的一组相关信息的集合
目录:文件的集合,用于组织文件
文件描述符:内核维护的打开文件的索引
IO管理:管理输入输出设备
设备驱动:控制硬件设备的软件
缓冲区:临时存储数据的区域
中断:CPU暂停当前程序,响应外部事件
1. 操作系统概述¶
1.1 操作系统的定义与作用¶
操作系统的定义
操作系统(Operating System, OS)是管理计算机硬件与软件资源的系统软件,为用户和应用程序提供服务和接口。
操作系统的作用
资源管理:管理CPU、内存、磁盘、IO设备等硬件资源
提供服务:为用户和应用程序提供友好的接口和环境
抽象硬件:隐藏硬件细节,提供虚拟化的接口
提高效率:优化资源利用,提高系统性能
保证安全:保护系统资源和用户数据安全
操作系统的主要功能
处理机管理
存储器管理
设备管理
文件管理
网络管理
用户接口
1.2 操作系统的发展¶
手工操作阶段
用户直接操作计算机,效率低下。
批处理系统
将多个作业成批处理,提高CPU利用率。
单道批处理:内存中只有一个作业
多道批处理:内存中有多个作业
分时系统
多个用户通过终端同时使用计算机,响应时间短。
实时系统
对外部事件做出及时响应,保证确定性。
硬实时:必须在规定时间内完成
软实时:尽量在规定时间内完成
网络操作系统
管理网络资源,支持网络通信。
分布式操作系统
管理分布式系统中的资源,实现透明访问。
1.3 操作系统的分类¶
按应用场景分类
桌面操作系统:Windows、macOS、Linux
服务器操作系统:Windows Server、Linux、Unix
嵌入式操作系统:FreeRTOS、VxWorks
移动操作系统:Android、iOS
实时操作系统:QNX、VxWorks
按系统架构分类
批处理系统
分时系统
实时系统
网络操作系统
分布式操作系统
按用户界面分类
命令行界面(CLI)
图形用户界面(GUI)
1.4 操作系统的结构¶
单体结构
整个操作系统作为一个单一的大程序,功能耦合紧密。
优点:效率高 缺点:难以维护和扩展
分层结构
将操作系统分为若干层,上层调用下层的服务。
优点:结构清晰,易于理解 缺点:效率较低
微内核结构
将核心功能移到用户空间,内核只保留最基本的功能。
优点:灵活、可靠、易于扩展 缺点:效率较低
外核结构
将硬件资源直接分配给应用程序,应用程序自行管理。
优点:灵活性极高 缺点:安全性较差
2. 进程管理¶
2.1 进程的概念¶
进程的定义
进程是正在执行的程序的实例,是资源分配和调度的基本单位。
进程与程序的区别
程序是静态的,进程是动态的
程序是永久的,进程是暂时的
一个程序可以对应多个进程
进程的组成
代码段:存放程序代码
数据段:存放程序数据
堆栈段:存放函数调用栈和动态分配的内存
进程控制块(PCB)
进程控制块(Process Control Block)是操作系统维护进程信息的结构。
- 包含内容:
进程标识符(PID)
进程状态
程序计数器
寄存器值
调度信息
内存管理信息
IO状态信息
账户信息
2.2 进程状态¶
进程的三种基本状态
就绪态(Ready):进程已准备好执行,等待分配CPU
运行态(Running):进程正在CPU上执行
阻塞态(Blocked):进程等待某个事件完成
进程状态转换
就绪态 → 运行态:调度器选中进程
运行态 → 就绪态:时间片用完或有更高优先级进程
运行态 → 阻塞态:等待IO或其他事件
阻塞态 → 就绪态:等待的事件完成
其他状态
创建态(New):进程正在创建
终止态(Terminated):进程执行完成
2.3 进程控制¶
进程的创建
创建进程的步骤: 1. 为新进程分配PCB 2. 分配内存资源 3. 初始化PCB 4. 插入就绪队列
进程的终止
- 终止进程的原因:
正常结束
异常结束
用户终止
父进程终止
进程的阻塞与唤醒
阻塞:进程请求资源或等待事件
唤醒:等待的事件完成
进程的挂起与激活
挂起:将进程调出到外存
激活:将进程调入内存
2.4 进程调度¶
调度的层次
高级调度(作业调度):从外存选择作业调入内存
中级调度:将进程调出或调入内存
低级调度(进程调度):从就绪队列选择进程占用CPU
进程调度算法
先来先服务(FCFS)
按到达顺序调度,非抢占式。
优点:简单、公平 缺点:短作业等待时间长
短作业优先(SJF)
优先调度执行时间最短的作业。
优点:平均等待时间短 缺点:需要预知执行时间,长作业可能饥饿
优先级调度
按优先级调度,可以是抢占式或非抢占式。
优点:灵活 缺点:低优先级作业可能饥饿
时间片轮转(RR)
每个进程分配一个时间片,轮流执行。
优点:响应时间短 缺点:时间片大小难确定
多级反馈队列
多个就绪队列,优先级依次降低,时间片依次增大。
优点:兼顾各种作业 缺点:算法复杂
调度算法的评估指标
CPU利用率
吞吐量
周转时间
等待时间
响应时间
2.5 进程同步¶
临界资源
一次只允许一个进程使用的资源。
临界区
访问临界资源的代码段。
同步机制应满足的条件
空闲让进:临界区空闲时,允许一个进程进入
忙则等待:临界区忙碌时,其他进程等待
有限等待:进程等待时间有限
让权等待:进程等待时释放CPU
同步机制
软件方法
Dekker算法
Peterson算法
硬件方法
中断屏蔽
Test-and-Set指令
Swap指令
信号量
信号量是整型变量,只能通过P、V操作访问。
P操作(S):
while S <= 0:
等待
S = S - 1
V操作(S):
S = S + 1
互斥锁
互斥锁保证临界区只能由一个进程执行。
lock():获取锁
unlock():释放锁
管程
管程是高级同步机制,封装了共享数据和操作。
2.6 进程通信¶
进程通信的方式
共享内存
进程共享同一块内存区域。
优点:速度快 缺点:需要同步
消息传递
进程通过发送和接收消息通信。
优点:灵活、安全 缺点:速度较慢
管道
管道是连接进程的数据流。
匿名管道:用于父子进程通信
命名管道:用于任意进程通信
信号
信号是异步通知机制。
套接字
套接字用于网络通信。
共享文件
进程通过共享文件通信。
3. 线程管理¶
3.1 线程的概念¶
线程的定义
线程是进程内的执行单元,是调度的基本单位。
线程与进程的区别
特性 |
进程 |
线程 |
|---|---|---|
资源分配 |
是 |
否 |
调度单位 |
否 |
是 |
地址空间 |
独立 |
共享 |
通信 |
需要IPC |
直接通信 |
创建开销 |
大 |
小 |
线程的优势
响应快
并发性高
资源共享
开销小
线程的类型
用户级线程
由用户线程库管理,内核不可见。
优点:切换快 缺点:一个线程阻塞,所有线程阻塞
内核级线程
由操作系统内核管理。
优点:支持多核 缺点:切换慢
混合线程
结合用户级和内核级线程的优点。
3.2 线程同步¶
线程同步的问题
竞争条件
多个线程同时访问共享资源,结果依赖于执行顺序。
死锁
多个线程互相等待对方释放资源,导致都无法继续执行。
活锁
线程不断改变状态,无法继续执行。
饥饿
线程长期得不到资源。
线程同步机制
互斥锁(Mutex)
保证临界区只能由一个线程执行。
读写锁
允许多个读操作同时进行,但写操作独占。
条件变量
线程等待特定条件满足。
信号量
控制同时访问资源的线程数量。
屏障
等待所有线程到达某一点后再继续执行。
3.3 线程池¶
线程池的概念
线程池是预先创建一组线程,重复使用这些线程执行任务。
线程池的优势
减少线程创建和销毁的开销
控制并发线程数量
提高响应速度
线程池的实现
- 线程池包含:
工作线程队列
任务队列
管理线程
线程池的应用
Web服务器
数据库连接池
异步任务处理
4. 死锁¶
4.1 死锁的定义与原因¶
死锁的定义
死锁是两个或多个进程互相等待对方释放资源,导致都无法继续执行的状态。
死锁产生的必要条件
互斥条件:资源不能共享
请求与保持条件:进程请求新资源时保持已分配的资源
不剥夺条件:资源不能被强制剥夺
循环等待条件:存在进程资源的循环等待链
死锁的例子
进程P1和P2,资源R1和R2:
P1: 获得R1,请求R2 P2: 获得R2,请求R1
如果同时发生,则产生死锁。
4.2 死锁的处理策略¶
死锁预防
破坏死锁产生的必要条件:
破坏互斥条件:资源可共享
破坏请求与保持条件:一次性请求所有资源
破坏不剥夺条件:允许剥夺资源
破坏循环等待条件:资源有序分配
死锁避免
动态检测资源分配是否安全。
银行家算法
银行家算法用于判断资源分配是否安全。
死锁检测
检测系统是否发生死锁。
死锁恢复
解除死锁:
终止进程
剥夺资源
5. 内存管理¶
5.1 内存管理概述¶
内存管理的目标
提高内存利用率
方便用户使用
保证内存安全
内存管理的功能
内存分配与回收
地址映射
内存保护
内存扩充
程序的装入
绝对装入
程序装入到固定地址。
可重定位装入
根据内存情况装入到不同地址。
动态运行时装入
运行时装入,可动态移动。
5.2 连续分配¶
单一连续分配
内存分为系统区和用户区。
优点:简单 缺点:利用率低
分区分配
将内存分成多个分区,每个分区分配给一个进程。
固定分区
分区大小固定。
优点:简单 缺点:内部碎片
动态分区
分区大小根据进程需求动态分配。
优点:利用率高 缺点:外部碎片
分配算法
首次适应(First Fit)
最佳适应(Best Fit)
最坏适应(Worst Fit)
循环首次适应(Next Fit)
5.3 非连续分配¶
分页
将内存和程序分成固定大小的页和页框。
页:程序的单位
页框:内存的单位
页表
页表记录页到页框的映射。
地址转换
逻辑地址 = 页号 + 页内偏移
物理地址 = 页框号 + 页内偏移
分段的优缺点
- 优点:
无外部碎片
便于共享和保护
- 缺点:
有内部碎片
需要硬件支持
分段
将程序按逻辑单位分段。
段:程序的逻辑单位
段表:记录段到内存的映射
段页式
结合分页和分段的优点。
5.4 虚拟内存¶
虚拟内存的概念
虚拟内存将程序的一部分装入内存即可运行,其余部分放在外存,按需调入。
虚拟内存的优点
扩大可用内存
提高内存利用率
支持多道程序设计
方便程序开发
页式虚拟内存
缺页中断
访问的页不在内存时,触发缺页中断,将该页调入内存。
页面置换算法
选择哪个页面换出内存。
最佳置换(OPT)
置换未来最长时间不使用的页面。
先进先出(FIFO)
置换最早调入的页面。
最近最久未使用(LRU)
置换最近最久未使用的页面。
时钟算法(Clock)
近似LRU的高效算法。
Belady异常
在某些情况下,增加内存反而增加缺页次数。
抖动
频繁缺页,系统忙于页面交换,无法正常工作。
5.5 内存分配策略¶
静态分配
程序运行前分配内存,运行中不变。
动态分配
程序运行时动态分配和释放内存。
内存分配算法
首次适应(First Fit)
最佳适应(Best Fit)
最坏适应(Worst Fit)
循环首次适应(Next Fit)
内存回收
回收内存时要合并相邻的空闲块。
6. 文件系统¶
6.1 文件的概念¶
文件的定义
文件是具有名称的一组相关信息的集合。
文件的属性
文件名
文件类型
文件大小
创建时间
修改时间
访问时间
权限
文件的类型
按用途分类: - 系统文件 - 用户文件
按数据形式分类: - 源文件 - 目标文件 - 可执行文件
按保护级别分类: - 只读文件 - 读写文件 - 可执行文件
6.2 文件的结构¶
文件的逻辑结构
顺序文件
记录按顺序排列。
优点:顺序访问效率高 缺点:插入删除效率低
索引文件
通过索引表访问记录。
优点:随机访问效率高 缺点:索引占用额外空间
索引顺序文件
结合顺序文件和索引文件的优点。
文件的物理结构
连续分配
文件存储在连续的磁盘块中。
优点:顺序访问快 缺点:需要连续空间,外部碎片
链接分配
文件存储在不连续的磁盘块中,通过指针链接。
优点:不需要连续空间 缺点:随机访问慢
索引分配
通过索引块记录文件的磁盘块位置。
优点:随机访问快 缺点:索引块可能较大
6.3 文件目录¶
目录的概念
目录是文件的集合,用于组织文件。
目录的结构
单级目录
整个系统只有一个目录。
缺点:文件名冲突
两级目录
分为主目录和用户目录。
树形目录
目录组织成树状结构。
无环图目录
允许目录共享和链接。
目录的实现
线性表
哈希表
6.4 文件操作¶
基本文件操作
创建(create)
删除(delete)
读(read)
写(write)
打开(open)
关闭(close)
文件共享
硬链接
软链接(符号链接)
文件保护
访问控制列表(ACL)
权限位
7. IO管理¶
7.1 IO设备¶
IO设备的分类
按传输速率分类: - 低速设备:键盘、鼠标 - 中速设备:打印机 - 高速设备:磁盘
按信息交换单位分类: - 字符设备:键盘、终端 - 块设备:磁盘
按共享属性分类: - 独占设备:打印机 - 共享设备:磁盘
IO控制方式
程序IO方式
CPU主动查询IO设备状态。
优点:简单 缺点:CPU利用率低
中断驱动IO方式
IO设备完成后向CPU发送中断。
优点:CPU利用率高 缺点:频繁中断
DMA方式
直接内存访问,IO设备直接与内存交换数据。
优点:效率高 缺点:需要DMA控制器
通道控制方式
通道专门负责IO操作。
优点:效率最高 缺点:复杂
7.2 设备驱动¶
设备驱动的概念
设备驱动是控制硬件设备的软件。
设备驱动的功能
初始化设备
处理IO请求
处理中断
错误处理
设备驱动的分类
字符设备驱动
块设备驱动
网络设备驱动
7.3 缓冲技术¶
缓冲的概念
缓冲是临时存储数据的区域,用于匹配速度差异。
缓冲的类型
单缓冲
一个缓冲区。
双缓冲
两个缓冲区,交替使用。
循环缓冲
多个缓冲区,循环使用。
缓冲池
一组缓冲区,动态分配。
缓冲的目的
提高IO效率
减少CPU等待时间
解决速度不匹配问题
7.4 磁盘调度¶
磁盘调度的目标
减少寻道时间
提高磁盘利用率
磁盘调度算法
先来先服务(FCFS)
最短寻道时间优先(SSTF)
扫描算法(SCAN)
循环扫描算法(C-SCAN)
LOOK算法
C-LOOK算法
磁盘缓存
将磁盘数据缓存到内存,减少磁盘访问。
8. 操作系统接口¶
8.1 用户接口¶
命令行接口(CLI)
用户通过命令与系统交互。
优点:灵活、强大 缺点:学习曲线陡峭
图形用户界面(GUI)
用户通过图形元素与系统交互。
优点:直观、易用 缺点:效率相对较低
8.2 系统调用¶
系统调用的定义
系统调用是用户程序请求操作系统服务的接口。
系统调用的类型
进程控制
文件管理
设备管理
信息维护
通信
系统调用的实现
用户程序通过软中断或系统调用指令调用内核服务。
9. 系统安全与保护¶
9.1 认证与授权¶
认证
验证用户身份。
- 方法:
密码
生物特征
智能卡
授权
确定用户权限。
- 方法:
访问控制列表(ACL)
能力列表
9.2 访问控制¶
访问控制模型
自主访问控制(DAC)
资源所有者决定访问权限。
强制访问控制(MAC)
系统强制执行访问规则。
基于角色的访问控制(RBAC)
根据用户角色分配权限。
9.3 隔离¶
进程隔离
进程之间相互隔离,保护系统安全。
虚拟化
通过虚拟化技术实现隔离。
10. 实际操作系统¶
10.1 Windows¶
特点
图形用户界面
即插即用
多任务
支持多平台
架构
用户模式
内核模式
10.2 Linux¶
特点
开源
稳定
安全
灵活
架构
用户空间
内核空间
10.3 Unix¶
特点
多用户
多任务
稳定
安全
架构
用户层
内核层
11. 应用领域¶
11.1 桌面系统¶
Windows
macOS
Linux
11.2 服务器¶
Windows Server
Linux
Unix
11.3 嵌入式系统¶
FreeRTOS
VxWorks
嵌入式Linux
11.4 移动设备¶
Android
iOS
12. 总结与展望¶
操作系统是计算机系统的核心软件,管理硬件资源,为用户提供服务。从进程管理到内存管理,从文件系统到IO管理,操作系统技术不断发展,为信息技术的进步提供了坚实的基础。
核心价值
管理资源
提供服务
提高效率
保证安全
学习建议
理解基本概念和原理
学习具体操作系统的实现
动手实践
关注前沿技术
进阶方向
分布式操作系统
实时操作系统
虚拟化技术
容器技术
云计算
操作系统技术日新月异,掌握操作系统知识将让你在计算机领域拥有更深刻的理解。