Linux下磁盘读写流
-
用户空间请求
系统调用:应用程序通过系统调用(如 read() 或 write())请求对文件或设备进行读写操作。
文件描述符:操作通过文件描述符进行,该描述符在应用程序打开文件时获得。 -
VFS(虚拟文件系统)
路径解析:VFS 负责解析文件路径并找到对应的文件 inode。
权限检查:VFS 检查文件的权限,确保当前用户有权限进行读写操作。
缓存检查:VFS 检查页缓存(page cache)以确定请求的数据是否已经在内存中。 -
页缓存
读操作:
如果数据在页缓存中,直接返回数据给用户空间。
如果不在缓存中,VFS 发起从磁盘读取数据的请求。
写操作:
数据首先写入页缓存(写回机制),然后异步地刷新到磁盘。
使用脏页(dirty pages)标记缓存中需要写回的数据。 -
块设备层
I/O 调度:请求被发送到块设备层,I/O 调度器对请求进行排序和优化,以提高性能。
合并请求:相邻的 I/O 请求可能会被合并以减少磁盘寻道时间。 -
驱动程序
设备驱动:I/O 请求被传递给相应的设备驱动程序,驱动程序负责与硬件设备进行通信。
DMA(直接内存访问):在可能的情况下,DMA 用于将数据直接从内存传输到设备,减少 CPU 负担。 -
硬件设备
硬盘控制器:硬件设备接收到请求后执行实际的读写操作。
数据传输:数据从磁盘传输到内存(读操作)或从内存传输到磁盘(写操作)。 -
完成处理
中断处理:操作完成后,设备驱动程序通过中断通知内核。
缓存更新:对于写操作,页缓存中的脏页被标记为干净。
通知用户空间:最终,系统调用返回,用户空间应用程序被通知操作已完成。
优化与特性
预读(Read-ahead):内核可能会提前读取数据到缓存中,以提高读取性能。
写回缓存(Write-back Cache):写操作通常是异步的,数据先写入缓存然后再写入磁盘。
I/O 调度算法:不同的 I/O 调度算法(如 CFQ、Deadline、NOOP)可以根据工作负载选择以优化性能。
流程如下:
相关文章:
Linux下磁盘读写流
用户空间请求 系统调用:应用程序通过系统调用(如 read() 或 write())请求对文件或设备进行读写操作。 文件描述符:操作通过文件描述符进行,该描述符在应用程序打开文件时获得。 VFS(虚拟文件系统ÿ…...
MAVEN手动配置(阿里云)全教程
介于网上各种各样的MAVEN配置过程中方法大致相同却细节参差不齐,我总结了我遇见的一些问题,来完全的解决MAVEN手动配置的全过程,以及分享解决小毛病的经验。 所需材料: MAVEN3.9.9(下载适合自己的版本即可)…...
贪心算法一
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是贪心算法,并且掌握贪心算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…...
计算机毕业设计Python+DeepSeek-R1大模型微博的话题博文及用户画像分析系统 微博舆情可视化(源码+ 文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Android Framework 常见面试题
以下是常见的 Android Framework 面试题,涵盖基础到高级知识点,帮助准备面试: 一、基础问题 Android 系统架构分层 描述 Android 系统的四层架构(Linux Kernel、Native、Framework、Application)及各层职责。 Zygote …...
绕过某书frida反调试检测 获取某宝支付参数
前言 在移动应用安全测试和研究过程中,我们经常需要使用Frida等工具对应用进行动态分析。然而,很多应用都实现了反调试和反注入机制,用来检测并阻止此类分析工具的使用。本文将分享如何使用Frida绕过某流行阅读应用(以下简称"某书",本次任务目的原本是需要找出…...
Secret Cow Code S
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝 既然选择了远方,当不负青春,砥砺前行! 题目描述 奶牛们正在实验秘密代码,并设计了一种方法用于生成无限长度的字符…...
MyBatis - XML CRUD 其他查询
1. XML 配置文件 使用 MyBatis 操作数据库的方式有两种: 注解 (在注解中定义 SQL 语句)XML 配置文件 (在 XML 文件中定义 SQL 语句) 在上一篇博客中, 已经讲解了如何使用注解操作数据库, 本篇文章来讲解如何使用 XML 进行 MyBatis 开发. 使用 XML 的步骤, 和使用注解的步骤…...
牛客python蓝桥杯11-32(自用)
11 import os import sysdef huiwen(str):length len(str)# if length 0:# return -1result []for i in range(length-1): # 0 - length-2for j in range(i2,length1):# 取出从索引 i 到 j-1 的子串s str[i:j]# 正序倒序if s s[::-1]:result.append(len(s))if result…...
rabbitmq版本升级并部署高可用
RabbitMQ版本升级 先检查是否已经安装rabbitmq rpm -qa|grep rabbitmq|wc -l //如果结果是0,表示没有安装 rpm -e --nodeps $(rpm -qa|grep rabbitmq) //如安装了,则进行卸载 先检查是否已经安装erlang rpm -qa|grep erlang|wc -l //如果结果…...
Spring AI 1.0.0-M6 快速开始(一)
Spring AI 1.0.0-M6 入门一、存储库二、依赖管理完整maven 入门 Spring 是JAVA中我们经常使用的框架之一,Spring AI不断的发展迭代目前已经到M6版本据说上半年会出一个稳定版本。 本节提供了如何开始使用Spring AI的M6。 一、存储库 1.0 M6 -添加Spring存储库 需…...
数据集路径出错.yaml‘ images not found , missing path
方法一:删除settings.yaml 方法二:dataset_name.yaml改用绝对路径,如最后一张图 错误分析: dataset_name.yaml中的path的路径仅支持绝对路径,写相对路径就会搜索不到,使用settings.json中的路径࿰…...
win32汇编环境,对话框中使用树形视图示例二
;运行效果 ;win32汇编环境,对话框中使用树形视图示例二 ;得到树形视图控件Treeview的全路径字符串,这里的方法是由子项向父项挨个找的算法找齐路径 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>&g…...
二维码(带背景图片或动态图)
原文链接:http://www.juzicode.com/archives/6377 桔子菌逛github的时候发现一个好玩的Python库,可以用来制作带背景图片或动态图的二维码,这个库在pypi上也有发布,可以直接通过pip安装: python -m pip install amzq…...
【连珠云弈】网页五子棋版项目测试报告
目录 一、项目背景 1.1、项目起源 1.2、市场需求 1.3、项目目标 二、项目功能 2.1 用户管理功能 2.2 游戏对战功能 三、测试报告 3.1.功能测试 编辑 3.1.1注册功能测试 解决bug: 测试总结: 3.1.2登录功能测试 测试总结: 3.…...
OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::colorChange 是 OpenCV 中用于调整图像颜色的函数。它允许你通过乘以不同的系数来独立地改变输入图像中红色、绿色和蓝色通道的强度…...
AI视频领域的DeepSeek—阿里万相2.1图生视频
让我们一同深入探索万相 2.1 ,本文不仅介绍其文生图和文生视频的使用秘籍,还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果(我录制的GIF动图) 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…...
Unity中Stack<T>用法以及删除Stack<GameObject>的方法
Unity中Stack用法以及删除Stack的方法 介绍Stack<T>的APIStack<T> 常用方法创建和初始化 Stack<T>Push 和 Pop 操作Stack<T>遍历清空栈检查栈是否包含某个元素 栈的典型应用场景撤销操作深度优先搜索(DFS)注意事项 总结 介绍 因…...
用Python分割并高效处理PDF大文件
在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…...
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践 引言 在万物互联时代,操作系统对编译技术的需求已从单纯的代码转换演变为跨设备协同、高效资源调度与极致性能优化的综合挑战。华为鸿蒙系统(HarmonyOS)自主研发的ArkCompiler…...
RabbitMQ知识点
1.为什么需要消息队列? RabbitMQ体系结构 操作001:RabbitMQ安装 二、安装 # 拉取镜像 docker pull rabbitmq:3.13-management # -d 参数:后台运行 Docker 容器 # --name 参数:设置容器名称 # -p 参数:映射端口号&…...
2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 二、代码(C语言)⭐️ #include <stdio.h>int reverse( int number );int main…...
力扣132. 分割回文串 II
力扣132. 分割回文串 II 题目 题目解析及思路 题目要求返回将s切割成若干回文串的最少切割次数 对于子串s[j...i],若为回文串,则问题变为求s[0...j]的最少切割次数 因此可以考虑动态规划 对于问题s[j...i]是否为回文串,若s[i] s[j]则问…...
调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)
文章目录 调研:如何实现智能分析助手(Agent)(AutoCoder、FastGPT、AutoGen、DataCopilot)一、交互流程二、数据流程三、架构分类四、开源产品4.1 AutoCoder(知识库变体)4.2 FastGPT(…...
C# 简介以及与C、C++的区别
C#(发音为“C Sharp”)是一种由微软公司开发的面向对象的、类型安全的编程语言,是.NET框架的主要编程语言。C#最初是为了与Java竞争而设计的,因此在语法和设计原则上有许多相似之处。 起源与发展 C#诞生于2000年左右&#x…...
学习使用ESP8266进行MQTT通信并在网页上可视化显示
目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…...
mysql进阶(三)
MySQL架构和存储引擎 1. MySQL架构 MySQL8.0服务器是由连接池、服务管理⼯具和公共组件、NoSQL接⼝、SQL接⼝、解析器、优化 器、缓存、存储引擎、⽂件系统组成。MySQL还为各种编程语⾔提供了⼀套⽤于外部程序访问服务器 的连接器。整体架构图如下所⽰: 2. 连接层 …...
硬件抽象层(HAL)
硬件抽象层(HAL):应用开发的得力助手 硬件抽象层(HAL)的核心作用是为应用提供访问硬件的接口,同时屏蔽硬件细节,让开发者专注于应用开发,无需深入了解硬件底层的复杂操作。 1. HAL…...
【MYSQL数据库异常处理】执行SQL语句报超时异常
MYSQL执行SQL语句异常:The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 这个错误表明 MySQL 服务器与 JDBC 连接之间的通信超时了。通常由…...
深入理解三色标记、CMS、G1垃圾回收器
三色标记算法 简介 三色标记算法是一种常见的垃圾收集的标记算法,属于根可达算法的一个分支,垃圾收集器CMS,G1在标记垃圾过程中就使用该算法 三色标记法(Tri-color Marking)是垃圾回收中用于并发标记存活对象的核心算…...
