硬件编程 内存管理( 二 )


三 。操作系统对内存管理单元的管理
实际上,MMU就是为了满足操作系统日益复杂的内存管理而产生的 。OSMMU和OSMMU之间的关系如下:
1.系统初始化代码会在内存中生成一个页表,然后将页表地址设置到MMU对应的寄存器中,这样MMU就可以知道页表在物理内存中的什么位置,以便在需要的时候查找 。之后MMU通过特殊指令启动,这就是边界 。之后程序中所有内存地址都变成虚拟地址,MMU硬件开始自动完成查表和虚实地址转换 。
2.在OS初始化的后期,创建第一个用户进程 。在这个流程中,还需要创建一个页表,并将其地址赋给流程结构中的一个指针成员变量 。也就是说 , 每个进程应该有一个独立的页表 。3.当用户创建一个新进程时 , 子进程复制父进程的一个页表,然后随着程序的运行,页表的内容逐渐更新变化 。
4.系统处理内存寻址,内存寻址由操作系统管理和维护,以确保正常进程 。
存储器寻址概述
上图是内存管理的硬件结构,其处理流程如下:
a、cpu发起寻址请求 , 被MMU接受;
b、如果在TLB缓冲区找到MMU,直接用映射后的物理地址读入主存;如果没有找到,则需要从当前进程的页表中查询,如果找到,则返回更新TLB;;
C.如果在页表中没有找到 , 当发现虚拟地址还没有分配给物理地址空时,就会触发缺页中断 。这时它会检查这个虚拟地址对应的磁盘文件的内容,加载到内存中,在页表中建立映射关系 , 程序就可以继续执行了 。
【硬件编程 内存管理】知道了地址翻译的过程,VA到PA的映射过程就一目了然了:MMU得到VA后先在TLB中查找,如果找不到匹配的PTE条目,就在外部页表中查找,替换成TLB;检查VA指令是否符合PTE条目中对访问权限的限制,如果不符合,则不继续 , 并抛出异常;满足要求后,根据VA的地址分段查询页表,保持偏移量(广义)不变,合并物理地址发送出去 。

推荐阅读