操作系统原理

进阶预计进阶 2-3 个月

星团 基础

学习定位零前置,可直接入门→ 操作系统原理 →并发编程MySQL/InnoDB

岗位需求

2 核心 · 0 加分

在职岗位将其列为技能要求

核心岗位薪资带

18k-60k

核心要求岗位的月薪区间

需求趋势

上升 0稳定 2收缩 0

核心要求岗位的趋势分布

面试题库

高频真题 · 参考答案随题展开
1. 进程与线程的区别是什么?协程为什么更轻量?

进程是资源分配的基本单位,拥有独立虚拟地址空间、文件描述符表与 PCB;线程是 CPU 调度的基本单位,同进程内线程共享地址空间与全局数据,仅私有栈、寄存器与线程局部存储,因此创建切换成本低、通信方便但要同步保护共享资源。协程是用户态调度的执行单元,切换只需保存少量寄存器而不陷入内核,无需系统调用与上下文切换开销,单线程内可承载百万级协程,且切换时机确定,避免锁竞争;代价是阻塞式系统调用会卡住整线程,需配合非阻塞 IO 或把重计算放到线程池。答出「资源与调度两个视角」加调度代价对比(进程、线程、协程依次降低)即为完整。

2. 进程间通信有哪些方式?各有什么特点?

常见方式包括:管道,半双工字节流,适合父子进程,命名管道 FIFO 允许无亲缘进程;消息队列,内核维护的消息链表,按类型收发,独立于收发时机;共享内存,映射同一段物理内存,速度最快,但需配信号量等同步原语防止竞争;信号量,主要用于同步互斥而非传数据;信号,异步通知机制,如 SIGKILL、SIGTERM;套接字,可跨主机双向通信,是网络服务与本地 IPC 的通用方案;此外还有文件锁与事件循环。选型上同机高频大数据量用共享内存加信号量,跨机器只能用 socket,简单命令行传递用管道。要点是区分「传数据」与「做同步」两类需求并给出对应开销与生命周期差异。

3. 什么是虚拟内存?缺页是如何处理的?

虚拟内存为每个进程提供独立连续的地址空间假象,由 MMU 借助页表把虚拟页映射到物理页框,配合 TLB 缓存翻译加速。价值在于进程隔离、按需分配提升内存利用率、页可换出到磁盘使程序超过物理内存、配合页权限实现只读段与写时复制。访问未映射或已换出的页触发缺页异常,内核检查该地址合法性:非法则段错误;合法则分配页框或从交换区读回,更新页表并可能按 LRU 类算法淘汰其他页,随后重执行触发指令。面试延伸点:多级页表减少页表自身占用,大页减小 TLB miss,写时复制让 fork 只复制页表,是高效创建子进程的基础。

4. 死锁产生的四个必要条件是什么?如何避免与排查?

四条件为互斥(资源独占)、持有并等待(占着旧资源申请新的)、不可剥夺(不能强行抢走)与循环等待(形成环),四者缺一不死锁。预防手段对应破坏条件:一次性申请全部资源、申请不到就释放已持有资源、按全局顺序加锁破坏环路最常用也最实用。避免策略如银行家算法在分配前评估安全性。排查上可用 pstack 或 gdb 看线程栈,Java 用 jstack 输出持有与等待关系定位环,数据库则以等待图检测并回滚牺牲事务。实践技巧包括统一锁顺序、用 tryLock 带超时打破持有等待、缩小临界区、用更高层并发结构减少手工加锁,并以超时与告警兜底。

5. 用户态与内核态是什么?系统调用经历了哪些过程?

CPU 为保护内核将执行分为用户态与内核态,用户态代码受限访问硬件与内核内存,需通过规定入口进入内核态执行特权操作。系统调用流程为:用户程序把系统调用号与参数放入寄存器,执行 trap 指令陷入内核,CPU 切换到内核栈并保存现场,内核校验参数后查系统调用表执行对应服务例程,完成后恢复现场返回用户态继续执行。状态切换有开销(上下文保存、缓存污染、安全检查),因此高频小操作应批量化,如 writev 合并写、io_uring 异步提交。中断与异常同样引发陷入,面试要点是区分系统调用、异常(缺页)与中断(时钟、IO 完成)三类入口并说明切换成本对性能编程的意义。

🔒 解锁完整面试题库与参考答案(Pro)

含高频追问与作答要点,系统准备面试。

官方文档

1 条

推荐教程

1 条

推荐课程

1 条

上手实践

1 条

🔒 完整前置链分析 + 逐岗位引用明细

本页已免费展示学习定位与市场聚合;Pro 深读补齐完整前置依赖链分析与逐岗位引用明细 (核心/加分与深度档、岗位画像)。

知识分享

社区经验 · 管理员审核后展示

暂无分享——第一个来聊聊你的经验和踩坑吧。

有经验想分享?登录后可提交你的知识分享,管理员审核通过后将署名展示。

难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。