虚拟内存
2023-04-26 15:52:57 9 举报
AI智能生成
虚拟内存
作者其他创作
大纲/内容
直接管理物理地址可能发生冲突不安全
对程序直接分配物理空间可能导致空间不够
物理地址可能不连续无顺序,不一定能够很明确的找到物理地址的位置
场景
内存管理技术,为指令程序数据等分配虚拟地址
将内存一整段一整段的分配给程序
连续分配,程序内部没有空隙
不会产生内部内存碎片
程序内存与内存之间可能不连续,存在外部空隙
可能产生外部内存碎片
内存交换效率低
分段机制
将虚拟内存和物理内存进行分页(Linux为4kb),使用页与页对应管理
将内存分页分配,不会有外部内存碎片
不会产生外部碎片
如果某个数据剩余大小不到一页,会产生内部碎片
可能产生内部碎片
分页机制
机制
把虚拟内存地址,切分成页号和偏移量
根据页号,从页表里面,查询对应的物理页号
直接拿物理页号,加上前面的偏移量,就得到了物理内存地址
寻址
场景:32位虚拟地址空间为4G,64位为128T,单个页表很明显存不下
根据局部性原理,一个页被置换进内存,接下来被置换进内存的很可能是其周围分页
一级页表可以动态创建,如果二级页表没被使用,可以不用创建,从而节省空间
64位下是四级页表
多级页表
可以在使用的时候再去申请内存分配
虚拟内存可以重复分配,根据进程的不同分配内存不同
优势
虚拟内存
进程被初次创建
系统分配虚拟内存,此时先不进行物理内存分配
进程使用指令或变量
TLB命中直接取出对应页表项,然后找到物理地址取出内容给CPU
命中返回给TLB
内存空间足够分配调入内存,将地址返回更新TLE和TLB,并返回实际物理地址
内存不足触发换页机制,将最久未使用页淘汰,然后调入内存
未命中则发生缺页中断,系统进入内核态去外存调取内存空间
TLB未命中则MMU根据复杂计算算出物理地址页表项去TLE中查找
虚拟地址被丢给MMU问TLB(寄存器中)
L1缓存命中,检查数据可用性,获取数据
L1未命中,查找L2cache
L2未命中,查找L3
L3未命中,访问主存,同时将数据存入cache
物理地址扔给cache高速缓存
创建
工作过程(VIPT结构)
0 条评论
回复 删除
下一页