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 处理输入和输出,这个也是属于八股的部分,需要掌握。

相关推荐
余额瞒着我当琳4 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法
青少儿编程课堂4 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛
longlongzihan5 小时前
LeetCode 5. 最长回文子串:从暴力匹配到中心扩展的思维演进
c++·算法·leetcode
多弗朗皮卡丘5 小时前
C++继承
c++·继承
汉克老师6 小时前
GESP2026年9月认证C++七级( 第三部分编程题(2、括号序列))精讲
c++·gesp·小学生·学c++编程
jimy18 小时前
虚函数vtable,链接时看到构造函数,linker把符号地址写入vtable(三)
开发语言·c++
潼心1412o9 小时前
C++初阶(长期更新)第9讲:string(上)
开发语言·c++
朝朝辞暮i9 小时前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
wuminyu9 小时前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++
All for pursuit.10 小时前
【回溯-6】79.单词搜索
数据结构·c++·算法·leetcode