博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统原理:虚拟地址
阅读量:4206 次
发布时间:2019-05-26

本文共 1042 字,大约阅读时间需要 3 分钟。

The Memory Hierarchy

存储系统是有层次的,从快到慢依次是:CPU寄存器、静态SRAM、动态DRAM、磁盘。如下图:

memory

如 Inter Core i7 存储结构如下:

inter i7

i7的存储架构支持48-bit虚拟地址,52-bit物理地址. Page Size启动时可配置 4KB or 4MB, Linux使用4KB,4-level page table hierarchy。

Segmentation and Paging

在CPU保护模式下,进程使用虚拟地址,这也给每个进程一个大的、一致的私有的地址空间。虚拟地址也简化了程序的链接与加载,代码段、数据段、共享库总是从相同的虚拟地址开始,执行程序时,execve()调用会使内核分配virtual pages给进程,按page从磁盘拷贝代码段数据段到内存。

地址翻译分段与分页相结合,linux更加关注的是分页机制。Linux分段机制使用的很有限,RISC架构的CPU就不支持分段机制,并且分段机制也没有分页机制更灵活。

逻辑地址-->[Segmentation]-->线性地址(虚拟地址)-->[Paging]-->物理地址

Linux分段机制使用的很有限,逻辑地址与线性地址是一致的。

linux下分段机制使用的很有限,仅仅有四种段:用户代码段、用户数据段、内核代码段、内核数据段。相应的段描述符由宏__USER_CS__USER_DS__KERNEL_CS,和__KERNEL_DS分别定义,且所有段都从0x00000000开始。

Linux使用分页机制,每个进程都有自己的页表,任务切换就会有页表切换,x86下通过修改控制寄存器CR3完成,CR3控制寄存器是PDBR(Page-Directory Base address Register),加载进程页表通过拷贝mm_stuct->pgdCR3寄存器完成。

页表可以把虚拟地址页映射为物理地址页,x86 32位系统的机制大致如下(MIT xv6):

x86-paging
为了加快速度,地址翻译有专门的硬件MMU(Memory Management Unit),MMU中包含了一个小的PTE(Page Table Entry)缓存TLB(Translation Lookaside Buffer), 大致工作原理如下图:
MMU

举个多级页表的例子,Inter i7页表翻译,采用了4级页表,如下图:

Inter_i7_four

从操作系统的实现看:

Linux_page

还有很多有意思的细节可以看后面的参考资料。

Reference

你可能感兴趣的文章
【IOS游戏开发】之IPA破解原理
查看>>
【一天一道LeetCode】#45. Jump Game II
查看>>
【一天一道LeetCode】#46. Permutations
查看>>
【一天一道LeetCode】#47. Permutations II
查看>>
【一天一道LeetCode】#48. Rotate Image
查看>>
【一天一道LeetCode】#56. Merge Intervals
查看>>
【一天一道LeetCode】#57. Insert Interval
查看>>
【一天一道LeetCode】#58. Length of Last Word
查看>>
【一天一道LeetCode】#59. Spiral Matrix II
查看>>
【一天一道LeetCode】#30. Substring with Concatenation of All Words
查看>>
【一天一道LeetCode】#60. Permutation Sequence.
查看>>
【一天一道LeetCode】#113. Path Sum II
查看>>
【一天一道LeetCode】#114. Flatten Binary Tree to Linked List
查看>>
【unix网络编程第三版】阅读笔记(二):套接字编程简介
查看>>
【一天一道LeetCode】#115. Distinct Subsequences
查看>>
【一天一道LeetCode】#116. Populating Next Right Pointers in Each Node
查看>>
【一天一道LeetCode】#117. Populating Next Right Pointers in Each Node II
查看>>
【一天一道LeetCode】#118. Pascal's Triangle
查看>>
【一天一道LeetCode】#119. Pascal's Triangle II
查看>>
【unix网络编程第三版】ubuntu端口占用问题
查看>>