面试专题--Linux体系结构相关
2025-02-21 10:50:12 0 举报
Linux体系结构是面试中的一个重要主题,它涉及了解操作系统的分层及其组成。核心内容包括:内核(Kernel),负责硬件与进程间的通信;中间件层(Middleware),包括系统调用接口和库函数,如glibc;用户空间(User Space),包括系统管理程序和用户应用程序。这一体系结构支撑着Linux系统的稳定性和灵活性,确保了操作系统的高效运行和资源的合理分配。面试时,期望面试者不仅掌握各层的定义和功能,还要理解它们之间的相互作用以及如何通过系统调用和文件系统实现任务管理、内存管理和设备管理等功能。了解Linux体系结构对于系统编程、网络应用开发乃至系统安全都有着至关重要的意义。
作者其他创作
大纲/内容
Linux硬件
Page Cache
磁盘
Socket Buffer
用户空间
DMA Copy1
Write切换
开始
处理数据
CPU Copy2
是否有就绪fd
网卡
8
recv
否
内核空间
CPU Copy1(DMA Copy1)
3
IO多路复用---epoll事件通知机制当FD有数据可读时,我们调用epoll wait就可以得到通知。但是事件通知的式有两种:LevelTriggered:简称LT。当FD有数据可读时,会重复通知多次,直至数据处理完成。是Epol的默认模式EdgeTriggered:简称ET。当FD有数据可读时,只会被通知一次,不管数据是否处理完成。举个栗子:① 假设一个客户端socket对应的FD已经注册到了epoll实例中② 客户端socket发送了2kb的数据③服务端调用epoll_wait,得到通知说FD就绪目④服务端从FD读取了1kb数据⑤回到步骤3(再次调用epoll wait,形成循环)
EPOLLIN
RAM
eventpoll
此处数据一定是就绪的,等待拷贝
1:等待数据
NIO(非阻塞IO)
否(客户端请求)
EPOLLERROR
Linux sendfile数据0拷贝
epoll_wait循环监听list_head
数据就绪
sendfilesnedfile 的应用场景是:用户从磁盘读取一些文件数据后不需要经过任何计算与处理就通过网络传输出去。此场景的典型应用是消息队列。sendfile 主要使用到了两个技术:1:DMA 技术;:2:传递文件描述符代替数据拷贝。利用 DMA 技术sendfile 依赖于 DMA 技术,将四次 CPU 全程负责的拷贝与四次上下文切换减少到两次传递文件描述符代替数据拷贝传递文件描述可以代替数据拷贝,这是由于两个原因:1:page cache 以及 socket buffer 都在内核空间中;2:数据传输过程前后没有任何写操作。
6
用户缓存
用户进程
7
Linux常用命令一:查找文件1: find (精确查找)按名称查找: find /path/to/search -name \"filename\"按扩展名查找:find /path/to/search -name \"*.txt\"2. locate(快速查找)按名称查找:locate filename按扩展名查找:locate \"*.txt\"二:查询日志关键词简单查询:grep \"error\" /var/log/syslog显示行号:grep -n \"error\" /var/log/syslog统计 \"error\" 出现的次数(结合 grep 和 wc):grep -o \"error\" /var/log/syslog | wc -l结合 tail 动态查询,实时监控日志中包含 \"error\" 的行:tail -f /var/log/syslog | grep \"error\"三:vim命令后,定位到日志的第几行1:在 vim 命令模式下,直接输入行号后按 G:<行号>G2:在打开文件时直接跳转:vim +100 /path/to/logfile
操作系统
Linux数据拷贝4次CPU Copy:1: CPU 负责将数据从磁盘搬运到内核空间的 Page Cache 中2: CPU 负责将数据从内核空间的 Page Cache 搬运到用户空间的缓冲区3: CPU 负责将数据从用户空间的缓冲区搬运到内核空间的 Socket 缓冲区中4: CPU 负责将数据从内核空间的 Socket 缓冲区搬运到的网络中4次上下文切换:1: read 系统调用时:用户态切换到内核态2: read 系统调用完毕:内核态切换回用户态3: write 系统调用时:用户态切换到内核态4: write 系统调用完毕:内核态切换回用户DMA 参与下的数据四次拷贝DMA 技术很容易理解,本质上,DMA 技术就是我们在主板上放一块独立的芯片。在进行内存和 I/O 设备的数据传输的时候,我们不再通过 CPU 来控制数据传输,而直接通过 DMA 控制器(DMA Controller,简称 DMAC)。这块芯片,我们可以认为它其实就是一个协处理器(Co-Processor)。
进程反复调用并等待数据(循环)
内核
拷贝数据
特性
mmap
sendfile
用途
映射文件到内存,并提供内存级的文件访问能力
高效地将文件内容发送到网络套接字
适用场景
文件的高效读写、内存映射、大文件操作
Web 服务器文件传输、文件下载/上传、Kafka发送消息
内存拷贝
避免用户空间与内核空间的拷贝
主要用于内核空间到网络的传输,无用户空间参与
是否适用于磁盘写入
是,能直接将修改的内存映射写入磁盘
否,主要用于从文件发送到网络
用户应用
暂无数据
copy
应用程序
list_head(连表)
Read切换
Mysql
Linux体系结构
红黑树,监听FD
拷贝完成
判断list_head是否为空
IO多路复用---epollfont color=\"#e74f4c\
select
DMA Copy2
Linux内核
accept接受客户端连接,得到fd
零拷贝技术零拷贝的特点是 CPU 不全程负责内存中的数据写入其他组件,CPU 仅仅起到管理的作用。但注意,零拷贝不是不进行拷贝,而是 CPU 不再全程负责数据拷贝时的搬运工作。如果数据本身不在内存中,那么必须先通过某种方式拷贝到内存中(这个过程 CPU 可以不参与),因为数据只有在内存中,才能被转移,才能被 CPU 直接读取计算。零拷贝技术的具体实现方式有很多,不同的零拷贝技术适用于不同的应用场景,例如:1:sendfile2:mmap3:splice4:直接 Direct I/O
2:从内核空间拷贝到用户空间
是否是ssfd可读
rb_roots(红黑树)
CPU copy
readable
BIO(阻塞IO)
mmapmmap 是将文件直接映射到进程的虚拟内存空间,应用程序可以像操作内存一样访问文件中的数据。通过 mmap 映射的内存区域,应用程序可以直接修改文件内容。修改后,数据会被写入到磁盘(写入操作会在适当的时候发生,通常是当内存区域发生修改时,或者调用 msync() 或进程退出时)。这种写入是直接通过内存映射进行的,不需要传统的文件写入操作中的复制过程。mmap 本身并不直接实现 DMA,但它可以与 DMA 一起工作。在操作系统支持的情况下,mmap 可以让硬件设备通过 DMA 访问内存,从而实现高效的 I/O 操作。
是(客户端连接事件)
9
写出响应
CPU Copy4((DMA Copy4)
epoll_ct监听fd
Linux mmap数据0拷贝
epoll_create创建实例
判断事件类型
阻塞IO(BIO)阻塞IO模型中,用户进程在两个阶段都是阻塞状态非阻塞IO(NIO)非阻塞IO模型中,用户进程在第一个阶段是非阻塞,第二个阶段是阻塞状态。虽然是非阻塞,但性能并没有得到提高。而且忙等机制会导致CPU空转,CPU使用率暴增。无论是阻塞IO还是非阻塞IO,用户应用在一阶段都需要调用recvfrom来获取数据,差别在于无数据时的处理方案:1如果调用recvfrom时,恰好没有数据,阻塞IO会使进程阻塞,非阻塞IO使CPU空转,都不能充分发挥CPU的作用。2如果调用recvfrom时,恰好有数据,则用户进程可以直接进入第二阶段,读取并处理数据比如服务端处理客户端Socket清求时,在单线程情况下,只能依次处理每一个socket,如果正在处理的socket恰好未就绪(数据不可读或不可写),线程就会被阻塞,所有其它客户端socket都必须等待,性能自然会很。要提高效率有几种办法?方案一:多线程方案二:IO多路复用IO多路复用是利用单个线程来同时监听多个FD,并在某个FD可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。文件描述符(File Descriptor)简称FD,是一个从0 开始递增的无符号整数,用来关联Linux中的一个文件。在Linux中,一切皆文件,例如常规文件、视频、硬件设备等,当然也包括网络套接字(Socket)。IO多路复用的几种实现方案1: select2: poll3: epoll
CPU Copy3
传递文件描述符代替数据拷贝
IO多路复用-epoll web服务流程
进程阻塞等待数据
list_head
Linux数据拷贝
5
为了避免用户应用导致冲突甚至内核崩溃,用户应用与内核是分离的:进程的寻址空间会划分为两部分:内核空间、用户空间1:用户空间只能执行受限的命令(Ring3),而且不能直接调用系统资源,必须通过内核提供的接口来访问2:内核空间可以执行特权命令(Ring0),调用一切系统资源
内存映射
连表,记录就绪的FD
Redis
rb_root
CPU
Kafka
IO多路复用
读取数据
events
创建Server Socket,得到FD,记作ssfd
服务端
0 条评论
下一页