本文内容来之书籍《Netty 4核心原理与手写RPC框架实战》

1. 什么是I/O

我们都知道在UNIX世界里一切皆文件,而文件是什么呢?文件就是一串二进制流而已,其实不管是Socket,还是FIFO(First Input First Output,先进先出队列))、管道、终端。对计算机来说,一切都是文件,一切都是流。在信息交换的过程中,计算机都是对这些流进行数据的收发操作,简称为I/O操作(Input andOutput),包括往流中读出数据、系统调用Read、写入数据、系统调用Write。不过计算机里有那么多流,怎么知道要操作哪个流呢?实际上是由操作系统内核创建文件描述符(File Descriptor,FD)来标识的,一个FD就是一个非负整数,所以对这个整数的操作就是对这个文件(流)的操作。我们创建一个Socket,通过系统调用会返回一个FD,那么剩下的对Socket的操作就会转化为对这个描述符的操作,这又是一种分层和抽象的思想。

2. I/O交互流程

通常用户进程中的一次完整I/O交互流程分为两阶段,首先是经过内核空间,也就是由操作系统处理;紧接着就是到用户空间,也就是交由应用程序。具体交互流程如下图所示。

内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中,Linux使用两级保护机制:0级供内核(Kernel)使用,3级供用户程序使用。每个进程都有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。最高的1G字节虚拟内核空间则为所有进程及内核共享。

操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据。因为Linux使用的虚拟内存机制,必须通过系统调用请求Kernel来协助完成I/O操作,内核会为每个I/O设备维护一个缓冲区,用户空间的数据可能被换出,所以当内核空间使用用户空间的指针时,对应的数据可能不在内存中。

对于一个输入操作来说,进程I/O系统调用后,内核会先看缓冲区中有没有相应的缓存数据,如果没有再到设备中读取。因为设备I/O一般速度较慢,需要等待,内核缓冲区有数据则直接复制到进程空间。所以,一个网络输入操作通常包括两个不同阶段。

(1)等待网络数据到达网卡,然后将数据读取到内核缓冲区。(2)从内核缓冲区复制数据,然后拷贝到用户空间。I/O有内存I/O、网络I/O和磁盘I/O三种,通常我们说的I/O指的是后两者。如下图所示是I/O通信过程的调度示意。

基础知识之什么是I/O相关推荐

  1. 嵌入式Linux的OTA更新,基础知识和实现

    嵌入式Linux的OTA更新,基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一旦嵌入式Li ...

  2. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  3. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  4. 《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...

    <计算机与网络应用基础知识1>模拟试卷 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机与网络应用基础知识1& ...

  5. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  6. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  7. 计算机基础知识掌握欠缺,《计算机基础知识》实验教学改革探讨.pdf

    <计算机基础知识>实验教学改革探讨.pdf Science& TechnologyVision 科 技 视 界 科技 探·索·争鸣 计<算机基础知识>实验教学改革探讨 ...

  8. python计算wav的语谱图_Python实现电脑录音(含音频基础知识讲解)

    前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些东西已经有了,不妨直接去 github 上搜,用 ...

  9. 计算机wrod初级考试题及答案,计算机基础知识+Word基础知识+Excel基础知识试题答案解析.doc...

    文档介绍: 计算机基础知识+ Word基础知识+ Excel基础知识 第一部分 一.单项选择题 1.世界上第一台电子数字计算机取名为(    ). A.UNIVAC    B.EDSAC    C.E ...

  10. java 前端基础知识_【计算机·知识】关于前端的计算机基础知识

    原标题:[计算机·知识]关于前端的计算机基础知识 作为一个刚刚入门的程序猿,你是否对专业知识有足够的了解?今天新闻君带你走进前端的世界. 前端的语言接触起来相对于后端的语言要容易不少,但前端的语言也有 ...

最新文章

  1. [HAOI2006]均分数据
  2. java开源框架有哪些_java web开发框架有哪些
  3. 计算机辅助教学应用论文,高校计算机辅助教学应用论文
  4. 方法参数泛型_无参数泛型方法反模式
  5. github大学课程_GitHub基础教程:如何使用GitHub课程
  6. james-2.3.2中的配置
  7. CentOS 7下sshd防暴力破解及fail2ban的使用方法
  8. Javascript--闭包
  9. Maven 生命周期详解
  10. webpack bable
  11. 内网监控群晖918+(docker telegraf influxdb grafana)
  12. 2020年2月全国程序员工资统计,平均工资13716元
  13. 给SpringBoot Web应用配上JavaFx漂亮衣服
  14. pandas中drop用法_机器学习笔记:Pandas的delete、drop函数的用法
  15. MultipartFile和File互转
  16. 手机浏览器能接收彩信,还hold住吗?
  17. 12864LCD驱动ST7567
  18. geohash网格图_聊聊GeoHash
  19. iebook超级精灵引领企业电子商刊(杂志)20O7风潮
  20. 63.(cesium之家)cesium河流流水

热门文章

  1. velocity--shiro
  2. 2016美国QCon思考:通过Quora和Spotify案例,直击数据处理背后的魅影
  3. 详解web容器 - Jetty与Tomcat孰强孰弱
  4. android 进程(复习)
  5. Tomcat and solr 环境配置
  6. greenDAO系列7--关系
  7. C#工程添加了DLL编译运行时却提示”无法加载DLL“的解决方案
  8. linux命令学习_实验楼(一)
  9. 使用cordova,使html5也能像IOS,Android那样可以 调取手机的相机拍照功能
  10. nodepad代码格式复制到word发布到博客