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

04-非连续内存分配

时间:2023-08-08 20:22:05浏览次数:61  
标签: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/17615284.html

相关文章

  • 【JVM技术指南】「GC内存诊断-故障问题排查」一文教你如何打印及分析JVM的GC日志(实战
    当我们在开发Java应用程序时,JVM的GC(垃圾回收)是一个非常重要的话题。GC的作用是回收不再使用的内存,以便程序可以继续运行。在JVM中,GC的日志记录了GC的详细信息,包括GC的类型、时间、内存使用情况等。在本文中,我们将介绍JVMGC日志的格式、含义和分析方法。JVMGC日志格式JVMGC日志的......
  • JVM学习之:堆(Heap)和非堆(Non-heap)内存
    JVM学习之:堆(Heap)和非堆(Non-heap)内存 堆(Heap)和非堆(Non-heap)内存:堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的。“在JVM中堆之外的内存称为非堆内存(Non-heapmemory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来......
  • 苹果正在测试新款Mac mini:搭载M3芯片 配备24GB大内存
    据悉苹果目前正在测试新的Mac机型,亮点是采用最新的M3芯片。据报道,首款搭载M3芯片的设备应该是13英寸的MacBookPro和重新设计的MacBookAir,Macmini机型并不在名单上。M3和M2同样拥有最多8个核心,分别为4个性能核和4个能效核,以及最多10核心的GPU,支持最大24GB的统一内存。基本款......
  • 深入理解Linux内核——内存管理(1)
    提要:系列文章主要参考MIT6.828课程以及两本书籍《深入理解Linux内核》``《深入Linux内核架构》对Linux内核内容进行总结。内存管理的实现覆盖了多个领域:内存中的物理内存页的管理分配戴爱内存的伙伴系统分配较小内存的slab、slub、slob分配器分配非连续内存块的vmalloc分配......
  • 国标GB28181视频平台LntonGBS(源码版)国标视频平台内存错误导致崩溃的问题解决方案
    LntonGBS国标视频云服务通过支持国标GB28181协议,实现了设备接入、实时监控直播、录像、语音对讲、云存储、告警、级联等功能。同时,它还支持将接入的视频流以多种格式(包括RTSP、RTMP、FLV、HLS、WebRTC)进行全终端、全平台分发,实现了无插件播放在Web浏览器、手机浏览器、微信端、PC客......
  • Java内存解析(转)
    栈、堆、常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,简单讲解Java内存分配方面的知识。首先我们先来讲解一下内存中的各个区域。 stack(栈):存放基本类型的数据和对象的引用,即存放变量。如果存放的事基本类型的数据(非静态变量),则直接......
  • 20天 hot 100 速通计划-day04
    普通数组238.除自身以外数组的乘积给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在O(*n*)时间复杂度内......
  • ubuntu18.04 使用netplan配置静态IP
    1.cd/etc/netplan2.sudovim/etc/netplan/*.yamlnetwork:ethernets:enp0s3:dhcp4:falseaddresses:[192.168.10.45/24]#静态IPv4gateway4:192.168.10.255#网关nameservers:addresses:[119.29.29.29]#DNS地......
  • Ubuntu 16.04 安装python3.6正确顺序(解决ssl错误,pip升级)
    0、下载离线python压缩包PythonSourceReleases|Python.org,1、新建root,并进入root权限(sudopasswdroot)(su)2、升级openssl版本wgethttps://www.openssl.org/source/openssl-1.1.0k.tar.gztar-zxvfopenssl-1.1.0k.tar.gzcdopenssl-1.1.0k./configmakeinstall......
  • 内存溢出后重启IIS后,附加到进程调试 ,找不到w3wp.exe进程。
    打开IIS,右键浏览一下。这个时候附加到进程调试里的选项就有了!本文来自博客园,作者:小二↑上酒,转载请注明原文链接:https://www.cnblogs.com/qh1688/p/7383925.html......