当前位置: 首页 > news >正文

【C++八股文】操作系统篇

阻塞IO与非阻塞IO

• ​阻塞IO​:文件描述符处于阻塞模式时,读写操作会一直等待直到完成。

• ​非阻塞IO​:文件描述符处于非阻塞模式时,读写操作立即返回,若数据未就绪则返回错误。

同步IO与异步IO

• ​同步IO​:

• 用户线程主动发起IO请求并等待完成。

• ​通知事件​:IO就绪(如select/poll/epoll)。

• ​数据拷贝​:由用户线程完成。

• ​异步IO​:

• 用户线程发起IO请求后立即返回,内核负责完成IO操作。

• ​通知事件​:IO完成(如Linux的aio_*接口)。

• ​数据拷贝​:由内核完成。

完整C++后端八股文:>> C++八股文(完整版)<<

事件处理模式

1. ​Reactor模式​

• 主线程监听文件描述符事件(如读/写就绪)。

• 事件触发后,将事件分发到工作线程处理。

• ​适用场景​:同步IO模型(如epoll)。

2. ​Proactor模式​

• 主线程直接处理IO操作(内核完成数据读写)。

• 工作线程仅处理业务逻辑。

• ​适用场景​:异步IO模型(如Windows的IOCP)。

Reactor模式工作流程

1. 主线程注册socket的读就绪事件到epoll。

2. 主线程调用epoll_wait等待事件。

3. 数据到达时,epoll_wait触发读事件,主线程将socket加入请求队列。

4. 工作线程读取数据并处理请求,注册socket的写就绪事件。

5. 数据处理完成后,主线程调用epoll_wait等待写事件。

6. 写事件触发后,主线程将socket加入写队列。

7. 工作线程写入响应数据。

并发模式

1. ​半同步半异步模式​

• ​主线程​:处理IO事件(Reactor模式),将请求封装为任务对象插入队列。

• ​工作线程​:从队列取出任务并处理业务逻辑。

• ​特点​:主线程负责IO,工作线程负责计算,需通过锁保护共享队列。

• ​潜在问题​:主线程与工作线程共享请求队列需加锁;工作线程较少时可能产生任务堆积。

2. ​领导者-追随者模式​

• 线程池中有一个领导者线程负责监听事件,其他线程为追随者。

• 领导者处理事件后变为工作者,原工作者退化为追随者。

• ​优势​:减少线程切换开销,适用于高并发场景。

虚拟地址空间

• ​作用​:通过MMU页表实现进程地址隔离,保护物理内存。

• ​映射机制​:虚拟地址→物理地址的动态映射,支持内存保护和共享。

进程与线程

进程

• ​定义​:资源分配的基本单位,包含代码段、数据段、PCB(进程控制块)。

• ​状态​:创建、就绪、运行、阻塞、终止。

• ​通信​:管道、信号、共享内存、消息队列、Socket等。

线程

• ​定义​:CPU调度的基本单位,共享进程资源(内存、文件描述符)。

• ​优势​:上下文切换成本低,通信高效(共享内存)。

• ​资源独享​:栈空间、寄存器、线程ID、errno变量。

进程间通信(IPC)

1. ​管道(Pipe)​​:半双工,仅限有血缘关系进程。

2. ​FIFO(命名管道)​​:支持无血缘关系进程。

3. ​共享内存​:直接映射物理内存,高效通信。

4. ​信号(Signal)​​:异步通知机制(如SIGKILL、SIGSEGV)。

5. ​消息队列​:消息传递,支持优先级。

6. ​信号量(Semaphore)​​:同步与互斥。

7. ​Socket​:跨网络通信(TCP/IP协议)。

线程同步机制

1. ​互斥锁(Mutex)​​:保护临界区。

2. ​读写锁(RWLock)​​:允许多读单写。

3. ​条件变量(Condition Variable)​​:线程间同步等待。

4. ​自旋锁(Spinlock)​​:忙等待锁,适用于短临界区。

线程共享与独享资源

• ​共享​:

• 内存地址空间、文件描述符、信号处理函数、当前工作目录。

• ​独享​:

• 线程栈、寄存器、线程ID、errno、信号屏蔽字。

进程调度

• ​调度算法​:

a. 先来先服务(FCFS)

b. 短作业优先(SJF)

c. 优先级调度

d. 时间片轮转(RR)

e. 高响应比优先(HRRN)

网络编程基础

Socket函数

• ​服务端​:socket() → bind() → listen() → accept()

• ​客户端​:socket() → connect()

IO模型

1. ​阻塞IO​:默认行为,等待数据就绪。

2. ​非阻塞IO​:立即返回,需轮询。

3. ​IO多路复用​:select/poll/epoll(高效监听多socket)。

4. ​信号驱动IO​:通过信号通知数据就绪。

5. ​异步IO​:内核完成IO后通知用户。

epoll细节

• ​水平触发(LT)​​:缓冲区有数据即触发,适合简单场景。

• ​边沿触发(ET)​​:仅在数据到达时触发一次,需配合非阻塞IO使用。

其他要点

• ​死锁​:需破坏四个必要条件(互斥、占有并等待、无抢占、循环等待)。

• ​僵尸进程​:子进程退出后未被waitpid回收。

• ​孤儿进程​:父进程退出后被init接管。

http://www.dtcms.com/a/356079.html

相关文章:

  • C语言 部分内存相关的库函数
  • 广东省省考备考(第八十九天8.28)——判断推理(听课后强化训练)
  • 事务的五大状态
  • QT LInux 开发中一些常用的方法
  • CVPR小模型创新点深度分析:小VLM化身精准向导,大模型多模态推理效率全面加速,性能突破不再依赖算力堆叠
  • 8.28作业
  • Android 编写高斯模糊功能
  • Github上传READ.md后出现不识别换行符的问题
  • Shell编程入门到实战:从基础语法到自动化脚本
  • 网络是怎样连接的,笔记整理
  • C语言知识点补充(链表和队列)
  • 8.变量和数据类型
  • 浏览器访问 ASP.NET Core wwwroot 目录下静态资源的底层实现
  • 多线程 线程池 并发
  • 机器视觉学习-day08-图像缩放
  • MBA/EMBA毕业论文写作总结
  • 第20章|轻松实现远程控制
  • NumPy 2.x 完全指南【三十二】通用函数(ufunc)之数学运算函数
  • 面试tips--JVM(1)--对象分配内存的方式TLAB
  • CTFshow系列——命令执行web61-68
  • C++之多态篇
  • 君正T31学习(四)- MT7682+VLC出图
  • 【python】python进阶——as关键字
  • 程序代码篇---类
  • SpringCloud Alibaba Nacos 注册中心/配置中心
  • SpringBoot 配置文件在运维开发中的应用
  • 基于springboot的商业店铺租赁系统
  • 在 Vue 前端(Vue2/Vue3 通用)载入 JSON 格式的动图
  • 校园文化活动管理系统设计与实现(代码+数据库+LW)
  • web前端知识——第一阶段