深入理解计算机基础——virtual memory

页表

在这里插入图片描述
在这里插入图片描述

页表:记录虚拟地址到物理地址的映射
unallocated:未分配的
cached:缓存在内存中的(有效位=1)
uncached:未缓存在内存中的
page hit:查找的页存在于cache中
page fault:查找的页不在cache中

内存保护

在这里插入图片描述
通过permission bits进行保护

虚拟地址翻译

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.CPU向MMU请求虚拟地址对应的物理地址
2.MMU查找cache中有没有对应的page table entry
3.如果page hit,则返回对应的page table entry
4.如果page fault,则产生exception,由page fault handler进行缺页处理
5/6.缺页处理从磁盘中读出页,选择牺牲页并写入内存
7.根据page table entry找到对应的物理地址返回给CPU

TLB

在这里插入图片描述
在这里插入图片描述
MMU会首先查找TLB,TLB缓存了一部分virtual page number到page table entry的映射,如果hit,就直接跳过查找页表的操作,从cache/memory中获得物理地址
TLB HIT:
TLB hit
TLB MISS
在这里插入图片描述

多级页表

在这里插入图片描述

Core i7

页表结构
在这里插入图片描述
P:是否在内存中
R/W:只读/读写
U/S:用户权限/kernel权限
WT:write-through/write_back
A:reference bit
PS:页面大小4KB/4MB
XD:允许/禁止从该PTE中读取页
在这里插入图片描述
优化:直接将VPO传给cache
在这里插入图片描述

Memory Mapping

当两个进程同时映射到同一区域(如fork后的父子进程)
一个进程需要写数据时,从物理内存中复制该区域再进行写操作(写时拷贝)
在这里插入图片描述

动态存储器

维护对象:堆
堆顶指针:sbrk

//分配内存
void *malloc(size_t size);
//释放内存
void free(void *ptr);
//扩展/收缩堆
void *sbrk(intptr_t incr);

内部碎片:已分配的块大于有效载荷的部分
外部碎片:外部的碎片
空闲块追踪方式:

  1. 链表
    在这里插入图片描述

  2. 将不同大小的块存放到不同的空闲链表中

  3. 利用平衡树结构存放空闲块

寻找空闲块的方式:
1.first fit
2.next fit
3.best fit

垃圾回收——标记清除

在这里插入图片描述
每个block表示为一个node
指针表示为有向边
根节点:不在heap中,且包含指向heap的指针
垃圾回收时,标记所有与root连接的node
将未标记的block释放

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页