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的底层原理来讲解这些知识。

小结

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

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

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

相关文章

MySQL45讲(一)(40)

回顾binlog_formatstatement STATEMENT 记录SQL语句。日志文件小,节约IO,但是对一些系统函数不能准确复制或不能复制,如now()、uuid()等 在RR隔离级别下,binlog_formatstatement 如果执行insert select from 这条语句是对于一张…

win10禁止自动更新的终极方法

添加注册表值 1.运行,输入regedit 2.打开注册表编辑器依次进入以下路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”。 3.在Settings项中,新建DWORD(32位)值(D),重命名为以下命名“Fl…

vuex核心概念-getters

除了state之外,有时我们还需要从state中派生出一些状态,这些状态是依赖state的,此时会用到getters。

2023版brupsuite专业破解安装

安装教程,分两部分: 1、安装java环境、参考链接JAVA安装配置----最详细的教程(测试木头人)_java安装教程详细-CSDN博客 2、安装2023.4版本brupsuite:参考链接 2023最新版—Brup_Suite安装配置----最详细的教程&…

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

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

数据结构----二叉树

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

对Windows超融合S2D的一些补充

先说一个不知道算不算BUG的例子,下面这个存储池是用两台服务器各2块10G建立的,除去系统保留的部分,显示还有13G可用。 但如果使用其新建虚拟磁盘会显示可用的空间为0 然后我又各增加了一块10G硬盘进池,变成了可用空间为30.5GB …

如何理解VMware中的网络模式(NAT、桥接、仅主机)

目录 Ⅰ.NAT模式 Ⅱ.仅主机模式 Ⅲ.桥接模式 Ⅰ.NAT模式 NAT模式:将物理机的网卡作为虚拟交换机的上线链路,将vmware的私有网络转成可以上网的地址进行网络访问,因此在NAT模式下虚拟机是可以访问外部网络的(图一) …

springboot整合redis多数据源(附带RedisUtil)

单数据源RedisUtil(静态) 单数据源RedisUtil,我这里implements ApplicationContextAware在setApplicationContext注入redisTemplate,工具类可以直接类RedisUtil.StringOps.get()使用 package com.vehicle.manager.core.util;import com.alibaba.fastjson.JSON; import lombok.e…

uni-segmented-control插件使用

dcloud插件市场 前端/uniapp 1.HBuildX打开目标项目 2.进入dcloud插件市场下载目标插件 3.看到如下提示(已经可以在目标项目中使用插件啦) 4.项目正式使用

风丘方案助力车企升级 解决“国六”标准新难题

一 背景 尾气排放指标是衡量汽车质量和品质的主要指标之一,且汽车的尾气排放必须达到相应的标准才准许出厂,因此,对汽车排放的尾气进行检测是汽车生产过程的重要环节。汽车尾气检测过程是在排放实验室里进行的,这需要模拟汽车实际…

CSS-伪类选择器

结构伪类选择器 作用&#xff1a;根据元素的结构关系查找元素 分类&#xff1a; 选择器说明元素名:first-child查找第一个元素元素名:last-child查找最后一个元素元素名:nth-child(N)查找第N名元素 <!DOCTYPE html> <html lang"en"> <head><me…

FPGA OSD 方案,应用于XBOX游戏机收费等领域

FPGA方案&#xff0c;HDMI IN接收原始HDMI 信号&#xff0c;HDMI OUT输出叠加字符/图片后的HDMI信号 客户应用&#xff1a;XBOX游戏机收费 主要特性&#xff1a; 1.支持多分辨率格式显示 2.支持OSD 叠加多个图层 3.支持字体大小随意配置 4.支持字体格式随意配置 5.零延时&…

python环境下labelImg图片标注工具的使用

labelimg GitHub地址 python环境下labelImg图片标注工具的使用 1. 写在开头2. 如何使用2.1安装2.2 启动2.2.1 先启动后设置标注的目录2.2.2 指定标注的目录和预设置的标签 2.3 设置自动保存和显示类别。2.4 保存文件类型2.5 [快捷键](https://github.com/HumanSignal/labelImg…

MyCat实现分库分表

两个集群 两个库 两个表 搭建数据库服务使用docker启动两个mysql 3506 3507连接MyCat创建两个数据源连接MyCat创建集群 mycat创建逻辑库MyCat创建全局表广播表创建分片表mycat逻辑库MyCat插入数据mycat查看数据物理库3506查看数据物理库3507查看数据 ER表创建ER表mycat插入数据…

Linux-线程概念

1. 线程概念 线程&#xff1a;轻量级进程&#xff0c;在进程内部执行&#xff0c;是OS调度的基本单位&#xff1b;进程内部线程共用同一个地址空间&#xff0c;同一个页表&#xff0c;以及内存中的代码和数据&#xff0c;这些资源对于线程来说都是共享的资源 进程&#xff1a;…

Nginx反向代理配置

一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先&#xff0c;它充当了客户端与后端服务器之间的中介。当客户端发送请求时&#xff0c;这些请求先到达 Nginx 服务器&#xff0c;Nginx 会根据预先设定的规则和配置&#xff0c;将请求准确地转发到相应…

Goland GC

Goland GC 引用Go 1.3 mark and sweep 标记法Go 1.5 三色标记法屏障机制插入屏障删除写屏障总结 Go 1.8 混合写屏障(hybrid write barrier)机制总结 引用 https://zhuanlan.zhihu.com/p/675127867 Garbage Collection&#xff0c;缩写为GC&#xff0c;一种内存管理回收的机制…

OpenCV | 项目 | 虚拟绘画

OpenCV | 项目 | 虚拟绘画 捕捉摄像头 如果在虚拟机中运行&#xff0c;请确保虚拟机摄像头打开。 #include<opencv2/opencv.hpp>using namespace cv; using namespace std;int main() {VideoCapture cap(0);Mat img;while(1) {cap.read(img);imshow("Image"…

【小红书采集工具】根据搜索关键词批量采集小红书笔记,含笔记正文、笔记链接、发布时间、转评赞藏等

一、背景介绍 1.1 爬取目标 熟悉我的小伙伴都了解&#xff0c;我之前开发过2款软件&#xff1a; 【GUI软件】小红书搜索结果批量采集&#xff0c;支持多个关键词同时抓取&#xff01; 【GUI软件】小红书详情数据批量采集&#xff0c;含笔记内容、转评赞藏等&#xff0c;支持…