当前位置: 首页 > news >正文

嵌入式学习之Linux驱动:IO模型(1)概览

文章目录

  • 什么是IO呢?
  • IO执行过程
  • IO模型引入
  • IO模型的种类
    • 阻塞IO
    • 非阻塞IO
    • IO多路复用
    • 信号驱动IO
    • 异步IO

什么是IO呢?

IO的英文全称是input和output,翻译过来就是输入和输出。
在冯诺依曼结构中,将计算机分成为5个部分:运算器、控制器、存储器、输入设备、输出设备。其中输入设备指的是向计算机输入数据或信息,如鼠标,键盘都是输入设备。输出设备指的是用于接收计算机输出信息的设备,如电脑显示器。
在这里插入图片描述

IO执行过程

操作系统(Linux)负责对计算机的资源进行管理,应用程序运行在操作系统上,处在用户空间。应用程序不能直接对硬件进行操作,只能通过操作系统提供的API来操作硬件。

所以当我们在进行IO操作的时候,如读写磁盘的操作,进程需要切换到内核空间才可以执行这样的操作。并且应用程序不能直接操作内核空间的数据,需要把内核空间的数据拷贝到用户空间。

一个完整的IO过程包含以下几个步骤:

  1. 应用程序向操作系统发起IO调用请求(系统调用)。
  2. 操作系统准备数据,把IO的数据加载到内核缓冲区。
  3. 操作系统拷贝数据,把内核缓冲区的数据从内核空间拷贝到用户/应用空间。

IO模型引入

但是在IO执行过程中,由于CPU和内存的速度远远高于外设的速度,所以就存在速度严重不匹配的情况。

举个例子,比如我要给磁盘写入100M的数据,CPU输出100M的数据可能只需要几秒钟,但是磁盘如果要接收100M的数据可能需要几分钟。
怎么处理这个矛盾呢?就可以使用IO模型进行编程。

IO模型的种类

IO模型有阻塞IO,非阻塞IO,信号驱动IO,IO多路复用,异步IO,其中前四个被称之为同步IO。

是否等待IO的执行结果就是同步IO与异步IO的区别,等待IO的执行结果就是同步,不等待就是异步。

阻塞IO

阻塞的意思就是一直等着。
在C语言中非常有代表性的库函数就是scanf函数

在这里插入图片描述

非阻塞IO

非阻塞IO就是不等着。

在这里插入图片描述

IO多路复用

多了一个select函数,select函数里面的一个参数是文件描述符的集合。通过它来对这些文件进行监听。当某个文件描述就绪的时候就对这个文件描述符进行处理。

在这里插入图片描述

信号驱动IO

在这里插入图片描述

异步IO

在这里插入图片描述

相关文章:

  • 常州模板网站建设价位/互联网销售包括哪些
  • 做网站如何使用特殊字体/相关搜索优化软件
  • 连云港公司做网站/网络营销企业有哪些公司
  • 如何在微信公众号里建设微网站/seo推广费用需要多少
  • 墟沟企业建站价格表/百度的代理商有哪些
  • 百度搜索显示网站logo/近期新闻热点事件简短
  • C++ Primer 13.5练习:实现StrVec和String
  • 【Linux】进程信号
  • Netty实战与源码剖析(二)——Netty线程模型
  • ROS node命令行参数详解
  • 数据库实验6 存储过程实验
  • 分治法算法
  • Android---Banner轮播图
  • jQuery 动画
  • JavaScript数组类型
  • Fabric.js 元素中心缩放
  • FrameLayout布局案例
  • 满足耐压24V的USB3.0 USB3.1 Type-C防静电器件