分页存储

做题做到分页存储,试着看了一下书,发现记住公式比较简单,但是为什么这样计算,查了查资料,发现基础知识不扎实理解起来还是很绕的。

把目前自己所知道的总结一下,希望对自己和大家有所帮助。

像书中所讲,首先明确几个概念:

页:一个进程的逻辑地址空间分成若干大小相等的片(逻辑地址,大小相等)

页框:物理空间分成与页大小相等的若干个存储块(物理地址,与页相等)

页表:数据结构,实现从页号到页框号的映射。页表在内存中连续存放。

计算机以Byte做最小单位的,1Byte是8bit,即8位,但是最少要分配1Byte而不是1bit.所以单位是B16位二进制最大可以表示到65535,就是64KB.(216=26.2^10=64k)

页的大小与页内偏移量的关系:页内偏移量是n位,页的大小是2^n
https://blog.csdn.net/weixin_43914604/article/details/105907291?utm_term=%E9%A1%B5%E5%8F%B7%E5%92%8C%E9%A1%B5%E5%86%85%E5%81%8F%E7%A7%BB%E9%87%8F&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-105907291&spm=3001.4430

理解起来还有有点绕,举个例子,好像就容易理解了。

二进制的111111111111(十二个1)转换成十进制是4095,即4K,如果页大小超过4K,那么用12位的偏移量就无法寻址超出4K的部分.(把页当成一个word页,页内偏移量就是里面有多少行,行数不能超过一页的承受范围)

页号与页个数的关系:页号是m位,页的个数是2^m
页号每1位不是0就是1.所以页的个数是2^m。

如何将逻辑地址转换为页码与页偏移量
进程的逻辑地址被分为固定相等的小块,就是为页。同时将其物理地址也分为同样大小的块,称为页框或页帧。每页(或帧)里面包含的才是真正的地址,在得到页码(帧号)之后,再通过页内偏移(或帧内偏移),也就是页偏移(帧偏移)来找到相应的地址。所以每个逻辑地址(物理地址)的表示方法是 页码(帧号)+页偏移量(帧偏移量)。

页号与页内偏移量的计算:(两种方法针对不同情况)
页号=int(逻辑地址/页大小)

页内偏移量=mod(逻辑地址/页大小)

逻辑地址换算成10进制太大,可以考虑下面的方法:

例:设页面的大小为2KB,将逻辑地址3BADH划分为页号和页内偏移量两部分,用16进制表示

3BADH=0011 1011 1010 1101
由页的大小为2KB,可以得到页内偏移为12位(低地址)
故页号0011(3H)
页内偏移1011 1010 1101(BADH)

猜你喜欢

转载自blog.csdn.net/lisainan66/article/details/113924973