物理地址和逻辑地址
物理地址:存单元的真正地址。
逻辑地址:CPU所生成的地址。
例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,
它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。
个人觉的原因在于逻辑地址分配更加灵活,可以允许不唯一,看起来也较为直观
例如,一段代码中分配数组,逻辑地址上是连续的,然而在物理地址上,这个数组所占用的页可能分散开来,物理地址上就是不连续的,这样对程序的可理解性上有影响。另外,有了逻辑地址这个概念,才能使用虚拟内存技术。
Paging,分页内存管理方案
分页的最大作用就在于:使得进程的物理地址空间可以是非连续的。
物理内存被划分为一小块一小块,每块被称为帧(Frame)。
分配内存时,帧是分配时的最小单位,最少也要给一帧。
在逻辑内存中,与帧对应的概念就是页(Page)。
逻辑地址的表示方式是:前部分是页码后部分是页偏移。
例如,已知逻辑空间地址为2m个字节(也就是说逻辑地址的长度是m位),已知页大小是2n字节。
那么一共可以有2^(m-n)个页。因此页码部分会占m-n位,之后的n位,用来存储页偏移。
举个例子, 页大小为4B,而逻辑内存为32B(8页),逻辑地址0的页号为0,页号0对应帧5,因此逻辑地址映射为物理地址54+0=20。
逻辑地址3映射物理地址54+3=23。
逻辑地址13(4*3+1,页号为3,偏移为1,因此帧号为2),映射到物理地址9。
网友评论