前言

操作系统(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考研以及绝大多数后端开发面试中的操作系统考点。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐