Linux服务器 I/O 原理和流程

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux服务器 I/O 原理和流程相关的知识,希望对你有一定的参考价值。

计算机I/O

  • I/O在计算机中指Input/Output,
  • IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。
  • IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。

I/O 过程

  • 一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,
  • 但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,
  • 而是需要经历一次从内核空间中的内存数据copy到用户空间的进程内存当中,
  • 简单说I/O就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。

磁盘和网络I/O,必经两个阶段:

  • 第一步:将数据从文件先加载至内核内存空间(缓冲区),等待数据准备完成,时间较长
  • 第二步:将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短

Linux 的 I/O

  • 磁盘I/O
  • 网络I/O : 一切皆文件,本质为对socket文件的读写

磁盘I/O

  • 磁盘I/O是进程向内核发起系统调用,请求磁盘上的某个资源比如是html 文件或者图片,
  • 然后内核通过相应的驱动程序将目标文件加载到内核的内存空间进行处理,
  • 加载完成之后把数据从内核内存再复制给进程内存,如果是比较大的数据也需要等待时间
  • 内存中的数据如需存储在磁盘,则内核通过想用驱动调用将内存中的文件写入磁盘

网络 I/O

  • 网络IO即网络通信,是网络协议栈到用户空间进程的IO
  • 说人话就是数据包在网络、内存和内核中传递的过程

网络I/O 处理过程

  • 获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3)
  • 构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4)
  • 返回数据,服务器将已构建好的响应再通过内核空间的网络 I/O 发还给客户端(5-7)
    网络IO原理图

一次完整的用户访问网站的过程

  • 用户通过联网设备,计算机或者手上的浏览器或者APP向服务器发起请求
  • 用户的浏览器或者app会对访问的网站的域名做域名解析得到网站服务器的IP地址
  • 用户设备与解析到的IP地址服务器通过三次握手建立TCP连接
  • TCP连接建立后用户设备将请求报文通过网络发往网站服务器主机
  • 服务器网卡判断请求的报文的mac地址是自己并将其发送给服务器操作系统内核
  • 服务器内核在prerouting预路由阶段判断目标IP是自己,则将请求报文发送给input
  • input通过判断TCP协议端口将请求报文复制到内存空间对应端口的应用程序内存空间交给应用程序进程进行处理
  • 在用户空间,应用程序在内存冲处理用户的请求报文,
  • 根据请求的内容,应用程序会向内核发起响应的请求,调用系统资源或者磁盘文件用以满足请求。
  • 应用程序在处理完请求报文后,将结果通过output返还给内核空间,
  • 表现为从应用程序内存空间将数据复制到内核内存空间
  • 内核空间根据请求报文协议类型,封装应答报文头部,并将应答数据包通过postrouting发送给网卡
  • 应答包通过服务器网卡转发至网络到达客户设备端
  • 客户设备通过网络接收到响应报文,并将响应报文中的数据内容交由浏览器或者APP渲染后展现给用户

以上是关于Linux服务器 I/O 原理和流程的主要内容,如果未能解决你的问题,请参考以下文章

Linux 操作系统原理 — I/O 处理流程

Linux I/O 原理和 Zero-copy 技术全面揭秘

Linux 操作系统原理 — 网络 I/O 虚拟化

C++服务器设计:基于I/O复用的Reactor模式

zabbix监控linux服务器的磁盘I/O

linux中mysql主从复制原理及配置