【操作系统的IO模型有哪些?】

这篇具有很好参考价值的文章主要介绍了【操作系统的IO模型有哪些?】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

操作系统中的IO模型

为了保护操作系统的安全,通过缓存加快系统读写,会将内存分为用户空间和内存空间两个部分。如果用户想要操作内核空间的数据则需要把数据从内核空间拷贝到用户空间(数据会放到内核空间的page cache中,这种也叫做缓存IO)。

举个栗子:
如果服务器收到了从从客户端过来的请求,并且想要进行处理,那么需要经过这几个步骤:

  • 服务器的网络驱动接收到消息之后,向内核申请空间,并在收到完整的数据包(这个过程会产生延时,原因是有可能是通过分组传送过来的)后,将其复制到内核空间;
  • 数据从内核空间拷贝到用户空间;
  • 用户程序进行处理

【操作系统的IO模型有哪些?】,操作系统,操作系统,linux,服务器

我们再详细的探究服务器中的文件读取,对于Linux来说,Linux是一个将所有的外部设备都看作是文件来操作的操作系统,在它看来:everything is a file,那么我们就把对外部设备的操作都看作是对文件进行操作。而且,我们对一个文件进行读写,都需要通过调用内核提供的系统调用。

而在Linux中,一个基本的IO会涉及到两个系统对象:一个是调用这个IO的进程对象(用户进程),另一个是系统内核。也就是说,当一个read操作发生时,将会经历以下阶段:

  • 通过read系统调用,向内核发送读请求;
  • 内核向硬件发送读指令,并等待读就绪;
  • DMA把将要读取的数据复制到指令的内核缓冲区;
  • 内核将将数据从内核缓冲区拷贝到用户进程空间中

【操作系统的IO模型有哪些?】,操作系统,操作系统,linux,服务器

正是由于上面的几个阶段,导致了file中的数据被用户进程消费是需要过程的,这也就是延伸出了5中IO方式,分别是同步阻塞型IO模型、同步非阻塞型IO模型、IO复用模型、信号驱动模型、以及异步IO模型

逐一拓展

通过一个例子来分别说明这五种IO模型:

eg:假设小A需要去社保局柜台办事,拿号排队的例子

同步阻塞IO模型

**从系统调用recv到将数据从内核复制到用户空间并返回,在这段时间内进程始终阻塞。**就相当于,小A想去柜台办理业务,假如现在柜台业务繁忙,他也要排队,直到排到他办理完业务,才能去做别的事情。显然,这个IO模型是同步且阻塞的。

【操作系统的IO模型有哪些?】,操作系统,操作系统,linux,服务器

同步非阻塞IO模型

在这里recv不管有没有获得到数据都要返回,如果没有数据的话就过段时间再调用recv来看一看,如此循环。 就像是小A来柜台办理业务,发现柜员休息,挂出来暂停服务的牌子,这个时间小A就离开了,小A出去买了一根火腿肠吃上一吃,吃完小A就又回来看看柜员开始营业了没有,直到终于碰到柜员营业了,这才办理业务。我们可以看到,在小A中间离开的这段时间,他可以做自己的事情。回到正题,但是这个模型只有在检查无数据的时间是非阻塞的,在数据到达的时候依然要等待复制数据到用户空间(办理业务),因此它还是同步IO。

【操作系统的IO模型有哪些?】,操作系统,操作系统,linux,服务器

IO复用模型

在IO复用模型中,调用recv之前会先调用select或者poll,这两个系统调用都可以在内核准备好数据(网络数据已经到达内核了)时告知用户进程,它准备好了,这个时候再调用recv时是一定有数据的。因此,在这个模型中,进程阻塞于select或者poll,而没有阻塞在recv上。 就相当于,小A来柜台办理业务,大厅保安告诉他,现在没有空闲的柜台,所有柜台都有人在办理业务,等有空位的时间会告诉他。于是小A就等呀等(select或者poll调用中……),过了一会大厅保安告诉他有柜台空闲出来了,可以办理业务了,但是具体是几号柜台,你自己去找一下吧,于是小A就只能挨个柜台找呀找。

【操作系统的IO模型有哪些?】,操作系统,操作系统,linux,服务器

信号驱动IO模型

此处会通过调用sigaction注册信号函数,在内核数据准备好的时候,系统就会中断当前程序,执行信号函数(在这里调用recv)。 相当于,小A让大厅保安在柜台有空位的时候通知他(注册信号函数),等没多久大厅保安通知他,因为他是人才,所以专门给他开了一个柜台来办理业务,小A就去特席柜台办理业务了,但即使在等待的过程中是非阻塞的,但在业务办理的过程中依然是同步的。

【操作系统的IO模型有哪些?】,操作系统,操作系统,linux,服务器

异步IO模型

调用aio_read指令,内核把数据准备好,并且复制到用户进程空间后执行事先指定好的函数。 也就是说,小A交代大厅保安,我是人才,你把业务给我办理好了再通知我来验收,在这个过程中小A可以去做自己想做的事情。这就是真正的异步IO模型。

【操作系统的IO模型有哪些?】,操作系统,操作系统,linux,服务器
我们可以看到,前四种模型都是属于同步IO模型,因为在内核数据复制到用户空间这一个过程都是阻塞的。而最后一种异步IO,是通过将IO操作交给操作系统处理,当前的进程不关心具体IO的实现,后来再通过回调函数,或信号量通知当前进程直接对IO返回结果进行处理。

上一篇介绍: 如何理解select、poll、epoll?文章来源地址https://www.toymoban.com/news/detail-758506.html

到了这里,关于【操作系统的IO模型有哪些?】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云服务器-修改ecs操作系统,把window系统更换成Linux操作系统

    其他sql格式也在更新中,可直接查看这个系列,要是没有你需要的格式,可在评论或私信我 目录-后期更新打算 点击确定

    2024年02月11日
    浏览(48)
  • Linux操作系统配置代理服务器

    PS:本文只是针对Linux操作系统对于代理服务器的配置操作,不涉及广告        代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须

    2024年02月13日
    浏览(67)
  • Linux 操作系统安装 Apache 服务器

    摘要 电子计算机诞生以来,计算机操作系统的研究有了很大的发展。我们 身边最熟悉的操作系统有微软的 windows。当然这只是相对于 pc 端来说。现在 操作系统进入了社会生活的各个方面,涉及大型计算机、个人计算机、移动便携 设备、其他自动化设备等各个层次的应用领域

    2024年02月04日
    浏览(66)
  • 使用串口重定向为服务器安装linux操作系统

    在不借助显卡,通过串口来完成安装过程中的配置等选项。总结整个流程如下,方法很简单。在信创x86的设备上所使用的是redhat 7.4以及kylinOS的操作系统,串口工具是secureCRT。 首先进入Bios将串口重定向打开,并选择boot management,进入安装盘的启动界面 然后在启动界面的第一

    2023年04月09日
    浏览(52)
  • 幻兽帕鲁服务器操作系统选择Windows还是Linux?

    使用阿里云服务器搭建幻兽帕鲁操作系统类型选Windows还是Linux?如果对Linux熟悉就选择Linux,相对于windows,Linux更少占用系统资源;如果对Linux不熟悉,首选Windows 。事实上,阿里云提供的幻兽帕鲁服务器通过计算巢服务,可以一键自动部署幻兽帕鲁Palworld游戏程序,不需要玩家

    2024年04月17日
    浏览(48)
  • 腾讯云阿里云云服务器 Linux 操作系统 BT 宝塔面板快速建站教程

    宝塔面板是一款服务器管理软件,支持Windows和Linux系统,可以通过Web端轻松管理服务器,提升运维效率。总体来说,宝塔面板具有操作简单、功能丰富、安全可靠等特点,是一款非常实用的服务器管理软件。 宝塔面板官方网站:https://www.bt.cn/ 宝塔面板特点 Centos 安装脚本 U

    2024年02月07日
    浏览(56)
  • 如何使用FinalShell远程连接工具优雅的远程连接Linux操作系统的服务器

            随着互联网的发展,越来越多的人需要远程访问和管理远程服务器或计算机。远程连接工具应运而生,以满足人们的远程访问需求。远程连接工具可以让用户远程登录到其他计算机或服务器,并执行各种操作,而无需身处物理位置。这极大地便利了用户,节省了时

    2024年02月03日
    浏览(70)
  • 操作系统- IO多路复用

    1) IO多路复用是操作系统的原理,但是很多中间件的实现都是基于它去做的,IO多复用需要 知道整个链路是样子的,输入是什么,输出是什么 2) 了解IO多路复用作用的位置是哪里 3.1.1 IO多路复用的输入 IO多路复用的输入是Socket文件 3.1.2 IO多路复用的输出 IO多路复用的输出是读

    2023年04月08日
    浏览(36)
  • [操作系统]5.IO控制

    老规矩,仅为整理知识点,知识框架来自于王道操作系统 并且IO控制的更多知识其实是在计算机组成原理的部分,所以这里一些关于中断具体措施这种细节就先跳过了 (1)IO设备概述 io设备是计算机中最复杂的一类设备,涉及到的基本都是系统层面的调用 例如显示器,键盘,音响这种

    2024年02月08日
    浏览(71)
  • 基于操作系统的基础IO

    1.c语言中的文件输入输出 在观看本章节的时候,大家可以去看看之前c语言的文件输入输出的有关博客。 好那么废话不多说之间进入本章正题: 我们都知道c程序默认会打开三个输入输出流: stdin:相当于键盘 stdout:相当于显示器 stderr:相当于显示器 这些输入输出流的类型为

    2024年02月06日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包