18 分页:介绍

news2024/11/17 20:40:29

目录

简单例子

页表存在哪里

列表中究竟有什么

分页:也很慢

内存追踪

小结


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

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

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

简单例子

在这里首先划分出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的底层原理来讲解这些知识。

小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端笔记-day03

文章目录 01-初始CSS02-CSS引入方式03-标签选择器04-类选择器05-id选择器06-通配符选择器07-画盒子08-字体大小09-文字粗细10-字体倾斜11-行高12-行高垂直居中13-字体族14-font复合属性15-文本缩进16-文本对齐方式17-图片对齐方式18-文本修饰线19-文字颜色20-调试工具21-综合案…

数据结构----二叉树

博主主页: 码农派大星. 关注博主带你了解更多数据结构知识 1. 树型结构 1.1 概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上…

鸿蒙OpenHarmony:【关于deps、external_deps的使用】

关于deps、external_deps的使用 在添加一个模块的时候,需要在BUILD.gn中声明它的依赖,为了便于后续处理部件间依赖关系,我们将依赖分为两种——部件内依赖deps和部件间依赖external_deps。 依赖分类 开发前请熟悉鸿蒙开发指导文档&#xff…

即插即用篇 | YOLOv8引入轴向注意力 Axial Attention | 多维变换器中的轴向注意力

本改进已集成到 YOLOv8-Magic 框架。 我们提出了Axial Transformers,这是一个基于自注意力的自回归模型,用于图像和其他组织为高维张量的数据。现有的自回归模型要么因高维数据的计算资源需求过大而受到限制,要么为了减少资源需求而在分布表达性或实现的便捷性上做出妥协。相…

【C++】string类的使用①(默认成员函数 || 迭代器接口begin,end,rbegin和rend)

🔥个人主页: Forcible Bug Maker 🔥专栏: STL || C 目录 前言🌈关于string类🌈string类的成员函数🔥默认成员函数string类对象的构造(constructor)string类对象的析构string类对象的赋值运算符…

day6Qt作业

人脸识别系统 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> #include<opencv2/face.hpp> #include <vector> #include <map> #include <QMessag…

r语言数据分析案例-北京市气温预测分析与研究

一、选题背景 近年来&#xff0c;人类大量燃烧煤炭、天然气等含碳燃料导致温室气 体过度排放&#xff0c;大量温室气体强烈吸收地面辐射中的红外线&#xff0c;造 成温室效应不断累积&#xff0c;使得地球温度上升&#xff0c;造成全球气候变暖。 气象温度的预测一直以来都是…

【Java orm 框架比较】十一 新增 原生jdbc对比

迁移到&#xff08;https://gitee.com/wujiawei1207537021/spring-orm-integration-compare&#xff09; orm框架使用性能比较 比较mybatis-plus、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp、jpa、dbvisitor、beetlsql、dream_orm、wood、hammer_sql_db、原生jdbc…

OpenCV | 入门

OpenCV | 入门 安装 参考教程 基础知识 V G A 640 480 VGA 640 \times 480 VGA640480 H D 1280 720 HD 1280 \times 720 HD1280720 F H D 1920 1080 FHD 1920 \times 1080 FHD19201080 4 K 3840 2160 4K 3840 \times 2160 4K38402160 这些都表示了固定的像素…

怎样的跨网软件,可以实现网间数据的安全收发?

网络隔离已是较为常见的网络安全保护措施&#xff0c;比如防火墙、网闸、VLAN&#xff0c;云桌面虚拟环境等方面进行隔离。像一些科技研发型企业&#xff0c;不仅仅是内外网隔离&#xff0c;甚至还划分办公网、研发网、测试网、生产网等&#xff0c;防止研发资料、设计资料等敏…

Windows Nginx 服务器部署并推流

环境 开发环境&#xff1a;windows 开发工具&#xff1a;ffmpeg、nginx、nginx-rmtp-module、vlc media player Nginx Nginx是一个高性能的HTTP和反向代理web服务器&#xff0c;并且支持rtmp&#xff0c;不过rtmp是作为一个nginx的一个模块。 对于linux系统&#xff0c;需要另…

使用Selenium破解滑动验证码的原理及解决思路

1、获取页面元素信息&#xff1a; 使用Selenium打开目标网页&#xff0c;并通过相关方法获取滑块、背景图等元素的位置和属性信息。可以使用Selenium提供的定位方法&#xff08;如xpath、CSS选择器等&#xff09;来找到这些元素。 可以使用find_element_by_xpath或find_elemen…

673. 最长递增子序列的个数(Leetcode)

文章目录 前言一、题目描述二、解题步骤1.小demo介绍2.动态规划1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值 三、代码编写总结 前言 在本篇文章中&#xff0c;我们将会讲到leetcode中673. 最长递增子序列的个数&#xff0c;我们将会用动态规划方式解决这道问题&#…

weditor安装的时候产生的问题

先放出来github的地址https://github.com/alibaba/web-editor&#xff0c;这个上面给了两种安装方式一种是&#xff1a; pip3 install -U weditor 这种方式会报错误&#xff0c; 具体原因我也不知道。那就采用第二种方式 git clone https://github.com/openatx/weditor pip3…

实体同城商家短视频获客,3天直播课,玩转实体商家私域,引爆门店增长

课程内容&#xff1a; 实体同城3天直播课【资料】 实体商家获客第一天 .mp4 实体商家获客第二天上.mp4 实体商家获客第二天,mp4 实体商家获客第三天.mp4 实体商家获客第4天.mp4 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x…

【Linux】从零开始认识动静态库 -动态库

送给大家一句话&#xff1a; 我不要你风生虎啸&#xff0c; 我愿你老来无事饱加餐。 – 梁实秋 《我把活着欢喜过了》 ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭* ੈ✩‧₊˚ଘ(੭ˊᵕˋ)੭…

数据结构与算法学习笔记三---队列的链式存储表示和实现(C++)

目录 前言 1.队列的概念 2.队列的表示和实现 1.定义 2.初始化 ​编辑 3.销毁队列 4.清空队列 5.队列判空 6.队列长度 7.获取队头元素 8.入队 9.出队 10.遍历 11.完整代码 前言 这篇博客主要讲的是对队列的链式存储。 1.队列的概念 队列是一种访问受限的线性表。…

如何将一个VPS上的网站全部迁移至另外一个VPS服务器

最近我们老的VPS即将到期&#xff0c;由于近期Hostease的VPS活动力度较大&#xff0c;我们购买了Hostease的VPS&#xff0c;购买后需要将原服务器的所有网站迁移到Hostease提供的VPS中。在Hostease技术人员的帮助下&#xff0c;我们成功进行了迁移&#xff0c;下面我就介绍此次…

酷开科技丨母亲节,别让有爱瞬间轻易溜走

在母亲节这个充满温情的节日里&#xff0c;酷开科技以“健健康康才能长长久久”为主题&#xff0c;推出了一系列关怀活动&#xff0c;旨在通过科技的力量&#xff0c;提升母亲们的身体素质和生活质量&#xff0c;同时也为儿女们提供了表达孝心和关怀的机会。 酷开系统特别上线…

域基础-NTLM协议

简介 NTLM(New Technology LAN Manager)协议是微软用于Windows身份验证的主要协议之一。继SMB、LM协议之后微软提出了NTLM协议&#xff0c;这一协议安全性更高&#xff0c;不仅可以用于工作组中的机器身份验证&#xff0c;又可以用于域环境身份验证&#xff0c;还可以为SMB、H…