补充知识

补充知识1

内存的本质是对数据的临时存储
在这里插入图片描述
内存与磁盘进行交互时, 最小单位是4kb叫做页框(内存)页帧(磁盘)
也就是, 如果我们要将磁盘的内容加载到内存中, 可是文件大小只有1kb, 我们也要拿出4kb来存他, 多余的就直接浪费掉, 同理, 如果我们需要对一个比特位进行修改, 也是一样需要将这个比特位所在的大小为4kb的区域加载到内存。

为什么要一次要4kb

因为磁盘是机械设备, 所以他的效率很低, 比起要4次1kb, 1次要4kb会快很多, 而为什么不用多少加载多少是因为虽然现在暂时只需要这100字节, 但是可能马上就又需要他的上下文, 而这样反复的去找对磁盘来说是很花时间的,而磁盘定位完成后, 将数据加载到内存的速度是很快的, 所以当我们找到数据对应的位置的时候, 就干脆把对应的块全加载进来, 这就对于局部性原理的预加载机制

补充知识2

操作系统是如何管理内存的
操作系统不仅能看到虚拟地址空间, 同时也可以看到物理内存
那操作系统是怎么管理内存的呢?
操作系统中有一个结构叫
struct page {}, 它里面包含了page页必要的属性信息, 一个page对应的是一个4kb的大小。
而由多到的内存空间, 就会有对应大小的struct page数组来管理这些空间, 于是我们对内存空间的管理, 就转变为了对数组的管理, 由于数组是有下表的, 所以这个下表就直接对应的是我们page页的页号
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过查看Linux源码我们可以发现这两个变量
其中flags表示的这个page管理的块的状态, 每个比特位都有他自己的含义, 具体什么就不谈了。
_count是引用计数, 表示的是当前块被几个东西使用, 这里也可以进一步解释我们的写实拷贝, 当我们要修改改字段的时候, 发现该字段的权限为只读, 但是_count >= 2所以此时就发生写实拷贝

补充3

当我们操作系统在打开一个文件的时候, 他会为我们文件创建一个数据结构叫做struct inode 这里面会保存文件的大部分属性他的属性是从inode table里该文件对应的inode里来的

但是到这里还只能获得问价你的属性, 文件的内容该怎么获取呢?

在struct里还有个数据结构叫做struct address+spacess
在这里插入图片描述
他里面会包含一个redix_tree_root 这么一颗树
在这里插入图片描述
在这里插入图片描述
TA在这里插入图片描述
它是一个多叉树的结构, 叶子节点上存的就是一个个的struct page 对象, 每一个对象就对应物理内存中一个4kb大小的块, 所以当我们想把应用层的数据写向内核层的时候, 其实对应的是吧数据按照顺序
在这里插入图片描述
最后通过这个树形结构找到对应的struct page 然后再往物理内存中4kb 4kb的写入

这个就叫做文件的页缓冲区

补充4

redix_tree也就是刚刚我们讲到的那个树形结构, 我们称为基数树 \ 基数 本质其实就是一颗字典树
在这里插入图片描述
字典树大致是这么个情况, 具体就不多解释了, 不会就自行查看文档。

文件的内容按照4kb是有偏移量的
在这里插入图片描述

假如我们的文件有10mb大小, 那么按照4kb来划分, 我们的文件会被划分为2560个块
这样, 文件的每一个块也就有了他的编号。 我们用这个编号乘以4kb的大小, 就可以知道对应的数据在原始内容中的偏移量了。
在这里插入图片描述
所以我们拿着这个地址, 就可以去基数树里面找对应的page了

总结

1 一个磁盘对应的文件他在访问之前部分的属性已经加载到内存了。
2 进程打开文件时, 本质上就是进一步在磁盘中把对应的文件打开 –
属性往struct inode放, 内容保存好, 最终在用户层写入的时候, 经过系统调用, 进过一系列数据结构找到对应的page然后将数据刷新进物理内存。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Leaflet.js和Turf.js的等值线区间自定义及颜色自适应实践

目录 前言 一、Turf.js等值线相关制作 1、生成方法 2、主要参数 二、实际案例开发 1、新建展示页面 2、等值线生成 3、基于Leaflet的再优化 总结 前言 在气象方面的GIS应用当中,会根据实际的工作需要建立不同的监测站点。气象监测站的主要功能包括&#xff1…

pnpm--安装与使用

原文网址:pnpm--安装与使用-CSDN博客 简介 本文介绍pnpm的安装与使用。 pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景,被誉为“最先进的包管理工具”,速度快、…

变量重名情况

变量重名 变量的使用规则:就近原则 第一种情况:局部变量和成员变量重名,使用this关键字访问成员变量 第二种情况:子类成员变量和父类成员变量重名,使用super关键字访问父类成员变量 // 父类 public class Fu {int …

舞蹈网站制作分享,舞蹈培训商城网站设计案例分享,wordpress主题分享

嘿,朋友们!今天我要跟你们唠一唠一个超级酷炫的舞蹈培训商城网站设计案例。 咱先说说这个网站的目标哈,那就是得让喜欢舞蹈的小伙伴们能够轻轻松松找到自己心水的课程和商品。 那制作过程都有啥呢?别急,听我慢慢道来。…

C#常见Winform窗体效果

目录 1&#xff0c;窗体闪烁。 2&#xff0c;透明非矩形的窗体。 3&#xff0c;窗口显示&#xff0c;退出呈现平滑效果。 4&#xff0c;窗体不在任务栏中显示&#xff1a; 1&#xff0c;窗体闪烁。 /// <summary>/// 窗体闪烁/// </summary>/// <param na…

在c# 7.3中不可用,请使用9.0或更高的语言版本

参考连接&#xff1a;在c# 7.3中不可用,请使用8.0或更高的语言版本_功能“可为 null 的引用类型”在 c# 7.3 中不可用。请使用 8.0 或更高的语言版本-CSDN博客https://blog.csdn.net/liangyely/article/details/106163660 [踩坑记录] 某功能在C#7.3中不可用,请使用 8.0 或更高的…

STM32 | 通用同步/异步串行接收/发送器USART带蓝牙(第六天原理解析)

STM32 第六天 一、 USART 1、USART概念 USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器 USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备 处理器与外部设备通信的两种方式: u并行通信(…

摸鱼123

摸鱼https://toyaml.com/windowsupdate.html

【漏洞复现】用友NC-Cloud文件服务器用户登陆绕过漏洞

Nx01 阅读须知 如棠安全的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的…

51单片机学习笔记13 红外遥控接收

51单片机学习笔记13 红外遥控接收 一、红外遥控1. **发射原理**2. **接收原理**3. **发射、接收示例** 二、编码、解码1. **编码方式分类**&#xff1a;&#xff08;1&#xff09;Pulse Distance Modulation (PDM) 脉冲距离调制&#xff1a;&#xff08;2&#xff09;Pulse Wid…

【C++】哈希之位图

目录 一、位图概念二、海量数据面试题 一、位图概念 假如有40亿个无重复且没有排序的无符号整数&#xff0c;给一个无符号整数&#xff0c;如何判断这个整数是否在这40亿个数中&#xff1f; 我们用以前的思路有这些&#xff1a; 把这40亿个数遍历一遍&#xff0c;直到找到为…

达梦DMHS-Manager工具安装部署

目录 1、前言 1.1、平台架构 1.2、平台原理 2、环境准备 2.1、硬件环境 2.2、软件环境 2.3、安装DMHS 2.3.1、源端DMHS前期准备 2.3.2、源端DMHS安装 2.3.3、目的端DMHS安装 3、DMHS-Manager客户端部署 3.1、启动dmhs web服务 3.2、登录web管理平台 4、添加DMHS实…

Docker、Kubernetes之间的区别

比较容器化工具&#xff1a;了解 Docker、Kubernetes 在应用程序部署和管理方面的差异。 基本概述 Docker 是一个流行的容器化平台&#xff0c;允许开发人员在容器中创建、部署和运行应用程序。 Docker 提供了一组工具和 API&#xff0c;使开发人员能够构建和管理容器化应用程…

SpringBoot中操作Bean的生命周期的方法

引言 在 Spring Boot 应用中&#xff0c;管理和操作 Bean 的生命周期是一项关键的任务。这不仅涉及到如何创建和销毁 Bean&#xff0c;还包括如何在应用的生命周期中对 Bean 进行精细控制。Spring 框架提供了多种机制来管理 Bean 的生命周期&#xff0c;这些机制使得开发者可以…

windows部署Jenkins并远程部署tomcat

目录 1、Jenkins官网下载Jenkins 2、安装Jenkins 3、修改Home directory 4、插件安装及系统配置 5、Tomcat安装及配置 5.1、修改配置文件,屏蔽以下代码 5.2、新增登录用户 5.3、编码格式修改 5.4、启动tomcat 6、Jenkins远程部署war包 6.1、General配置 6.2、Sourc…

AKF扩展立方体和AKF可用性立方体

很多人知道AKF扩展立方体是从《架构即未来》这本书开始。实际上akfpartners官方写过4篇关于AKF扩展立方体的文章&#xff0c;还有一篇介绍AKF可用性立方体。akfpartners官方在高可用、扩展性方面有很多专业技术文章&#xff0c;建议有空就翻翻看。 AKF扩展立方体和AKF可用性立方…

C++之结构体初始化10种写法总结(二百六十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

是否有替代U盘,可安全交换的医院文件摆渡方案?

医院内部网络存储着大量的敏感医疗数据&#xff0c;包括患者的个人信息、病历记录、诊断结果等。网络隔离可以有效防止未经授权的访问和数据泄露&#xff0c;确保这些敏感信息的安全。随着法律法规的不断完善&#xff0c;如《网络安全法》、《个人信息保护法》等&#xff0c;医…

[lesson02]C到C++的升级

C到C的升级 C与C的关系 C继承了所有的C特性C在C的基础上提供了更多的语法和特性C的设计目标是运行效率与开发效率的统一 C到C的升级 C更强调语言的实用性 所有的变量都可以在需要使用时再定义 int c 0; for (int i 1; i < 3; i) {for(int j 1; j < 3; j){c i * …

EVM Layer2 主流解决方案

深度解析主流 EVM Layer 2 解决方案&#xff1a;zk Rollups 和 Optimistic Rollups 随着以太坊网络的不断演进和 DeFi 生态系统的迅速增长&#xff0c;以太坊 Layer 2 解决方案日益受到关注。 其中&#xff0c;zk Rollups 和 Optimistic Rollups 作为两种备受瞩目的主流 EVM&…