计算机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)

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

Linux服务器 I/O 原理和流程的更多相关文章

  1. Linux服务器开发/测试环境搭建-流程

    1.MariaDB yum 安装/初始化/授远程权限 yum安装 在MariaDB官网根据Linux系统查找您所需要的db版本:https://downloads.mariadb.org/mariad ...

  2. linux 服务器 php vue项目部署流程总结

    服务器配置 购买阿里云服务器 (选择ubuntu 16系统 / 内存2G以上) 安全策略, 入规则: 添加端口 20,21,22, 80, 443, 3306, 8080, 安装宝塔 wget -O ...

  3. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程

    PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模 ...

  4. Linux服务器的初步配置流程

    作者: 阮一峰 日期: 2014年3月14日 开发网站的时候,常常需要自己配置Linux服务器. 本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情.这主要是我自己的总结和 ...

  5. Linux服务器安全审计工具与流程完全指南

    http://Linux.chinaitlab.com/server/860516.html 当今许多linux服务器都不是刚刚部署完毕的新机器,有专业的Linux系统管理员进行定期维护,IT技术人员 ...

  6. shell脚本编程学习笔记(二)linux服务器启动流程

    一.linux服务器启动流程 1.bios找到磁盘上的mbr主引导扇区 2.进入grub洁面选择相应的启动内核 3.读取kernel内核文件-/boot/vmlinuz-* 4.读取init的镜像文件 ...

  7. 拿到新linux服务器,从配置环境到跑起项目的部署流程

    今早翻开手机看到某云一条广告Linux1 核 2 GB 1 Mbps服务器10元一个月,正巧最近在搞linux,于是下单了一台2个月20. 上班来到公司后,借空闲时间一顿研究,一波骚操作配置后,浏览器 ...

  8. Linux数据包路由原理、Iptables/netfilter入门学习

    相关学习资料 https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html http://zh.wik ...

  9. 高性能Linux服务器 第10章 基于Linux服务器的性能分析与优化

    高性能Linux服务器 第10章    基于Linux服务器的性能分析与优化 作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.但硬件问题.软件问题.网络环境等 ...

随机推荐

  1. JS实现继承,封装一个extends方法

    父类 function Person(name,age){ this.name = name; this.age = age; } Person.prototype = { eat:function( ...

  2. Java线程--BlockingQueue使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871704.html Java线程--BlockingQueue使用 阻塞队列就是内容满了之 ...

  3. Eclipse项目上的红叉解决方案

    Eclipse项目上存在红叉,但是又不影响运行,同时展开项目未指明任何内容出错,可以按如下步骤进行处理: 0.查看Problems视图,定位错误,发现处理之: 1.检查Build Path中的各个依赖 ...

  4. async同步异步

    1.同步:var async = require("async"); async.series([step1, step2, step3],function(err, values ...

  5. pytest(6)-Fixture(固件)

    什么是固件 Fixture 翻译成中文即是固件的意思.它其实就是一些函数,会在执行测试方法/测试函数之前(或之后)加载运行它们,常见的如接口用例在请求接口前数据库的初始连接,和请求之后关闭数据库的操作 ...

  6. 十年OI一场空,不开long long见祖宗

    //线段树:单点修改+区间求和 #include<bits/stdc++.h> #define ll unsigned long long using namespace std; ll ...

  7. 北京太速科技-6U VPX 6槽 Full Mesh结构背板机箱

    一.产品概述 Ori6UVPX6SlotFullMesh264背板机箱 为 6U VPX 6槽 Full Mesh结构,用于实现PCIE.RapidIO IO 4X Full Mesh 高速数据互联, ...

  8. Solution -「ARC 125E」Snack

    \(\mathcal{Description}\)   Link.   把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...

  9. suse 12 二进制部署 Kubernetets 1.19.7 - 第09章 - 部署kubelet组件

    文章目录 1.9.部署kubelet 1.9.0.创建kubelet bootstrap kubeconfig文件 1.9.1.创建kubelet配置文件 1.9.2.配置kubelet为system ...

  10. php spl_autoload_register 实现自动加载

    spl_autoload_register (PHP 5 >= 5.1.2, PHP 7) spl_autoload_register - 注册给定的函数作为 __autoload 的实现 语法 ...