🚀 C++面试宝典:操作系统核心问题全解析
🌟 适用人群:即将面试的C++开发者 | 校招/社招冲刺 | 操作系统知识梳理
文章目录
-
-
- [🚀 C++面试宝典:操作系统核心问题全解析](#🚀 C++面试宝典:操作系统核心问题全解析)
-
- [1. **了解进程调度机制吗?**](#1. 了解进程调度机制吗?)
- [2. **什么是实时系统?**](#2. 什么是实时系统?)
- [3. **进程和线程创建/撤销发生了什么?**](#3. 进程和线程创建/撤销发生了什么?)
- [4. **悲观锁 vs 乐观锁**](#4. 悲观锁 vs 乐观锁)
- [5. **僵尸进程 vs 孤儿进程**](#5. 僵尸进程 vs 孤儿进程)
- [6. **线程间同步方式**](#6. 线程间同步方式)
- [7. **银行家算法**](#7. 银行家算法)
- [8. **内存管理到底是干什么的?**](#8. 内存管理到底是干什么的?)
- [9. **RR调度算法**](#9. RR调度算法)
- [10. **动态库 vs 静态库**](#10. 动态库 vs 静态库)
-
1. 了解进程调度机制吗?
进程调度是操作系统的"交通警察"🚦,负责分配CPU时间给就绪进程。常见算法:
- 先来先服务 (FIFO):简单粗暴,但可能导致短作业饿死
- 短作业优先 (SJF):优化平均等待时间,但需预知运行时长
- 优先级调度 :按优先级分配,高优先级可抢占(如 p r i o r i t y = r u n _ t i m e m a x _ r u n _ t i m e priority = \frac{run\_time}{max\_run\_time} priority=max_run_timerun_time)
- 多级反馈队列:综合优先级+时间片轮转,Linux常用策略
💡 面试点睛:反问面试官"您想了解具体算法实现还是应用场景?"体现深度思考!
2. 什么是实时系统?
🕒 核心特征 :时限保障!分两类:
- 硬实时:超时即致命(如火箭控制🔥)
- 软实时:超时可容忍(如视频流延迟)
cpp
// 伪代码示例:实时任务调度
if (task.miss_deadline()) {
emergency_handle(); // 硬实时响应
}
3. 进程和线程创建/撤销发生了什么?
| 操作 | 进程 | 线程 |
|---|---|---|
| 创建 | 分配PCB、独立地址空间 | 共享进程资源,仅分配TCB |
| 撤销 | 回收所有资源(内存、文件) | 仅释放栈、寄存器等私有资源 |
⚠️ 注意:线程撤销时需同步资源(否则死锁警告!)
4. 悲观锁 vs 乐观锁
- 悲观锁 :默认会冲突,先加锁再操作(如
mutex.lock()) - 乐观锁:默认无冲突,提交时检测版本(如CAS操作):
cpp
bool CAS(int *addr, int expect, int new_val) {
if(*addr == expect) {
*addr = new_val;
return true;
}
return false;
}
🧠 场景:高并发读用乐观锁,高并发写用悲观锁!
5. 僵尸进程 vs 孤儿进程
| 类型 | 成因 | 危害 | 解决 |
|---|---|---|---|
| 僵尸进程 🧟 | 父进程未回收子进程退出状态 | 占用PID资源 | wait()系统调用 |
| 孤儿进程 👶 | 父进程先退出 | 无害(被init进程收养) | 自动回收 |
6. 线程间同步方式
- 互斥锁 :
pthread_mutex_lock() - 条件变量 :
pthread_cond_wait()+ 信号机制 - 信号量 :
sem_wait()控制资源计数 - 屏障 :
pthread_barrier_wait()同步多个线程
🔐 死锁预防:固定加锁顺序 + 超时机制!
7. 银行家算法
核心思想:像银行放贷一样谨慎分配资源💼
是
否
进程请求资源
是否安全?
分配
阻塞
安全状态检测公式 :
A v a i l a b l e ≥ N e e d i ∀ i Available \geq Need_i \quad \forall i Available≥Needi∀i
8. 内存管理到底是干什么的?
四大核心功能:
- 虚拟内存:让程序以为独占内存(页表映射📄)
- 分页/分段:物理内存逻辑切块
- 分配/回收 :
malloc()底层靠brk()或mmap() - 保护:防止越界访问(段错误警告!)
9. RR调度算法
轮转时间片⚙️:每个进程固定时长(如10ms),超时即放回队列尾。
- 优点:公平性强
- 缺点 :上下文切换开销大
吞吐量 = 总进程数 平均周转时间 吞吐量 = \frac{总进程数}{平均周转时间} 吞吐量=平均周转时间总进程数
10. 动态库 vs 静态库
| 特性 | 静态库 (.a/.lib) | 动态库 (.so/.dll) |
|---|---|---|
| 链接时机 | 编译时 | 运行时 |
| 体积 | 大(代码重复) | 小(共享代码) |
| 更新 | 需重新编译 | 热更新🆕 |
| 示例 | g++ -static main.cpp -lhello |
g++ main.cpp -lhello |
💎 结语 :啃透这些题,操作系统面试直接拿捏!🎯
🔥 下期预告:《操作系统深潜》+ 内存管理剖析!
(表情包彩蛋🎁:面试官问倒你时 → 🤯;答对时 → 🚀💥)