最新IO接口的基本概念
- 格式:ppt
- 大小:1.56 MB
- 文档页数:48


这是一份很全很全的IO基础知识与概念什么是 IO在计算机操作系统中,所谓的I/O就是输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘IO模型和网络IO模型。
IO操作会涉及到用户空间和内核空间的转换,先来理解以下规则:•内存空间分为用户空间和内核空间,也称为用户缓冲区和内核缓冲区;•用户的应用程序不能直接操作内核空间,需要将数据从内核空间拷贝到用户空间才能使用;•无论是read操作,还是write操作,都只能在内核空间里执行;•磁盘IO和网络IO请求加载到内存的数据都是先放在内核空间的;再来看看所谓的读(Read)和写(Write)操作:•读操作:操作系统检查内核缓冲区有没有需要的数据,如果内核缓冲区已经有需要的数据了,那么就直接把内核空间的数据copy到用户空间,供用户的应用程序使用。
如果内核缓冲区没有需要的数据,对于磁盘IO,直接从磁盘中读取到内核缓冲区(这个过程可以不需要cpu参与)。
而对于网络IO,应用程序需要等待客户端发送数据,如果客户端还没有发送数据,对应的应用程序将会被阻塞,直到客户端发送了数据,该应用程序才会被唤醒,从Socket协议找中读取客户端发送的数据到内核空间,然后把内核空间的数据copy到用户空间,供应用程序使用。
•写操作:用户的应用程序将数据从用户空间copy到内核空间的缓冲区中(如果用户空间没有相应的数据,则需要从磁盘—>内核缓冲区—>用户缓冲区依次读取),这时对用户程序来说写操作就已经完成,至于什么时候再写到磁盘或通过网络发送出去,由操作系统决定。
除非应用程序显示地调用了sync 命令,立即把数据写入磁盘,或执行flush()方法,通过网络把数据发送出去。
•绝大多数磁盘IO和网络IO的读写操作都是上述过程,除了后面要讲到的零拷贝IO。
用户空间&内核空间野生程序员对于这个概念可能比较陌生,这其实是Linux 操作系统中的概念。