到底什么是IO

article/2025/4/27 2:52:33

IO 作为操作系统的核心知识之一, 无论是在本机、传统的单体应用、还是分布式系统中,都有非常重要的地位.

今天就和大家系统地聊一聊 IO 相关的东西.

IO

IO,Input/Output 简写,是指内存和外设之间的数据复制的过程. 输入是指数据从外设复制到内存中, 输出则是指数据从内存复制到外设.

根据外设种类可以分为磁盘IO和网络IO, 因为外设的数据读写速率较低以及 IO 会涉及到系统调用以及中断,所以通常都会比较耗时。在程序优化时思路之一就是减少 IO 。

软件开发中的 IO

软件开发中各开发语言都提供了 IO 操作的方法或函数, 但应用程序在执行 IO 方法时, 实际上由两步完成,第一步:执行程序,发起系统调用,第二步系统执行 IO 。返回时则首先将数据读入到内核空间,然后内核空间再将数据复制给应用程序。

Unix IO 模型

Unix 根据应用程序 IO 的两个阶段特征将 IO 分为 5 种类型.

1. BIO

阻塞 IO, 服务器在 accept(),read(),write(), 数据没有 ready 前会一直阻塞线程.

2. NIO

 非阻塞 IO, 服务器在 accept(),read(),write(), 数据没有 ready 会立刻返回异常.但为了能读到数据,需要应用程序不断地轮询.

3. IO 复用

在 java 中, 多路复用器 selector 也是 NIO 的核心组件, 利用操作系统的 select、poll、 epoll 机制,来对多个连接进行注册监听,使得一个线程也可以同时处理多个客户端.

 Unix 中一切皆文件, 程序每次轮询检查时都意味着调用 select 系统调用来检查所有的 fd, 这个过程涉及到用户空间和内核空间的切换以及 fd 的拷贝.

while(true) {select.select();
}

4. 信号驱动 IO

通过通知的机制,使得在第一阶段不用阻塞调用进程(阻塞和轮询), 进程可以继续做其他事情,在一定程度提高了程序效率,但是在第二阶段数据复制过程仍然会阻塞进程.

5. AIO

NIO 在数据没有 ready 立刻返回异常, 后续需要不断地轮询, 这个过程也是非常低效的, 操作系统提供了异步通知机制: 一旦数据 ready 会自动通知调用线程.

 总结

BIO 、NIO、IO复用、以及信号驱动IO,  由于第二阶段的数据复制过程, 调用线程都会被阻塞, 因此都属于同步IO. 


如果觉得还不错的话,关注、分享、在看(关注不失联~), 原创不易,且看且珍惜~


http://chatgpt.dhexx.cn/article/8cKYAYdM.shtml

相关文章

一文掌握 IO 基础知识与概念

💞哈喽!大家好,我是HappyGirl快乐女孩💞 😜是一位爱好技术的【技术Fans】!😜 💞💞💞 如果有对技术感兴趣的宅友,欢迎关注💞&#x1f4…

韦东山freeRTOS系列教程之【第三章】任务管理

文章目录 系列教程总目录概述3.1 基本概念3.2 任务创建与删除3.2.1 什么是任务3.2.2 创建任务3.2.3 示例1: 创建任务3.2.4 示例2: 使用任务参数3.2.5 任务的删除3.2.6 示例3: 删除任务 3.3 任务优先级和Tick3.3.1 任务优先级3.3.2 Tick3.3.3 示例4: 优先级实验3.3.4 示例5: 修改…

FreeRTOS教程——定时器(二)

Free RTOS定时器 一、概念 一、概论 软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器 调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期, 简而言之,当定时…

韦东山freeRTOS系列教程之【第二章】内存管理

文章目录 教程目录2.1 为什么要自己实现内存管理2.2 FreeRTOS的5种内存管理方法2.2.1 Heap_12.2.2 Heap_22.2.3 Heap_32.2.4 Heap_42.2.5 Heap_5 2.3 Heap相关的函数2.3.1 pvPortMalloc/vPortFree2.3.2 xPortGetFreeHeapSize2.3.3 xPortGetMinimumEverFreeHeapSize2.3.4 malloc…

FreeRTOS学习记录(安富莱FreeRTOS教程摘录)

FreeRTOS学习资料: 安富莱论坛FreeRTOS教程 FreeRTOS源码下载链接 第1章 为什么选用FreeRTOS 1.1 FreeRTOS优势 FreeRTOS优势 最大的优势就是开源免费,商业使用的话不需要用户公开源代码,也不存在任何版权问题,是当前小型嵌入…

STM32 FreeRTOS系列教程(一)FreeRTOS简介

参考资料:《正点原子STM32F4 FreeRTOS开发手册_V1.1》《野火FreeRTOS 内核实现与应用开发实战—基于STM32》 学习RTOS的意义 当我们进入嵌入式这个领域的时候,往往首先接触的都是单片机编程,单片机编程又 首选51 单片机来入门。这里面说的单…

FreeRTOS使用教程(配合CubeMX)

FreeRTOS使用教程(配合CubeMX) 一、CubeMX配置 在选择后单片机芯片后,在Middleware中选择FREERTOS的CMSIS_V1版本即可在工程开启FreeRTOS。 关于FreeRTOS的具体配置一般集中在Kernel Setting中。具体参数一般可以默认,有特殊需求…

【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习

【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习 前言 本教程将对应外设原理,HAL库、STM32CubeMX和FreeRTOS结合在一起讲解,分析学习过程中遇到的问题和一些注意事项。 知识概括: SMT32定时器原理 STM32CubeMX创建定时器例程 HAL库…

[FreeRTOS系列教程]学习FreeRTOS前的准备工作-----初学者必看

转自:http://bbs.armfly.com/read.php?tid1552 转载说明:本文仅为转载,下面有几位同学询问对应的教程,教程请参考下面的链接,是以帖子的形式分章节说明。 http://bbs.armfly.com/thread.php?fid14&type29&…

FreeRTOS基本教程零:STM32 FReeRTOS 移植流程

一、资料准备 FreeRTOS源码下载地址: https://github.com/FreeRTOS/FreeRTOShttps://github.com/FreeRTOS/FreeRTOS我移植的是FreeRTOSv9.0.0 stm32裸机程序: 二、FreeRTOS目录 一共有三个文件夹 其中Demo文件夹中是FreeRTOS的例程,Licen…

基于STM32的实时操作系统FreeRTOS移植教程(手动移植)

前言:此文为笔者FreeRTOS专栏下的第一篇基础性教学文章,其主要目的为:帮助读者朋友快速搭建出属于自己的公版FreeRTOS系统,实现后续在实时操作系统FreeRTOS上的开发与运用。操作系统的学习与运用可以说是每位嵌入式开发工程师必须…

STM32F103--移植FreeRTOS完整教程

最近按照正点原子教程开始学习FreeRTOS,发现其手册的移植教程中有些地方可能不是那么详细,在此基于正点原子做一期最完整的FreeRTOS移植教程给大家。 小b将本次教程整理的资料放在网盘,以下链接供各位小伙伴下载和学习: 链接&…

FreeRTOS 正点原子教程学习笔记

正点原子视频教程 FreeRTOS(教程非常详细) 小知识 如果创建了任务却完全空着,没有while(1){延时}的话,整个程序会卡住,其他正常的任务无法运行。如果任务里单单有赋值之类的操作也会卡死在这个任务&#…

FreeRTOS入门教程(堆和栈)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、FreeRTOS操作系统介绍二、堆1.概念介绍2.简单实现 三、栈总结 前言 本篇文章正式学习FreeRTOS操作系统,我打算编写一系列文章带大家轻松快速入…

FreeRTOS移植到STM32

一、找一个STM32的裸机工程模板 我们以STM32F103裸机程序为例 随便找的一个裸机程序 二、去官网上下载FreeRTOS V9.0.0 源码 在移植之前,我们首先要获取到 FreeRTOS 的官方的源码包。这里我们提供两个下载 链 接 , 一 个 是 官 网 : http:…

韦东山freeRTOS系列教程之【第一章】FreeRTOS概述与体验

文章目录 教程目录1.1 FreeRTOS目录结构1.1 FreeRTOS目录结构1.2 核心文件1.3 移植时涉及的文件1.4 头文件相关1.4.1 头文件目录1.4.2 头文件 1.5 内存管理1.6 Demo1.7 数据类型和编程规范1.7.1 数据类型1.7.2 变量名1.7.3 函数名1.7.4 宏的名 1.8 安装Keil1.8.1 下载Keil1.8.2…

freeRTOS中文实用教程1

资料转载出处 https://www.cnblogs.com/smartjourneys/p/7073450.html 1.前言 FreeRTOS是小型多任务嵌入式操作系统,硬实时性。本章主要讲述任务相关特性及调度相关的知识。 任务的总体特点 任务的状态 (1)任务有两个状态,运行态…

FreeRTOS入门

目录 一、简介 二、堆的概念 三、栈的概念 四、从官方源码中精简出第一个FreeRTOS程序 五、修改官方源码增加串口打印 一、简介 FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、…

freeRTOS系列教程之【第一章】FreeRTOS概述与体验

文章目录 教程目录1.1 FreeRTOS目录结构1.1 FreeRTOS目录结构1.2 核心文件1.3 移植时涉及的文件1.4 头文件相关 1.4.1 头文件目录1.4.2 头文件 1.5 内存管理1.6 Demo1.7 数据类型和编程规范 1.7.1 数据类型1.7.2 变量名1.7.3 函数名1.7.4 宏的名 1.8 安装Keil 1.8.1 下载Keil1.…

【机器学习】3-4-2 流行学习

#3-4-2流行学习 import mglearn import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.datasets import load_breast_cancer from sklearn.datasets import make_moons from sklearn.datasets import make_blobs from sklearn.datasets impor…