精致的复杂,谈内存管理——《RISC-V体系结构编程与实践 》读书笔记
[复制链接]
精致的复杂,谈内存管理——《RISC-V体系结构编程与实践 》读书笔记
内存的概念在计算机体系中可是核心内容。在组装电脑时,要首选“双通道DDR”内存,这样内存的读写速度会快上一倍。今天,文章里谈的内存可不是组装机的内存条,而是数据在内存中如何被管理?如何被找到?
现代操作系统是多任务的操作系统,即“系统可以同时运行多个进程。内存管理中出现了固定分区和动态分区两种技术”。但不管固定分区,还是动态分区都存在以下问题:1. 进程地址空间保护问题;2. 内存使用效率低;3. 程序运行地址重定位问题。
解决上述问题,引入了地址空间虚拟化的概念,并很好的解决了上述3个问题。虚拟内存机制可以提供隔离性,使得每个空间都感觉拥有了整个地址空间。程序可以随意访问,由处理器实现虚拟地址到物理地址的转换。
针对运行时所需要的内存往往大于实际物理内存,引入分页机制,其“核心思路是把程序呈部分不使用的内存放到交换磁盘中,而把程序正在使用的内存继续保留在物理内存中。”
这里引入了一个新的名词“MMU”,Memory Management Unit的缩写,中文名是内存管理单元。它“负责虚拟地址到物理地址的转换和翻译工作。”对于32位系统的寻址,虚拟地址VA[31::0]可以分成两部分:一部分是虚拟页内的偏移量;一部分是用来寻找属于哪个页。
从上面的图中,可以清楚看到,通过对索引值的线性查找,可以将虚拟页帧号转换为物理页帧号,而额外存储空间仅为4MB。
不过,分页机制在多进程系统中需要为每个进程分配4MB的额外空间,这也成为了多进程系统中对主存空间的巨大浪费。解决办法也有,采用多级页表来减少页表占用的内存空间。
对于RISC-V指令集设计的芯片的内存管理方式多采用三级或四级页表,比如Sv39,Sv48。
由于多级页表还需要引入TLB概念,限于篇幅,本文仅给大家带来一级页表的实现笔记。欢迎大家期待我的下一篇笔记《不可分割的原子操作》
|