【Linux-多线程】重谈地址空间+内存管理方式

一、背景知识

a.重谈地址空间

我们之前已经说过,CPU内部见的地址,以及我们打印出来的地址都是虚拟地址;物理内存加载到CPU,CPU内执行进程创建内核数据结构,页表等,通过页表映射到物理磁盘上;也就是说地址从CPU出来那一刻起,已经变成物理地址

CPU内有两个重要的寄存器cr2,cr3寄存器

  • CR2是一个重要的控制寄存器,主要用于内存管理,特别是与分页机制相关。CR2寄存器通常用于存储导致页错误的线性地址。当处理器启用分页机制时,如果发生页错误(即处理器试图访问一个不在物理内存中的虚拟地址),CR2会保存引起该错误的线性地址。这个地址信息对于操作系统来说非常有用,因为它可以帮助操作系统确定哪个虚拟地址导致了页错误,并采取相应的措施,比如加载所需的页面到物理内存中。

  • CR3寄存器通常被称为页目录基址寄存器(PDBR),它存储的是当前任务页目录的物理地址。页目录是分页机制中的一个数据结构,用于将虚拟地址映射到物理地址。

还有一个非常重要的硬件MMU

内存管理单元(Memory Management Unit,简称MMU)是计算机硬件的一部分,它负责处理虚拟内存到物理内存的映射。MMU是现代操作系统实现内存保护、虚拟内存和多任务处理的关键组件

主要功能:

地址转换:MMU将虚拟地址(由CPU生成的地址)转换为物理地址(实际内存中的地址)。这个过程通常涉及到页表或段表查找。

内存保护:MMU可以限制特定进程对内存的访问,以防止一个进程访问或修改另一个进程的内存空间,从而提高系统的稳定性和安全性。

虚拟内存管理:MMU允许系统使用比物理内存更大的虚拟地址空间。通过将不常用的内存页交换到磁盘(称为交换或分页),MMU帮助操作系统管理更大的工作集。

缓存控制:MMU还负责控制内存访问的缓存行为,例如决定是否启用或禁用缓存。

物理内存是什么样的?

首先我们要知道:OS进行内存管理,不是以字节为单位的,而是以内存块为单位的,默认大小是4KB,系统和磁盘文件进行IO的基本单位是4KB---->8个扇区

 

我们之前只说页表是用来虚拟地址到物理地址映射的

真正的页表是什么样呢?虚拟地址是如何转换为物理地址的呢?

虚拟地址不就是一个32位的比特位吗?我们把这32位分成10,10,12三个块;第一个块我们用于页目录作为索引,页目录里面存的是页表的地址,第二个块我们用于页表,页表里面指向的页框的起始地址;第三个块有12位比特位,转换成十进制可表示[0,4095],这一部分我们用于页内偏移量,这样32位都用上了,32位的组合就成了一个地址

这样的话页表的大小也就是1024*2KB + 4KB(页目录)

b.理解代码数据划分的本质,虚拟地址的本质是什么

函数有地址吗?---> 有,函数就是一批代码的入口地址

每行代码都有地址,而且同一个函数我们认为地址是连续的!

【问题】那么函数是什么?

  • 函数就是连续的代码地址构成代码块,一个函数对应一批的虚拟地址

所以说,虚拟地址本质是一种资源

c.更官方的解释概念

基本分页内存管理方式

【问题】为什么引入基本分页内存管理方式?

➢ 在连续存储管理方式中,固定分区会产生内部碎片,动态分区会产生外部碎片。这两种技术对内存的利用率都比较低

➢ 内存中可能缺少大块的连续空间

外部碎片,是由于大量信息由于先后写入、置换、删除而形成的空间碎片。由于这样的原因形成的空间碎片,我们称之为外部碎片。

内部碎片,是由于存量信息容量与最小存储空间单位不完全相符而造成的空间碎片。

  •  页(页面)—— Page

在分页管理中,由于进程在申请内存空间时,是逐个按照块来申请空间的,故进程被分成若干个逻辑块,这些逻辑块被称为页(或页面)

分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等

 

  •  页框(页帧)—— Page frame

进程中的页必然要映射到内存中的物理块,即一个页(页面)对应唯一的物理块,这些内存中的块(物理块)称为页框(或页帧)。

内存按页的大小划分为大小相等的区域,称为物理块(物理页面,页框(frame),帧),同样加以编号,如 0#块、1#块等等。

  • 页框(页帧)和页面的对应关系

在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。

 

  • 页面大小

每个页,也就是进程中的每一块,都有相同的大小,叫做页面大小,为了方便地址转换,一般取2的整数次幂(二进制思想),常见的页面大小是4KB(32位系统)。

  • 页表项

页表项是页表的基本构成单元,一个页表项相当于页表的一条记录。页表项由页号和内存的物理块号(就是页框号)构成

  • 在分页管理方式中,逻辑地址结构由页号与页内偏移量(页内地址)构成

系统内存= 内存最多页面数 × 页面大小

对于32位系统,系统最多有220个页面,每个页面4KB,则内存大小就等于220 ×4KB,合4GB。

换句话说,一个页表也要必须能够索引到全部页面,因此页表中的页表项个数就是最多页面数。

页面中页表项个数= 内存最多页面数= 2^页号所占位数

用来表示页号占去了20位,那么一个页表就能表示220页表项,假设每个页表项占

用4Bytes空间,那么页表大小是多少呢?2^20×4Bytes = 4MB,一个页表大小就占了4MB这么大的内存空间。

物理地址= 物理块号 × 页面大小 + 页内偏移量

页表

为了能在内存中找到每个页面所对应的物理块。系统又为每个进程建立了一张页面映像表,简称页表

页表的作用是实现从页号到物理块号的地址映射

在进程地址空间内的所有页(0~n),依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号.

页表通常存在PCB(进程控制块)中, 进程执行时,页表常驻内存。

  • 关于页表的几个重要概念

一个进程对应一张页表,进程的每个页面对应一个页表项;每个页表项 “块号”和其他信息组成

页表记录进程页面和实际存放的内存块之间的映射关系

页表的本质是一个大数组,页号是数组下标,页表项是数组元素,其大小是块号。

 

地址变换过程

 页表大多驻留在内存中

 在系统中只设置一个页表寄存器 PTR(Page-Table Register),在其中存放页表在内存的始址和页表的长度。

 进程未执行时,页表的始址和页表长度存放在本进程的 PCB 中。

 当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。

当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)

分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。

  • 先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误将被系统发现并产生地址越界中断。

  • 若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页

    表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。

  • 与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。

  • 完成从逻辑地址到物理地址的变换。

 

两级页表的引入

对于一个具有32位逻辑地址空间的分页系统,规定页面大小为4 KB即2^12 B,则在每个进程页表中的页表项可达1兆(2^20)个之多。又因为每个页表项占用一个字节, 故每个进程仅仅其页表就要占用1M的内存空间,而且还要求是连续的。

可以采用这样两个方法来解决这一问题:

① 采用离散分配方式来解决难以找到一块连续的大内存空间的问题:

② 只将当前需要的部分页表项调入内存,其余的页表项仍驻留在磁盘上,需要时再调入。

对于要求连续的内存空间来存放页表的问题,可利用将页表进行分页,并离散地将各个页面分别存放在不同的物理块中的办法来加以解决,同样也要为离散分配的页表再建立一张页表,称为外层页表,在每个页表项中记录了页表页面的物理块号。

二级分页存储管理方式的实现
  • 两级页表地址结构

 以32 位逻辑地址空间为例来说明,如图所示。当页面大小为 4 KB 时(12 位),若采用一级页表结构,应具有 20 位的页号,即页表项应有 1 兆个;

 在采用两级页表结构时,再对页表进行分页,使每页中包含 2^10 (即 1024)个页表项,最多允许有 2^10个页表分页;或者说,外层页表中的外层页内地址 P2为10 位,外层页号 P1也为 10 位。

  • 地址变换过程

在地址变换机构中,需要增设一个外层页表寄存器,用于存放外层页表的始址

利用逻辑地址中的外层页号P1作为外层页表的索引,从中找到指定页表分页的始址,利用 P2 作为指定页表分页的索引,找到指定的页表项,其中即含有该页在内存的物理块号P,该块号 P 和页内地址 d 即可构成访问的内存物理地址。

 

 

  • 地址变换过程

逻辑地址最高10位(二进制编码,如果不是先转换)得到一级页号,

中间10位得到二级页号,

最低12位得到页内偏移。

根据一级页号对应的物理块找到对应的二级页表在物理内存中的位置,

在二级页表中查找二级页号对应的物理块在内存中的位置

之后步骤与“基本分页管理方式”一致

 

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

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

相关文章

Spark Optimization —— Reducing Shuffle

Spark Optimization : Reducing Shuffle “Shuffling is the only thing which Nature cannot undo.” — Arthur Eddington Shuffle Shuffle Shuffle I used to see people playing cards and using the word “Shuffle” even before I knew how to play it. Shuffling in c…

Elasticsearch——Java API 操作

Elasticsearch 软件是由Java语言开发的,所以也可以通过JavaAPI的方式对 Elasticsearch服务进行访问。 创建 Maven 项目 我们在 IDEA 开发工具中创建 Maven 项目(模块也可)ES。并修改pom文件&#xff0c;增加Maven依赖关系。 #直接复制在pom文件的<dependencies></de…

量化的8位LLM训练和推理使用bitsandbytes在AMD GPUs上

Quantized 8-bit LLM training and inference using bitsandbytes on AMD GPUs — ROCm Blogs 在这篇博客文章中&#xff0c;我们将介绍bitsandbytes的8位表示方式。正如你将看到的&#xff0c;bitsandbytes的8位表示方式显著地减少了微调和推理大语言模型&#xff08;LLMs&…

自回归(Autoregressive)模型概述

自回归&#xff08;Autoregressive&#xff09;模型概述 自回归&#xff08;Autoregressive&#xff0c;简称AR&#xff09;模型是一类基于“历史数据”来预测未来数据的模型。其核心思想是模型的输出不仅依赖于当前输入&#xff0c;还依赖于先前的输出。自回归模型通常用于时…

Win11电脑亮度无法调节以及夜间模式点击没有用失效解决方法

一、问题 最近&#xff0c;突然感觉屏幕亮度十分刺眼&#xff0c;想调整为夜间模式&#xff0c;发现点了夜间模式根本没用&#xff0c;亮度也是变成了灰色。 明明前几天还能调节的&#xff0c;这实在是太难受了&#xff01; 二、原因 这是远程控制软件向日葵的问题 在向日葵…

Linux笔记---进程:进程终止

1. 进程终止概念与分类 进程终止是指一个正在运行的进程结束其执行的操作。以下是一些常见的导致进程终止的情况&#xff1a; 一、正常终止 完成任务当进程完成了它被设计要执行的任务后&#xff0c;就会正常终止。收到特定信号在操作系统中&#xff0c;进程可能会收到来自操作…

【工具推荐】dnsx——一个快速、多用途的 DNS 查询工具

basic/基本使用方式 echo baidu.com | dnsx -recon # 查询域名所有记录echo baidu.com | dnsx -a -resp # 查询域名的a记录echo baidu.com | dnsx -txt -resp # 查询域名的TXT记录echo ip | dnsx -ptr -resp # ip反查域名 A记录查询 TXT记录查询 ip反查域名 help/帮助信息 输…

【树莓派5】移动热点获取树莓派IP并初次登录SSH

本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本&#xff1a;Windows11 24H2树莓派&#xff1a;树莓派5&#xff0c;Raspberry Pi 5SSH软件&#xff1a…

【Git系列】Git 提交历史分析:深入理解`git log`命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

第144场双周赛:移除石头游戏、两个字符串得切换距离、零数组变换 Ⅲ、最多可收集的水果数目

Q1、[简单] 移除石头游戏 1、题目描述 Alice 和 Bob 在玩一个游戏&#xff0c;他们俩轮流从一堆石头中移除石头&#xff0c;Alice 先进行操作。 Alice 在第一次操作中移除 恰好 10 个石头。接下来的每次操作中&#xff0c;每位玩家移除的石头数 恰好 为另一位玩家上一次操作…

Python parsel库学习总结

parsel库是Python中用于解析HTML文件的库&#xff0c;其能通过CSS选择器、xpath、正则表达式来定位html中的元素。 通过css选择器定位元素 from parsel import Selectorhtml """ <html><head><a class"option1">这是一个伪html片…

【HarmonyOS学习日志(11)】计算机网络之概念,组成和功能

文章目录 计算机网络概念计算机网络&#xff0c;互连网与互联网的区别计算机网络互连网互联网&#xff08;因特网&#xff0c;Internet&#xff09; 计算机网络的组成和功能计算机网络的组成从组成部分看从工作方式看从逻辑功能看 计算机网络的功能数据通信资源共享分布式处理提…

Vue3 开源UI 框架推荐 (大全)

一 、前言 &#x1f4a5;这篇文章主要推荐了支持 Vue3 的开源 UI 框架&#xff0c;包括 web 端和移动端的多个框架&#xff0c;如 Element-Plus、Ant Design Vue 等 web 端框架&#xff0c;以及 Vant、NutUI 等移动端框架&#xff0c;并分别介绍了它们的特性和资源地址。&#…

视觉语言动作模型VLA的持续升级:从π0之参考基线Octo到OpenVLA、TinyVLA、DeeR-VLA、3D-VLA

第一部分 VLA模型π0之参考基线Octo 1.1 Octo的提出背景与其整体架构 1.1.1 Octo的提出背景与相关工作 许多研究使用从机器人收集的大量轨迹数据集来训练策略 从早期使用自主数据收集来扩展策略训练的工作[71,48,41,19-Robonet,27,30]到最近探索将现代基于transformer的策略…

k8s--pod创建、销毁流程

文章目录 一、pod创建流程二、pod销毁流程 一、pod创建流程 1、用户通过kubectl或其他api客户端提交pod spec给apiserver,然后会进行认证、鉴权、变更、校验等一系列过程2、apiserver将pod对象的相关信息最终存入etcd中,待写入操作执行完成,apiserver会返回确认信息给客户端3、…

相同的二叉树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&…

算法妙妙屋-------1.递归的深邃回响:全排列的奇妙组合

全排列的简要总结 全排列&#xff08;Permutation&#xff09;是数学中一个经典的问题&#xff0c;指的是从一组元素中&#xff0c;将所有元素按任意顺序排列形成的所有可能序列。 特点 输入条件&#xff1a; 给定一组互异的元素&#xff08;通常为数组或字符串&#xff09;。…

【Rust】unsafe rust入门

这篇文章简单介绍下unsafe rust的几个要点 1. 解引用裸指针 裸指针其实就是C或者说C的指针&#xff0c;与C的指针不同的是&#xff0c;Rust的裸指针还是要分为可变和不可变&#xff0c;*const T 和 *mut T&#xff1a; 基于引用创建裸指针 let mut num 5;let r1 &num …

什么是人工智能大模型?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于人工智能大模型的相关内容&#xff01; …

基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)

乳腺癌是全球女性中最常见的恶性肿瘤之一&#xff0c;早期准确诊断对于提高生存率具有至关重要的意义。传统的乳腺癌诊断方法依赖于放射科医生的经验&#xff0c;然而&#xff0c;由于影像分析的复杂性和人类判断的局限性&#xff0c;准确率和一致性仍存在挑战。近年来&#xf…