Linux IO模型漫谈(1)
基础知识
Linux将所有外部设备都看做一个文件来进行操作。因此,linux对所有外部设备的操作都可以看做是文件的操作。文件的操作当然需要有个标示描述它,这就是文件描述符(file descriptor)。
linux的IO操作如何形象理解呢?
我们说网络socket的read()是一个IO操作命令,具体流程是这样的:
应用程序调用read命令,通知内核需要做读取数据操作
内核创建一个文件描述符
内核从物理层收到读数据的命令,从网络中获取数据包
数据包传递到TCP/IP层,解析数据包的头
内核将数据包缓存在文件描述符的读缓存区(接受缓存区)中,注意这里的读缓存区是在内核中的
当文件描述符读缓存区数据字节数大于应用程序定义的低水位的时候(read的一个参数),此时文件描述符处于读就绪的状态
将读缓存区中的数据复制到应用程序(用户区)返回
这里需要说明的是
1 每个文件描述符都有自己的读缓冲区和写缓冲区,读缓冲区对应的是read操作,写缓冲区对应的就是write操作了
2 读缓冲区和写缓冲区都是在内核区中
IO模型
现有的linux IO模型有5种:
阻塞式IO模型,非阻塞式IO模型,IO复用模型,信号驱动式IO模型,异步IO模型
经常弄不清楚的就是阻塞,非阻塞,异步,同步
说明一下
上图给出的同步异步标准是:数据描述符缓存是由谁来进行读取的?由用户程序读取,则判断为同步;由内核推送,判断为异步
上图给出的阻塞非阻塞标准是:调用的用户进程是否是阻塞的状态
这里关于这五种IO模型的阻塞同步状态有很多种说法,比较有争议的是IO复用模型和信号驱动IO模型的判断分类上,推荐这一种判断:
关于IO的同步、异步、阻塞、非阻塞
本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2012/05/29/2523692.html,如需转载请自行联系原作者
Linux IO模型漫谈(1)相关推荐
- Linux IO模型漫谈(6)- 信号驱动IO模型
Unix上有定义了许多信号.源自Berkeley的实现使用的是SIGIO信号来支持套接字和终端设备上的信号驱动IO. 信号驱动IO模型主要是在UDP套接字上使用,在TCP套接字上几乎是没有什么使用的. ...
- linux网络编程—7层网络以及5种Linux IO模型以及相应IO基础
一.七层网络模型 OSI是Open System Interconnection的缩写,意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,它是一个七层的. ...
- Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型
Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...
- Linux IO模型
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时, ...
- 聊聊 Linux 中的五种 IO 模型
聊聊 Linux 中的五种 IO 模型 2016/04/21 · IT技术 · 8 评论 · iO, 同步, 异步, 阻塞, 非阻塞 分享到:0 本文作者: 伯乐在线 - 陶邦仁 .未经作者许可,禁止 ...
- 详解Linux 五种IO模型
原文:https://www.jianshu.com/p/486b0965c296 上一篇 同步.异步.阻塞.非阻塞 已经通俗的讲解了,要理解同步.异步.阻塞与非阻塞重要的两个概念点了,没有看过的,建 ...
- Linux 五种IO模型
想快速了解,看文末总结. 1 概念说明# 在进行解释之前,首先要说明几个概念: 用户空间和内核空间 进程切换 进程的阻塞 文件描述符 缓存 IO 1.1 用户空间与内核空间## 现在操作系统都是采用虚 ...
- linux 五种 IO 模型
一. 同步异步,阻塞非阻塞与数据二次拷贝 1. 同步异步: 任务的执行顺序上区分 同步: 指一个任务, 只有当另一个任务返回后才能继续执行本任务 异步: 指一个任务只是发起一个通知告诉另一个任务可以执 ...
- [linux]linux IO 5种方式
1.几个重要概念 用户空间与内核空间: 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访 ...
最新文章
- 这位挺身而出的研究生,被直接录用!
- python小实验(1):字符串处理
- tensorflow源码编译教程_极简入门TensorFlow C++源码
- pytorch中tensorboard使用
- 3-AIV--使用ContentProvider获得所有图片路径
- 91期:2016阿里安全峰会重点资料新鲜开放,不能错过
- Locality Sensitive Hashing(LSH)之随机投影法
- Atitit jsr规范化分类 attilax总结
- google font 字体下载方式
- itext修改pdf文字
- poj1386 Paly onWords
- s一般怎么称呼自己的m_“老公、老婆、亲爱的”?快来围观明星怎么称呼自己的另一半!...
- NFS配置(RHCE考试题)
- TPM、TCM分别是什么?
- oracle 报12560,UNIX系统中Oracle报TNS-12560错误的解决思路
- STEP7 V5.5 SP4 HF1 + WINCC7.2 + PLCSIM V5.4 SP5工程项目如何进行PLC程序和WINCC画面仿真运行
- Win11系统开机黑屏无法显示桌面怎么解决?
- CTP程序化交易入门系列之一:准备
- linux 实验 ps,OS第1次实验报告:熟悉使用Linux命令和剖析ps命令
- BES LINEIN 讲解
热门文章
- Java数据结构和算法:HashMap,哈希表,哈希函数
- 二章: CentOS6.5 连接FTP服务器、部署telnet服务、安装SCP、服务端FTP、SFTP部署
- docker 镜像基本操作、镜像与容器常用指令
- Sublime Text3软件安装教程
- 没有form的表单验证_PHP动态生成表单,内置17种常用组件并且支持表单验证!
- linux文件明明存在却无法vim打开_教你几招,让你vim编辑器变得友善起来(特别水,不要点进来)...
- xbox acc驱动win7_Xbox老大:希望第一方工作室能推出更多单机游戏_电竞
- lisp 线型虚实变换_绘画|虚实?国风画这叫线型变化!画线条的正确姿势,你对了吗...
- java 方法 参数 引用_Java 基础
- Linux基础之shell变量