zoukankan      html  css  js  c++  java
  • I/O模型系列之一:Linux I/O模型基本概念

    1. IO模型矩阵

      基本 Linux I/O 模型的简单矩阵:

    同步与异步:描述的是用户线程与内核的交互方式。

      同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞!

    同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行;(Blocking IO、Non-Blocking IO)

    异步是指用户线程发起IO请求后仍然继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。(IO Multiplexing、Asynchronous IO)

    阻塞与非阻塞:描述是用户线程调用内核IO操作的方式。

      阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回!

    阻塞是指IO操作需要彻底完成后才返回到用户空间;

    非阻塞指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成。

    2. IO模型

      linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段。

     

       这张图大致描述了数据从外部磁盘运行中程序的内存中移动的过程。

    3. 用户空间、内核空间

      现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟储存空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核,保证内核的安全,操作系统将虚拟空间划分为两个部分,一个部分为内核空间,一部分为用户空间。

      如何分配这两个空间的大小也是有讲究的,如windows 32位操作系统,默认的用户空间:内核空间的比例是1:1;而在32位Linux系统中的默认比例是3:1(3G用户空间,1G内核空间)。

    4. 进程切换

      为了控制进程的执行,内核必须要有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行。这种行为成为进程的切换。任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

    进程切换的过程,会经过下面这些变化:

    1、保存处理机上下文,包括程序计数器和其他寄存器。

    2、更新PCB信息。

    3、将进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。

    4、选择另外一个进程执行,并更新PCB

    5、更新内存管理的数据结构。

    6、恢复处理机上下文

    5. 缓存IO

      缓存IO又称称为标准IO,大多数文件系统的默认IO操作都是缓存IO。在Linux的缓存IO机制中,操作系统会将IO的数据缓存在文件系统的页缓存(page cache)。也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓存区拷贝到应用程序的地址空间中。

      这种做法的缺点就是,需要在应用程序地址空间和内核进行多次拷贝,这些拷贝动作所带来的CPU以及内存开销是非常大的

    6. 文件描述符fd

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

      文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统

    7. 摘录网址

    深入理解JAVA I/O系列六:Linux中的IO模型

    同步与阻塞,异步与非阻塞的区别

    阻塞IO、非阻塞IO的区别

    ps: 抛弃本文上下文

      同步与异步是对应的,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。

      阻塞与非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。

      

      阻塞是使用同步机制的结果,非阻塞则是使用异步机制的结果。

     

      同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞!

      阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回!

  • 相关阅读:
    省选模拟24 题解
    省选模拟23 题解
    省选模拟22 题解
    省选模拟21 题解
    省选模拟20 题解
    省选模拟19 题解
    省选模拟18 题解
    源码分析工具
    深入理解js的变量提升和函数提升
    python并发编程之IO模型
  • 原文地址:https://www.cnblogs.com/haimishasha/p/10604766.html
Copyright © 2011-2022 走看看