18 分页:介绍

目录

简单例子

页表存在哪里

列表中究竟有什么

分页:也很慢

内存追踪

小结


在解决大多数空间管理问题上面,操作系统有两种方法:

第一种就是将空间分割成不同长度的分片,类似于虚拟内存管理中的分段,但是这个方法存在一个问题,就是当长时间之后,因为碎片化的空间,导致后面的分配会存在问题。

第二种方法:将空间分割成固定大小的分片,这被称为分页。因为是固定大小,所以也就解决了上面存在的问题,每个分片被称为一页,同样,在物理内存中,奖定长槽块的阵列,叫做页帧。

简单例子

在这里首先划分出64字节的虚拟空间,然后再有128字节的物理空间地址,可以看出,在物理空间中有一部分是给操作系统保留的,通过分页的方法,可以分成大小相同的页,然后在获取或者是保存的时候,可以随机拿出来,不需要有特定的顺序,所以大大的提高了灵活性。

然后为了方便记录地址空间的每个虚拟页在物理内存中的位置,每个进程都有一个数据结构,被称为页表,这个页表可以用来虚拟页到地址之间的转换。

接下来通过完成一个地址转换的例子,说明整个流程。

因为是64字节,所以虚拟地址需要6位(2^6=64)。Va5 是虚拟地址的最高位,Va0 是最低位。因为我们知道页的大小(16 字节),

所以可以进一步划分虚拟地址

                                     

每个页的大小是16字节,在64字节中一共有4个页,那前两位的虚拟页号就是用来判断的,后面的偏移量是用来确定该页的哪个字节。

假设加载的虚拟地址是21,二进制也就是010101

01也就是页号,后面的就是字节处。然后检索页表,找到虚拟页1所在的物理页面,然后进行替换,将这个地址发送给物理内存,获取数据。这里的偏移量是不需要发生改变的。

                        

页表存在哪里

在实际中,以经典的32位为例,是4KB的页,虚拟内存被分为20位的VPN和12位的偏移量。那也就是为每个进程管理2^20个地址转换,如果每个页表格条目需要4字节来保存信息,那算下来每个页表就是要4MB,这个是比较大,如果是100个进程,那你就无法想象你的机器是怎样的。

所以将每个进程的页表存储在内存中(在后面会更加详细)

列表中究竟有什么

页表的结构,页表就是将虚拟地址(或者实际上,是虚拟页号)映射到物理地址(物理帧号)。任何的数据结构都是可以采用的,最简单的就是数组,将两个号一一对应,然后通过所以查找页表项(PTE),后面会介绍到高级的结构。

对于每个PTE有什么位,是需要了解的

  • 有效位:通常用于指示特定地址转换是否有效。在进程中,由于中间空间是没有被使用的,所以标记为无效。如果访问的话,会陷入操作系统。

  • 保护位:表明页是否可以读取、写入或执行。

  • 存在位:表示该页是在物理存储器还是在磁盘上(即它已被换出,swapped out)。

  • 参考位(访问位):用于追踪页是否被访问,也用于确定哪些页很受欢迎,因此应该保留在内存中。

               

分页:也很慢

在上面中了解了页表,那接下来就具体看一下怎么获取数据,如果执行:movl 21, %eax

想要获取数据,系统首先要将虚拟地址转化的物理地址。所以,在获取数据前,系统要在进程的页表中拿到页表项没然后进行转换,最后在加载数据。

要运行这个过程,那硬件必须知道运行的进程的页表的位置。假设一个页表基址寄存器(page-table base register)包含页表的起始位置的物理地址。

那怎么操作呢?比如是:0x30,(二进制11000),为了拿到VPN,右移4位,得到4。假如虚拟地址是21(二进制010101),将其转化为010000,然后移位变成01,,然后在使用这个值作为页表机制寄存器指向PTE数组的索引。

那接下来就可以利用页表项获取物理帧号了,最后和偏移量结合,形成物理地址。

最后就可以拿到数据,放入到寄存器里面。这里面整个过程是比较复杂的。所以有时候运行起来也是比较慢的。

内存追踪

书中讲的很复杂,也就是为了体现出整个内存管理的复杂性,在后面可以使用mmap的底层原理来讲解这些知识。

小结

在这里首先讲了分页的知识,理解了为什么使用分页,之前的分段技术存在什么问题。在后面了解了分页的一些基础性原理。知道了需要有强大的机器去支持这个机制, 如果不小心考虑的话,分页会导致较慢的机器(有许多额外的内存访问来访问页表)和内存浪费(内存被页表塞满而不是有用的应用程序数据)

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

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

相关文章

【redis】Redis五种常用数据类型和内部编码,以及对String字符串类型的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧,如下: 单一职责原则的定义描述非常简单,也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中, 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…

提高Rust安装与更新的速度

一、背景 因为rust安装过程中,默认的下载服务器为crates.io,这是一个国外的服务器,国内用户使用时,下载与更新的速度非常慢,因此,我们需要使用一个国内的服务器来提高下载与更新的速度。 本文推荐使用字节…

AI大模型探索之路-训练篇15:大语言模型预训练之全量参数微调

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

Linux 安裝 rpm包

下载 地址:https://developer.aliyun.com/packageSearch 安装 rpm -ivh lsof-4.87-6.el7.x86_64.rpmlsof -Ki|awk {print $2}|sort|uniq -c|sort -nr|head lsof | wc -l

读天才与算法:人脑与AI的数学思维笔记24_预测性文本生成器

1. 起源 1.1. 人类讲故事可能起源于“假如……”这种问答结构 1.2. 讲故事是人类做安全试验的一种方式 1.2.1. 如果你问一个人“假如……”,其实是在探索你的行为对他可能带来的影响 1.3. 最早出现的故事极有可能就源自我们对在周遭混乱的环境中寻找某种秩序的渴…

06_图(Graph)

图的定义 图(Graph)是由顶点的有穷非空集合和顶点之间的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点集合,E是图G中边的集合。 对于图的定义,需要注意的地…

矩阵和空间变换理解

矩阵和空间变换 把向量和矩阵相乘看作是空间变换,是其中一种看法 代数角度:向量的一行和矩阵的一列逐项相乘再相加等于新向量的一项 w代表原来坐标轴和新坐标轴之间的变换关系,而a和b体现的是原来向量的关系 矩阵代表的是旧坐标和新坐标之间…

Redis 实战之命令请求的执行过程

命令请求的执行过程 发送命令请求读取命令请求命令执行器(1):查找命令实现命令执行器(2):执行预备操作命令执行器(3):调用命令的实现函数命令执行器(4&#x…

深入了解 PCIe 6.0 的演变和优化

PCI-Express是继ISA和PCI总线之后的第三代I/O总线,即3GIO。由Intel在2001年的IDF上提出,后来PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”。它的主要优势就是数据传输速率高,另外还有抗干扰能力强&…

Python 日志模块Loguru基本使用和封装使用

【一】介绍 Loguru是一个用于Python的日志库,它的设计目标是使日志记录变得简单、快速且易于阅读。 (1)Loguru介绍 简洁的API:Loguru提供了一个简洁的API,使得在Python项目中使用日志变得更加容易。只需导入loguru模…

flac和mp3的区别是什么?答案在这里

在数字音乐时代,音频格式的选择对于音质和文件大小的影响至关重要。FLAC和MP3是两种常见的音频格式,它们在音质和压缩方式上存在明显的差异。了解flac和mp3的区别,有助于我们在不同的场景下选择合适的音频格式,以获得最佳的音乐体…

N5183B是德科技n5183b信号源

181/2461/8938产品概述: 简  述: N5183B 频率范围:9 kHz 至 20 GHz,具有 AM、FM、相位调制功能。N5183B MXG X 系列微波模拟信号发生器拥有 9 kHz 至 40 GHz 的频率覆盖范围,以及接近 PSG 级别的相位噪声性能&…

使用 Express 框架构建的 Node.js web 应用程序

使用 Express 框架构建的 Node.js web 应用程序 ├── config │ └── config.js ├── middlewares │ └── errorHandler.js ├── routes │ ├── index.js │ ├── postRoutes.js │ └── userRoutes.js ├── .env ├── .gitignore ├── app.js ├…

【Centos7 】Centos7yum报错:another app is currently holding the yum lock;解决方案

Centos7 yum报错:another app is currently holding the yum lock;waiting for it to exit 大家好 我是寸铁👊 总结了一篇Centos7 yum报错:another app is currently holding the yum lock;waiting for it to exit✨ 喜欢的小伙伴可以点点关注 💝 报错 解…

【Linux系统编程】第十六弹---冯诺依曼体系结构与操作系统

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、冯诺依曼体系结构 2、操作系统原理 2.1、什么是操作系统? 2.2、用图解释操作系统 2.3、理解操作系统 总结 …

上班工资太低了,哪些副业可以多赚钱?

今天给各位分享最赚钱的副业方式的知识,其中也会对比较赚钱的副业进行解释. 1、网站接单 一般20页左右的PPT报价基本在200-400元。如果能每周接单,一个月就有接近1000元的副业收入。提交摄影和绘画作品 比起画画,靠摄影赚点外快更容易一点。…

11.买卖股票的最佳时机Ⅰ

文章目录 题目简介题目解答解法一:一次遍历代码:复杂度分析: 题目链接 大家好,我是晓星航。今天为大家带来的是 买卖股票的最佳时机面试题Ⅰ 相关的讲解!😀 题目简介 题目解答 解法一:一次遍历…

蓝桥杯成绩已出

蓝桥杯的成绩早就已经出来了,虽然没有十分惊艳 ,但是对于最终的结果我是心满意足的,感谢各位的陪伴,关于蓝桥杯的刷题笔记我已经坚持更新了49篇,但是现在即将会告别一段落,人生即将进入下一个规划。我们一起…

代码随想录训练营Day28:贪心算法06

1.738单调递增的数字 贪心策略&#xff1a;如果strNum[i]<strNum[i-1]那么strNum[i] 9,strNum[i-1]--;//比如87对应的最大的单调递增的就是79. 具体实现&#xff1a; 对于遇到小于的情况&#xff1a;如果strNum[i]<strNum[i-1]那么strNum[i] 9,strNum[i-1]--;遍历顺…