当前位置: 首页 > 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;形成一个新的三位数。对这个新的三位数可以重…...

SpringCloud 负载均衡 spring-cloud-starter-loadbalancer

简述 spring-cloud-starter-loadbalancer 是 Spring Cloud 中的一个组件&#xff0c;它提供了客户端负载均衡的功能。在 Spring Cloud 的早期版本中&#xff0c;Netflix Ribbon 被广泛用作客户端负载均衡器&#xff0c;但随着时间推移和 Netflix Ribbon 进入维护模式&#xff…...

牛客周赛-46

牛客周赛-46 a乐奈吃冰b素世喝茶c爱音开灯d小灯做题 a乐奈吃冰 ac code #include<iostream> using namespace std; int main(){long long a,b;cin>>a>>b;int tmpmin(b,a/2);long long resatmp;cout<<res;return 0; }b素世喝茶 #include<iostream…...

多模态vlm综述:An Introduction to Vision-Language Modeling 论文解读

目录 1、基于对比学习的VLMs 1.1 CLIP 2、基于mask的VLMs 2.1 FLAVA 2.2 MaskVLM 2.3 关于VLM目标的信息理论视角 3、基于生成的VLM 3.1 学习文本生成器的例子: 3.2 多模态生成模型的示例: 3.3 使用生成的文本到图像模型进行下游视觉语言任务 4、 基于预训练主干网…...

28.找零

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/744 题目描述 有一台自动售票机,每张票卖 …...

[方法] 《鸣潮》/《原神》呼出与锁定光标的功能细节

本方法适用于Cinemachine - FreeLook。 1. 锁定与呼出光标的功能实现 // 锁定光标 private void LockMouse() {// 将光标锁定在屏幕中间Cursor.lockState CursorLockMode.Locked;// 隐藏光标Cursor.visible false; }// 呼出光标 private void UnLockMouse() {// 释放光标Cu…...

计算机网络-NAT配置与ACL

目录 一、ACL 1、ACL概述 2、ACL的作用 3、ACL的分类 4、ACL的配置格式 二、NAT 1、NAT概述 2、NAT分类 2.1 、 静态NAT 2.2 、 动态NAT 3、NAT的功能 4、NAT的工作原理 三、NAT配置 1、静态NAT配置 2、动态NAT配置 四、总结 一、ACL 1、ACL概述 ACL&#xff…...

哈尔滨三级等保测评需要测哪些设备?

哈尔滨三级等保测评需要测的设备&#xff0c;主要包括物理安全设备、网络安全设备和应用安全设备三大类别。这些设备在保障哈尔滨地区信息系统安全方面发挥着至关重要的作用。 首先&#xff0c;物理安全设备是确保信息系统实体安全的基础。在哈尔滨三级等保测评中&#xff0c;物…...

大学体育(二)(华中科技大学) 中国大学MOOC答案2024版100分完整版

大学体育&#xff08;二&#xff09;(华中科技大学) 中国大学MOOC答案2024版100分完整版 有氧运动 有氧运动单元测验 1、 世界卫生组织对18-64岁年龄组成年人的运动建议是&#xff1a;每周至少&#xff08; &#xff09;分钟的中等强度有氧身体活动&#xff0c;或者每周至少&a…...

Web前端策划:从理念到实现的全方位解析

Web前端策划&#xff1a;从理念到实现的全方位解析 在数字化时代的浪潮中&#xff0c;Web前端策划作为连接技术与用户界面的桥梁&#xff0c;扮演着至关重要的角色。它涉及从用户需求分析、设计构思到技术实现的全方位过程&#xff0c;要求策划者具备深厚的技术功底和敏锐的市…...

经济与安全兼顾:茶饮店购买可燃气体报警器的价格考量

可燃气体报警器在如今的社会中扮演着至关重要的角色。它们用于检测环境中的可燃气体浓度&#xff0c;及早发现潜在的火灾隐患&#xff0c;保护人们的生命和财产安全。 在这篇文章中&#xff0c;佰德将介绍可燃气体报警器的安装、检定以及价格&#xff0c;通过实际案例和数据&a…...

帮别人做网站规划/个人介绍网页制作

在android开发中&#xff0c;我们离不开资源文件的使用&#xff0c;从drawable到string&#xff0c;再到layout&#xff0c;这些资源都为我们的开发提供了极大的便利&#xff0c;不过我们平时大部分时间接触的资源目录一般都是下面这三个。 /res/drawable /res/values /res/l…...

小学生信息科学做网站/西安关键词排名推广

以项目中的扇形统计图为例&#xff1a; 首先&#xff0c;第一步&#xff1a; 引入外部echarts.js文件 其次&#xff0c;第二步&#xff1a; HTML代码块 <div class"count-body-con count-tj"><div class"float-e-margins"><div class"…...

学校网站开发招标/简述网络营销与传统营销的整合

作者&#xff1a;网易云 链接&#xff1a;https://www.zhihu.com/question/27696290/answer/381993207 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 什么是大数据 近几年&#xff0c;市场上出现了很多和大数据相关…...

安徽省两学一做网站/腾讯域名

/*数据约束*/CREATE TABLE user01 (uid INT NOT NULL,/*非空约束*/ PRIMARY KEY /*主键约束*/ AUTO_INCREMENT /*自增长*/uname VARCHAR(10) UNIQUE,/*唯一约束*/address VARCHAR(20) DEFAULT张店/*默认值约束*/);INSERT INTO user01 VALUES(1,小红帽,博山);INSERT INTO us…...

京东淘宝网站是怎么做的/福建seo网站

1、送股送股是上市公司将本年的利润留在公司里&#xff0c;发放股票作为红利&#xff0c;送股后&#xff0c;公司的资产、负债、股东权益的总额结构并没有发生改变&#xff0c;但总股本增大了&#xff0c;同时每股净资产降低了&#xff0c;股价也相应降低。说的直白些&#xff…...

山东坤泰建设集团网站/快速排名优化公司

vue之ant design组件库中的table表格的序号递增 一、模板中自定义列 二、在data中定义colum和分页 注&#xff1a; 在表格展示换行的情况下&#xff0c;固定在右侧的操作栏可能会错位...