一、操作系统概论(必背)
1. 核心定义
(1)官方标准定义 :操作系统(OS)是一组控制和管理计算机硬件与软件资源、合理组织计算机工作流程、为用户和应用程序提供便捷访问接口的最基础系统软件,是计算机系统的核心支撑软件。
(2)核心本质 :软硬件资源的管理者 、系统服务的提供者 、并发执行的协调者 、系统安全的守护者,向上支撑应用程序运行,向下屏蔽硬件差异。
(3)四大核心特征(必考) :并发、共享、虚拟、异步。
-
并发:宏观同时执行、微观交替执行(多道程序核心);
-
共享:软硬件资源被多个进程共用(互斥共享、同时共享);
-
虚拟:通过时分/空分技术,将物理资源抽象为多份逻辑资源(如虚拟内存、时间片);
-
异步:进程以不可预知的速度向前推进,运行时序不确定。
(4)五大核心功能(细化考点):
-
进程管理:进程调度、并发控制、同步互斥、死锁处理;
-
内存管理:地址映射、内存分配回收、虚拟内存、页面置换;
-
文件管理:文件存储、目录管理、权限控制、文件读写与保护;
-
设备管理:设备驱动、IO调度、缓冲管理、设备分配回收;
-
用户接口:提供命令接口、程序接口(系统调用)、图形接口。
(5)核心设计目标:提升资源利用率、提高系统吞吐量、保障系统公平性与稳定性、降低用户操作门槛、实现软硬件解耦兼容。
2. 发展脉络
(1). 手工操作阶段(无操作系统)
特点:人工装卸程序、开关控制计算机,串行单任务;
痛点:CPU全程空闲等待人工操作,资源利用率极低,无并发。
(2). 单道批处理系统
核心技术:批量自动处理作业,无需人工干预;
特点:内存仅驻留一道程序,作业串行执行;
痛点:IO阻塞时CPU空闲,依然无法利用系统资源,无并发。
(3). 多道批处理系统(现代OS基石)
核心突破:引入并发技术、多道程序驻留内存;
原理:一道程序IO阻塞时,CPU调度执行其他就绪程序;
特点:无人工交互、批量处理、资源利用率大幅提升;
短板:无交互能力,用户无法干预程序运行。
(4). 分时操作系统
核心技术:时间片轮转调度;
特点:多用户联机交互、公平分配CPU资源、响应速度快;
核心优势:解决人机交互问题,兼顾公平性;
典型代表:UNIX、Linux。
(5). 实时操作系统
核心目标:确定性、高可靠、低延迟,优先保障任务时限;
分类:硬实时(工业控制、自动驾驶、错过时限系统失效)、软实时(直播、影音、轻微延迟不影响核心功能);
特点:优先级抢占、无多余调度损耗、稳定性极强;
典型代表:FreeRTOS、QNX、VxWorks。
(6). 现代通用操作系统
融合多道批处理+分时+实时特性,支持多任务、图形化、高并发;
分类:桌面OS(Windows、macOS)、服务器OS(CentOS、Ubuntu)、移动端OS(Android、iOS)。
(7). 新型操作系统(拓展考点)
虚拟化OS:ESXi、Hyper-V(硬件级虚拟化);
容器化生态:基于Linux Namespace+Cgroups的轻量化隔离;
分布式OS:统一管理集群资源,支撑云计算、大数据场景。
发展核心逻辑(必背总结):
-
核心演进方向:提高资源利用率 → 实现人机交互 → 保障实时可靠 → 支持分布式集群;
-
并发诞生标志:多道批处理系统;
-
交互能力诞生标志:分时系统。
3. 内核架构(面试高频)
-
宏内核:所有模块内核态,快、耦合高(Linux)
-
微内核:仅调度/通信在内核,稳、切换开销大(QNX)
4. 运行态(用户态/内核态)【考研+面试满分完整版】
核心定义 :为了实现计算机的权限隔离与安全保护,CPU将程序运行划分为两种特权级别,严格区分普通应用权限与系统内核权限,防止用户程序越权篡改硬件、内存、系统资源。
(1). 用户态(User Mode / Ring3 / EL0)
-
权限等级:低权限、受限运行态
-
可执行内容:仅执行用户代码、访问用户态虚拟地址空间
-
禁止操作:无法直接访问硬件、无法修改内核内存、无法执行特权指令
-
运行主体:所有普通应用程序、进程、线程默认运行在用户态
(2). 内核态(Kernel Mode / Ring0 / EL1)
-
权限等级:最高特权级,系统最高权限
-
可执行内容:执行内核代码、操作所有硬件资源、访问完整地址空间、执行特权指令
-
核心职责:完成资源调度、内存映射、IO读写、中断处理、系统权限校验
-
运行主体:操作系统内核、驱动程序、中断处理程序
(3). 态切换三大触发源(必考)
-
系统调用(主动切换):用户程序主动请求内核服务(open/read/write/fork),自愿陷入内核态
-
硬件中断(被动切换):网卡、磁盘、时钟等硬件触发中断,强制切入内核处理中断
-
程序异常(被动切换):缺页、除零、非法访问、越权指令触发CPU异常,进入内核处理
(4). 态切换完整流程(面试深度)
用户态执行 → 触发切换事件 → 保存用户态上下文(寄存器、PC、栈指针)→ 权限提升内核态 → 内核处理逻辑 → 恢复用户上下文 → 退回用户态继续执行
(5). 切换开销(高频考点)
模式切换≠进程切换,开销更小;切换损耗包含:寄存器保存与恢复、TLB部分刷新、缓存失效、权限校验,频繁态切换会降低系统性能。
(6). 硬件特权级拓展(冷门考点)
-
x86:Ring0(内核)~Ring3(用户),仅0/3实际使用
-
ARM:EL0用户、EL1内核、EL2虚拟化、EL3安全监控
(7). 核心约束规则(易错必背)
-
用户态绝对不能直接操作硬件,所有硬件操作必须委托内核通过系统调用完成
-
中断、异常上下文默认运行在内核态,不可执行用户态代码
-
内核态拥有全部资源权限,是系统安全与资源隔离的核心保障
-
用户态:权限低,无法操作硬件
-
内核态:最高权限
-
态切换触发:系统调用、中断、异常
5. 系统启动流程【满分完整版·考研/面试必背】
整体流程总览:
开机上电 → BIOS/UEFI 固件初始化 → 引导程序 Bootloader(GRUB)→ 内核解压与初始化 → 内核硬件与子系统初始化 → 挂载根文件系统 → 用户态一号进程启动 → 系统初始化完成、可对外服务
阶段1:硬件固件自检(BIOS / UEFI)
-
核心工作:上电初始化硬件、CPU、内存、磁盘、外设,执行POST上电自检,检测硬件是否正常
-
运行模式:初始为实模式(仅寻址1MB内存、无权限隔离、无虚拟内存)
-
最终动作:识别可启动磁盘,读取磁盘首个扇区的引导代码,移交执行权给Bootloader
-
差异考点:BIOS传统固件、启动慢;UEFI新式固件、支持大硬盘、图形界面、启动更快
阶段2:Bootloader引导阶段(GRUB)
-
核心作用:接管系统控制权,解析磁盘分区、读取内核镜像文件
-
关键动作:展示启动菜单、加载 Linux Kernel 镜像、加载 initramfs 临时根文件系统
-
模式切换:完成 实模式 → 保护模式 切换,开启内存寻址、权限隔离机制
阶段3:内核加载与解压初始化
-
内核在内存中解压、落地,初始化内核核心数据结构
-
开启分页机制、虚拟内存、MMU地址翻译(现代OS核心标志)
-
初始化调度器、内存管理、中断控制器、时钟节拍
阶段4:内核底层硬件初始化
-
遍历硬件设备树,初始化总线、磁盘、网卡、输入设备
-
加载驱动模块、初始化中断向量表、注册设备节点
-
初始化内核子系统:进程管理、IO子系统、网络子系统
阶段5:挂载根文件系统
-
先依托 initramfs 临时文件系统完成基础运行
-
校验磁盘根分区,挂载真实根文件系统(ext4/xfs)
-
根文件系统是用户程序、配置文件、系统命令的载体,无根文件系统无法进入用户态
阶段6:启动用户态1号进程(核心分界点)
-
内核初始化完毕,从内核态切换到用户态
-
启动一号进程:老式 init 进程 / 现代 systemd 进程
-
核心地位:所有用户进程的祖先,负责后续开机服务、进程管理、回收孤儿进程
阶段7:系统服务与终端初始化
-
启动开机自启服务、网络服务、日志服务
-
初始化TTY终端、图形界面(桌面系统),系统启动完成,支持用户操作
必考核心考点总结
-
实模式:开机初始模式,无虚拟内存、无权限隔离;保护模式:内核正式工作模式,支持虚拟内存、多任务、权限隔离
-
启动最大分界点:内核初始化完成、1号进程启动(内核态转用户态)
-
必须先开启分页与MMU,才能使用虚拟内存机制
-
根文件系统挂载是进入完整用户环境的必要条件
二、进程与线程(核心重难点)
1. 核心区别
-
进程:资源分配最小单位,独立地址空间
-
线程:CPU调度最小单位,共享进程资源,栈私有
2. 进程五状态【考研标准满分完整版】
五状态完整列表:新建态 → 就绪态 → 运行态 → 阻塞态(等待态) → 终止态
( 1 ) . 新建态(New)
-
定义:进程刚被创建,PCB正在初始化,资源尚未分配、未进入就绪队列
-
特征:不参与调度、不占用CPU、无法执行
-
状态转换:初始化完成、资源就绪 → 就绪态
( 2 ) . 就绪态(Ready)【高频核心】
-
定义:进程所有资源已就绪、仅等待CPU时间片,具备随时运行的条件
-
特征:驻留就绪队列、等待调度、可立即抢占CPU
-
转换1:获得CPU时间片 → 运行态
-
转换2:高优先级进程抢占/时间片用完 → 退回就绪态
( 3 ) . 运行态(Running)
-
定义:CPU正在执行该进程代码,占有CPU资源
-
特征:单CPU系统同一时刻仅有一个进程处于运行态
-
转换1:时间片耗尽 → 就绪态
-
转换2:发起IO/等待资源 → 阻塞态
-
转换3:程序执行完毕/异常退出 → 终止态
( 4 ) . 阻塞态/等待态(Blocked/Waiting)【最易混淆】
-
定义:进程因等待某事件发生(IO、信号、资源)主动放弃CPU,暂停执行
-
核心特征:即使CPU空闲,也无法运行(和就绪态最大区别)
-
转换:等待事件完成(IO结束、信号到达)→就绪态
-
易错点:阻塞态绝对不能直接进入运行态,必须先转为就绪态
( 5 ) . 终止态(Terminated)
-
定义:进程执行完毕或异常终止,释放大部分资源,仅保留PCB
-
特征:不再参与调度、无法恢复运行
-
最终动作:父进程调用wait()回收PCB,彻底释放系统资源(转为僵尸进程则PCB残留)
必考·四大状态转换禁忌(考研判断题常客)
-
(1). 就绪态 不能直接进入阻塞态(只有运行态能主动阻塞)
-
(2). 阻塞态 不能直接进入运行态(必须先就绪)
-
(3). 新建态 不能直接进入运行态
-
(4). 终止态无任何后续转换
最简区分口诀(秒懂易错点)
就绪:万事俱备,只欠CPU; 阻塞:自身等待,给CPU也不跑; 运行:占有CPU,正在执行。
新建 → 就绪 → 运行 → 阻塞 → 终止
3. 特殊进程
-
0号进程:系统 idle 进程,调度载体
-
1号进程:init/systemd,所有用户进程父进程,收养孤儿进程
-
僵尸进程:子退父未wait,PCB残留(资源泄露)
-
孤儿进程:父先退出,被1号进程收养
4. 进程创建函数区别【满分完整版·考研+面试必考】
总述 :Linux 三大进程/线程创建函数:fork、vfork、clone,底层均基于 do_fork 内核函数,核心差异在于「资源共享粒度、地址空间拷贝方式、执行顺序」。
一、fork() 标准子进程创建
-
核心机制 :创建独立完整子进程 ,默认采用 写时复制 COW
-
地址空间:父子进程虚拟地址空间完全独立,初始页表共享物理页,写入触发复制
-
资源特点:PCB、页表、文件描述符、信号处理方式全部复制
-
执行顺序 :父子进程抢占式调度,执行顺序不确定
-
优点:进程完全隔离、安全稳定
-
缺点:创建开销大于线程,不适合高频轻量创建
-
适用场景:创建独立子进程(常规多进程业务)
二、vfork() 轻量特殊进程创建(极度易错)
-
核心机制 :完全共享父进程地址空间,无 COW
-
地址空间:父子共用同一份堆、栈、代码段、数据段
-
执行顺序(必考) :严格阻塞父进程,子进程先执行,子进程 exit/exec 后父进程才恢复运行
-
风险点:子进程修改数据会直接篡改父进程数据,栈混乱极易崩溃
-
设计目的:专门为「创建子进程立刻执行 exec 程序替换」场景优化,避免无谓拷贝
-
禁止行为 :vfork 子进程不能直接返回、不能修改局部变量,必须马上 exit/exec
三、clone() 精细化创建(线程底层函数)
-
核心机制 :自定义资源共享掩码,按需决定共享/复制资源
-
可控粒度:可单独设置共享:地址空间、文件描述符、信号处理、PID、命名空间等
-
本质地位 :pthread_create 底层就是 clone
-
创建结果:共享地址空间 → 生成线程;完全不共享 → 生成普通进程
-
优势:灵活、粒度最小、性能最高
-
场景:创建线程、创建隔离容器进程、定制化子进程
四、三大函数核心对比(考研简答题标准答案)
1. 地址空间差异
fork:独立地址空间、COW延迟复制;
vfork:完全共享地址空间、无拷贝;
clone:可配置共享/独立。
2. 执行顺序差异
fork:父子抢占、顺序随机;
vfork:子先父后、父阻塞;
clone:默认抢占。
3. 用途差异
fork:通用子进程;
vfork:只为马上 exec 替换程序;
clone:创建线程、定制进程。
五、高频易错考点(判断/选择必背)
-
fork 之后父子进程数据独立(COW保证)
-
vfork 不复制内存,速度最快但不安全
-
vfork 子进程不退出/不 exec,父进程永久阻塞
-
线程只能由 clone 创建,不能由 fork 创建
-
fork 复制页表、不复制物理页(COW机制)
fork:COW写时复制,独立地址空间
vfork:共享地址空间,子优先执行
clone:定制共享资源,创建线程底层
5. 进程通信 IPC【满分完整版·考研+面试】
一、IPC核心定义
IPC(进程间通信):操作系统提供的、用于多个进程之间数据传输、信息交互、状态同步的机制。 核心意义:进程拥有独立虚拟地址空间,天然隔离,必须通过内核提供的IPC机制完成跨进程数据交互。
二、IPC整体分类(必考框架)
分为:低级通信(传递少量信息) 、高级通信(传递大量数据)
1. 低级IPC:信号(Signal)
-
原理:内核发送软中断信号通知进程事件,仅传递"事件类型",不传递大数据
-
特点:异步通信、开销极小、数据量极少
-
缺陷:信号会丢失、不支持队列有序传输、无法传自定义数据
-
场景:进程终止、暂停、报错、用户快捷键中断
2. 管道通信(最基础IPC)
(1)匿名管道 Pipe
-
约束:仅支持父子/兄弟进程通信、半双工(单向数据流)、无文件实体
-
原理:内核缓冲区缓存数据,读写进程通过缓冲区交互
-
特点:简单、开销低、进程退出数据丢失
(2)命名管道 FIFO
-
突破匿名管道限制:支持无亲缘关系进程通信
-
存在磁盘文件节点,但数据不落地磁盘,依然走内核缓存
-
半双工,支持任意进程读写
3. 消息队列 Message Queue
-
原理:内核维护消息链表,进程读写结构化消息
-
特点:支持无亲缘进程、异步通信、消息分类、不阻塞等待
-
优势:管道数据流无边界,消息队列有消息边界
-
劣势:拷贝次数多、速度慢于共享内存、内核有最大容量限制
4. 共享内存 Shared Memory(全场最快IPC·必考)
-
核心原理:内核将同一块物理内存映射到多个进程虚拟地址空间
-
优势:数据仅拷贝一次(内核→内存),无用户态内核态频繁拷贝,速度最快
-
致命缺陷:本身不带同步互斥机制,必须搭配信号量/互斥锁使用
-
场景:大数据传输、视频流、高吞吐业务
5. 信号量 Semaphore(纯同步工具)
-
本质:不传输数据,只做同步与互斥
-
作用:解决共享内存竞争、多进程临界资源争抢问题
-
分类:整型信号量、记录型信号量、PV原语操作
6. Socket通信(跨主机+本机通用)
-
本地域Socket(Unix Domain Socket):本机进程通信,不走网络协议,速度快、稳定
-
网络Socket(TCP/UDP) :支持跨设备、跨主机进程通信,是分布式通信基础
三、七大IPC核心对比(面试默写版)
-
速度排名:共享内存 > 管道 > 消息队列 > Socket
-
亲缘限制:匿名管道仅限亲缘;其余无限制
-
是否带同步:信号量有同步;共享内存无同步;管道自带阻塞同步
-
传输数据量:共享内存最大;信号最小
-
跨主机能力:仅Socket支持
四、考研必考简答题总结
-
- 速度最快的IPC:共享内存(减少数据拷贝次数)
-
- 仅支持亲缘进程:匿名管道
-
- 唯一可跨主机:Socket
-
- 无数据传输、只做同步:信号量
-
- 管道与消息队列区别:管道字节流无边界,消息队列有独立消息边界
6. 同步与互斥【考研+面试满分完整版】
一、核心标准定义(必考默写)
互斥 :多个进程/线程,在访问临界资源时,同一时刻仅允许一个线程访问,保证资源操作的唯一性、完整性。(解决:竞争冲突)
同步 :多个进程/线程按照预定逻辑次序、先后依赖关系有序执行。(解决:执行时序错乱)
二、三大基础概念
1. 临界资源:一次仅允许一个进程访问的共享资源(硬件:打印机;软件:全局变量、队列、缓冲区)。
2. 临界区 :进程中访问临界资源的代码片段。
3. 空闲让进、忙则等待、有限等待、让权等待(临界区四大原则,考研简答题)。
三、同步互斥底层实现方式
1. 硬件方案
-
关中断:简单粗暴,适合内核极小临界区,禁止长时间关中断
-
原子指令(CAS):硬件保证指令不可分割,无锁编程基础
2. 软件方案
- Peterson算法:双进程完美互斥、解决饥饿、无硬件依赖
四、操作系统六大同步工具(最全对比)
1. 信号量 Semaphore(考研核心)
-
原理:计数器模型,通过 P操作(申请-1)、V操作(释放+1) 控制并发
-
整型信号量:会忙等、低效
-
记录型信号量:阻塞等待、队列唤醒、无忙等(标准考点)
-
用途:既可做互斥 (初值=1),又可做同步(初值=资源数)
2. 互斥锁 Mutex(面试高频)
-
本质:专门用于互斥,不做同步,初值固定为1
-
特性:谁加锁谁解锁、不可重复解锁、支持睡眠等待
-
对比信号量:语义更严格、安全、防误操作
3. 自旋锁 SpinLock
-
特点:等待时忙等、不释放CPU,无上下文切换开销
-
适用:内核短临界区、持有锁时间极短
-
禁忌:锁内不能睡眠、不能阻塞
4. 读写锁 RWLock
-
规则:读共享、写互斥、读写互斥
-
优势:高读低写场景并发极高
-
分类:公平读写锁、写优先读写锁(防写饥饿)
5. 条件变量 Condition
-
作用:专门做线程同步,配合互斥锁使用
-
逻辑:不满足条件则阻塞等待,条件达成唤醒
-
核心函数:wait()阻塞、signal()唤醒单个、broadcast()唤醒全部
6. 屏障 Barrier
-
作用:批量线程同步,所有线程到达屏障点才统一放行
-
场景:多线程分块计算、统一汇总
五、经典同步问题(考研大题必背)
1. 生产者-消费者问题
-
核心矛盾:缓冲区满/空同步、读写互斥
-
信号量设置:empty(空位数)、full(数据数)、mutex(互斥锁)
-
易错点:先同步、后互斥,否则死锁
2. 读者-写者问题
-
第一类读者优先:读可抢占,写者饥饿
-
第二类写者优先:避免写饥饿,保证公平
3. 哲学家进餐问题
-
死锁根源:同时拿左边筷子
-
解决方案:最多4人进餐、奇偶排序、先拿小号筷子
六、高频易错终极总结(选择/判断秒杀)
-
互斥:解决竞争 ;同步:解决顺序
-
信号量既能同步又能互斥,互斥锁只能互斥
-
自旋锁忙等不释放CPU,mutex阻塞释放CPU
-
条件变量必须搭配互斥锁使用,不能单独使用
-
生产者消费者:先P同步、后P互斥,V顺序无要求
-
读写锁:读共享、写独占,大幅提升读多写少性能
临界区:竞争共享资源的代码段
工具:互斥锁、自旋锁、读写锁、条件变量、信号量、屏障
经典问题:生产者消费者、读者写者、哲学家进餐
7. 调度算法【考研+面试满分完整版】
一、调度核心基础(必考概念)
1. 调度定义 :进程调度是操作系统内核依据特定算法,从就绪队列中挑选进程分配CPU资源的过程,是并发执行的核心保障。
2. 调度四大性能指标(计算题必考)
-
周转时间:进程从提交到完成的总时间 = 等待时间 + 运行时间
-
带权周转时间:周转时间 / 实际运行时间(衡量算法公平性)
-
吞吐量:单位时间完成的进程数量(批处理核心指标)
-
响应时间:进程提交到首次开始运行的时间(分时系统核心指标)
3. 调度分类
-
高级调度(作业调度):外存→内存,批处理专属,调度频率最低
-
中级调度(内存调度):挂起/激活进程,缓解内存压力
-
低级调度(进程调度):就绪→运行,频率最高、核心调度
4. 抢占式 / 非抢占式(高频判断)
-
非抢占式:进程一旦占用CPU,运行至结束/阻塞才释放;优点开销小,缺点响应慢、不公平(早期批处理)
-
抢占式:高优先级进程/时间片耗尽可强行剥夺CPU;优点公平、响应快;现代OS默认(Linux/Windows)
二、经典基础调度算法(考研大题必背)
1. FCFS 先来先服务(非抢占)
-
规则:按进程到达就绪队列的先后顺序调度
-
优点:简单、无饥饿、公平朴素
-
缺点:短进程等待长进程,平均周转时间差
-
适用:批处理系统
2. SJF 短作业优先(非抢占/抢占均可)
-
规则:优先调度预计运行时间最短的进程
-
优势:平均周转时间最短、吞吐量最高
-
致命缺陷:长进程饥饿,短进程持续到达会抢占CPU
-
分类:标准SJF(非抢占)、SRT最短剩余时间(抢占式)
3. 优先级调度(抢占/非抢占)
-
规则:优先调度优先级最高进程
-
静态优先级:进程创建后优先级固定,简单低效
-
动态优先级:运行中动态调整(Linux核心机制)
-
问题:低优先级进程饥饿
-
解决:优先级老化(等待越久优先级越高)
4. RR 时间片轮转(分时系统核心·抢占式)
-
规则:就绪队列轮流执行,每个进程占用固定时间片,时间片耗尽强制让出CPU
-
优点:响应快、公平,适配多用户交互
-
缺点:时间片过小→频繁上下文切换、开销大;时间片过大→退化为FCFS
-
适用:分时操作系统(Linux、Windows桌面)
5. 多级反馈队列调度算法(综合最优·考研终极算法)
-
核心设计:设置多个优先级队列,时间片随优先级降低变大
-
规则:新进程进最高优先级队列、时间片用完降级、高优先级队列优先调度
-
优势:兼顾短进程响应快、长进程不饥饿、吞吐高、适应性强
-
特点:无需预知进程运行时间,是通用操作系统最优基础算法
三、Linux真实调度体系(面试工程必背)
Linux 三大调度类
1. CFS 完全公平调度(普通进程默认)
-
核心原理:摒弃传统时间片,基于虚拟运行时间vruntime调度,永远挑选vruntime最小进程执行
-
数据结构:红黑树管理就绪进程,查找效率O(logN)
-
优势:绝对公平、无饥饿、动态权重适配高低优先级
-
nice值:-20~19,值越小优先级越高
2. RT 实时调度(硬实时进程)
-
SCHED_FIFO:实时先来先服务,抢占式,无时间片
-
SCHED_RR:实时时间片轮转,实时进程间公平调度
-
优先级:实时进程 > 普通进程
3. 空闲调度
- 系统无就绪进程时执行idle进程(0号进程),降低CPU功耗
四、调度高频易错总结
-
- 批处理看重:吞吐量、周转时间;分时看重:响应时间
-
- SJF吞吐量最优,但存在长进程饥饿
-
- 时间片轮转仅用于分时系统,保障交互体验
-
- 多级反馈队列是现代通用OS综合最优算法
-
- Linux CFS无固定时间片,靠vruntime实现绝对公平
-
- 上下文切换开销:RR时间片过小会严重拉低系统性能
8. 死锁(必考)
8.1 死锁四大必要条件【必考满分完整版】
核心结论 :死锁发生必须同时满足四个条件,缺一不可;破坏任意一个条件即可破除死锁,是死锁预防、避免、检测的核心理论依据。
1. 互斥条件
-
标准定义:临界资源为独占性资源,同一时刻仅允许一个进程占用,其他请求资源的进程必须等待。
-
通俗解析:资源不共享,一个进程用了,别人就用不了。
-
破坏方式:取消资源独占性、实现资源共享访问、弱化互斥约束。
2. 请求与保持(占有并等待)条件
-
标准定义:进程已经持有若干资源,在不释放已有资源的前提下,继续请求新的被占用的资源,进程阻塞等待。
-
通俗解析:手里拿着资源,还想要别人的资源,且不松手已有资源。
-
破坏方式:一次性申请所有资源,要么全分配、要么全不分配;申请新资源失败时释放已有资源。
3. 不可剥夺(非抢占)条件
-
标准定义 :进程已获得的资源,在未主动释放、进程未结束前,系统和其他进程不能强行剥夺。
-
通俗解析:拿到的资源就是自己的,别人抢不走,只能自己主动归还。
-
破坏方式:实现资源抢占机制,进程请求新资源阻塞时,主动释放已有资源;系统可强制回收空闲占用资源。
4. 循环等待条件
-
标准定义:系统中存在一组进程环形链,每个进程均占用下一个进程所需资源,同时等待上一个进程所持资源,形成闭环循环等待环路。
-
通俗解析:A等B、B等C、C等A,互相僵持、无限等待。
-
破坏方式:对所有资源统一编号,进程严格按资源序号递增顺序申请资源,杜绝循环闭环。
考研极简默写口诀:互斥占用、请求保持、不可抢占、循环等待,四者俱全死锁生,破一即可解死锁。
高频易错点
-
四大条件必须同时成立才会产生死锁,仅有1-3条可能产生饥饿,不会产生死锁;
-
死锁预防是主动破坏必要条件,死锁避免(银行家算法)是不破坏条件、动态规避风险。
8.2 死锁四大处理策略【考研满分完整版】
核心总览 :操作系统处理死锁的四种核心手段:死锁预防、死锁避免、死锁检测与恢复、鸵鸟策略。优先级:预防 > 避免 > 检测恢复 > 忽略,开销与系统复杂度依次递减。
一、死锁预防(主动杜绝·最安全)
-
核心原理 :静态策略,在进程运行前,主动破坏四大必要条件中的至少一条,从根源杜绝死锁发生。
-
对应破局手段:
-
破坏互斥:允许资源共享访问;
-
破坏请求保持:一次性申请全部所需资源,全部满足才运行;
-
破坏不可剥夺:资源申请失败主动释放已有资源,系统可强制抢占;
-
破坏循环等待:资源全局统一编号,按序号递增申请。
-
优点:彻底消除死锁,系统稳定性极高
-
缺点:资源极度浪费、系统并发度低、运行效率差
-
适用场景:高可靠、零死锁刚需场景(工业控制、实时系统)
二、死锁避免(动态规避·平衡最优)
-
核心原理 :不破坏死锁必要条件,运行中动态检测系统安全状态,仅允许安全资源分配,主动规避死锁风险。
-
经典算法 :银行家算法(必考)
-
安全状态定义:系统存在一组安全序列,可让所有进程顺利执行完毕、正常释放资源。
-
执行逻辑:进程请求资源 → 预分配模拟 → 判断剩余资源是否满足后续进程 → 安全则分配、不安全则阻塞等待
-
优点:资源利用率远高于死锁预防,兼顾并发与安全
-
缺点:算法开销大、需要预知进程最大资源需求、不适合动态多变场景
-
适用场景:批处理系统、资源需求可预知的稳定系统
三、死锁检测与恢复(事后补救·容错型)
-
核心原理 :不预防、不规避,允许系统发生死锁,定期检测死锁、发现后主动恢复
-
检测方式:资源分配图化简法,无法完全化简则判定存在死锁进程
-
三大恢复手段:
-
资源剥夺:强制回收死锁进程资源,重新分配给其他进程;
-
进程撤销:终止部分/全部死锁进程,代价最低、最常用;
-
进程回滚:将死锁进程回滚至无死锁快照(复杂度最高)。
-
优点:资源利用率最高、并发性能最好
-
缺点:存在死锁窗口期、恢复开销大、会丢失进程数据
四、鸵鸟策略(默认策略·Linux专属)
-
核心原理 :忽略死锁,假设死锁发生概率极低,不做任何预防、规避、检测操作
-
设计逻辑:桌面/服务器系统中,死锁发生频率远低于处理死锁的开销,牺牲极小稳定性换取极致系统性能
-
处理方式:死锁发生后,由用户手动重启进程/系统解决
-
适用场景:通用操作系统(Linux、Windows),日常民用、服务器场景
五、四大策略终极对比(考研简答题必背)
-
资源利用率:鸵鸟策略 > 检测恢复 > 死锁避免 > 死锁预防
-
系统稳定性:死锁预防 > 死锁避免 > 检测恢复 > 鸵鸟策略
-
运行开销:死锁预防、避免开销极大;鸵鸟策略开销为0
-
核心区分:预防破条件、避免查状态、检测事后修、鸵鸟直接躺
8.3 死锁附属考点:饥饿、活锁【易错辨析满分版】
核心总览 :死锁、饥饿、活锁是三类不同的并发异常问题,均会导致进程无法正常推进,死锁是进程全部阻塞、无推进;饥饿是个别进程长期阻塞;活锁是进程一直运行但无有效推进,三者成因与处理方式完全不同,是考研高频辨析考点。
一、进程饥饿(Starvation)
1. 标准定义 :系统中部分低优先级进程,因资源持续被高优先级进程抢占,长期、一直得不到所需资源,无法投入运行,一直处于等待状态的现象。
2. 核心成因
-
调度算法不公平(优先级调度、SJF短作业优先)
-
高优先级进程持续不断到达,持续抢占CPU/资源
-
系统无等待补偿机制,低优先级进程永久礼让
3. 核心特征
-
仅个别进程等待阻塞,系统其他进程可正常运行
-
不满足死锁四大必要条件,不属于死锁
-
进程有被唤醒的概率,只是概率极低
4. 经典产生场景
-
SJF短作业优先:短进程持续到达,长进程永久等待
-
静态优先级调度:高优先级任务常驻,低优先级任务饥饿
-
第一类读者优先:写者持续饥饿
5. 解决方案(必考)
-
优先级老化:进程等待时间越久,优先级动态提升,最终一定能抢占资源
-
时间片轮转、多级反馈队列:保证公平性,杜绝长期等待
二、活锁(Livelock)
1. 标准定义 :多个进程并未阻塞休眠,一直处于执行、谦让、重试的活跃状态,但互相礼让资源、互相规避,导致所有进程都无法完成有效任务推进,无限空转的现象。
2. 核心成因
-
并发进程资源申请策略过于谦让
-
多个进程同时检测到资源竞争,同时主动释放、重试申请,陷入无限循环
3. 核心特征(与死锁最大区别)
-
进程不阻塞、不睡眠,一直占用CPU运行
-
无任务有效推进,系统空耗CPU资源,吞吐量为0
-
满足部分互斥条件,无循环等待闭环
4. 经典场景
-
多线程自旋锁互相谦让释放锁,反复抢占、反复释放
-
双进程同时放弃资源、同时重试,无限循环
5. 解决方案
-
引入随机等待时间(退避算法),打破同步谦让节奏
-
固定资源抢占优先级,避免互相礼让
三、三者终极辨析(考研判断题秒杀)
-
死锁:所有进程阻塞、不占用CPU、无任何推进,四大条件全部满足
-
饥饿:个别进程阻塞、长期等待,其他进程正常运行,无死锁条件
-
活锁:进程活跃运行、占用CPU,无有效任务推进,无阻塞休眠
四、极简背诵口诀
死锁卡死全员停,饥饿弱者没人疼,活锁空转瞎折腾。
饥饿(长期得不到资源)、活锁(互相谦让无法执行)
三、内存管理(高分难点·考研大题/面试核心)
1. 内存管理核心概述【必背定义】
核心作用 :操作系统内存管理负责内存空间分配与回收、地址映射、内存隔离、内存扩容、碎片整理,解决物理内存有限、多进程并发共享内存的核心矛盾,是现代OS并发与安全的基石。
两大核心目标
-
空间利用率:减少内存碎片、提高物理内存使用率、避免内存浪费
-
运行安全性:进程地址空间隔离、越权访问拦截、保障多进程互不干扰
内存管理四大核心技术演进:连续分配 → 分页管理 → 分段管理 → 段页式管理 → 虚拟内存
2. 连续内存分配(基础考点·碎片来源)
2.1 单一连续分配
-
原理:内存分为系统区+用户区,用户区单次仅驻留一道进程
-
特点:无并发、无地址隔离、结构简单
-
适用:早期单道批处理系统,现代OS已淘汰
2.2 固定分区分配
-
原理:开机将用户内存划分为若干大小固定分区,一个分区驻留一个进程
-
优点:实现简单、无外部碎片、支持多道程序
-
缺点:内部碎片严重、分区大小固定、灵活性极差
2.3 动态分区分配(高频算法考点)
原理:按需动态分配内存,分区大小等于进程所需大小,无预设固定分区
四大分配算法
-
首次适应 First Fit:从头遍历,找第一个足够大空闲分区 优点:速度快、算法简单;缺点:低地址产生大量小碎片
-
循环首次适应 Next Fit:从上一次分配位置继续遍历 优点:碎片分布均匀;缺点:大分区易被拆分,大进程易分配失败
-
最佳适应 Best Fit :找最小的足够大分区 优点:最大限度保留大空闲块;缺点:产生大量极小外部碎片,碎片最多
-
最坏适应 Worst Fit:找最大空闲分区分配 优点:剩余分区相对规整;缺点:极易耗尽大内存块,大进程无法加载
核心碎片总结(必考)
-
内部碎片:分区分配给进程后,分区剩余空间无法被其他进程使用(固定分区、分页存在)
-
外部碎片:内存空闲块总空间足够,但块离散、单个大小不足,无法分配(动态分区、分段存在)
-
解决外部碎片:紧凑技术(内存拼接),但需要复制数据、开销极大
3. 离散内存管理(现代OS核心)
核心优势:彻底解决连续分配的外部碎片问题,内存无需连续即可分配
3.1 分页存储管理(Linux主流·考研重点)
核心原理 :将虚拟地址空间、物理内存空间划分为固定大小块
虚拟块:页面(页);
物理块:页框/物理页
地址结构:虚拟地址 = 页号 + 页内偏移(偏移量完全一致、无需映射)
页表机制:页表存放「虚拟页号→物理页框号」映射关系,完成地址翻译
优缺点
-
优点:无外部碎片、内存利用率高、适配虚拟内存、支持离散分配
-
缺点:存在少量内部碎片、页表占用内存、地址翻译需要查表开销
3.2 多级页表(节省页表内存·必考)
问题:单级页表需要连续内存存放,且页表体量极大、内存浪费严重
解决方案:将页表本身分页、离散存储,仅加载进程用到的页表项
经典结构:二级页表、四级页表(Linux标准四级页表:PGD→PUD→PMD→PTE)
核心优势:按需加载页表、极大节省内核页表内存、适配大地址空间
3.3 快表 TLB(硬件加速·高频)
定义 :TLB(Translation Lookaside Buffer)CPU高速缓存,缓存高频页表映射项
工作流程:地址翻译先查TLB → 命中直接返回物理地址 → 未命中再查内存页表(慢路径)
作用:大幅降低页表查询开销、提升虚拟地址翻译速度
缺失处理:TLB miss → 遍历页表填充TLB → 替换旧表项
3.4 分段存储管理
原理 :按逻辑模块划分地址空间(代码段、数据段、栈段、全局段),段长不固定
地址结构:虚拟地址 = 段号 + 段内偏移
优缺点
-
优点:符合程序逻辑、支持段共享、段保护、方便程序模块化
-
缺点:存在外部碎片、地址映射复杂、不适合高频内存分配
3.5 段页式管理(综合最优)
结合分段+分页优点:按段逻辑划分、按页离散分配
特点:无外部碎片、支持逻辑分段隔离、安全性高、结构复杂
4. 虚拟内存机制(重难点·大题核心)
4.1 核心定义与原理
虚拟内存 :操作系统利用外存磁盘扩容内存,让进程使用的虚拟地址空间远大于物理内存的内存扩容技术。
核心思想 :局部性原理(时间局部性、空间局部性),进程仅部分内容常驻内存,剩余内容存磁盘,按需调入
四大核心特征
-
离散性:虚拟内存基于分页离散分配(基础)
-
多次性:进程无需一次性全部装入内存
-
对换性:冷热页面内存与磁盘互换
-
虚拟性:逻辑内存远大于物理内存
4.2 请求调页 & 缺页异常
请求分页:进程运行中访问页面不在内存时,触发缺页中断,从磁盘调入页面
缺页异常三大触发场景
-
页面从未加载(首次访问)
-
页面被换出至Swap磁盘
-
权限非法访问(栈溢出、越权)
缺页率:缺页次数 / 总访问次数,虚拟内存核心性能指标
5. 页面置换算法(考研计算题必考)
使用场景:物理内存已满、新页面需要调入,必须置换淘汰旧页面
5.1 OPT 最优置换算法(理论满分)
-
规则:淘汰未来最久不访问的页面
-
特点:缺页率最低、无异常、理论最优
-
缺陷:无法预知未来,仅作为评判标准、不可实现
5.2 FIFO 先进先出
-
规则:按页面调入顺序,淘汰最早进入内存的页面
-
优点:实现极简、开销极低
-
缺陷:Belady异常(必考):物理页框数增多,缺页率反而升高
5.3 LRU 最近最少使用(工业最优)
-
规则:淘汰最近最久未使用的页面,利用局部性原理
-
优点:缺页率极低、无Belady异常、贴合程序运行规律
-
缺陷:硬件实现复杂、需要记录访问时间、开销大
5.4 Clock 时钟算法(Linux实际采用)
-
原理:环形链表+访问位,扫描指针循环遍历,淘汰未访问页面
-
优化版:二次机会Clock、改进型Clock
-
特点:LRU近似算法、开销小、性能均衡、Linux默认页面置换
6. Linux内存分配体系(面试工程核心)
完整层级(从细到粗):用户态malloc → Slab/Slub缓存 → Buddy伙伴系统 → vmalloc 非连续内存
6.1 伙伴系统 Buddy System(页级分配)
-
作用:负责整页物理内存分配,解决外部碎片
-
原理:2的幂次页块拆分与合并,空闲页块成对伙伴合并
-
特点:页级分配高效、无外部碎片、适合大块内存
6.2 Slab/Slub 缓存(小内存分配)
-
作用:内核小对象高频分配(PCB、inode、dentry),避免页级浪费
-
机制:将整页切分为固定大小小对象缓存,复用内存、减少碎片
-
per-cpu缓存:进一步降低多核竞争、提升分配速度
6.3 vmalloc 非连续内存
-
用途:分配虚拟连续、物理不连续内存
-
场景:大块不确定内存、物理内存碎片化严重时使用
-
缺点:映射开销大、速度慢于伙伴系统
7. 核心关键机制(高频必考)
7.1 COW 写时复制(fork轻量化核心)
-
原理:fork创建子进程时,不复制物理内存,仅复制页表、父子共享物理页,设置只读权限
-
触发复制:任意进程执行写操作 → 触发缺页异常 → 单独拷贝新物理页
-
价值:极大降低fork开销、实现轻量级进程创建
7.2 大页机制 THP
-
静态大页:预先预留大页内存,稳定性高
-
THP透明大页:系统自动合并大页、无需人工干预
-
作用:减少页表数量、降低TLB缺失、提升寻址效率
7.3 Swap 交换分区
-
原理:物理内存不足时,将冷页换出至磁盘Swap分区,释放物理内存
-
swappiness:控制Swap使用权重,值越大越倾向换出内存
-
弊端:磁盘速度远低于内存,频繁Swap会严重卡顿
7.4 OOM Killer 内存溢出机制
-
触发条件:物理内存+Swap全部耗尽,无法分配新内存
-
机制:对所有进程打分,杀死分数最高、占用内存大、优先级低的进程
-
目的:保障内核正常运行、避免系统崩溃
8. 内存安全机制(面试拓展)
-
ASLR地址空间随机化:每次启动进程虚拟地址随机,防止溢出攻击
-
NX不可执行位:数据段内存禁止执行代码,防御恶意代码注入
-
栈金丝雀 Canary:栈底插入校验值,检测栈溢出篡改
-
内存隔离:进程独立虚拟地址空间,禁止跨进程非法访问
9. 内存终极易错总结(选择/判断秒杀)
-
连续分配:无内部碎片(动态)、有外部碎片;分页:有内部碎片、无外部碎片
-
FIFO独有Belady异常,LRU、Clock无异常
-
虚拟内存核心依托局部性原理,无局部性则虚拟内存失效
-
缺页异常属于同步异常,非硬件中断
-
COW是fork高效的根本,vfork无COW、直接共享地址空间
-
LRU性能接近OPT,Clock是Linux工程实现方案
-
伙伴系统管页、Slab管小对象、vmalloc管非连续大块
四、文件系统(稳分模块·考研不丢分+面试全覆盖)
1. 文件系统核心概述【必背定义】
标准定义 :文件系统是操作系统用于管理磁盘存储、组织文件数据、维护目录结构、实现数据持久化与权限管控的核心子系统,向上为用户/进程提供文件读写接口,向下屏蔽磁盘块读写细节。
核心四大功能
-
存储空间管理:磁盘块分配与回收,杜绝存储碎片
-
文件结构管理:维护文件逻辑结构与物理存储映射
-
目录管理:实现文件检索、路径解析、快速定位
-
安全权限管理:读写权限控制、数据保护、防篡改防越权
核心分层架构(从上到下):用户调用接口 → VFS虚拟文件系统 → 具体文件系统(ext4/xfs)→ 块设备驱动 → 物理磁盘
2. 文件逻辑结构 & 物理结构(考研选择高频)
2.1 文件逻辑结构(用户视角)
-
无结构文件(流式文件):字符流组成、无固定格式,Linux默认文件类型(txt、二进制程序),灵活度高、适配所有场景
-
有结构文件(记录式文件):由多条固定/可变长记录组成,多用于数据库、日志系统,支持按记录检索数据
2.2 文件物理结构(磁盘存储视角·必考对比)
核心考核:分配方式、优缺点、适用场景、碎片类型
- 连续分配
原理:文件占用磁盘一组连续物理块
优点:读写速度最快、寻道开销极小、顺序访问最优
缺点:产生外部碎片、文件扩容困难、预分配浪费空间
适用:静态只读文件、系统镜像
- 链接分配(隐式链接)
原理:每个磁盘块存储下一个块指针,串联成完整文件
优点:无外部碎片、动态扩容灵活
缺点:仅支持顺序访问、随机访问极慢、指针损坏文件断裂
适用:日志文件、流式顺序读写文件
- 索引分配(现代主流)
原理:单独建立索引块,存放文件数据块的物理地址映射
优点:支持随机访问+顺序访问、扩容灵活、无外部碎片
缺点:索引块占用额外存储空间
细分:单索引、双索引、三级索引、混合索引(ext4核心)
3. Linux四大核心结构体(面试必考·文件系统基石)
四者层级关系:超级块 → inode → dentry → file结构体
- super_block 超级块
定位:整个文件系统全局描述符,一个分区对应一个超级块
核心存储:文件系统总大小、空闲块数量、inode总数、剩余inode、挂载信息、文件系统类型
作用:管控整个分区存储资源,文件系统挂载、初始化、检测依赖此结构
- inode 索引节点(文件本体)
定位:唯一标识一个文件,存储文件所有元数据
核心存储:文件大小、权限、UID/GID、修改时间、数据块指针、硬链接计数
核心特征:inode不存储文件名,文件名存于目录项
关键规则:inode号全局唯一,文件数据存在磁盘数据块
- dentry 目录项(路径缓存)
定位:内存缓存结构体,负责文件名→inode号映射
核心作用:加速路径解析(/a/b/c快速寻址)、缓存常用目录文件信息
优势:减少磁盘IO、大幅提升文件查找速度
特点:内存临时缓存,断电丢失,用于优化系统性能
- file 进程打开文件实例
定位:进程打开文件后,在内核创建的实例结构体
核心存储:文件读写指针、打开权限、偏移量、对应inode指针
核心特征:多进程打开同一文件,共享inode,各自私有file结构体、私有读写偏移
4. 软硬链接终极辨析(考研判断+面试高频)
4.1 硬链接(Hard Link)
-
原理:多个文件名指向同一个inode,本质是inode的别名
-
核心特性:无独立inode、不占用额外磁盘空间、硬链接计数+1
-
严格限制:不可跨磁盘分区、不可跨文件系统、不支持链接目录
-
删除规则:删除源文件仅链接计数-1,计数不为0文件不失效、数据不丢失
-
适用场景:文件备份、多路径访问同一文件
4.2 软链接 / 符号链接(Soft Link)
-
原理:创建独立inode,文件内容存储源文件的路径字符串
-
核心特性:完全独立文件、有自己的inode号和磁盘空间
-
无限制:支持跨分区、跨文件系统、支持链接目录
-
删除规则:删除源文件后,软链接失效(红链/悬空链接),无法访问数据
-
适用场景:软件版本切换、快捷方式、目录映射
4.3 极简对比口诀
硬链接同inode、同源共生、删源不崩;软链接存路径、独立文件、删源失效。
5. VFS 虚拟文件系统(核心解耦机制)
核心定义 :VFS是Linux内核的文件系统抽象层,属于内核核心子系统,不负责实际数据存储,只负责统一接口、解耦适配。
核心作用(必考)
-
统一接口:对用户提供统一的 open/read/write/close 系统调用,屏蔽底层文件系统差异
-
多文件系统兼容:同时适配 ext4、xfs、ntfs、tmpfs 等各类文件系统
-
标准化管理:统一维护 super_block、inode、dentry、file 四大结构体规范
核心价值:实现「上层接口统一、下层硬件异构」,是Linux支持多文件系统的核心基石。
6. 日志文件系统(ext4核心考点)
6.1 日志机制作用
解决断电、系统崩溃导致的文件系统元数据损坏、数据错乱、分区挂载失败问题,通过日志回放恢复文件系统一致性。
6.2 ext4三种日志模式(面试高频)
- journal 日志模式(最安全、最慢)
规则:元数据+文件数据全部写入日志,操作完成后落盘
优势:崩溃零数据损坏、一致性最高 劣势:双重写入、IO开销大、性能最差
- ordered 有序模式(ext4默认)
规则:仅元数据写日志,保证数据先落盘、再更新元数据
优势:兼顾安全与性能、杜绝数据错乱 劣势:极端断电仍可能丢失最新数据
- writeback 回写模式(最快、最不安全)
规则:仅元数据写日志,数据、元数据写入顺序无保证
优势:IO开销最小、性能最高 劣势:崩溃易出现数据覆盖、文件错乱
7. 特殊文件系统(无磁盘挂载·高频考点)
共性:不占用磁盘空间、仅存在内存、开机生成、关机清空,用于内核信息交互与设备管理
- procfs(/proc) 内核进程信息文件系统,动态展示进程PID、内存、CPU、内核参数
特点:实时动态更新、无持久化、可读写修改内核参数
- sysfs(/sys) 设备层级文件系统,标准化展示硬件设备、驱动、总线信息
作用:统一硬件管理、设备枚举、驱动适配
- tmpfs(内存文件系统) 文件存储在物理内存/Swap,读写速度极快
场景:/tmp临时目录、共享内存、临时缓存文件
特点:断电数据全部丢失,适合临时数据存储
- devtmpfs:动态生成/dev设备文件,管理硬件设备节点
8. 磁盘空闲空间管理(考研计算题考点)
-
空闲表法:记录空闲盘块起始地址与大小,适合连续分配,易产生碎片
-
空闲链表法:空闲块链式串联,分配回收简单,遍历效率低
-
位示图法(必考计算) :二进制位标记盘块空闲/占用,空间利用率极高、寻址快,现代文件系统主流
-
成组链接法(UNIX/Linux经典):分组管理空闲块,兼顾效率与空间,适配大容量磁盘
9. 文件系统高频易错总结(选择/判断秒杀)
-
inode存元数据、不存文件名,文件名唯一存在dentry
-
硬链接不新增inode,软链接新增独立inode
-
连续分配有外部碎片,索引分配无外部碎片、有少量索引开销
-
VFS不存储数据,只做抽象适配与接口统一
-
proc/sys/tmpfs均为内存文件系统,不落地磁盘
-
ext4默认ordered日志模式,平衡性能与安全
-
多进程打开同一文件,inode共享、file结构体私有、读写偏移独立
-
位示图、成组链接是磁盘空闲空间管理核心算法
五、IO设备与高性能IO(面试王牌+考研稳分)
1. IO设备核心分类与基础概念【考研选择必背】
IO系统核心定位 :实现CPU、内存与外部设备的数据交互,操作系统IO子系统负责设备管理、数据传输、IO调度、缓冲优化,解决CPU与外设速度不匹配核心矛盾。
1.1 设备分类(核心两类)
- 块设备
定义:以数据块为单位传输、支持随机寻址的存储设备
典型设备:机械硬盘HDD、固态硬盘SSD、U盘、磁盘分区
核心特征:可随机读写、速度较慢、可持久化存储、有设备缓冲区
IO特点:支持批量块传输、存在IO调度优化空间
- 字符设备
定义:以字符流为单位逐字节传输、仅支持顺序访问的设备
典型设备:键盘、鼠标、串口、显示器、打印机、终端TTY
核心特征:流式读写、无随机寻址、无固定数据块、实时性强
1.2 IO控制器核心作用
CPU不直接控制外设,通过IO控制器中转交互,核心功能:
-
缓存CPU与外设交互数据,屏蔽速度差异
-
存放设备状态、控制指令、实现硬件时序逻辑
-
触发硬件中断,通知CPUIO完成/异常事件
1.3 IO软件四层分层(从上到下)
用户层软件 → 设备独立性软件 → 设备驱动程序 → 中断处理程序
-
设备独立性软件:统一设备接口、逻辑设备映射、缓冲管理、权限校验
-
设备驱动:适配具体硬件、下发读写指令、硬件寄存器操作
-
中断处理:硬件IO完成后收尾、数据拷贝、唤醒阻塞进程
2. 四大IO传输方式(考研+面试满分对比)
演进核心逻辑:逐步解放CPU、减少CPU参与数据拷贝、提升IO并发效率
2.1 程序直接控制IO(轮询IO)
-
原理:CPU持续循环读取设备状态寄存器,直到设备就绪后读写数据
-
核心特征:CPU全程忙等、独占CPU资源、无并发
-
优点:逻辑简单、硬件依赖低
-
缺点:CPU资源极度浪费、系统并发极差
-
适用场景:早期简单系统、极低速外设
2.2 中断驱动IO
-
原理:CPU下发IO指令后转去执行其他任务,设备就绪后触发硬件中断,CPU介入完成单次数据传输
-
核心突破:告别CPU轮询,空闲时间可处理其他进程
-
短板:单次仅传输1字节/字,大数据量频繁触发中断,中断开销巨大
-
适用场景:字符设备(键盘、串口)、小数据量低速IO
2.3 DMA 直接存储器访问(块设备核心)
-
原理:DMA控制器接管数据传输,无需CPU参与数据拷贝,直接完成「外设 <-> 内存」批量数据传输
-
核心流程:CPU初始化DMA参数(内存地址、传输长度、设备地址)→ 自主传输 → 传输完成触发中断告知CPU
-
优势:CPU仅负责初始化与收尾、批量传输效率极高、大幅降低中断次数
-
短板:需要专用DMA硬件、小数据场景开销不占优
-
适用场景:磁盘、SSD等块设备大批量IO
2.4 通道IO(大型机专属考点)
-
原理:独立硬件通道处理器,专门负责IO管控,比DMA更高级,可自主控制多设备并发IO
-
分类:字节多路通道、数组多路通道、选择通道
-
场景:大型服务器、大型机系统,个人PC/Linux服务器无应用
2.5 四大IO方式终极对比(必背)
-
CPU占用:轮询IO > 中断IO > DMA > 通道IO
-
传输效率:通道IO > DMA > 中断IO > 轮询IO
-
数据粒度:轮询/中断(单字节)、DMA/通道(批量块)
3. 同步/异步 & 阻塞/非阻塞(面试高频辨析)
核心区分维度:同步异步看消息通知机制,阻塞非阻塞看线程是否挂起
3.1 阻塞IO(默认IO模型)
-
逻辑:线程发起IO后主动挂起、释放CPU,全程阻塞直至IO完成/失败
-
优点:节省CPU资源、代码逻辑简单
-
缺点:单线程只能处理单个IO、无法并发处理多连接
3.2 非阻塞IO
-
逻辑:发起IO后立即返回,未就绪则返回错误码,线程不挂起、可循环重试
-
优点:线程不阻塞、可轮询处理多个IO事件
-
缺点:空轮询消耗CPU、资源浪费严重
3.3 同步IO vs 异步IO
-
同步IO :用户线程主动等待IO结果(阻塞/非阻塞轮询均属于同步),内核完成后主动拷贝数据至用户空间
-
异步IO(AIO) :用户线程发起IO后直接返回,无需等待,内核完成IO后通过信号/回调通知用户线程,全程用户态无等待
3.4 四类IO模型最简总结
阻塞同步:等到底;非阻塞同步:轮询等;IO多路复用:统一监听批量等;异步IO:不用等、回调通知。
4. IO多路复用(后端面试王牌核心)
核心价值 :单线程通过内核监听机制,批量监听大量文件描述符IO事件,解决「单线程IO阻塞、多线程高开销」的并发痛点,是高并发服务器底层基石。
4.1 select/poll(基础模型)
-
select 特点:监听读写异常三类事件、有最大文件描述符上限(1024)、每次调用需重置监听集合 短板:内核遍历所有fd、时间复杂度O(n)、用户态内核态频繁拷贝fd集合
-
poll 优化:取消1024文件描述符上限、事件与fd解耦 短板:依然全量遍历、O(n)时间复杂度、高并发性能差
4.2 epoll(Linux高性能终极方案)
-
核心机制:事件驱动+就绪通知,仅返回就绪文件描述符,时间复杂度O(1)
-
核心数据结构:红黑树(存储监听fd)、就绪链表(存储就绪事件)
-
两大触发模式(必考辨析)
LT水平触发(默认) :只要fd有未处理IO数据,每次epoll监听都会持续触发,容错高、编程简单 ET边缘触发(高性能) :仅在IO状态首次变化瞬间触发一次,必须搭配非阻塞IO、一次性读完数据,极致性能、编程严格
4.3 三大多路复用对比(面试默写版)
-
性能:epoll > poll > select(高并发场景差距极大)
-
上限:select有限、poll/epoll无上限
-
原理:select/poll全量轮询、epoll事件驱动
-
场景:低并发select/poll、高并发服务器必用epoll
5. 零拷贝技术(高性能IO核心·面试必考)
传统IO痛点 :read+write流程存在用户态<->内核态多次数据拷贝 、频繁态切换,IO开销极高。零拷贝核心:减少/消除用户内核态数据拷贝、降低态切换开销。
5.1 mmap 内存映射
-
原理:将磁盘文件内核缓冲区直接映射到用户态虚拟地址空间,用户态直接读写内核内存,无需拷贝
-
优化:减少一次内核→用户数据拷贝
-
场景:大文件读写、进程内存共享、大数据解析
5.2 sendfile 系统调用(经典零拷贝)
-
原理:数据全程在内核态传输,不经过用户态,直接完成磁盘文件→内核缓冲区→网卡/磁盘传输
-
优势:无用户态拷贝、态切换次数减半、传输效率极高
-
限制:仅支持文件到文件/网络传输,无法修改数据
-
场景:Nginx静态资源传输、文件服务器
5.3 splice/tee 管道零拷贝
-
基于管道缓冲区转发数据,无需内存拷贝,适配流式IO转发
-
场景:流媒体转发、日志流式传输
5.4 DMA辅助零拷贝
硬件级优化,DMA直接完成外设与内存数据传输,CPU全程不参与数据搬运,极致释放CPU算力。
6. 中断体系与IO下半部(内核工程考点)
IO设备就绪后触发硬件中断,内核通过上半部+下半部拆分处理,平衡实时性与性能。
6.1 中断上半部(硬中断)
-
核心工作:快速响应硬件、读取设备状态、清空中断标志
-
约束:执行极快、逻辑极简、禁止睡眠、禁止阻塞
6.2 中断下半部(软中断/异步处理)
-
软中断:优先级高、不可睡眠、常驻内核、处理高频短时任务(网络收发、定时器)
-
tasklet:基于软中断实现、单次执行、不可重入、轻量异步任务
-
workqueue工作队列 :唯一可睡眠的下半部机制,适配耗时IO收尾任务,交由内核线程执行
6.3 核心约束(易错必背)
中断上下文:无进程上下文、不可睡眠、不可调度、不可阻塞;仅workqueue可处理耗时任务。
7. 块设备IO调度算法(Linux磁盘IO核心)
核心作用:合并、排序离散IO请求,减少磁盘寻道时间,适配机械盘/SSD不同硬件特性。
- noop 空调度
规则:不排序、不合并、直接放行IO请求
适配:SSD固态硬盘(无机械寻道、随机IO快) 优势:开销最小、性能最优
- deadline 截止时间调度(机械盘默认)
规则:IO请求排序+超时机制,防止请求饥饿
优势:兼顾吞吐与延迟、读写均衡
适配:机械硬盘HDD、通用块设备
-
kyber 均衡调度 精细化控制读写队列延迟,适配混合负载、兼顾低延迟与高吞吐
-
mq多队列调度 多核CPU多队列并行处理IO,消除单核队列瓶颈,适配多核高性能服务器
8. 缓冲技术(解决速度不匹配·考研考点)
核心意义:消解CPU、内存、外设三者速度差,减少频繁设备访问、提升IO吞吐、降低中断开销。
-
单缓冲:单次缓存一块数据,CPU与设备串行工作
-
双缓冲:双块缓存交替工作,CPU与设备可并行传输,效率提升
-
循环缓冲:多缓冲区环形复用,适配连续流式IO(日志、视频)
9. 高性能IO终极易错总结(选择/面试秒杀)
-
块设备随机访问、字符设备顺序流式访问
-
DMA解放CPU,适合批量块IO;中断IO适合小数据字符IO
-
同步异步看通知,阻塞非阻塞看线程挂起
-
epoll ET边缘触发必须非阻塞,LT水平触发可阻塞
-
零拷贝核心:消除用户内核态数据拷贝,降低态切换开销
-
中断上下文不可睡眠,仅工作队列可处理耗时任务
-
SSD用noop调度、机械盘用deadline调度
-
IO多路复用实现单线程高并发,是web服务器底层核心
六、中断、异常、系统调用
1. 三者区别
-
中断:外部硬件触发,异步
-
异常:CPU指令错误,同步(缺页、除零)
-
系统调用:用户主动陷入内核,主动服务请求
2. 异常三类(考研/面试满分完整版)
异常是CPU执行指令时触发的同步错误/陷阱事件,指令执行必然触发、可复现,分为 Fault(故障)、Trap(陷阱)、Abort(终止)三类,三者触发时机、处理逻辑、运行结果完全不同,是高频辨析考点。
2.1 Fault 可修复故障
-
核心特征 :指令执行过程中 触发异常,故障可修复,修复完成后重新执行当前出错指令
-
核心逻辑:指令执行一半出错 → 内核处理修复异常 → 回到该指令从头执行,程序可正常推进
-
经典必考示例 :缺页异常(虚拟内存核心)、内存访问权限临时失效、页表未加载
-
运行结果:异常修复后程序无感知,正常继续运行,不会退出
2.2 Trap 陷阱(主动触发)
-
核心特征 :指令执行完成后触发异常,属于主动陷入内核的陷阱事件,无需重执行当前指令,直接执行后续内核处理逻辑
-
核心逻辑:指令正常执行完毕 → 触发陷阱事件 → 跳转内核处理函数 → 返回执行下一条用户指令
-
经典必考示例 :系统调用(int 0x80、svc指令)、断点调试、程序跟踪
-
运行结果:可控主动跳转,用于请求内核服务,程序正常运行
2.3 Abort 致命终止错误
-
核心特征 :严重硬件/程序致命错误,无法修复、无法重试,直接终止进程
-
核心逻辑:出现不可恢复异常 → 内核直接判定进程异常 → 回收资源、终止进程,无指令重试、无后续执行
-
经典必考示例:硬件奇偶校验错误、非法指令、栈溢出严重越权、除零错误、总线异常
-
运行结果:进程崩溃、终止退出,产生core dump日志,无法恢复执行
2.4 三类异常终极辨析口诀(秒杀判断题)
-
Fault故障:执行中出错、可修复、重试当前指令(缺页)
-
Trap陷阱:执行完触发、主动陷核、执行下条指令(系统调用)
-
Abort终止:致命错误、不可修、直接干掉进程(崩溃退出)
2.5 高频易错考点
-
- 系统调用本质是Trap陷阱异常,属于同步主动陷入
-
- 缺页异常是典型Fault,也是操作系统最频繁的异常
-
- 中断异步、异常同步,三类异常均为CPU指令同步触发
-
- 只有Abort会导致进程终止,Fault、Trap均可让程序正常运行
3. 系统调用(考研+面试核心满分版)
3.1 核心标准定义
系统调用(Syscall) :是用户态进程主动陷入内核态、请求内核服务的唯一合法入口,是操作系统为应用程序提供的标准化内核服务接口。用户程序无法直接操作硬件、访问内核资源,必须通过系统调用委托内核完成,实现用户态与内核态的安全交互与权限隔离。
核心本质 :属于Trap陷阱异常,是同步、主动的内核陷入机制,执行完成后返回下一条用户指令,不重复执行当前指令。
3.2 核心作用(必背)
-
权限隔离:严格管控用户态越权操作,所有硬件、内核资源操作统一由内核校验执行,保障系统安全稳定
-
功能复用:内核封装通用底层服务(IO、进程、内存管理),应用无需重复实现底层逻辑
-
软硬件解耦:向上为应用提供统一接口,向下屏蔽硬件差异,适配多硬件平台
-
资源统一管理:内核统一调度系统资源,避免多进程资源竞争冲突
3.3 系统调用五大分类(Linux标准)
- 进程控制类:进程创建、终止、等待、权限设置
核心函数:fork()、vfork()、clone()、exit()、wait()、getpid()
- 文件操作类:文件读写、打开关闭、权限、目录操作
核心函数:open()、read()、write()、close()、mkdir()、chmod()
- 设备管理类:设备读写、控制、状态获取
核心函数:ioctl()、read()、write()(设备文件通用)
- 内存管理类:虚拟内存映射、扩容、地址调整
核心函数:mmap()、munmap()、brk()
- 网络/通信类:进程通信、网络传输
核心函数:socket()、connect()、send()、recv()、shmget()
3.4 系统调用完整触发流程(面试深度必背)
用户态程序调用glibc库函数 → 触发陷入指令(x86:int 0x80 / syscall;ARM:svc) → 触发Trap陷阱异常 → 保存用户态上下文(寄存器、PC、栈指针) → 权限切换至内核态 → 内核根据系统调用号匹配对应服务函数 → 执行内核逻辑、完成资源操作 → 保存返回结果 → 恢复用户态上下文 → 退回用户态继续执行
核心关键点 :每个系统调用对应唯一系统调用号,内核通过调用号索引系统调用表,精准匹配服务函数。
3.5 库函数 & 系统调用 终极辨析(高频易错)
-
层级关系:用户程序 > glibc库函数(用户态) > 系统调用(内核态)
-
核心区别:
-
库函数运行在用户态,部分库函数无系统调用(如字符串处理strcpy);
-
系统调用运行在内核态,是底层真正实现功能的接口;
-
一个库函数可封装多个系统调用,一个系统调用可被多个库函数调用。
- 举例:printf()(库函数)底层封装write()(系统调用)
3.6 系统调用核心特性(必背考点)
-
唯一性 :用户态进入内核态请求系统服务的唯一合法入口
-
被动服务性:内核不主动执行系统调用,仅响应用户进程的主动请求
-
同步性:属于同步陷阱异常,指令执行完成后触发,可复现
-
可阻塞性:部分系统调用(read/write)可触发进程阻塞,释放CPU
3.7 安全拓展机制(面试高频)
-
seccomp 系统调用过滤:内核安全机制,可拦截、禁用进程的非法系统调用,限制进程权限,容器、沙箱核心安全依托
-
ptrace 系统调用跟踪:支持跟踪进程的系统调用行为,调试器(gdb)底层依托,可篡改调用参数、拦截调用
3.8 高频易错终极总结
-
- 系统调用 ≠ 库函数,库函数是用户态封装,系统调用是内核态实现
-
- 本质是Trap陷阱,不是中断、不是Fault故障
-
- 所有用户态硬件、内核资源操作,必须通过系统调用
-
- 系统调用会触发用户态→内核态切换,存在少量性能开销
-
- 无系统调用权限,用户进程无法独立完成IO、进程创建等核心操作
七、Linux内核高频考点(工程面试专属·满分完整版)
1. 信号机制(用户态与内核态异步通信)
1.1 信号核心分类与特性
-
不可靠信号(1~31) :早期标准信号,不支持排队、易丢失,多次触发仅保留一次,无阻塞队列记录,默认处理方式单一(终止/忽略)。典型:SIGINT、SIGKILL、SIGSEGV、SIGALRM。
-
可靠信号(32~64) :实时信号,支持排队、不丢失,内核维护信号等待队列,可携带自定义数据,精准响应多次触发事件,优先级高于不可靠信号。
1.2 信号核心内核结构
-
pending 未决信号集:标记已触发、尚未被进程处理的信号,位图存储,信号触发后置位,处理完成清零。
-
mask 信号屏蔽集:进程主动屏蔽的信号,被屏蔽的信号触发后进入未决队列,暂不处理,解除屏蔽后响应。
-
handler 处理函数:三种处理方式:默认处理、忽略处理、用户自定义回调函数。
1.3 信号处理核心规则(面试高频)
-
信号处理函数必须可重入,禁止调用不可重入函数(如malloc、printf),防止递归调用崩溃。
-
SIGKILL、SIGSTOP 不可屏蔽、不可忽略、不可自定义处理,是系统强制管控进程的终极信号。
-
信号处理时机:进程从内核态返回用户态瞬间,检测并处理未决信号,不占用内核核心执行流程。
2. 内核同步机制(并发安全核心)
2.1 自旋锁 SpinLock(极简高频)
-
核心特性:忙等不释放CPU,循环轮询抢锁,无上下文切换开销。
-
适用场景:内核短临界区、持有锁时间极短、中断上下文。
-
硬性禁忌:锁内禁止睡眠、禁止阻塞、禁止主动放弃CPU,否则死锁。
2.2 互斥锁 Mutex
-
核心特性:阻塞等待、释放CPU,抢锁失败进程进入睡眠队列,无CPU空转浪费。
-
核心规则:谁加锁谁解锁、不可重复解锁、支持进程睡眠等待。
-
适用场景:长临界区、可能触发阻塞的内核逻辑、用户态同步底层依托。
2.3 读写锁 RWLock
-
核心规则:读共享、写互斥、读写互斥,高读低写场景并发拉满。
-
分类:公平读写锁、写优先读写锁(解决写者饥饿)。
2.4 RCU 读-复制-更新(超高并发神器)
-
核心原理:读无锁、写延迟更新,读操作零开销,写操作复制新数据、等待所有读操作结束后回收旧数据。
-
核心优势:极致读并发、无锁竞争、适配海量读少写场景。
-
适用场景:内核路由表、设备树、进程链表、容器配置等高频读低频写场景。
2.5 信号量 Semaphore
-
核心能力:兼顾同步与互斥,初值=1为互斥,初值>1为资源同步。
-
特性:支持阻塞等待、无忙等,适配多进程多资源并发管控。
3. 容器底层核心(Namespace+Cgroup 面试必背)
3.1 Namespace 六大资源隔离(容器隔离基石)
-
PID Namespace:隔离进程PID编号,容器内进程PID独立,宿主机可感知真实PID,实现进程隔离。
-
UTS Namespace:隔离主机名、域名,容器可独立设置主机名,不影响宿主机。
-
Mount Namespace:隔离文件系统挂载点,容器拥有独立挂载树,互不干扰。
-
Network Namespace:隔离网络栈,独立网卡、IP、路由表、端口,容器网络完全隔离。
-
IPC Namespace:隔离进程间通信资源,信号量、共享内存、消息队列仅容器内可见。
-
User Namespace:隔离用户权限,容器内root可映射宿主机普通用户,实现权限降级、安全隔离。
3.2 Cgroups 资源限制(容器限流核心)
-
CPU Cgroup:限制CPU使用率、权重、核心绑定,防止容器抢占整机CPU。
-
Memory Cgroup:限制内存、Swap使用上限,触发OOM精准杀死超限容器,保护整机内存。
-
Blkio Cgroup:限制磁盘读写IO带宽、IO权重,避免单容器打满磁盘IO。
-
Pid Cgroup:限制容器最大进程数,防止fork炸弹耗尽系统PID资源。
3.3 容器核心本质(面试口述金句)
容器不是虚拟机,无独立内核,是基于Linux内核Namespace隔离+Cgroups资源限制+镜像文件系统实现的轻量化进程隔离环境,共享宿主机内核,开销远低于虚拟机。
4. 内核抢占机制(实时系统核心)
4.1 三种内核抢占模式
-
非抢占内核(默认通用版):内核态执行期间不可被任何进程抢占,仅返回用户态可调度,稳定性高、响应延迟高。
-
可抢占内核(实时优化版):内核态临界区外可被高优先级进程抢占,大幅降低调度延迟,适配实时业务。
-
完全抢占内核:所有内核逻辑均可抢占,极致低延迟,工业实时系统专属。
4.2 抢占核心禁忌
中断上下文、自旋锁保护的临界区、RCU读区间禁止抢占,保证内核并发安全。
5. 内核进程调度与上下文(面试高频辨析)
5.1 两大上下文核心区别
-
进程上下文:依附用户进程,可睡眠、可阻塞、可调度,处理系统调用、进程异常、文件IO等耗时逻辑。
-
中断上下文 :无进程依附、无独立栈、禁止睡眠、禁止阻塞、禁止调度,仅快速处理硬件中断、清零设备状态。
5.2 内核线程特性
-
无用户态地址空间、无虚拟内存,仅运行内核代码,常驻内核。
-
典型内核线程:kthreadd(内核线程管理)、kswapd(内存回收)、pdflush(刷盘)、workqueue工作线程。
6. 内核内存泄漏与排查(工程实战)
**内核内存分配:**kmalloc(物理连续)、vmalloc(虚拟连续物理不连续)、slab缓存(小对象复用)。
**泄漏根源:**内核分配内存后未主动释放、异常路径遗漏释放逻辑。
**排查工具:**slabtop、meminfo、kmemleak(内核内存泄漏检测工具)。
7. 内核崩溃与OOM机制(实战高频)
-
OOM Killer 触发逻辑:物理内存+Swap耗尽,内核无法分配内存,基于oom_score打分,优先杀死内存占用大、优先级低、非核心进程。
-
panic 内核崩溃:内核致命异常、非法指针、死锁、硬件错误导致系统卡死,需查看core dump、dmesg日志定位。
-
kdump 崩溃捕获:内核崩溃时自动保存内存快照,用于事后分析崩溃原因。
8. 内核启动与初始化精简考点
-
内核启动核心流程:解压内核 → 初始化MMU虚拟内存 → 初始化调度器/内存/中断子系统 → 挂载根文件系统 → 启动1号进程systemd。
-
initramfs作用:临时根文件系统,适配磁盘驱动未加载阶段,保障内核正常启动。
9. 内核高频易错终极总结(面试秒杀)
-
- 自旋锁忙等无休眠,mutex阻塞休眠,中断上下文只用自旋锁
-
- 信号处理在用户态返回时执行,中断处理在内核态实时执行
-
- 容器隔离靠Namespace,资源限流靠Cgroups,二者缺一不可
-
- 中断上下文不可睡眠,工作队列是唯一可睡眠的中断下半部
-
- RCU读无锁超高并发,适配读多写少内核场景
-
- 可抢占内核降低调度延迟,是实时Linux核心特性
-
- 可靠信号支持排队,不可靠信号易丢失
八、操作系统安全(考研选择+面试工程安全·满分完整版)
1. 操作系统安全核心目标(必背)
操作系统安全是计算机系统安全的底层基石,核心四大目标:保密性、完整性、可用性、可控性。通过权限管控、资源隔离、访问校验、漏洞防护等机制,防止非法访问、数据篡改、权限越界、系统入侵、资源滥用等安全风险,保障软硬件资源与用户数据安全。
2. Linux权限体系(基础核心·必考)
2.1 基础身份权限 UID/GID
- UID(用户ID):唯一标识系统用户,区分进程运行身份权限
root用户:UID=0,系统最高超级权限
普通用户:UID≥1000,受限权限
系统用户:UID1-999,专供系统服务进程运行
-
GID(组ID):用户所属用户组标识,用于批量管控组内用户权限,简化权限配置
-
核心规则:进程默认继承启动用户的UID/GID,文件权限绑定属主UID、属组GID
2.2 文件基础权限 rwx(ugo模型)
权限分为三类主体:u(属主)、g(属组)、o(其他用户),对应读(r)、写(w)、执行(x)权限
- 文件权限含义
r:读取文件内容、查看数据
w:修改、写入、截断文件内容
x:执行二进制程序/脚本,无x权限无法运行程序
- 目录权限含义(高频易错)
r:查看目录内文件名列表
w:新增、删除、重命名目录内文件(核心:目录写权限控制文件删除,非文件本身)
x:进入目录、访问目录内文件、路径寻址(无x权限,r权限无效)
2.3 特殊权限位(面试高频)
- SUID 临时提权(用户特殊位)
作用:普通用户执行该程序时,临时继承文件属主权限(典型:passwd命令,普通用户可改自身密码)
核心特性:仅对二进制可执行文件生效、脚本无效、运行时临时提权、存在权限溢出风险
- SGID 组提权(组特殊位)
文件层面:执行程序临时继承文件属组权限
目录层面:目录内新建文件自动继承目录属组,实现团队权限统一
- Sticky 粘滞位(目录专属)
作用:公共目录权限隔离,目录内文件仅文件属主/root可删除,其他用户无法篡改删除他人文件 典型场景:/tmp临时目录,保障多用户公共目录数据安全
3. 最小权限进阶
3.1Capability权限细分(面试核心)
核心痛点:传统root权限是超级全能权限,一旦提权完全失控,权限粒度太粗、安全风险极高。
Capability核心作用 :拆分root超级权限,将内核顶级权限拆解为数十项独立细粒度权限,实现最小权限原则,普通用户可单独授予某项特权,无需完整root权限。
3.2 常用核心Capability
CAP_NET_BIND_SERVICE:普通用户绑定1024以下特权端口
CAP_SYS_RESOURCE:突破系统资源限制
CAP_CHOWN:修改文件属主属组权限
CAP_SYS_PID:遍历、操作所有进程
工程价值:容器、微服务、应用程序权限收紧的核心手段,杜绝过度授权,降低权限泄露风险
4. 两大安全访问控制模型(考研必考)
4.1 DAC 自主访问控制(Linux默认)
-
核心定义:资源属主自主决定文件/资源的访问权限,权限完全由所有者管控、自主分配
-
实现方式:ugo基础权限、ACL访问控制列表
-
优点:灵活、易用、适配通用系统
-
缺陷:自主可控、无强制约束,一旦进程沦陷可随意授权、扩散风险,安全性较弱
4.2 MAC 强制访问控制(高安全系统)
-
核心定义 :系统强制管控所有资源访问权限,用户/进程无权修改权限规则,由系统统一制定安全策略
-
核心机制:为主体(进程/用户)、客体(文件/设备)配置安全级别标签,依据标签匹配规则放行/拦截访问
-
典型实现:SELinux(Linux)、AppArmor
-
优点:安全性极高、杜绝权限滥用、防止恶意提权与越权访问
-
缺陷:配置复杂、运维成本高、性能有轻微损耗
-
适用场景:服务器、容器、政务、工业等高安全刚需场景
5. 系统安全防护机制(面试工程高频)
5.1 进程安全隔离机制
-
用户态/内核态权限隔离:核心安全屏障,杜绝用户进程直接操作内核与硬件,防止越权破坏系统
-
虚拟地址空间隔离:进程独立虚拟内存,禁止跨进程非法读写,防止内存注入、数据窃取
-
容器隔离(Namespace+Cgroup):轻量化资源隔离与权限限制,实现进程级安全沙箱
5.2 内核安全加固机制
-
seccomp 系统调用过滤:拦截禁用进程非法系统调用,限制进程内核交互权限,沙箱、容器核心防护手段
-
ASLR 地址随机化:进程虚拟地址随机生成,防御缓冲区溢出、内存地址爆破攻击
-
NX 不可执行位:数据段内存禁止执行代码,阻止恶意注入代码运行
-
Canary 栈金丝雀:栈底校验值,检测栈溢出篡改,防御栈溢出攻击
5.3 沙箱安全机制
沙箱是受限运行隔离环境,通过权限收紧、系统调用过滤、资源限制,隔离不可信程序,防止恶意程序窃取数据、破坏系统、横向扩散,典型应用:浏览器沙箱、容器沙箱、程序编译运行沙箱。
6. 系统入侵与风险防护(实战考点)
-
权限溢出风险:SUID权限滥用、Capability过度授权、内核漏洞导致提权
-
防护方案:关闭无用特殊权限、最小化Capability授权、定期内核补丁更新
-
进程劫持风险:ptrace调试劫持、内存篡改、进程注入
-
数据泄露风险:权限过宽、临时文件未清理、内核内存信息泄露
7. 操作系统安全终极总结(选择/面试秒杀)
-
基础安全依托:UID/GID身份 + rwx权限 + 特殊权限位
-
精细权限依托:Capability拆分root超级权限,实现最小授权
-
自主安全DAC灵活可控,强制安全MAC刚性防护、安全性更高
-
内核防护四大核心:ASLR、NX、Canary、seccomp
-
目录w权限控制文件删除,x权限控制目录进入与寻址
-
SUID临时提权、粘滞位保护公共目录数据安全
-
沙箱与容器隔离是现代轻量化系统安全核心方案
九、经典计算题考点(考研必考·满分公式+步骤完整版)
本章节汇总操作系统考研所有高频计算题题型,包含核心公式、标准解题步骤、真题易错点、特殊规则,背诵即可直接套用考场真题,全覆盖无遗漏。
1. 进程调度指标计算(必考第一题)
1.1 四大核心公式(默写满分版)
-
周转时间 = 进程完成时间 − 进程到达时间
-
带权周转时间 = 周转时间 / 进程实际运行时间(服务时间)
-
等待时间 = 周转时间 − 运行时间 = 就绪等待总时长
-
响应时间 = 首次开始运行时间 − 进程到达时间(分时系统核心指标)
1.2 平均指标计算规则
平均周转时间/平均带权周转时间/平均等待时间 = 所有进程对应指标求和 / 进程总数
1.3 各算法计算易错点
-
FCFS:严格按到达顺序,无抢占,短进程等待长进程
-
SJF非抢占:一旦运行至结束,优先选到达且运行时间最短进程
-
SRT抢占式:新进程到达,对比剩余运行时间,短者抢占CPU
-
RR时间片轮转:时间片耗尽强制切换,未完成进程重回就绪队列
2. 银行家算法(死锁避免·大题必考)
2.1 四大核心矩阵
-
Max:进程最大资源需求矩阵
-
Allocation:进程已分配资源矩阵
-
Need:进程剩余资源需求矩阵 Need = Max − Allocation
-
Available:系统当前剩余可用资源向量
2.2 安全序列判定标准步骤(考场标准流程)
步骤1:计算所有进程Need矩阵;
步骤2:遍历所有进程,筛选出 Need ≤ Available 的进程;
步骤3:该进程执行完毕,释放已分配资源,Available = Available + Allocation;
步骤4:重复筛选遍历,若所有进程均可执行完毕,存在安全序列,系统安全;否则死锁风险。
2.3 资源请求预判算法
进程请求资源Request:
-
若 Request > Need:非法请求,报错拒绝;
-
若 Request > Available:资源不足,进程阻塞等待;
-
预分配:Available -= Request、Allocation += Request、Need -= Request;
-
校验系统是否安全,安全则正式分配,不安全则撤销预分配。
3. 页面置换与缺页率计算(内存管理核心计算)
3.1 核心公式
-
缺页率 = 缺页中断次数 / 总页面访问次数 × 100%
-
命中率 = 1 − 缺页率
3.2 四大置换算法计算规则+特性
-
FIFO先进先出 :按页面进入内存顺序置换,唯一存在Belady异常(内存块数增加,缺页率反而上升)
-
OPT最优置换:置换未来最久不使用的页面,缺页率最低,无异常,仅理论存在
-
LRU最近最少使用:置换最近最久未访问页面,无Belady异常,工程常用、考研重点
-
Clock时钟算法:利用访问位循环扫描,模拟LRU,计算简单、开销低
3.3 必考易错点
初始内存为空时,首次访问页面均触发缺页;所有置换算法均默认页大小固定、单次访问一个页面。
4. 内存地址转换+碎片计算(分页/分段)
4.1 分页存储地址转换(高频计算)
已知:逻辑地址、页大小、页表映射关系
-
页号 = 逻辑地址 / 页面大小(整除)
-
页内偏移 = 逻辑地址 % 页面大小(取余)
-
物理块号由页表查询,物理地址 = 物理块号 × 页面大小 + 页内偏移
4.2 多级分页计算
按地址位数拆分各级页号+页内偏移,逐级查表,最终拼接物理地址;
核心:页内偏移位数由页大小唯一决定。
4.3 内存碎片计算
-
固定分区/分页 :无外部碎片,存在内部碎片(页面未占满空间)
-
动态分区/分段 :无内部碎片,存在外部碎片(空闲小分区无法利用)
-
碎片率 = 总空闲碎片大小 / 总内存大小 × 100%
5. 磁盘调度与IO时间计算
5.1 磁盘访问总时间公式(必考)
磁盘总访问时间 = 寻道时间 + 旋转延迟 + 传输时间
-
寻道时间:磁头移动到目标磁道时间(调度算法核心优化项)
-
旋转延迟:磁盘旋转到目标扇区时间(平均取半圈时间)
-
传输时间:读写数据耗时,与数据量、磁盘转速正相关
5.2 四大磁盘调度算法磁道顺序
-
FCFS:按请求到达顺序访问,无优化、寻道距离最大
-
SSTF最短寻道:优先访问当前磁头最近磁道,寻道最优、易饥饿
-
SCAN电梯算法:单向扫到底再折返,无饥饿、寻道均衡
-
C-SCAN循环电梯:单向扫描,到头直接回到起点,适配均匀访问场景
5.3 计算规则
总寻道长度 = 所有相邻磁道移动距离绝对值之和;平均寻道长度 = 总寻道长度 / 请求次数
6. 磁盘空闲空间管理计算(位示图/成组链接)
6.1 位示图法核心计算(必考)
位示图大小:总盘块数 / 8 (字节为单位) 盘块号与位坐标转换:已知(i,j)行列坐标,盘块号 = i×每行位数 + j;反向可由盘块号推导行列坐标。
6.2 成组链接法计算规则
分组存储空闲盘块号,每组最后一块存储下一组信息;分配从当前组末尾取块,回收按组链接,计算核心:组内块数、空闲块总数统计。
7. 缓冲区IO时间计算(单缓冲/双缓冲)
7.1 核心公式
-
单缓冲:单块数据传输总时间 = max(设备读时间, CPU处理时间) + 数据传输时间
-
双缓冲:设备与CPU可并行,总时间大幅缩短,高吞吐场景近似等于设备读写时间
7.2 批量数据计算规则
多块连续数据传输:首块耗时完整流程,后续块可并行重叠,整体时间趋近于硬件极限吞吐耗时。
8. 死锁资源上限计算(高频选择/填空)
8.1 死锁临界条件公式
设:进程数n,单进程最大资源需求k,总资源数m
死锁临界值:n×(k−1) (所有进程均持有最大缺1资源)
无死锁最小资源数:n×(k−1) + 1
8.2 解题口诀
每个进程先拿k-1,再加1资源,绝对无死锁。
十、易混易错终极总结
-
资源分配最小单位:进程;CPU调度最小单位:线程,线程共享进程地址空间,仅栈资源私有。
-
共享内存是速度最快的IPC(无多余数据拷贝),匿名管道是最简单IPC、仅限亲缘进程通信,Socket是唯一跨主机IPC。
-
页面置换算法:FIFO独有Belady异常(内存块增多、缺页率上升),OPT、LRU、Clock均无异常,OPT仅理论最优不可实现。
-
特殊进程辨析:僵尸进程残留PCB、造成资源泄露(子退父未回收);孤儿进程父进程先退出,被1号进程收养,无资源危害。
-
epoll触发模式:ET边缘触发必须搭配非阻塞IO、一次性读完数据,LT水平触发可阻塞、容错性更高,是默认模式。
-
中断上下文硬性约束:不可睡眠、不可阻塞、不可调度、不能持有自旋锁睡眠,仅workqueue工作队列可处理耗时中断收尾任务。
-
死锁策略:Linux通用系统默认采用鸵鸟策略,忽略极低概率死锁,优先保障系统性能。
-
fork核心机制:COW写时复制是fork高效的根本,仅复制页表、不复制物理页,写入数据时才触发拷贝。
-
态切换辨析:用户态绝对无法直接操作硬件,硬件操作、内核资源访问必须通过系统调用陷入内核;态切换≠进程切换,开销远小于进程切换。
-
同步互斥禁忌:生产者消费者问题必须先P同步、后P互斥,顺序颠倒必然引发死锁;互斥锁仅做互斥,信号量可同步可互斥。
-
进程状态转换禁忌:就绪态不能直接阻塞、阻塞态不能直接运行、新建态不能直接运行,是考研判断高频错题点。
-
调度算法特性:SJF短作业优先平均周转时间最优、吞吐量最高,但存在长进程饥饿;多级反馈队列是通用OS综合最优算法,无需预知进程运行时间。
-
IO模型核心区分:同步异步看消息通知机制,阻塞非阻塞看线程是否挂起;阻塞/非阻塞均属于同步IO,异步IO(AIO)无需用户线程等待结果。
-
零拷贝核心本质:减少用户态与内核态之间的数据拷贝、降低态切换开销,并非完全零拷贝,内核态内部数据传输依然存在。
-
异常三类辨析:Fault故障(执行中出错、可修复、重试当前指令,如缺页);Trap陷阱(执行后触发、主动陷核,如系统调用);Abort致命错误(不可修复、直接终止进程)。
-
中断与异常区别:中断是硬件触发、异步随机 ;异常是CPU指令触发、同步可复现,系统调用属于Trap异常而非中断。
-
库函数与系统调用:库函数运行在用户态,部分无内核调用(如字符串处理);系统调用是内核态唯一服务入口,一个库函数可封装多个系统调用。
-
信号核心考点:1~31不可靠信号不排队、易丢失,32~64可靠实时信号支持排队;SIGKILL、SIGSTOP不可屏蔽、不可忽略,是系统强制管控信号。
-
内核锁场景适配:中断上下文只能用自旋锁(忙等无休眠、无上下文切换);用户态/长临界区用Mutex互斥锁(阻塞释放CPU)。
-
容器核心本质:容器无独立内核,依托Namespace实现资源隔离、Cgroups实现资源限流,是轻量化进程隔离,与虚拟机完全不同。
-
内存碎片辨析:分页、固定分区无外部碎片、有内部碎片 ;分段、动态分区无内部碎片、有外部碎片。
-
磁盘调度适配:SSD无机械寻道,适配noop空调度算法;机械硬盘HDD默认deadline调度,兼顾吞吐与延迟。
-
文件目录权限易错:目录w权限控制文件删除/重命名,x权限控制目录进入与路径寻址,无x权限则r权限无效。
-
安全模型辨析:DAC自主访问控制(Linux默认,用户自主授权、灵活但安全性弱);MAC强制访问控制(系统强制规则、高安全、配置复杂)。
-
死锁四大条件:仅同时满足四大条件才会死锁,满足1-3条仅会产生进程饥饿,无死锁;破坏任意一条即可杜绝死锁。
-
系统启动核心分界:1号进程启动、内核态转用户态是系统内核初始化完成、进入用户环境的核心标志。
-
虚拟内存核心:MMU分页机制是现代OS虚拟内存的基础,未开启分页则无虚拟内存、无地址翻译、无权限隔离。
-
缓冲区作用:单缓冲CPU与设备串行,双缓冲可并行执行,循环缓冲适配流式连续IO场景,核心是消解软硬件速度差。
-
内核上下文区分:进程上下文可睡眠、可阻塞、可调度;中断上下文无进程依附,绝对禁止睡眠与调度。
-
OOM机制:内存耗尽时,内核依据oom_score打分,优先杀死内存占用大、优先级低的用户进程,保护系统核心进程。