文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

linux io是什么

2023-03-24 17:35

关注

本篇内容主要讲解“linux io是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux io是什么”吧!

linux io指的是一种文件操作;在Linux中,文件就是一串二进制流,那么在信息的交换过程中,我们都是对这些流进行数据收发操作,这些操作简称为I/O操作;由于Linux使用的是虚拟内存机制,所以必须通过系统调用请求内核来完成IO动作。

linux io指的是什么?

我们都知道在Linux的世界,一切皆文件。

而文件就是一串二进制流,不管Socket、FIFO、管道还是终端,对我们来说,一切都是流。

通常用户进程的一个完整的IO分为两个阶段:

磁盘IO:

linux io是什么

网络IO:

linux io是什么

操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能使用指针传递数据,因为Linux使用的虚拟内存机制,必须通过系统调用请求内核来完成IO动作。

IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者!

为什么需要IO模型

如果使用同步的方式来通信的话,所有的操作都在一个线程内顺序执行完成,这么做缺点是很明显的:

因该需要出现IO模型。

Linux的IO模型

在描述Linux IO模型之前,我们先来了解一下Linux系统数据读取的过程:

linux io是什么

以用户请求index.html文件为例子说明

linux io是什么

基本概念

用户空间和内核空间

操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。

进程切换

为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。

这种行为被称为进程切换。

因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

进程的阻塞

正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。

可见,进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞状态。

当进程进入阻塞状态,是不占用CPU资源的。

文件描述符

文件描述符(File Descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。

文件描述符在形式上是一个非负整数,实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。

缓存IO

大多数文件系统的默认 IO 操作都是缓存 IO。

其读写过程如下:

假设内核空间缓存无需要的数据,用户进程从磁盘或网络读数据分两个阶段:

缓存 IO 的缺点:

数据在传输过程中需要在应用程序地址空间和内核空间进行多次数据拷贝操作,这些数据拷贝操作所带来的CPU以及内存开销非常大。

同步阻塞

用户空间的应用程序执行一个系统调用,这会导致应用程序阻塞,什么也不干,直到数据准备好,并且将数据从内核复制到用户进程,最后进程再处理数据,在等待数据到处理数据的两个阶段,整个进程都被阻塞,不能处理别的网络IO。

这也是最简单的IO模型,在通常FD较少、就绪很快的情况下使用是没有问题的。

linux io是什么

同步非阻塞

非阻塞的系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好,此时会返回一个error。

linux io是什么

IO多路复用

IO多路复用,这是一种进程预先告知内核的能力,让内核发现进程指定的一个或多个IO条件就绪了,就通知进程。

使得一个进程能在一连串的事件上等待。

IO复用的实现方式目前主要有Select、Poll和Epoll。

linux io是什么

伪代码描述IO多路复用:

while(status == OK) { // 不断轮询 ready_fd_list = io_wait(fd_list); //内核缓冲区是否有准备好的数据 for(fd in ready_fd_list) {  data = read(fd) // 有准备好的数据读取到用户缓冲区  process(data) }}

信号驱动

首先我们允许Socket进行信号驱动IO,并安装一个信号处理函数,进程继续运行并不阻塞。

当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。

流程如下:

此种IO方式存在的一个很大的问题:Linux中信号队列是有限制的,如果超过这个数字问题就无法读取数据

linux io是什么

异步非阻塞

异步IO流程如下所示:

相对于同步IO,异步IO不是顺序执行。

用户进程进行aio_read系统调用之后,无论内核数据是否准备好,都会直接返回给用户进程,然后用户态进程可以去做别的事情。

等到数据准备好了,内核直接复制数据给进程,然后从内核向进程发送通知。

对比信号驱动IO,异步IO的主要区别在于:

异步IO又叫做事件驱动IO,在Unix中,为异步方式访问文件定义了一套库函数,定义了AIO的一系列接口。

目前Linux中AIO的内核实现只对文件IO有效,如果要实现真正的AIO,需要用户自己来实现。

目前有很多开源的异步IO库,例如libevent、libev、libuv。

linux io是什么

到此,相信大家对“linux io是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯