【C++上岸】C++常见面试题目--操作系统篇(第二十九期)

🚀 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. 内存管理到底是干什么的?

四大核心功能:

  1. 虚拟内存:让程序以为独占内存(页表映射📄)
  2. 分页/分段:物理内存逻辑切块
  3. 分配/回收malloc()底层靠brk()mmap()
  4. 保护:防止越界访问(段错误警告!)

9. RR调度算法

轮转时间片⚙️:每个进程固定时长(如10ms),超时即放回队列尾。

  • 优点:公平性强
  • 缺点 :上下文切换开销大
    吞吐量 = 总进程数 平均周转时间 吞吐量 = \frac{总进程数}{平均周转时间} 吞吐量=平均周转时间总进程数

10. 动态库 vs 静态库
特性 静态库 (.a/.lib) 动态库 (.so/.dll)
链接时机 编译时 运行时
体积 大(代码重复) 小(共享代码)
更新 需重新编译 热更新🆕
示例 g++ -static main.cpp -lhello g++ main.cpp -lhello

💎 结语 :啃透这些题,操作系统面试直接拿捏!🎯
🔥 下期预告:《操作系统深潜》+ 内存管理剖析!

(表情包彩蛋🎁:面试官问倒你时 → 🤯;答对时 → 🚀💥)

相关推荐
努力学算法的蒟蒻2 分钟前
day95(2.24)——leetcode面试经典150
算法·leetcode·面试
minh_coo2 分钟前
Spring单元测试之反射利器:ReflectionTestUtils
java·后端·spring·单元测试·intellij-idea
SuperEugene3 分钟前
常见设计模式在 JS 里的轻量用法:单例、发布订阅、策略
前端·javascript·设计模式·面试
野生技术架构师7 分钟前
Spring Boot + JPackage:构建独立安装包!
java·spring boot·后端
童话的守望者7 分钟前
dc9靶场通关
java·开发语言
弹简特8 分钟前
【JavaEE11-后端部分】SpringMVC06-综合案例2-从用户登录看前后端交互:接口文档与HTTP通信详解
java·spring boot·spring·http·java-ee·tomcat
大黄说说11 分钟前
解锁 .NET 性能极限:深入解析 Span 与零拷贝内存艺术
java·数据结构·算法
知识即是力量ol12 分钟前
深入理解 Snowflake 雪花算法:原理、本质、趋势递增问题与分布式顺序困境全解析
java·分布式·算法·雪花算法·snowflake·全局唯一id·分布式id生成器
君爱学习13 分钟前
G1垃圾回收器启动时 CPU 飙升的原因分析
java
㓗冽15 分钟前
纯粹合数(字符串)-基础题100th + 找出质数(字符串)-基础题101th + 翻译字符串(字符串)-基础题102th
数据结构·c++