Suibin's Blog
Menu
Home
Posts
About
Memory
Posted by
Suibin Sun
on December 04, 2023 ·
1 min read
1. Memory
1.1. 虚拟内存
1.1.1. 映射
1.1.1.1. 内核与MMU的交互
创建页表之后,设置
页表基地址寄存器
的值;
对于支持分段的架构(x86),需要创建、初始化分段描述符表,将
分段描述符表的地址
加载到对应寄存器中;
刷新TLB
:进程上下文切换之后,需要刷新TLB,向MMU发送TLB shootdown/TLB invalidate请求给MMU;
设置权限位
:设置页表项的读写执行权限;
处理page fault
:内核需要提供处理page fault的逻辑;
启用、禁用MMU
:启动阶段、进入中断处理程序之前;
调整多级页表结构
:修改页表项或添加新的页表;
支持NUMA
。
1.1.1.2. ASID
是什么:标识每个进程的一个标签,在TLB项中也保存这个标识用于区分不同的进程;
作用
:有了ASID之后,可以不用在每次切换进程上下文的时候,刷新所有的TLB表项。
1.2. 物理内存
1.2.1. 申请
1.2.2. 释放
1.2.3. 回收
1.2.3.1. swap机制
因为文件页有自己的后端,可以直接回收,而不需额外的内容保存操作,比较简单快速,因此swap机制仅针对匿名页,将暂时不需要的匿名页回收到磁盘
1.2.3.2. 反向映射
← Previous
Post
Next
Post
→