补充知识

补充知识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然后将数据刷新进物理内存。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

简单的弱口令密码字典!!!

将下面的复制到文本文档即可!!! 弱口令密码字典一: %null% %username% !#$ !#$% !#$%^ !#$%^& !#$%^&* 000000 00000000 0123456789 1 101010 111 111111 1111111 11111111 1111111111 111222 112233 11223344 121212 121…

JAVA8 新特性StreamAPI使用(二)

一、使用StreamAPI,(基于数据模型——客户、订单和商品,实体关系图如下,客户可以有多个订单,是一对多的关系,而产品和订单的关系是多对多的)需求如下: 二、Stream API思维导图 三、需…

file_get_contents(‘php://input‘); 这个postman要如何传参

在 Postman 中传递参数给 file_get_contents(php://input); 是通过请求的 Body 部分来实现的。使用 Postman 进行 API 接口测试时,可以按照以下步骤来传递参数: 打开 Postman 并创建一个新的请求。在请求的 URL 地址栏输入你的 API 地址。选择请求方法为…

【Python面试题收录】Python的深浅拷贝

一、Python的深浅拷贝的区别 在Python中,深拷贝和浅拷贝是两种不同的对象复制机制,它们的主要区别在于如何处理对象内部所包含的可变或不可变类型的子对象。 浅拷贝 是指创建一个新的对象,但它只复制了原对象的第一层内容,也就是说…

基于模糊PID控制器的的无刷直流电机速度控制simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1无刷直流电机模型与速度控制 4.2 模糊PID控制器设计 5.完整工程文件 1.课题概述 基于模糊PID控制器的的无刷直流电机速度控制simulink建模与仿真。基于模糊PID控制器的无刷直流电机(Brus…

并发编程01-深入理解Java并发/线程等待/通知机制

为什么我们要学习并发编程? 最直白的原因,因为面试需要,我们来看看美团和阿里对 Java 岗位的 JD: 从上面两大互联网公司的招聘需求可以看到, 大厂的 Java 岗的并发编程能力属于标配。 而在非大厂的公司, 并…

Redis的高可用和持久化

目录 一、Redis高可用 二、Redis持久化 2.1 持久化的功能 2.2 Redis提供两种方式进行持久化 三、RDB持久化 3.1 触发条件 3.1.1 手动触发 3.1.2 自动触发 3.1.3 其他自动触发机制 四、AOF持久化 4.1 开启AOF 4.2 执行流程 4.2.1 命令追加 (append) 4.2.2 文件写入…

蓝桥杯-单片机基础13——完美代码:官方开发板超声波传感器详解(超声波传感器CX20106A)

蓝桥杯单片机组备赛指南请查看 :本专栏第1篇文章 本文章针对蓝桥杯-单片机组比赛开发板所写,代码可直接在比赛开发板上使用。 型号:国信天长4T开发板(绿板),芯片:IAP15F2K61S2 (使…

实验:基于Red Hat Enterprise Linux系统的创建磁盘和磁盘分区(二、三)

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 实验二: 1. 为nvme0n2p1设备建立配额属性和文件(EXT) 2. 要求自己名字的用户只能存储不超过200M的文件,总数量不能大于10个 quotacheck [选项] 文件系统 edquota quotaon [选项] 文件系…

全志 Linux Qt

一、简介 本文介绍基于 buildroot 文件系统的 QT 模块的使用方法: • 如何在 buildroot 工具里编译 QT 动态库; • 编译及运行 qt_demo 应用程序; • 适配过程遇到的问题。 二、QT动态库编译 在项目根路径执行 ./build.sh buildroot_menuc…

蓝桥杯—DS1302

目录 1.管脚 2.时序&官方提供的读写函数 3.如何使用读写函数 4.如何在数码管中显示在DS1302中读取出的数据? 1.管脚 2.时序&官方提供的读写函数 /* # DS1302代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行…

Python网络爬虫(一):HTML/CSS/JavaScript介绍

1 HTML语言 1.1 HTML简介 HTML指的是超文本标记语言:HyperText Markup Language,它不是一门编程语言,而是一种标记语言,即一套标记标签。HTML是纯文本类型的语言,使用HTML编写的网页文件也是标准的文本文件&#xff0c…

代码重用攻击及栈溢出攻击

攻击一个软件曾经就像找到一个缓冲区溢出漏洞一样简单,用要执行的任意代码填充缓冲区并替换返回地址以指向这个新代码的开头。幸运的是,我们现在防止内存区域既可写又可执行,攻击者要么不能覆盖现有的代码,要么不能执行他们注入的…

蓝桥杯 204/4/2

目录 蚂蚁感冒 “蓝桥杯”练习系统 (lanqiao.cn) 时间显示 “蓝桥杯”练习系统 (lanqiao.cn) 蚂蚁感冒 “蓝桥杯”练习系统 (lanqiao.cn) 思路借鉴&#xff1a;AcWing 1211. 蚂蚁感冒 - AcWing 完整代码&#xff1a; #include <bits/stdc.h> #define int long lon…

蓝桥杯第八届c++大学B组详解

目录 1.购物单 2.等差素数列 3.承压计算 4.方格分割 5.日期问题 6.包子凑数 7.全球变暖 8.k倍区间 1.购物单 题目解析&#xff1a;就是将折扣字符串转化为数字&#xff0c;进行相加求和。 #include<iostream> #include<string> #include<cmath> usin…

ABC319 G - Counting Shortest Paths

解题思路 按照到的距离远近&#xff0c;进行分层为第一层分层步骤&#xff1a;用一个集合记录还未定层的点&#xff0c;用逐层确定对于当前点与其有连边的&#xff08;不是删边&#xff09;且还未确定的点&#xff0c;确定为的下一层&#xff0c;入队列没连边且还未确定的点&a…

适用于车载设备无钥匙进入系统汽车用晶振FA-238A

汽车用晶振FA-238A是一款适用于车载设备无钥匙进入系统的耐高温晶振。汽车用晶振FA-238A是爱普生推出一的款MHz表贴式晶体单元&#xff0c;具有很好的预率性能&#xff0c;符合AEC-0200标准&#xff0c;其封装尺寸仅为3.2x2.5x0.7mm&#xff0c;工作温度范围在-40℃~125℃之间&…

市场复盘总结 20240402

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率 50% 最常用的二…

最新版两款不同版SEO超级外链工具PHP源码

可根据个人感觉喜好自行任意选择不同版本使用&#xff08;版V1或版V2&#xff09; 请将zip文件全部解压缩即可访问&#xff01; 源码全部开源&#xff0c;支持上传二级目录访问 已更新增加大量高质量外链&#xff08;若需要增加修改其他外链请打开txt文件&#xff09;修复优…

探索牙科业务架构的优化与整合解决方案

在现代医疗领域中&#xff0c;牙科作为一个重要的分支&#xff0c;其业务架构和整体解决方案的优化与整合&#xff0c;对于提高诊疗效率、提升患者体验以及促进口腔健康水平具有重要意义。本文将深入探讨牙科业务架构的优化方向和整体解决方案&#xff0c;为牙科行业的发展提供…