如何减少内存碎片的产生——页

news2024/9/20 15:20:15

文章目录

  • 1 页的设计目的
  • 2 进程块和主存块的对应关系
  • 3 页、页框、页表
    • 3.1 页(Page)
    • 3.2 页框(Page Frame)
    • 3.3 页表(Page Table)
  • 4 逻辑地址到物理地址的转换
    • 4.1 转换过程
    • 4.2 具体示例
    • 4.3 图示
  • 参考资料
  • 封面

内存碎片在计算机内存管理中是一个重要问题,影响系统性能。
页机制的设计旨在减少这种碎片化。


1 页的设计目的

内存碎片是计算机内存管理中的一个重要问题。碎片化的内存会导致内存利用率降低,并影响系统性能。页(Page)机制的设计旨在减少内存碎片的产生,其主要目标包括:

  1. 内存分配的高效管理:通过将内存分割成固定大小的页,简化内存分配和释放的过程。
  2. 减少外部碎片:固定大小的页能够有效地减少外部碎片,因为每个内存块(页框)都是相同大小,易于管理。
  3. 内存保护和隔离:页机制提供了内存保护和隔离,防止进程间的内存污染。
  4. 支持虚拟内存:页机制是虚拟内存实现的基础,使得操作系统能够高效地管理物理内存和磁盘交换空间。

2 进程块和主存块的对应关系

在页机制下,虚拟内存被划分为固定大小的页,而物理内存被划分为相同大小的页框(Page Frame)。进程块(虚拟页)与主存块(物理页框)的对应关系如下:

  • 虚拟页:进程的虚拟地址空间被划分为多个固定大小的虚拟页。
  • 物理页框:物理内存被划分为多个相同大小的物理页框。
  • 映射关系:页表(Page Table)记录了每个虚拟页与物理页框的映射关系。虚拟页可以映射到任意的物理页框,不必是连续的。

这种对应关系使得进程可以灵活地使用物理内存,避免了大块内存分配时可能产生的碎片问题。

3 页、页框、页表

3.1 页(Page)

  • 页是虚拟内存中的基本单位,通常大小为4KB。
  • 每个进程的虚拟地址空间被划分为多个页。

3.2 页框(Page Frame)

  • 页框是物理内存中的基本单位,与页大小相同。
  • 物理内存被划分为多个页框。

3.3 页表(Page Table)

  • 页表是用于记录虚拟页到物理页框映射关系的数据结构。
  • 每个进程都有自己的页表,包含多个页表项(Page Table Entry, PTE)。
  • 每个页表项包含物理页框地址和一些控制信息(如有效位、读写权限等)。

4 逻辑地址到物理地址的转换

4.1 转换过程

  1. 逻辑地址分解

    • 逻辑地址(虚拟地址)被分为两部分:页号(Page Number)和页内偏移量(Page Offset)。
    • 页号用于查找页表,页内偏移量用于确定页内的具体位置。
  2. 查找页表

    • CPU 使用当前进程的页表基地址和页号查找页表中的对应项。
    • 页表项(PTE)包含物理页框的地址和控制信息。
  3. 生成物理地址

    • 如果页表项有效,CPU 将物理页框地址和页内偏移量组合,生成最终的物理地址。
    • 如果页表项无效,会触发页面错误,操作系统处理错误(如从磁盘加载页面到内存)。

4.2 具体示例

假设一个简单的 32 位系统,使用 4KB 页大小,虚拟地址结构如下:

  • 页号:高 20 位
  • 页内偏移量:低 12 位
虚拟地址: 	[ 页号	| 页内偏移量	]
        	[ 20位	|    12位	]

多级页表结构可能如下:

一级页表: 页号高10位
二级页表: 页号低10位
页内偏移量: 12位

4.3 图示

Page_Table
Virtual_Address
一级页表
二级页表
物理页框地址
虚拟地址
页号
页内偏移
物理地址

通过这种页机制和转换过程,操作系统能够高效地管理内存,减少内存碎片,提高系统性能和稳定性。


参考资料

  • 16分半还你一个能听懂基本分页存储管理在干嘛的大脑!

封面

来自 DALL-E-3
在这里插入图片描述

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

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

相关文章

C语言程序设计25

《C程序设计教程(第四版)——谭浩强》 习题2.2 分析下面程序的运行结果,然后上机验证。 代码: //《C程序设计教程(第四版)——谭浩强》 //习题2.2 分析下面程序的运行结果,然后上机验证。#inc…

【C语言篇】操作符详解(下篇)

文章目录 操作符详解(下篇)前言条件操作符移位操作符左移操作符右移操作符 位操作符下标引用操作符函数调用操作符 操作符的属性:优先级和结合性优先级结合性表达式求值整形提升算术转换 操作符详解(下篇) 前言 操作…

JavaScript基础——JavaScript常见语句(判断语句、循环语句、控制流语句)

JavaScript提供了丰富的语句来控制程序的执行流程,包括用于条件判断的if、switch和三元运算符,以及用于循环的for、while、do...while、for...in和for...of。此外,还有控制流语句如break、continue和return。 判断语句 if 语句 if 语句&…

C/C++开发,opencv轮廓提取实现

一、cv::findContours轮廓提取函数 1.1 cv::findContours函数简介 cv::findContours 函数是用于从二值图像(灰度图)中检索轮廓。这个函数在OpenCV的不同版本中参数可能有所不同,但基本概念保持一致。特别是在OpenCV 3.x和4.x版本中&#xff…

贪吃蛇(使用QT)

贪吃蛇小游戏 一.项目介绍**[贪吃蛇项目地址](https://gitee.com/strandingzy/QT/tree/zyy/snake)**界面一:游戏大厅界面二:关卡选择界面界面三:游戏界面 二.项目实现2.1 游戏大厅2.2关卡选择界面2.3 游戏房间2.3.1 封装贪吃蛇数据结构2.3.2 …

如何通过谷歌外链快速增加网站流量?

利用谷歌外链提升流量的方法非常直接,但实际上,外链影响的是关键词排名,关键词排名提升了,自然就会有流量,所以谷歌外链不是直接能提升网站流量,而是间接的,下面,我会详细介绍几种有…

验收测试:确保软件符合业务需求和合同要求

目录 前言1. 验收测试的概念1.1 用户验收测试(UAT)1.2 操作验收测试(OAT) 2. 验收测试的主要作用2.1 确认业务需求的满足2.2 验证合同要求的实现2.3 提升用户信心 3. 验收测试在整个测试中的地位3.1 测试的最后一道关卡3.2 用户与…

niushop逻辑漏洞

niushop逻辑漏洞 安装环境 这里控制不了 抓包在数据包中可以改数据

非线性系统稳定控制器设及案例仿真(s-function函数)

目录 前沿一、案例11. 系统模型 二、案例21. 系统模型2. 稳定性分析3. 仿真(包含代码)1. 仿真效果2. 仿真结果3. 仿真剖析4. 仿真图与代码 前沿 定义一个系统 x ˙ f ( x , u ) \dot{x} f(x,u) x˙f(x,u), 其中 x x x 为状态变量, u u u 为系统输入&#xff0c…

跨平台终端工具Tabby安装配置与远程ssh连接Linux_ubuntu详细教程

文章目录 前言1. Tabby下载安装2. Tabby相关配置3. Tabby简单操作4. ssh连接Linux4.1 ubuntu系统安装ssh4.2 Tabby远程ssh连接ubuntu 5. 安装内网穿透工具5.1 创建公网地址5.2 使用公网地址远程ssh连接 6. 配置固定公网地址 前言 今天和大家分享一下如何在Windows系统使用Tabb…

构建LVS负载均衡群集

构建LVS负载均衡群集 实验环境实验环境 201:客户端 101:调度器 (需要用到2个网卡) 102:web 103:web 104:NFS存储 101:(添加一个网卡) 2 [root@localhost ~]# cd /etc/sysconfig/network-scripts/ 3 4 //查看另一个网卡的名字ens36 5 [root@localhost network-scrip…

人工智能深度学习系列—深度学习中的相似性追求:Triplet Loss 全解析

文章目录 1. 背景介绍2. Loss计算公式3. 使用场景4. 代码样例5. 总结 1. 背景介绍 在机器学习和模式识别领域,相似性度量是核心问题之一。Triplet Loss,作为一种特殊的损失函数,被设计用来学习数据的相对距离,从而使得相似样本更…

5.C_Demo_排序

冒泡排序法 原理: 依次比较相邻的两个元素,如果顺序错误就交换。 思路: 这种方法,显然需要很多轮才能完成,每一轮只能排序一个最大值或最小值(第一层for),将全部的数据排序完成,需要很多轮(第…

第三期书生大模型实战营之书生大模型全链路开源开放体系

一. Introduction 大模型是发展通用人工智能的重要途经 二. 开源历程以及InternLM2 2024年1月17日 InternLM2 2开源 三. 书生浦语2.0的主要亮点 3.1 超长上下文 3.2 综合性能全面提升 3.3 优秀的对话和创作体验 3.4 工具调用能力整体升级 3.5 突出的数理能力和实用的…

Among Us 私服的制作之路

文章目录 Among Us 私服的制作之路这游戏通常包括以下核心元素:角色设定:游戏机制:游戏界面: 第四步:添加社交特性第五:测试与优化方面 十分基础的框架(Web)注意事项 Among Us 私服的制作之路 作者正在准备…

嵌入式:简单的UI框架

1:UI框架简介 除了服务框架外,我们还需要对外显示UI,所以我们就需要一个UI的框架,跟服务框架一样,不用这个UI框架我们也是可以实现,但是这样每个人写的UI都会有差异,需要的事件,数据…

牛客JS题(二十)判断斐波那契数组

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 循环判断斐波那契数列组递归判断斐波那契数列组合法性判断 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><scrip…

嵌入式数据库 sqlite3

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer 小型:Sqlite …

c# .net core项目角色授权机制

前言 角色授权机制是确保应用程序安全性的重要组成部分,它允许开发者根据用户的角色来限制对应用程序中不同资源的访问。 基本概念: 角色授权基于用户角色的访问控制,即根据用户所属的角色来决定其能够访问的资源或执行的操作。在.NET Core中,这通常与身份认证(Authent…

怎么配置一个axios来拦截前后端请求

首先创建一个axios.js文件 导入我们所需要的依赖 import axios from "axios"; import Element from element-ui import router from "./router"; 设置请求头和它的类型和地址 注意先注释这个url,还没有解决跨域问题,不然会出现跨域 // axios.defaults.…