首页 > 系统相关 >【Linux内核】4张IO时序图,一次搞懂Linux下的文件读写

【Linux内核】4张IO时序图,一次搞懂Linux下的文件读写

时间:2024-12-09 22:20:36浏览次数:5  
标签:调用 缓存 线程 内核 IO Linux 搞懂 页面

因为如今大多数资源都是通过网络访问的:数据库、对象存储和其他微服务。大多数服务器应用程序开发人员在考虑 I/O 时,都会考虑网络 I/O,然而,数据库开发人员还必须考虑文件 I/O。

一般来说,在Linux服务器上访问文件有四种选择:传统读/写、mmap、直接I/O(DIO)读/写和异步直接I/O(AIO/DIO)。

传统读写是使用read(2)和write(2)系统调用。在现代实现中, read 系统调用(或其众多变体之一 - pread、readv、preadv等)要求内核读取文件的一部分并将数据复制到调用进程的地址空间中。如果所有请求的数据都在页面缓存中,内核将复制它并立即返回;否则,它将安排磁盘将请求的数据读入页面缓存,阻止调用线程,并且当数据可用时,它将恢复线程并复制数据。

使用mmap(2)系统调用将文件内存映射到应用程序地址空间。这会导致地址空间的一部分直接引用包含文件数据的页面缓存页面。完成此准备步骤后,应用程序可以使用处理器的内存读取和内存写入指令访问文件数据。如果请求的数据恰好在缓存中,则完全绕过内核并以内存速度执行读取(或写入)。

传统的读写和 mmap 都涉及内核页面缓存,并将 I/O 调度推迟到内核。当应用程序希望自己调度 I/O 时(原因我们将在后面解释),它可以使用直接 I/O。这涉及使用O_DIRECT标志打开文件;进一步的活动将使用正常的读写系列系统调用,但它们的行为现在已改变:不是访问缓存,而是直接访问磁盘,这意味着调用线程将无条件进入休眠状态。此外,磁盘控制器将绕过内核,将数据直接复制到用户空间。

异步直接 I/O直接 I/O 的改进版本,其行为类似,但可防止调用线程阻塞。相反,应用程序线程使用io_submit(2)系统调用来调度直接 I/O 操作,但线程不会被阻塞;I/O 操作与正常线程执行并行运行。单独的系统调用io_getevents(2)用于等待和收集已完成的 I/O 操作的结果。与 DIO 一样,内核的页面缓存被绕过,磁盘控制器负责将数据直接复制到用户空间。

标签:调用,缓存,线程,内核,IO,Linux,搞懂,页面
From: https://www.cnblogs.com/o-O-oO/p/18596153

相关文章

  • 初学linux第一天,关于虚拟机的一些基本设置
    入门常用命令注意:所有的目录后面都要加/创建文件touchtest.txt编辑文件注意:如果文件不存在,则会自动创建文件并编辑#系统自带vitest.txt#vim命令需要自己下载vimtest.txt#打开文件之后,按一下i键,左下角变为INSERT时,才可以写入文件删除文件#第一......
  • Torch-TensorRT针对 NVIDIA GPU 的 PyTorch 推理代码的框架内编译In-framework compil
    Torch-TensorRT针对NVIDIAGPU的PyTorch推理代码的框架内编译Torch-TensorRT是PyTorch的推理编译器,通过NVIDIA的TensorRT深度学习优化器和运行时针对NVIDIAGPU。它通过接口支持即时(JIT)编译工作流程torch.compile,也支持提前(AOT)工作流程。Torch-TensorRT......
  • 【linux内核】从ELF文件到Linux进程
    今天我们来聊聊ELF文件,了解一下Linux如何创建进程以及ELF文件如何转变成Linux进程?一、什么是ELF文件?ELF(ExecutableandLinkableFormat)文件是一种目标文件格式,用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。它主要用于Linux平台,用于存储和传输可执行文件和......
  • 【Azure Function App】Azure Function 从.Net6 升级到 .Net8 后 Function出现运行时
    问题描述AzureFunction从.NET6升级到.NET8后Function出现运行时版本错误  问题解答因为AzureFunction在使用.NET6时,默认使用的为进程内模型(简单来讲:进程内模型就是应用运行在w3wp.exe中,而独立进程模型是单独的dotnet.exe进程)。而升级到.NET8之后,需要指定FUNCTI......
  • Kali Linux 安装谷歌浏览器及中文输入法教程
    KaliLinux安装谷歌浏览器及中文输入法教程在KaliLinux系统中,安装谷歌浏览器和中文输入法可以满足我们使用谷歌浏览器(谷歌翻译)以及中文输入的需求。以下是详细的安装步骤和注意事项,适合希望增强KaliLinux功能的用户。一、安装谷歌浏览器下载谷歌浏览器安装包在......
  • Knowledge Graph Studio:让知识图谱构建更简单、更智能
    一、前言上周和研究院的同事讨论2025年大模型产品规划时,让我产生了一些疑惑和不解,因为从大家交流的规划方向来看,更多的还是集中在Prompt提示词工程(包括提示词的管理、测试、评估、调优)这一块规划的确实挺细,另外一个重点也提到了对于大模型微调、训练以及模型推理效率的提......
  • 电脑控制几十台手机——iOS手机群控系统,高清投屏高效管理
    ​相信不少小伙伴都用过iPad、iPhone等苹果设备的投屏功能,将内容投到大屏上展示。但这次推荐的群控系统,除了能投屏之外,还支持一键锁屏解锁、快捷打开关闭应用……其实,苹果手机中系统的功能还挺多。今天,小智就给大家介绍一下苹果手机中系统中的「一键锁屏」与「快捷打开关闭......
  • LinuxDay1
    LinuxDay1Linux学习所需组件VMStation通过该平台,创建虚拟Linux操作平台CentoS-7驱动所需的Linux操作系统Xshell直接连接Linux服务器的命令操作软件XftpWindows系统与Linux系统之间的文件传输软件XTerminal集Xshell与Xftp与一体的软件,更适用于Windows系统的......
  • 【Basic Abstract Algebra】Exercises for Section 2.2 — Subgroups
    Let\(H\)beasubgroupof\(G\),if\(g\inG\),showtha\[gHg^{-1}=\{g^{-1}hg\midh\inH\}\]isalsoasubgroupof\(G\).Proof:Since\(e~(\text{identity})\ingHg^{-1}\subseteqG\),\(gHg^{-1}\)isnonempty.Forany\(g^{-1}h_1g,......
  • 【JavaScript编程】JavaScript中Error与Exception
    在JavaScript的编程宇宙中,错误处理是构筑稳健程序大厦的基石,而精准把握错误(Error)与异常(Exception)的差异,则是编写高质量、可维护代码的关键。一、Error:预见性与精确处理的艺术本质与特点错误(Error)通常代表着那些在代码执行流程中可以被提前预见,并需要开发者进行精确且手动处理......