1、甚么是IO?

来源:原创作者:编辑:admin2020-03-30 14:32

  展开全文

  我们都知道unix世界里、一切皆文件、而文件是甚么呢?文件就是一串二进制流而已、不论socket、照样FIFO、管道、终端、对我们来讲、一切都是文件、一切都是流、在信息交换的过程当中、我们都是对这些流停止数据的收发操作、简称为I/O操作(input and output)、往流中读出数据、系统调用read、写入数据、系统调用write、不外话说回来了、计算机里有这么多的流、我如何知道要操作哪个流呢?做到这个的就是文件刻画符、即平日所说的fd、一个fd就是一个整数、所以对这个整数的操作、就是对这个文件(流)的操作、我们创立一个socket、经过系统调用会前去一个文件刻画符、那么剩下对socket的操作就会转化为对这个刻画符的操作、不能不说这又是一种分层和笼统的思维、

  平日用户过程当中的一个完整IO分为两阶段:

  

  

  内核空间中寄存的是内核代码和数据、而过程的用户空间中寄存的是用户依次的代码和数据、不论是内核空间照样用户空间、它们都处于虚拟空间中、Linux应用两级保护机制:0级供内核应用、3级供用户依次应用、

  操作系统和驱动依次运转在内核空间、应用依次运转在用户空间、二者不能复杂地应用指针传递数据、因为Linux应用的虚拟内存机制、其必须经过系统调用恳求kernel来协助完成IO举措、内核会为每个IO装备保护一个缓冲区、用户空间的数据能够被换出、当内核空间应用用户空间指针时、对应的数据能够不在内存中

  关于一个输入操作来讲、过程IO系统调用后、内核会先看缓冲区中有没有响应的缓存数据、没有的话再到装备中读取、因为装备IO通俗速度较慢、需求等待、内核缓冲区有数据则直接复制到过程空间、

  所以、关于一个收集输入操作平日包罗两个分歧阶段:

  (1)等待收集数据抵达网卡 –> 读取到内核缓冲区

  (2)从内核缓冲区复制数据 –> 用户空间

  IO有内存IO、收集IO和磁盘IO三种、平日我们说的IO指的是后二者

  对IO底层交互感兴味的小错误可以好好了解一下POSIX(Portable Operating System Interface for Computing System)、我对深奥深厚次道理也不如何熟、之所以写此篇博文也是为了前面的Java IO进修、深化浅出点到便可、此章节给有兴味的冤家一个引子、

  《UNIX收集编程》说得很清晰、5种IO模型辨别是阻塞IO模型、非阻塞IO模型、IO复用模型、旌旗灯号驱动的IO模型、异步IO模型、前4种为同步IO操作、只要异步IO模型是异步IO操作、请仔细浏览IO交互便于了解IO模型