首页
学习
活动
专区
圈层
工具
发布

Linux内核IO技术栈详解

这是《Linux系统调用那些事》高级部分的第一章《聊聊Linux IO》。高级部分的文章均假设读者完整的学习过Linux系统基础以及Linux系统编程相关的内容,并已有一定的工程实践经验。...综上,既然讨论Linux下的IO操作,自然是跳过stdio库的用户态这一堆东西,直接讨论系统调用层面的概念了。对stdio库的IO层有兴趣的同学可以自行去了解。...Linux内核中的IO栈 这一小节来看Linux内核的IO栈的结构。...先上一张全貌图[4]: 由图可见,从系统调用的接口再往下,Linux下的IO栈致大致有三个层次: 文件系统层,以 write 为例,内核拷贝了write参数指定的用户态数据到文件系统Cache中,并适时向下层同步...Linux下Buffered IO默认使用的是Write back机制,即文件操作的写只写到Page Cache就返回,之后Page Cache到磁盘的更新操作是异步进行的。

3.3K10

Linux文件IO操作

文件操作 在进行 Linux 文件操作之前,我们先简单了解一下 Linux 文件系统 Linux文件类型 Linux中文件类型分为以下这几种: 符号 文件类型 - 普通文件 d 目录文件,d是directory...文件权限 文件权限是文件的访问控制权限,那些用户和组群可以访问文件以及可以执行什么操作 查看文件权限 查看文件权限 文件类型后面紧跟着的就是文件权限 简单介绍下文件权限,如下图所示: 因为Linux...下的文件操作之后就开始进入代码编程阶段 Linux error 获取系统调用时的错误描述 Linux下的文件操作属于系统调用,Linux中系统调用的错误都存储于errno中,例如文件不存在,errno置.../main file len:4 linux下的标准输入/输出/错误 在文件IO操作里面一直讲到文件描述符,那我就不得不提一下linux中的标准输入/输出/错误 在C语言的学习过程中我们经常看到的stdin...但是在在Linux下,操作系统一级提供的文件API都是以文件描述符来表示文件,对应的的标准输入,标准输出和标准错误输出是0,1,2,宏定义为STDIN_FILENO、STDOUT_FILENO 、STDERR_FILENO

3.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    浅墨: 聊聊Linux IO(中)——Linux内核中的IO栈

    接上一篇浅墨: 聊聊Linux IO(上),先上一张全貌图[4]: ?...由图可见,从系统调用的接口再往下,Linux下的IO栈致大致有三个层次: 文件系统层,以 write(2) 为例,内核拷贝了write(2)参数指定的用户态数据到文件系统Cache中,并适时向下层同步...块层,管理块设备的IO队列,对IO请求进行合并、排序(还记得操作系统课程学习过的IO调度算法吗?)...设备层,通过DMA与内存直接交互,完成数据和具体设备之间的交互 结合这个图,想想Linux系统编程里用到的Buffered IO、mmap(2)、Direct IO,这些机制怎么和Linux IO栈联系起来呢...写操作直接映射进程的buffer到磁盘扇区,以DMA的方式传输数据,减少了原本需要到Page Cache层的一次拷贝,提升了写的效率。

    2.6K20

    【Linux】Linux文件IO常规操作

    前言 Linux 文件 IO 操作指的是在 Linux 系统上对文件进行读取和写入的操作。它是通过与文件系统交互来读取和写入文件中的数据。...在 Linux 中,文件被视为一系列字节的有序集合,每个文件都有一个相关联的文件描述符,用于标识该文件的唯一标识符。文件 IO 操作允许程序从文件读取数据或将数据写入文件。...文件 IO 操作通常包括以下几个主要方面: open函数 int open(char *pathname, int flags); -->#include 参数: pathname...与睡眠状态相对的是运行状态,在Linux内核中,处于运行状态的进程分为两种状态: 正在被调度执行。...该进程就会在一个就绪队列中等待被内核调用 产生阻塞的场景。

    75150

    Linux 内核的 4 大 IO 调度算法

    Linux 内核包含4个IO调度器,分别是 Noop IO scheduler、Anticipatory IO scheduler、Deadline IO scheduler 与 CFQ IO scheduler...I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作. 内核必须首先确定队列中一共有多少个请求,然后才开始进行调度. ?...IO调度器(IO Scheduler) ? IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法。存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间。...IO调度器在内核栈中所处位置如下: ? ? 块设备最悲剧的地方就是磁盘转动,这个过程会很耗时间。...2 区分对待读操作和写操作。 deadline IO 维护3个队列。第一个队列和Elevator 一样, 尽量按照物理位置排序。

    6.2K31

    操作系统与存储:解析Linux内核全新异步IO引擎io_uring设计与实现

    对于问题3,本文深入最新版内核linux-5.10中解析了io_uring的大体实现(关键数据结构、流程、特性实现等)。 ... 一切过往,皆为序章 以史为镜,可以知兴替。...我们先看看现存过往IO接口的缺陷。 过往同步IO接口 当今Linux对文件的操作有很多种方式,过往同步IO接口从功能上划分,大体分为如下几种。...例如,高性能服务器nginx就使用了这样的机制,nginx把读取文件的操作异步地提交给内核后,内核会通知IO设备独立地执行操作,这样,nginx进程可以继续充分地占用CPU,而且,当大量读事件堆积到IO...这是因为AIO不支持缓存操作,即使需要操作的文件块在linux文件缓存中存在,也不会通过操作缓存中的文件块来代替实际对磁盘的操作,这可能降低实际处理的性能。...优化实现 可以调用io_uring_register系统调用,使用IORING_REGISTER_FILES操作码,将一组file注册到内核,最终调用io_sqe_files_register,这样内核在注册阶段就批量完成文件的一些基本操作

    3.1K11

    linux: 了解 C 开发 IO 操作

    在 Linux 平台上进行开发,IO 操作是一个非常重要的领域,掌握 IO 操作不仅能够提升应用程序的性能,还能够提高系统资源的利用效率。那么,如何才能算得上精通 IO 呢?...本文将从几个方面进行详细探讨,包括文件 IO、网络 IO 以及高级 IO 技术。 1. 理解基本的文件 IO 操作 在 Linux 中,文件 IO 操作是最基本的 IO 操作。...掌握高级文件 IO 技术 除了基本的文件 IO 操作,Linux 还提供了许多高级的 IO 技术,例如: 内存映射文件(Memory Mapped Files): 使用 mmap 系统调用将文件映射到进程的地址空间...理解网络 IO 操作 网络 IO 是 Linux 开发中的另一重要领域。...通过分析和优化实际项目中的 IO 操作,积累经验,才能真正掌握 IO 技术。 结论 在 Linux 下开发时,精通 IO 是一个需要不断学习和实践的过程。

    40010

    Linux内核29-原子操作

    假设有两个不同的内核控制路径运行在两个CPU上,同时尝试RMW操作相同的内存区域且执行的是非原子操作。...防止RMW操作造成的竞态条件最简单的方式就是保证这样的指令操作是原子的,也就是这个指令的执行过程不能被打断。这就是原子操作的由来。...所以,基于上一点,RMW操作汇编指令前缀lock(0xf0)就称为原子操作指令。当控制单元检测到这个前缀,它会锁住内存总线,直到指令完成。...3 Linux原子操作 但是,我们在编写完C代码后,编译器不能保证给你使用原子指令进行替代。因此,Linux内核提供了atomic_t类型变量并提供了相关的操作函数和宏(如表5-4所示)。...表5-4 Linux中的原子操作 返回 *v

    1.2K10

    Linux笔记(4)| 文件IO操作

    今天主要分享的是Linux中的文件IO,所谓IO,也就是输入输出,也就是文件的读和写。主要涉及到文件的打开,读写和关闭。 先说一些编译环境。...要搭建Linux开发环境,通常的做法是安装虚拟机,然后在虚拟机当中安装Linux操作系统,这也是比较普遍的做法。...可以看到,它和Linux下的命令行操作都是一样的。比虚拟机启动快多了,使用起来还是非常方便的。 好了,上面的内容都是环境的搭建,如果习惯使用虚拟机也没问题,这里只不过提供了另外一种不错的方式。...exit、_exit、_Exit退出进程 (1)当我们程序在前面步骤操作失败导致后面的操作都没有可能进行下去时,应该在前面的错误监测中结束整个程序,不应该继续让程序运行下去了。...以上就是Linux中文件的简单操作。后面将持续更新Linux的其他应用编程。

    1K30

    Linux下的文件IO操作

    这上面的操作是不是和输入重定向很相似。...文件描述符:在linux系统中,stdin文件描述符为0。 二、标准输出流stdout 定义:标准输出是程序用于发送其输出数据的位置,它默认指向终端屏幕,但也可以被重定向为文件或者其他输出设备。...文件描述符:在linux系统中,stdout文件描述符为1。 缓冲:stdout通常是行缓冲的,意味着输出会先存储在缓冲区中,直到遇到换行符或者缓冲区满才会刷新到目的地。...文件描述符:在linux系统中,stderr文件描述符为2。 缓冲:stderr是非缓冲的,意味着错误信息会被立即发送到目的地,以便用户能够尽快的看到它。...2.文件操作的系统调用接口 访问文件不仅有C语言上的文件接口,OS必须提供对应的访问文件的系统调用接口。即:C标准库中的文件IO接口,底层一定封装了系统调用接口。

    44110

    Linux内核探幽:深入浅出IO模型

    在Linux操作系统中,I/O(输入/输出)模型是一套定义如何处理数据读写的机制,它对系统性能有着重要影响。为了适应不同的应用场景和性能需求,Linux抽象出了多种I/O模型。...阻塞I/O(Blocking I/O)特点:应用程序发起I/O操作后会被挂起,直到数据准备就绪并被复制到应用程序的缓冲区中,此期间应用程序无法执行其他任务。底层原理:依赖内核来管理数据的准备和传输。...底层原理:依赖内核信号机制来通知应用程序I/O事件。优势:应用程序可以在等待I/O准备就绪时执行其他任务‍♂️。劣势:需要在应用程序中处理信号,增加了编程复杂度️。...底层原理:依赖于内核的异步通知机制,应用程序提交I/O操作后可以立即执行其他任务,而无需等待I/O完成。优势:完全非阻塞,应用程序可以在I/O执行期间继续进行其他计算,提高了程序的整体效率。...参考资料LinuxIO模型:https://flyflypeng.tech/linux/2017/07/11/Linux-IO%E6%A8%A1%E5%9E%8B.html

    27200

    【Linux】基础IO_文件操作

    环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制...)操作?...---- 预备知识 在C语言阶段,我们学习过相关文件操作,但是,我们真的了解文件操作吗?...实际上,当涉及到文件操作的原理时,就不再是简单的语言问题,而是属于系统问题。 是否只有我们的C/C++才可以对文件进行操作呢?...文件=内容+属性,对文件的相关操作--->对内容/属性的相关操作 文件存放在磁盘中,只有当我们打开文件进行相关操作时,文件的属性会被加载到内存(冯诺伊曼体系结构决定,CPU只与内存交互) 对于大量被打开的文件

    94120

    Linux实验二:文件IO操作

    结果如下: 七、实验总结   进行Linux文件IO操作的实验可以带来很多收获。首先,这样的实验可以帮助加深对文件系统和IO操作的理解。...其次,通过实验可以学习到如何使用Linux系统提供的命令行工具或编程接口进行文件IO操作。...比如,可以学习到使用命令行工具如cat、echo、mv、cp等来进行文件操作,也可以学习到如何使用C语言等来编写程序进行文件IO操作。   ...通过亲自动手进行文件IO操作,可以更深入地理解其中的原理和机制,并且在解决问题的过程中积累经验,提高自己的技术水平。   ...总的来说,进行Linux文件IO操作的实验是一个很有益的学习过程,可以帮助加深对Linux系统和文件系统的理解,提高自己的技术水平。

    67610

    Linux内核编程--常见IO模型与selectpollepoll编程

    一,Linux系统的五种基本I/O模型 0.前置知识 套接字中的数据传输模式: 套接字上的数据传输分两步执行:第一步,等待网络中的数据送达,将送达后的数据复制到内核中的缓冲区。...缓存IO: 含义:数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。...缺点:数据在传输过程中需要在应用程序地址空间和内核进行多次数据拷贝操作,这些数据拷贝操作所带来的 CPU 以及内存开销是非常大的。 1.阻塞式I/O 该模式为最流行的I/O模式。...阻塞期间,内核会同时监听传入的所有的文件描述符/套接字描述符,当其中一个描述符(读操作,写操作等)就绪时,内核会把描述符传递给用户进程,用户进程开始处理。使用select可以同时等待多个操作就绪。...select的触发方式是水平触发,应用程序如果没有完成对一个已经就绪的文件描述符进行IO操作,那么之后每次select调用还是会将这些文件描述符通知给进程。

    1.9K30

    【Linux篇】操作世界的“纤丝”:IO

    ,本质都是对外设的输入输出简称IO 广义理解 linux下一切皆文件 ⽂件操作的归类认知 对于0KB的空⽂件是占⽤磁盘空间的 ⽂件是⽂件属性(元数据)和⽂件内容的集合(⽂件=属性(元数据)+内容)...所有的⽂件操作本质是⽂件内容操作和⽂件属性操作 系统角度 访问文件需要先打开文件。...这就是linux下一切皆文件。...操作系统就相当于快递员。操作系统将数据读取放到缓冲区等待调用。...因为要将内容写到内核中的缓冲区就要调用系统调用,而调用系统调用是有成本的,调用多了效率就会大大降低,为了提高效率,c标准库就自己提高了一个缓冲区,对这个缓冲区实行:立即刷新(无缓冲--写透模式WT)、满了刷新

    18600

    【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )

    文章目录 一、操作系统需要满足的要素 二、宏内核 三、微内核 四、Linux 内核动态加载机制 一、操作系统需要满足的要素 ---- 电脑上运行的 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要...为 用户 和 应用程序 管理并分配电脑的 硬件资源 , 如 CPU , 磁盘 , 内存 , 网络 等 ; 开发环境 : 操作系统 要为 应用程序 开发 提供配套环境 ; 执行环境 : 操作系统...- 微内核 : 将 操作系统 拆分成 多个 独立功能模块 , 这些 独立功能模块 之间通过 " 消息 " 进行通信 , 微内核 效率低 ; 下图中 , 进程 , 文件系统 , 设备驱动 , 与 微内核...; 四、Linux 内核动态加载机制 ---- Linux 内核模块动态加载 : Linux 内核 使用了 模块设计 , 可以进行 动态加载 内核模块 ; Linux 内核的 核心实现 , 设备驱动实现..., 可以 编译成一个独立模块 , 这些独立模块可以被编译成 独立的目标文件 , 可以在运行时 , 动态 加载 / 卸载 内核模块 ; 开发简单 : Linux 内核模块引入 , 带来了很多便利 , 很多内核驱动

    5.3K30

    Linux笔记(5)| 文件IO操作(续)

    上一次我们说到了文件的常规操作,打开,读,写,关闭这些,重点在于打开是以什么样的方式来打开,包括文件的权限,内容是否清空,打开不存在的文件等等情形。今天继续说一下文件IO操作。...当我们去open时,内核会从文件描述符表中挑选一个最小的未被使用的数字给我们返回。也就是说如果之前fd已经占满了0-9,那么我们下次open得到的一定是10....linux内核占用了0、1、2这三个fd是有用的,当我们运行一个程序得到一个进程时,内部就默认已经打开了3个文件,这三个文件对应的fd就是0、1、2。...6、标准IO库介绍 标准IO和文件IO有什么区别 (1)看起来使用时都是函数,但是:标准IO是C库函数,而文件IO是linux系统的API (2)C语言库函数是由API封装而来的。...譬如IO,文件IO是不带缓存的,而标准IO是带缓存的,因此标准IO比文件IO性能要更高。 主要参考:朱老师物联网大讲堂

    1.2K40
    领券