Overview:
右边是虚拟内存的结构状态,注意进程看到的地址不是真实的
这种映射(直接全映射到某一块内容)的计算就是32KB+4Kb(基础地址+偏移量)
但是这样的话 free部分会占用10KB造成很大的内存浪费
所以我们需要地址翻译来降低开销,但地址翻译肯定会造成时间上的开销所以我们一般是在硬件上做出优化
由于address translation很频繁 所以决定从硬件角度处理这件事情
segmentation:
说白了就是在heap stack code 这些我们想要的东西在底部分别加上一个base 然后加上一个offset
先根据VA计算出来heap在VM中的距离base的offset 然后在物理内存中计算实际的address (注意需要检测一下是不是超了大小)
但是有个问题 机器看不懂图。。。所以需要我们搞出计算机能看懂的东西()
从地址得到在哪个段内,然后根据后面算offset,最后在物理地址的base加上offset做出来地址翻译
注意这里又有比较麻烦的东西---栈,他是倒着增长的,就是高地址往低地址走,那么我们该计算负增长量
但即使这样也会出现回收空间的大问题,所以我们引出paging
paging:
这里简单介绍一下,就是将整个页映射到物理地址上