操作系统核心知识
前言
操作系统(Operating System,OS)是计算机最重要的系统软件,它负责管理计算机硬件资源,并为应用程序提供统一的运行环境。
本文对操作系统核心知识进行系统总结。
一、什么是操作系统
操作系统本质上是:
管理计算机硬件资源并为用户提供服务的软件。
主要功能:
-
进程管理
-
内存管理
-
文件管理
-
设备管理
常见操作系统:
-
Windows
-
Linux
-
macOS
-
Android
-
iOS
二、进程与线程
1. 什么是进程
进程是:
程序的一次执行过程。
例如:
打开微信:
-
微信程序(静态)→ 程序
-
运行中的微信 → 进程
进程拥有:
-
独立地址空间
-
独立资源
2. 什么是线程
线程是:
CPU调度的最小单位。
一个进程中可以有多个线程。
例如:
浏览器:
-
UI线程
-
网络线程
-
JS线程
都属于同一个浏览器进程。
3. 进程与线程区别
| 项目 | 进程 | 线程 |
|---|---|---|
| 资源拥有者 | 是 | 否 |
| 调度单位 | 不是最小 | 是最小 |
| 切换开销 | 大 | 小 |
| 通信 | IPC | 共享内存 |
面试回答:
进程是资源分配的基本单位,线程是CPU调度的基本单位。一个进程可以包含多个线程,同一进程内线程共享地址空间和资源。
三、并发与并行
并发(Concurrent)
一个CPU:
时间片轮转执行多个任务。
看起来同时执行。
例如:
-
边下载
-
边听音乐
实际上CPU在快速切换。
并行(Parallel)
多个CPU核心:
真正同时执行。
例如:
四核CPU:
-
核1执行A
-
核2执行B
-
核3执行C
-
核4执行D
区别
并发:
一个时间段内执行多个任务。
并行:
同一时刻执行多个任务。
四、进程状态转换
经典五状态模型:
新建态(New)
创建进程。
↓
就绪态(Ready)
获得除CPU之外所有资源。
等待CPU。
↓
运行态(Running)
占有CPU。
↓
阻塞态(Blocked)
等待事件发生:
例如:
-
等待IO
-
等待信号量
↓
终止态(Exit)
执行结束。
转换关系
就绪 → 运行
CPU调度
运行 → 就绪
时间片用完
运行 → 阻塞
等待资源
阻塞 → 就绪
资源到达
五、PV操作与信号量
同步互斥题的核心。
P操作
申请资源。
P(S)
{
S--;
if(S<0)
阻塞;
}
V操作
释放资源。
V(S)
{
S++;
if(S<=0)
唤醒;
}
互斥
初值:
mutex = 1
进入临界区:
P(mutex)
退出临界区:
V(mutex)
生产者消费者
经典考试题。
信号量:
empty = n
full = 0
mutex = 1
生产:
P(empty)
P(mutex)
生产
V(mutex)
V(full)
消费:
P(full)
P(mutex)
消费
V(mutex)
V(empty)
六、死锁
什么是死锁
多个进程互相等待资源。
谁都无法继续执行。
死锁产生四个必要条件
1. 互斥条件
资源一次只能一个进程使用。
2. 请求保持条件
拿着资源继续申请。
3. 不可剥夺条件
资源不能强行抢走。
4. 循环等待条件
形成资源环。
记忆口诀
互斥、保持、不剥夺、循环等待
七、银行家算法
用途:
避免死锁。
核心思想:
只有分配后仍然安全才允许分配。
安全状态
存在一个安全序列:
P1 → P2 → P3 → P4
则系统安全。
判断步骤
计算:
Need = Max - Allocation
寻找:
Need <= Available
的进程。
释放资源继续检查。
八、内存管理
为什么需要内存管理
多个程序同时运行:
QQ
微信
浏览器
IDEA
需要合理划分内存。
九、分页存储管理
页和页框
逻辑空间:
页(Page)
物理空间:
页框(Frame)
大小相同。
地址结构
页号P
页内偏移W
地址转换
通过页表:
页号 → 物理块号
再拼接页内偏移。
缺页中断
页不在内存:
访问页
↓
缺页
↓
调入内存
十、分段存储管理
分页:
解决内存利用率问题。
分段:
解决程序逻辑结构问题。
例如:
代码段
数据段
栈段
每段长度不同。
分页与分段区别
| 项目 | 分页 | 分段 |
|---|---|---|
| 依据 | 物理 | 逻辑 |
| 大小 | 固定 | 可变 |
| 地址 | 页号+偏移 | 段号+偏移 |
十一、虚拟内存
定义:
用磁盘空间扩充内存空间。
例如:
物理内存:
8GB
程序:
20GB
仍然可以运行。
因为:
内存 + 磁盘
共同组成虚拟内存。
十二、页面置换算法
当内存已满:
需要淘汰页面。
FIFO
先进先出。
最早进入先淘汰。
LRU
最近最久未使用。
面试最爱问。
OPT
最佳置换算法。
淘汰未来最长时间不用的页。
理论最优。
缺页率
缺页次数
--------
访问总次数
十三、用户态与内核态
用户态
普通程序运行。
权限低。
不能直接操作硬件。
内核态
操作系统运行。
权限最高。
切换方式
系统调用:
read()
write()
fork()
异常:
缺页中断
中断:
键盘输入
十四、malloc底层实现
Linux中:
malloc()
本质依赖:
brk
小块内存:
<128KB
扩展堆区。
mmap
大块内存:
>=128KB
直接映射。
十五、Linux五种IO模型
阻塞IO
最简单。
调用后一直等待。
非阻塞IO
不断轮询。
IO多路复用
经典:
select
poll
epoll
一个线程监控多个连接。
信号驱动IO
内核通知。
异步IO
提交后立即返回。
完成后通知。
性能最好。
十六、同步与异步
同步:
自己等结果。
异步:
结果好了通知你。
例子
同步:
打电话
异步:
发短信
十七、硬链接与软链接
硬链接
多个文件名指向同一个inode。
删除一个不影响数据。
软链接
类似快捷方式。
保存路径。
目标删除后失效。
区别
| 项目 | 硬链接 | 软链接 |
|---|---|---|
| inode | 相同 | 不同 |
| 跨分区 | 不能 | 能 |
| 目录 | 通常不能 | 能 |
| 目标删除 | 仍可访问 | 失效 |
十八、操作系统面试高频问题
Q1 进程和线程区别
资源分配与CPU调度。
Q2 什么是死锁
多个进程循环等待资源。
Q3 什么是虚拟内存
利用磁盘扩展内存。
Q4 什么是缺页中断
访问页不在内存触发调页。
Q5 select、poll、epoll区别
Linux高并发核心问题。
总结
操作系统核心知识可以归纳为:
进程管理
线程管理
同步互斥
死锁
内存管理
分页分段
虚拟内存
文件系统
设备管理
IO模型
对于考试:
重点掌握:
-
PV操作
-
死锁
-
银行家算法
-
地址转换
-
页面置换算法
对于面试:
重点掌握:
-
进程线程
-
虚拟内存
-
用户态内核态
-
malloc
-
IO模型
-
epoll
把这些知识吃透,基本可以覆盖大学操作系统课程、408考研以及绝大多数后端开发面试中的操作系统考点。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)