当前位置: 首页 > news >正文

『 Linux 』内存管理与文件系统

文章目录

    • 交换分区
    • 页与页框(页帧)
    • 交换分区与内存之间的交换
    • 操作系统如何管理内存
      • 物理地址转换页号与页内偏移量
    • 内存管理,文件系统与文件管理之间的联系


交换分区

请添加图片描述

在Linux的安装过程中,用户将会被提示创建一个交换分区;

这是一个特殊的分区,其大小可以由用户根据系统内存需求和推荐进行决定;

若是存在交换分区,通常在Linux中交换分区在文件系统当中并不会挂载,因此它不会在默认的文件浏览器中被显示未一个可访问的驱动器或者是目录;

一般来说一个分区中应当存在一个文件系统,而交换分区虽然被称为分区但其并不存在文件系统;

这块空间虽然在磁盘空间中,但实际上这块空间是交由内存管理所运用;

  • 交换分区与文件系统的关系:

    • 独立性:

      交换分区通常不包含一个文件系统,其并不是用来存储文件或者目录结构的;

      它将直接由操作系统进行管理,用于存放被换出的内存页;

    • 专用性:

      由于交换分区是专门用于内存管理的,因此它与用于存储文件的常规文件系统分区有着本质的区别;

      操作系统将直接在交换分区上操作内存页而不是文件或文件系统结构;

  • 内存管理运用:

    • 内存扩展

      交换分区相当于是物理内存的一个拓展,提供了一种机制,允许系统使用硬盘空间来模拟额外的RAM从而增加了可用的内存资源;

    • 内存释放

      当系统的物理内存不足时操作系统可以将不活跃的内存页移交到交换分区并释放内存空间给其他更需要紧急处理的程序或是数据;


页与页框(页帧)

请添加图片描述

在内存管理中存在两个概念,分别为页与页框(页帧);

页是进程地址空间中的最小单位,一般为4kb大小;

而页框(页帧)是物理内存当中的最小单位,其大小等于页的大小;

页通过页表映射至不同页框(页帧)中以实行内存管理;

  • 页(Page)

    • 定义:

      页是虚拟内存中的一个固定大小的块,时进程地址空间中的最小单位;

    • 大小:

      通常为4kb,但在某些系统重也可以是2MB或者更大(大页或巨页);

    • 作用:

      页用于将进程地址空间中的虚拟地址划分为若干个固定大小的块从而方便对其进行管理与映射至物理内存;

  • 页框/页帧(Page Frame)

    • 定义:

      页框或页帧是物理内存中的一个固定大小的块,其大小与页的大小相同;

    • 大小:

      通常为4kb,与页的大小相同;

    • 作用:

      页框用于存储页的内容;

页框/页帧的大小可以进行修改,但是其大小的修改只能重新选择操作系统的编译选项对操作系统进行重新编译才能生成;

虚拟内存中的页通过页表映射到物理内存中的页框;

页表记录了每个页对应的页框的信息;

当CPU访问一个虚拟地址时候,内存管理单元MMU将通过页表将虚拟地址转化为物理地址从而方位物理内存中的数据;

其中页表中存储的数据被称为页表项;

页表项是页表中的基本单元,每一个页表项对应一个页,记录了该页在物理内存中的映射信息(页框/页帧);

同通常地址转换过程如下:

  • 虚拟地址

    虚拟地址由两部分组成,页号(Page Number)和页内偏移量(Offset);

  • 页表查找

    页号用于索引页表,并找到对应的页表项;

  • 物理地址

    从页表项中获取页框号,然后与页内偏移量组合形成物理地址;

  • 内存访问

    CPU使用物理地址访问物理内存中的数据;

当需要访问一个被交换到磁盘上的页面时将会触发缺页中断;

操作系统会将所需的页面从交换分区中换回物理内存,并重新更新页表以反映新的映射关系从而结局缺页中断的问题;


交换分区与内存之间的交换

请添加图片描述

当存在交换分区且物理内存不足等情况后,操作系统将会将部分没有必要的 页框/页帧 换出至磁盘中的交换分区中,这种交换被称为页面置换;

这是通过页面置换的算法实现的;

通常页面置换的算法包括:

  • 最近最少使用

    操作系统将选择最近最少使用的页面进行置换;

  • 先进先出

    操作系统将选择最早加载到内存中的页进行置换;

  • 最不常用

    操作系统将选择使用频率最低的页面进行置换;

通常被换出的大小为一个页框/页帧的大小,由于局部性原理,置换的页面可能是连续的,所以对于资源的浪费上一般只有最后一个页才会被浪费;

同时由于空间局部性原理,当在访问一个页时将会有很大的概率去访问该页的上下文,所以当在进行交换时将会有一个预加载机制,固定大小可以有效的进行这个预加载机制;

同时交换大小的固定可以减少内部碎片;


操作系统如何管理内存

请添加图片描述

在计算机当中操作系统可以直接看到物理内存并直接或间接对物理内存进行内存管理;

操作系统将把物理内存看做是若干个"页框/页帧";

且将通过 “先描述,再组织” 的方式对物理内存进行管理;

在操作系统内存中存在名为struct page的结构体;

这个结构体用于表示无力内存中的一个"页框/页帧",每个物理"页框/页帧"都有一个对应的 struct page 结构体实例,操作系统内核将通过这些结构体来管理物理内存;

其主要的字段如下:

  • flags

    该字段用于存储页的状态标志,如是否被锁定,是否为脏页等;

  • count

    引用计数,表示该页框被引用的次数;

    如在进行子进程的创建时,其子进程将为父进程的一份拷贝,其进程地址空间中所映射的物理内存在未进行写入操作的状态下为同一个物理内存;

    而该引用计数即为维护页框被引用的次数;

  • mapping

    指向该页所属的地址空间;

  • private

    用于存储与页框相关的私有数据;

  • virtual

    当页框被页映射时该字段将存储页框的虚拟地址;

struct page {unsigned long flags;        // 页的状态标志atomic_t count;             // 引用计数struct address_space *mapping; // 地址空间指针pgoff_t index;              // 页的索引void *private;              // 私有数据void *virtual;              // 虚拟地址
};

4GB为例,该内存当中将会有
4 × 1024 × 1024 × 1024 bytes 4 × 1024 bytes/page = 1048576 pages \frac{4 \times 1024 \times 1024 \times 1024 \text{ bytes}}{4 \times 1024 \text{ bytes/page}} = 1048576 \text{ pages} 4×1024 bytes/page4×1024×1024×1024 bytes=1048576 pages
个这样的结构体;

而这些结构体将会以数组的方式进行管理,struct page mem_array[1048576];

而这个数组中每一个数组下标即对应着一个页框的 页号 ;

  • 例如
    • mem_array[0]对应第一个物理页框;
    • mem_array[1]对应第二个物理页框;
    • 以此类推,mem_array[1048575]对应最后一个物理页框;

在32位机器中,页内偏移量占用低12位,页号占用高20位;

一般情况下物理地址的计算如下:

  • 物理地址 = 页号 * 页大小 + 页内偏移量

假设页的大小为4kb,页号为i,页内偏移量为offset,则物理地址为:

  • 物理地址 = i * 212 + offset

因为这个结构体是存在于页框当中,而页框的大小仅只有4kb;

所以对应的结构体并不会太大(避免过多占用内存),通常以union的形式定义;


物理地址转换页号与页内偏移量

请添加图片描述

32位系统中,物理地址为32位;

假设页的大小为4kb212 字节;

其中页号占用高20位,页内偏移量占用低12位;

  • 提取页号
    • 掩码: 0xFFFF F000
    • 操作: 物理地址 & 0xFFFF F000
    • 结果: 保留高20位,将低12位清零;
  • 提取页内偏移量
    • 掩码: 0x0000 0FFF
    • 操作: 物理地址 & 0x0000 0FFF
    • 结果: 保留低12位,将高20位清零;

假设物理地址为0x12345678;

其二进制表示:0001 0010 0011 0100 0101 0110 0111 1000;

  • 高20位(页号)

    高20位:0001 0010 0011 0100 0101
    十六进制表示:0x12345

  • 低12位(页内偏移量)

    低12位:0110 0111 1000
    十六进制表示:0x678

当需要访问一个内存时只需要先找到这个4kb对应的page即可以找到对应的物理页框;

而实际上所有方位内存的动作都可以看做是访问内存Page数组;


内存管理,文件系统与文件管理之间的联系

请添加图片描述

当操作系统启动时将会进行预加载;

在文件系统中的预加载的内容一般为文件系统中的关于SuperBlock,GroupDescriptorTable,BlockBitmap,InodeBitmap等属性信息从而方便操作系统内核对其进行管理;

  • 属性

    当一个进程需要打开一个文件时,操作系统将会为这个打开的文件在进程的task_struct结构体中维护一个file_struct结构体,其中这个结构体中保存了一个struct file*fd_array[]结构体用于指向各个struct file文件结构体;

    其中file* fd_array[]结构体的下标即为文件描述符;

    当打开一个文件时即为需要去访问该文件的信息,在struct file结构体中存储的信息只为少量的信息;

    详细信息一般被存储在文件的Inode中;

    而操作系统将会通过物理内存中的InodeBitmap,InodeTable中依次去寻找其对应的Inode;

    当找到对应的Inode后操作系统内核将为这个打开的文件维护一个struct inode结构体并将Inode中的信息加载至该结构体当中从而能够建立文件与内核之间的联系;

    struct inode {umode_t i_mode;        // 文件类型和权限unsigned long i_ino;   // inode 号atomic_t i_count;      // 引用计数struct file_operations *i_fop; // 文件操作函数指针struct super_block *i_sb; // 指向超级块的指针struct address_space *i_mapping; // 地址空间指针loff_t i_size;         // 文件大小struct timespec i_atime; // 最后访问时间struct timespec i_mtime; // 最后修改时间struct timespec i_ctime; // inode 最后更改时间// 其他字段...
    };
    
  • 内容

    同样的在struct file结构体中有一个指针,该指针指向了一个名为struct address_space的结构体;

    struct radix_tree_root {void *rnode; // 基数树根节点指针// 其他字段...
    };
    

    在这个结构体中将会维护一棵名为radix_tree_root树,这是一棵结构为基数树的树;

    而其中这棵树的每个节点即指向了一个strcut page的结构体;

    struct page {unsigned long flags;        // 页的状态标志atomic_t count;             // 引用计数struct address_space *mapping; // 地址空间指针pgoff_t index;              // 页的索引void *private;              // 私有数据void *virtual;              // 虚拟地址
    };
    

相关文章:

『 Linux 』内存管理与文件系统

文章目录 交换分区页与页框(页帧)交换分区与内存之间的交换操作系统如何管理内存物理地址转换页号与页内偏移量 内存管理,文件系统与文件管理之间的联系 交换分区 在Linux的安装过程中,用户将会被提示创建一个交换分区; 这是一个特殊的分区,其大小可以由用户根据系统内存需求和…...

线性代数|机器学习-P8矩阵低秩近似eckart-young

文章目录 1. SVD奇异值分解2. Eckart-Young2.1 范数 3. Q A Q U Σ V T QAQU\Sigma V^T QAQUΣVT4. 主成分分析图像表示 1. SVD奇异值分解 我们知道,对于任意矩阵A来说,我们可以将其通过SVD奇异值分解得到 A U Σ V T AU\Sigma V^T AUΣVT&#xff0…...

平面设计神器CorelDRAW2021精简版,你值得拥有!

亲爱的设计师小伙伴们,今天我要为大家种草一款神奇的软件——CorelDRAW平面设计软件2021精简版!🤩✨作为一名专业的图形设计师,我深知一个好工具对于我们的工作有多么重要。而这款软件简直就是我们设计师的救星!&#…...

kafka是什么?

Kafka是一个由Apache软件基金会开发的开源流处理平台,最初由LinkedIn公司开发,使用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据,如网页浏览、搜索和其他用户行为等。Kafk…...

ABC351

C 栈的应用 #include<bits/stdc.h>using namespace std;stack<int>stk;int main() {int n;cin>>n;for(int i1;i<n;i){int a;cin>>a;while(!stk.empty()&&astk.top()){stk.pop();a;}stk.push(a);}cout<<stk.size()<<endl;retur…...

base上海,数据科学,数据挖掘,数据分析等岗位求收留

裁员了&#xff0c;base上海&#xff0c;数据科学&#xff0c;数据挖掘&#xff0c;数据分析等岗位&#xff0c;期望30k~40k&#xff0c;求推荐求收留 1&#xff0c;6年数据算法工作&#xff0c;做过指标体系搭建&#xff0c;用户画像&#xff0c;货品定价&#xff0c;社区分析…...

IC元器件

1.电阻&#xff1a; 电阻的作用&#xff1a; 1.与负载串联&#xff1a;做限流分压 2.电阻并联&#xff1a;将小功率电阻并联成大功率&#xff0c;防烧毁 2.电容&#xff1a; 电容就是两块金属板&#xff0b;中间的介质&#xff08;相当于两个人坐在一起加上中间的空气…...

SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-01 10:00:002021-09-01 10:00:20011NULL210520022021-09-10 11:00:002021-09-10 11:00:30101NULL310120012021-10-01 10:00:002021-10-01 10:00…...

Linux安装MySQL教程【带图文命令巨详细】

巨详细Linux安装MySQL 1、查看是否有自带数据库或残留数据库信息1.1检查残留mysql1.2检查并删除残留mysql依赖1.3检查是否自带mariadb库 2、下载所需MySQL版本&#xff0c;上传至系统指定位置2.1创建目录2.2下载MySQL压缩包 3、安装MySQL3.1创建目录3.2解压mysql压缩包3.3安装解…...

外部排序快速入门详解:基本原理,败者树,置换-选择排序,最佳归并树

文章目录 外部排序1.最基本的外部排序原理2.外部排序的优化2.1 败者树优化方法2.2 置换-选择排序优化方法2.3 最佳归并树 外部排序 为什么要学习外部排序&#xff1f; 答&#xff1a; 在处理数据的过程中&#xff0c;我们需要把磁盘(外存&#xff09;中存储的数据拿到内存中处理…...

人工智能和物联网如何结合

欢迎来到 Papicatch的博客 目录 ​ &#x1f349;引言 &#x1f349;AI与IoT的结合方式 &#x1f348;数据处理和分析 &#x1f34d;实例 &#x1f348;边缘计算 &#x1f34d;实例 &#x1f348;自动化和自主操作 &#x1f34d;实例 &#x1f348;安全和隐私保护 &…...

【JAVASE】JAVA应用案例(下)

一&#xff1a;抢红包 一个大V直播时&#xff0c;发起了抢红包活动&#xff0c;分别有9,666,188,520,99999五个红包。请模拟粉丝来抽奖&#xff0c;按照先来先得&#xff0c;随机抽取&#xff0c;抽完即止&#xff0c;注意&#xff1a;一个红包只能被抽一次&#xff0c;先抽或…...

【面试干货】 B 树与 B+ 树的区别

【面试干货】 B 树与 B 树的区别 1、B 树2、 B 树3、 区别与优缺点比较4、 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库系统中&#xff0c;B 树和 B 树是常见的索引结构&#xff0c;它们在存储和组织数据方面有着不同的设计…...

Socket编程权威指南(四)彻底解密 Epoll 原理

在上一篇文章中&#xff0c;我们优化了基于 Socket 的网络服务器&#xff0c;从最初的 select/poll 模型进化到了高效的 epoll。很多读者对 epoll 的惊人性能表示极大的兴趣&#xff0c;对它的工作原理也充满了好奇。今天&#xff0c;就让我们一起揭开 epoll 神秘的面纱&#x…...

Windows开始ssh服务+密钥登录+默认启用powershell

文章内所有的命令都在power shell内执行&#xff0c;使用右键单击Windows徽标&#xff0c;选择终端管理员即可打开 Windows下OpenSSH的安装 打开Windows power shell&#xff0c;检查SSH服务的安装状态。会返回SSH客户端和服务器的安装状态&#xff0c;一下是两个都安装成功的…...

实体商铺私域流量打造策略:从引流到转化的全链路解析

在数字化时代&#xff0c;实体商铺面临着前所未有的挑战与机遇。随着线上购物的兴起&#xff0c;传统商铺如何吸引并留住顾客&#xff0c;成为了每个实体店家必须面对的问题。私域流量的打造&#xff0c;正是解决这一问题的关键所在。本文将从引流、留存、转化三个方面&#xf…...

实战 | 通过微调SegFormer改进车道检测效果(数据集 + 源码)

背景介绍 SegFormer&#xff1a;实例分割在自动驾驶汽车技术的快速发展中发挥了关键作用。对于任何在道路上行驶的车辆来说&#xff0c;车道检测都是必不可少的。车道是道路上的标记&#xff0c;有助于区分道路上可行驶区域和不可行驶区域。车道检测算法有很多种&#xff0c;每…...

翻译《The Old New Thing》- Why do messages posted by PostThreadMessage disappear?

Why do messages posted by PostThreadMessage disappear? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20090930-00/?p16553 Raymond Chen 2008年09月30日 为什么 PostThreadMessage 发布的信息会消失&#xff1f; 在显示用户界面的线…...

【深度学习】—— 神经网络介绍

神经网络介绍 本系列主要是吴恩达深度学习系列视频的笔记&#xff0c;传送门&#xff1a;https://www.coursera.org/deeplearning-ai 目录 神经网络介绍神经网络的应用深度学习兴起的原因 神经网络&#xff0c;全称人工神经网络&#xff08;Artificial Neural Network&#xf…...

python-数字黑洞

[题目描述] 给定一个三位数&#xff0c;要求各位不能相同。例如&#xff0c;352是符合要求的&#xff0c;112是不符合要求的。将这个三位数的三个数字重新排列&#xff0c;得到的最大的数&#xff0c;减去得到的最小的数&#xff0c;形成一个新的三位数。对这个新的三位数可以重…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...