`
javazqd110
  • 浏览: 8528 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

系统的几种IO模型

阅读更多

前言:

  1.在计算机系统中,操作系统充当着IO操作等这个硬件相关的功能具体实现的基本角色之一。而我们所开

   发应用程序中所涉及到硬件相关的操作时,本质上是通过调用操作系统给我们提供的函数来实现的。

   

  2.概念介绍

   用户态和系统态:

     用户态:当cpu执行的指令处在用户层时,此时程序处于用户态。

     系统态:当cpu执行的指令处在系统层时,此时程序处于系统态。

   阻塞和非阻塞:

     阻塞:某个事件执行过程中,发出执行操作的请求,而该请求操作需要的条件不满足,那么就会一

         直在那等待,直至条件满足。在IO操作中即为系统调用发起到IO执行开始这一段过程。

     非阻塞:当某个事件执行过程中,发出执行操作的请求,而该请求操作需要的条件不满足,会立即

          返回一个标志信息告知条件不满足,发起者就不会一直在那等待。在IO操作中即为系统调用

          发起,若不满足执行IO操作时,系统层向用户层返回信息,用户层就不会等待。    

   同步和异步:

     同步:某个事件的发生,就必须逐个顺序地进行,从而会导致整个流程的暂时等待,事件外的事件

         没有办法并发地执行。在IO操作中表现为当IO操作发生时,用户层的其他流程无法执行(站在

         用户层程序的角度看,IO操作发生时,我程序的其他部分无法执行了)

     异步:某个事件的发生,不会导致整个流程的暂时等待,事件外的事件可以并发地执行。IO操作

         中表现为当IO操作发生时,用户层的其他流程照样执行(在用户层程序来看)。

   IO操作主要流程:

     1.用户程序调用系统IO函数。

     2.系统等待数据就绪。

     3.IO数据由系统内存空间拷贝到用户内存空间。

     4.用户程序操作IO函数调用返回的数据。

操作系统IO模型:

   1.目前操作系统的IO模型有5中:阻塞IO/非阻塞IO/IO复用/事件驱动IO/异步IO

   1.1.阻塞式IO
      

     第一阶段是指磁盘把数据装载到内核的内存中空间中。

     第二阶段是指内核的内存空间的数据copy到用户的内存空间(这个才是真实I/O操作)。

   1.2.非阻塞式IO

     
       

     每隔一段时间,询问系统数据是否准备完成,在用户层上则表现为需不断while循环调用询问数据是

     否就绪。

   1.3.IO复用

      
        

      1.需使用两个系统调用(上图标注12)1中的系统调用为操作系统提供的一种机制(linux提供了

       selectpoll两中实现),称为复用器。

      2.IO复用流程介绍:a)select/poll机制主要功能时帮助调用者寻找在其上注册过切就绪的设备(

                   是非阻塞IO中将由用户层来判断是否数据已就绪的功能交给系统来做,并且

                   可判断多个IO设备),用户层程序调用后会被阻塞。

                  b)当有设备数据就绪时,通知调用者。

                  c)调用者即可进行IO数据的系统调用

      3.好处:只需启动一个线程不断去轮询复用器上注册IO设备的状态即可,避免了一个线程对应一

           个IO设备的情况,减少了资源占用。

   1.4.事件驱动IO

      
        

      1.采用回调的方式,给相应IO设备事件注册事件处理函数,用户层程序继续往下执行由系统来关

        注数据是否就绪,并通过发生信号来通知用户层程序来调用事件处理函数。

      2.好处:等待数据准备好这段时间,用户层程序不会处于阻塞状态中。

      3.如果一个事件通知一个进程,进程正在忙的,提供一下两种机制处理

       水平触发机制: 内核通知进程来读取数据,进程没来读取数据,内核需要一次一次的通知进程。

       边缘触发机制: 内核只通知一次让进程来取数据,进程在超时时间内,随时可以来取数据,把这个事

                 件信息状态发给进程,好比发个短息给进程( nginx默认采用了该机制)。

    1.5.异步IO

      
       

                  1.不同于以上的IO模型,当IO数据就绪后,也是由系统负责将数据拷贝到用户层中,再通过信号

        通知用户层程序后,用户层程序就直接可以操作IO调用后返回的数据了(用户层程序无需发起读

        取数据的系统调用了)。

总结:

    1.我们可以看出IO操作的功能实现逐步移至系统层,避免用户层到系统层上下文的切换。

  • 大小: 4.3 KB
  • 大小: 30.7 KB
  • 大小: 38.9 KB
  • 大小: 39.5 KB
  • 大小: 37 KB
  • 大小: 34.2 KB
1
0
分享到:
评论

相关推荐

    Windows Socket五种IO模型

    Windows 操作系统提供了五种 IO 模型,分别是选择模型(Select)、异步选择模型(WSAAsyncSelect)、事件选择模型(WSAEventSelect)、重叠 IO 模型(Overlapped I/O)和完成端口模型(Completion Port)。每一种...

    重叠IO模型

    重叠IO模型属于异步I/O的一种,但与标准的异步I/O(如POSIX的aio_*函数)不同,它在Windows操作系统中被广泛使用,被称为完成端口(I/O Completion Ports,IOCP)。 重叠IO模型的工作流程如下: 1. **初始化**:...

    WinSock 异步IO模型

    WinSock异步IO模型是Windows Socket编程中一种高效的数据传输方式。它允许应用程序在等待数据传输完成时执行其他任务,从而提高系统资源利用率和程序响应性。与传统的同步IO模型不同,异步IO不会阻塞调用线程,而是...

    IO模型与性能分析

    ### IO模型与性能分析 #### 一、基本概念与背景 在探讨IO模型与性能分析之前,我们需要了解一些基础概念: - **时钟周期**:指的是一个时钟脉冲所持续的时间,它是衡量处理器速度的基本单位之一。 - **总线周期**...

    Linux IO 之 IO与网络模型.pdf

    在 Linux 中,IO 模型可以分为阻塞 IO、非阻塞 IO、异步 IO 等几种。 1. 阻塞 IO 模型 阻塞 IO 模型是最基本的 IO 模型。在这种模型中,进程发起 IO 请求后,会一直等待直到 IO 操作完成。在这个过程中,进程会被...

    IO服务器模型介绍

    本篇文章将详细介绍几种主要的异步服务器模型及其应用场景,帮助开发者根据自身项目的特性做出最合适的选择。 #### 一、WinSock 异步 I/O 模型概述 Windows 平台提供了多种 I/O 模型,这些模型针对不同的应用场景...

    IO模型_嵌入式-常用知识&面试题库_大厂面试真题.pdf

    以下将详细介绍几种常见的IO模型,并结合面试题库中的常见问题进行讨论。 1. 阻塞IO模型(Blocking IO) 阻塞IO是最基本的IO模型,当进程执行read或write等IO操作时,如果数据尚未准备好,那么进程会被挂起,直到...

    IO 模型网络程序实验

    首先,我们需要了解几种常见的I/O模型: 1. 同步阻塞I/O模型:这是最基础的模型,当调用read或write函数时,如果数据未准备好,进程会被挂起,直到数据准备完毕。 2. 同步非阻塞I/O模型:在这种模型中,read或...

    LinuxIO通信模型漫谈.pdf

    本文将从 Unix/Linux 接口出发,介绍几种常用的 IO 模型,并分析它们的优缺点。 阻塞型 IO 模型 阻塞型 IO 模型是最基本的 IO 模型,使用 listen()、send()、recv() 等接口来实现网络通信。这些接口在调用时都可能...

    幽默Socket+IO模型.doc幽默Socket+IO模型.doc

    在Windows环境中,Socket的I/O模型主要包括以下几种: 1. **阻塞I/O(Blocking I/O)**:这是最简单的模型,当执行读或写操作时,如果数据不可用或者缓冲区满,则调用会阻塞直到操作完成。这会导致线程在等待I/O...

    SOCKET模型之重叠IO

    ### SOCKET模型之重叠IO深度解析 #### 一、重叠模型的优点 重叠I/O模型,作为SOCKET编程中的高级技术,具有显著优势,尤其在高性能网络应用中展现出色性能。 1. **跨平台性**:重叠I/O模型能够运行在所有支持...

    网络IO模型 Linux环境下的network IO

    本主题将深入探讨几种主要的网络I/O模型,包括阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O以及异步I/O,并结合Linux内核机制进行详细分析。 1. **阻塞I/O模型** 在阻塞I/O模型中,当进程尝试读取或写入数据时,如果...

    基于select IO模型的远程目录浏览与多线程文件下载

    本文将深入探讨“基于select IO模型的远程目录浏览与多线程文件下载”这一主题,这涉及到操作系统内核、网络编程、多线程以及文件I/O等多个核心知识点。 首先,我们要理解什么是select IO模型。在Unix/Linux系统中...

    11原理 1:鞭辟入里 —— 线程 IO 模型(1).md

    在讨论线程IO模型之前,首先需要明确几个概念。IO模型通常指的是操作系统处理输入输出操作的方式,涉及到线程或进程如何与数据输入输出设备进行交互,以及这种交互的效率和性能。在传统的IO模型中,当线程进行读写...

    winsocket 5中IO模型-代码全攻略

    本文将详细探讨五种不同的I/O模型:选择模型(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)。我们将通过一个简单的回应反射式...

    几种网络编程模型-小练习

    例如,你可以创建一个简单的服务器,分别使用这四种模型处理客户端请求,观察它们在处理并发连接时的行为差异。同时,了解如何在不同场景下选择合适的模型也至关重要。例如,对于低并发、高延迟的环境,同步阻塞模型...

    TCP服务器IO模型之非阻塞轮询.zip

    TCP服务器IO模型的设计和实现对系统的性能和可扩展性有着重要影响。本主题聚焦于“TCP服务器IO模型之非阻塞轮询”,这是一种提高服务器处理能力的有效策略,特别适用于高并发场景。下面将详细介绍非阻塞轮询的概念、...

    Socket IO模型之选择

    本文将详细介绍几种常见的 Windows 平台下的 Socket I/O 模型,并重点探讨选择(select)模型的应用场景及其优缺点。 #### 1. Socket I/O 模型概述 Windows 平台为开发人员提供了多种 Socket I/O 模型,包括选择...

    IO完成端口模型TCP服务端

    在“IO完成端口模型TCP服务端”中,主要涉及以下几个核心知识点: 1. **IO完成端口**:IOCP是Windows系统提供的一个I/O管理机制,它可以将多个I/O操作集中在一个端口上进行调度,使得系统能同时处理大量的并发请求...

Global site tag (gtag.js) - Google Analytics