计算机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. java实现跳过证书校验

    /** * 跳过证书效验的sslcontext * @return * @throws Exception */ private static SSLContext createIgnoreVerif ...

  2. OC和JS代码的互调

    01 OC调用JS的代码 NSString *str = [self.webView stringByEvaluatingJavaScriptFromString:@"sum()" ...

  3. linux中统计文件中一个字符串出现的次数

    要统计一个字符串出现的次数,这里现提供自己常用两种方法: 1. 使用vim统计 用vim打开目标文件,在命令模式下,输入 :%s/objStr//gn 2. 使用grep: grep -o objSt ...

  4. js对于客户端的区分代码

    //区分设备 function judge_decice() { let ua =navigator.userAgent.toLowerCase(); if(/android|adr/gi.test( ...

  5. IOS开发之----常用函数和常数--秀清

    介绍一下Objective-c常用的函数,常数变量 算术函数 [算术函数] 函数名 说明 int rand() 随机数生成.(例)srand(time(nil)); //随机数初期化int val = ...

  6. Hadoop完全分布式的配置

    选取机器sam01作为主节点,并进行分布式文件的配置 1.进入Hadoop配置文件路径/usr/local/hadoop/etc/hadoop(这里我把Hadoop安装在/usr/local目录下) ...

  7. 从零开始实现一个分布式RPC框架

    该rpc框架是一个mini版的dubbo.学习rpc之前,建议先了解NIO,Netty和Dubbo等知识.请移步网络编程 前言:(借用阿里大佬的一段话) 为什么要自己写一个RPC框架,我觉得从个人成长 ...

  8. 6、架构--Nginx虚拟主机(基于多ip、端口、域名方式)、日志配置、Nginx模块(访问控制模块、状态监控模块、访问链接控制模块)

    笔记 1.晨考 2.昨日问题 3.今日内容 1.Nginx虚拟主机 - 基于多IP的方式 - 基于多端口的方式 - 基于多域名的方式 2.日志配置 Nginx有非常灵活的日志记录模式,每个级别的配置可 ...

  9. Graph Based SLAM 基本原理

    作者 | Alex 01 引言 SLAM 基本框架大致分为两大类:基于概率的方法如 EKF, UKF, particle filters 和基于图的方法 .基于图的方法本质上是种优化方法,一个以最小化 ...

  10. kubernetes集群之Pod说能不能让我体面的消亡呀?

    kubernetes集群之Pod说能不能让我体面的消亡呀? 由于 Pod 所代表的是在集群中节点上运行的进程,当不再需要这些进程时允许其体面地终止. 1.如果 preStop 回调所需要的时间长于默认 ...