内存物理地址问题
由于程序载入内存过程中不知道具体要放在哪块内存,所有代码中的地址只能是相对地址,只有在真正执行是才能知道实际的物理地址,由于在执行过程中可能有换入和换出的功能所以只有在载入时完成重定位才合适
交换图:
image.png image.png
基地址放在PCB中,每次载入时进行修改
分段内存使用问题
不是将整个程序放在一块内存区域中,是有分段的概念,所以还需要维护一个段号的表
image.png
由于也不可能将整个断放入一块连续的存储空间,所以引入分页的概念
为什么不能将分段放入一块空间内?
比如,段需要1M空间,但是剩余的只有600K和800K的不连续空间(由于可能有回收等),所以就无法进行分配,导致内存的浪费,如果进行空间整理,则耗费时间长会响应慢,如 果复制速度1M/1秒,则1G内存 的紧缩时间为1000秒»17分钟
分页的话就是将内存以4K为单位进行划分,然后减段进行拆分进行内存使用
所以就需要一个段和页的映射表
image.png
分段内存段和页的映射表过大问题
image.png所以只存储用到的逻辑页,但是就会存在页号不连续,导致查找映射的时候查找时间过长。
采用多级页表的思想:
image.png
上图分段,为什么总共需要16K?
页目录4K+3*4K=16K(页目录中有效页的数量为3)
时间上多级页表还需要多次查找,引入TLB概念,相当于缓存,因为程序访问的特性一般都是在一块连续区间滑动
image.png
程序查找物理内存地址
image.png
网友评论