`
javazqd110
  • 浏览: 8356 次
  • 性别: 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不会阻塞调用线程,而是...

    Linux IO 之 IO与网络模型.pdf

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

    高性能IO模型浅析

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非...深入浅出介绍这几种模型

    IO 模型网络程序实验

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

    LinuxIO通信模型漫谈.pdf

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

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

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

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

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

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

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

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

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

    IO完成端口模型TCP服务端

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

    网络IO的基本概念以及基础原理

    NIO(Non-Blocking I/O)是一种IO模型,它允许线程在等待IO操作完成时不需要阻塞,能够执行其他任务。NIO的设计思想是基于事件驱动的编程模型,使用selector选择器来监听IO事件,并使用buffer缓冲区来存储数据。 ...

    重叠IO服务端案例

    1. **重叠IO模型**:在Windows中,重叠IO是通过使用WSAAsyncSelect或WSAEventSelect函数来实现的。这两个函数允许我们在套接字上注册事件,如连接请求、数据接收或发送完成,这些事件可以与系统事件对象(如Windows...

    WindowsSocket五种模型

    Windows Socket 五种I/O模型是Windows操作系统为网络编程提供的不同方式,以适应不同的应用场景和性能需求。这些模型包括: 1. **选择模型(Select)**: Select模型是基于Berkeley套接字的一个经典I/O管理机制。...

    drawio-parser:使用draw.io ERR模型创建环回模型

    在"drawio-parser: 使用draw.io ERR模型创建环回模型"这个主题中,我们将深入探讨如何利用draw.io来构建环回模型,这是一种用于测试和验证系统功能的方法。环回模型通过模拟输入数据并观察预期的输出来检查系统是否...

    11. 高级IO模型(1)1

    本节将深入探讨几种高级I/O模型,重点分析它们的特点和应用场景。 首先,我们要区分基本的I/O概念——阻塞与非阻塞。在阻塞模式下,如系统调用`read`或`accept`,如果数据尚未准备好,调用进程会被挂起,内核会调度...

    实验7 WSAeventselectWINSOCK IO模型程序设计.doc

    实验7主要探讨的是Windows Socket API中的WSAeventselect模型,这是一种用于异步I/O操作的机制,特别适用于网络编程。该模型与WSAAsyncSelect模型相似,都允许应用程序以事件驱动的方式处理网络事件,比如接收连接...

    RapidIO学习笔记--互连协议的介绍

    RapidIO技术是一种高性能、低延迟的互连协议,尤其适用于嵌入式系统中的处理器、存储器和I/O设备间的通信。它作为一个开放标准,旨在提高系统的灵活性、可扩展性和可靠性,同时降低功耗和成本。 RapidIO的核心概念...

Global site tag (gtag.js) - Google Analytics