cpp 选手备战秋招学习笔记 day36

关于存储系统、IO 相关的知识

1.介绍一下 write (send)过程发生了什么?

write 系统调用会首先 cpu 从用户态转向内核态,然后把数据从用户缓冲区拷贝到内核缓冲区,对于一般的文件描述符就是对应的缓冲区,对于 socket 套接字就是 socket 发送缓冲区,然后对于调用者来说就结束了,不代表数据发送到对端或者写到磁盘上。

在普通文件描述符就是等待后台刷盘,send 就是首先是缓冲区会在 TCPIP 协议栈下,根据包括流量窗口拥塞窗口控制可以发送的信息,包装,然后由网卡异步驱动发送,在接收到接收端的确认后对于确认的部分可以从 socket 缓冲中删除。

2.系统调用的过程是什么?

首先是把参数和系统调用号存入寄存器,然后 syscall cpu 由用户态切换到内核态,在内核态会根据注册的系统调用的入口地址找到对应的系统调用函数然后执行,在结束之后会通过 sysrset 恢复用户态的上下文。

fsync 是刷盘操作,要求即刻存入磁盘。

3.mmap 是什么,和普通的 write/read 的区别是什么?

mmap 是把 page cache 映射到进程的虚拟地址空间,减少了从内核缓存到用户缓存的显示数据拷贝,提高了效率。

mmap 也叫做零拷贝,提高了速度。

4.顺序 IO 和随机 IO 相比的优势是什么

对于顺序 IO,可以预先取得数据,如果 设备是磁盘就可以避免过多的磁盘寻道时间和旋转等待时延,其次如果是 SSD 也可以预先把数据读取提高效率。

HDD hard diskdrive sddsolidstatedrive

5.cpu 处理输入设备和输出设备的方法

主要有四种模式分别是轮询模式、中断、dma、通道方式,其中轮询模式 cpu 自己判断是否能运算数据自己移动数据,中断方式 cpu 可以去处理其他指令然后由 cpu 移动数据,dma 方式可以由高速设备处理更大量的数据而 cpu 只在处理完成后,按照批次的处理不需要去移动数据亲力亲为,通道方式有单独的处理器可以执行指令,dma 不具备执行指令的能力仍然需要 cpu 去配置。

6.计网分层设计的原因

层与层之间独立可以独立的去发展,层次之间实现了解耦去解决不同的问题,物理层解决传输比特的问题,链路层负责差错控制,成帧,网络层负责异构网络通信,传输层保证了可靠传输拥塞控制,应用层负责应用层协议,层与层之间通过接口通信,对等的层是通过协议实现通信,计算机网络的层次设计实现了抽象解耦和标准化。

总结:send 这部分掌握的比较差之前,总之记忆就是六步:内核态、拷贝数据、根据窗口去给 TCP、TCP 包装处理、网卡驱动发送、收到确认之后处理;另一个就是 cpu 处理输入和输出,这个也是属于八股的部分,需要掌握。

相关推荐
用户69586106727111 小时前
从源码到加载器:__attribute__((constructor)) / __attribute__((destructor))的跨平台实现原理详解
c++
余额瞒着我当琳2 小时前
C++多态深入解析:多态概念,多态实现条件,虚函数表与内存分布,常见问题及注意事项
c++·算法
ocean21032 小时前
2025-2026年C++专题大厂面试高频问题
开发语言·c++·面试
程序猿编码3 小时前
扔掉 Python!纯 C++ 本地跑扩散 TTS,GGML 加持,支持 RK3588 NPU 加速
c++·计算机视觉·大模型·transformer·rk3588·推理·ggml
郝学胜-神的一滴3 小时前
C++20模板元编程 02:吃透模板基础核心四大核心知识点
开发语言·数据结构·c++·程序人生·软件工程·visual studio
代码王同学3 小时前
2026.9.15日C++类和对象学习收获笔记
c语言·c++
刚入门的大一新生4 小时前
Linux-简单设计libc库
linux·c++
6Hzlia4 小时前
【Classic 150 刷题计划】 LeetCode 14. 最长公共前缀 | C++ 纵向扫描法与防越界细节
c++·算法·leetcode
讳疾忌医丶13 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构