首页 > 系统相关 >04-非连续内存分配

04-非连续内存分配

时间:2023-07-12 20:35:03浏览次数:33  
标签:04 TLB 物理地址 页表 寄存器 大小 分配 内存

04-非连续内存分配

为什么需要非连续内存分配

连续内存分配的缺点

1)分配给一个程序的物理内存是连续的
2)内存利用率较低
3)有外碎片、内碎片的问题

非连续内存分配的优点

一个程序的物理地址空间是非连续的
更好的内存利用和管理
允许共享代码与数据(共享库)
支持动态加载和动态链接

非连续内存分配的缺点

如何建立虚拟地址和物理地址之间的转换
软件方案
硬件方案

两种硬件方案
分段
分页

分段

更好的分离和共享

程序的分段地址空间

可以认为逻辑地址空间是连续的,但是对应的物理地址空间是分散的,例如堆有堆内存空间,运行栈有栈内存空间,程序数据 程序text段

分段寻址方案

段访问机制
新概念:一个段:一个内存块 一个逻辑地址空间
程序访问内存地址需要:
一个二维的二元组
s 段号
addr 段内偏移

两种获取内存地址的实现方式
1)段寄存器+地址寄存器实现方案 x86架构
2)单地址实现方案

分段方式和分页方式的区别 分段方式段的大小是可变的,分页方式 页的大小是固定的

分页(常用的方式)

分页地址空间

划分物理内存至固定大小的帧,大小是2的幂,例如512,4096,8192
划分逻辑地址空间至相同大小的页,大小是2的幂,例如512,4096,8192
建立方案 转换逻辑地址为物理地址(pages to frames)

  • 页表
  • MMU/TLB

帧(Frame):物理内存被分割为大小相等的帧

一个内存物理地址是一个二元组(f,o)
f-帧号(F位,共有$2^F$个帧)
o-帧内偏移(S位,每帧有$2^S$字节)
$物理地址=2^S*f+o$

页(Page):一个程序的逻辑地址空间被划分成大小相等的页
页内偏移的大小=帧内偏移的大小
页号大小和帧号大小可能不一样
p-页号(P位,共有$2^P$个帧)
o-页内偏移(S位,每帧有$2^S$字节)
$虚拟地址(逻辑地址)=2^S*p+o$

页寻址方案

页表保存了逻辑地址--物理地址之间的映射关系,页表是在操作系统初始化的时候由操作系统建立的
根据页号去页表里面查对应的帧号,再加上页内偏移,就得到了物理地址的值

页寻址机制
页映射到帧
页是连续的虚拟内存
帧是非连续的物理内存
不是所有的页都有对应的帧

优势:有助于减少碎片

页表

页表概述

页表结构
每个运行的程序都有一个页表
属于程序的运行状态,会动态变化
PTBR:页表基址寄存器
页表项的内容:
dirty bit
resident bit 0不存在/1存在
clock/reference bit
帧号:f

分页机制的性能问题

  • 访问一个内存单元需要2次内存访问
    一次用于获取页表项
    一次用于访问数据
  • 页表可能非常大
    64位机器如果每页1024字节,那么一个页表的大小会是多少?
    每个程序都有自己的页表,重复占用空间
    页表很大,没办法放在CPU中,页表放在内存中,就需要访问2次内存
  • 如何处理?
    缓存(Cashing)
    间接(Indiretion)访问

转换后背缓冲区(TLB)

TLB:Translation Look-aside Buffer
TLB缓冲区位于CPU内部
缓存近期访问的页帧转换表项

  • TLB使用 association memory(关联内存)实现,具备快速访问性能
  • 如果TLB命中,物理页号可以很快被获取
  • 如果TLB未命中,对应的表项被更新到TLB中
    TLB未命中的情况,如果是x86系统,是通过硬件完成读取页表项更新如缓存中的过程的,如果是MIPS系统,是通过操作系统软件完成的

二级/多级页表

通过把页号分为k个部分,来实现多级间接页表

  • 建立页表树
    多级页表,级数越多,时间开销越大,空间开销越小,以时间换空间的方式
    时间可以通过TLB的方式优化

反向页表

为什么需要反向页表

  1. 有大地址空间(64-bit), 前向映射页表变得繁琐
    比如:5级页表
  2. 不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应
    逻辑(虚拟)地址空间增长速度快于物理地址空间

使用页寄存器(Page Registers)

基于页寄存器的方案

  • 每个帧和一个寄存器关联,寄存器内容包括
    Residence bit: 此帧是否被占用
    Occupier: 对应的页号p
    Protection bits: 保护位

页寄存器:一个例子

  • 物理内存的大小:40964096 = 4K4KB =16MB
  • 页面大小:4096 bytes = 4KB
  • 页帧数:4096 = 4K
  • 页寄存器使用的空间(假设8bytes/register)
    • 8*4096=32K bytes
  • 页寄存器带来的额外开销
    • 32K/16M = 0.2%(大约)
  • 虚拟内存的大小:任意

页寄存器方案的权衡
利:
转换表的大小相对于物理内存来说很小
转换表的大小跟逻辑地址空间的大小无关
弊:
需要的信息对调了,即根据帧号可找到页号
如何转换回来?即根据页号找到帧号
在需要在反向页表中搜索想要的页号

使用关联内存(associative memory)

基于关联内存的方案

在反向页表中搜索一个页对应的帧号
如果帧数较少,页寄存器可以被放置在关联内存中
在关联内存中查找逻辑页号
成功: 帧号被提取
失败: 页错误异常(page fault)
限制因素:
大量的关联内存非常昂贵
难以在单个时钟周期内完成
耗电

使用哈希查找的方案

使用哈希查找的方案
在反向页表中通过哈希算法来搜索一个页对应的帧号
对页号做哈希计算,为了在"帧表"(每帧拥有一个表项)中获取对应的帧号
页i被放置在表中f(i)位置,其中f是设定的哈希函数
为了查找页i, 执行下列操作

  • 计算哈希函数f(i) 并且使用它作为页寄存器表的索引
  • 获取对应的页寄存器
  • 检查寄存器标签是否包含i, 如果包含,则代表成功,否则失败

标签:04,TLB,物理地址,页表,寄存器,大小,分配,内存
From: https://www.cnblogs.com/Oh-mydream/p/17548756.html

相关文章

  • 【题解】CF gym 104337 G. Guess the Polynomial
    statement:https://codeforces.com/gym/104337/problem/G。即求\(f(x)=\sum\limits_{i=0}^{p-2}a_ix^i\),其中只有不超过\(n\)个\(a_i\)非\(0\)。记:\[\begin{aligned}A_{n}^{k}&=\sum_{i\equivk\pmod{n}}a_i=\frac{1}{n}\sum_{i=0}^{n-1}f(\omega_{n}^{......
  • ubuntu22.04安装vsftp遇到的问题
    问题FileZilla连接文件服务器时出现”无法读取文件目录“,随后出现“20秒后无活动,连接超时”、“无法连接到服务器”文件目录无法读取的问题。该问题的出现是因为防火墙关闭导致数据包无法通过,进而无法显示文件目录。解决办法:1、开启服务器防火墙sudoufwallow20:21/tcpsu......
  • 内存取证(一)
    内存取证思路1、文件本身是否存在内容strings文件名|grepflag格式2、Volatility查看镜像内容,系统基本信息,关注重点主要有命令行运行命令\服务运行状态\进程环境变量\进程内容\浏览器\注册表\扫描文件\转存文件等3、分析镜像工具:取证大师、Volatility技巧1、遇见vmdk文......
  • JVM(八)对象的实例化内存布局与访问定位
    JVM(八)对象的实例化内存布局与访问定位1对象创建的方式new变形1:Class的newInstance(),即反射Class的newInstance反射的使用较为苛刻,要求只能调用空参的构造器,而且权限必须是public这种方式再jdk9中被标记为过时了Constructor的newInstance(),也属于是反射可以调......
  • 一个高性能、低内存文件上传流.Net组件
    推荐一个用于轻松实现文件上传功能的组件。项目简介一个基于.NET平台的开源项目,提供了一个简单易用的API,可以在Web应用程序中快速集成文件上传功能。优化多部分流式文件上传性能:减少25%的CPU使用量、50%内存。项目特点1、简单易用的API: 提供了简单的API,可以轻松地集成......
  • EDGE 浏览器占用内存优化
    windows+s搜索service打开服务;找到下面edge三项双击把启动类型都改成手动触发  ......
  • 红包分配问题
    红包分配问题给你一个整数表示红包的总额,和另一个整数表示红包的个数表示我们要把总金额,随机分成N个红包。要求1:每个红包的金额都是随机的要求2:每个人至少1分钱 示例代码:1publicclassTest2{2publicstaticvoidmain(String[]args){3System.out......
  • "Tarfs"是一个内存文件系统,它使用TAR(Tape Archive)文件格式来实现在内存中创建一个虚拟
    "Tarfs"是一个内存文件系统,它使用TAR(TapeArchive)文件格式来实现在内存中创建一个虚拟的文件系统。TAR文件格式是一种常见的存档文件格式,用于将多个文件和目录组合成单个文件。Tarfs通过将TAR文件加载到内存中,并在内存空间中模拟文件和目录结构,实现了一个简单的文件系统。它允许......
  • ubuntu20.04安装mongodb步骤
    注:虚拟机无法运行mongodb5.0以上的版本1、wget-qO-https://www.mongodb.org/static/pgp/server-4.4.asc|apt-keyadd-导入并设置公钥2、echo"deb[arch=amd64,arm64]https://repo.mongodb.org/apt/ubuntufocal/mongodb-org/4.4multiverse"|tee/ect/apt/sources.list.......
  • [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
    [Errno14]PYCURLERROR22-"TherequestedURLreturnederror:404NotFound"  vi/etc/yum.repos.d/epel.repoenabled=0vi/etc/yum/pluginconf.d/fastestmirror.confenable=0wget-O/etc/yum.repos.d/CentOS-Base.repohttp://allen-hz-bucket.oss-......