当前位置: 技术问答>linux和unix
关于页式存储的问题 (我一直搞不明白这个问题)
来源: 互联网 发布时间:2016-05-27
本文导语: 假定地址总长度为15位,其中页号占5位,页内地址占10位。这样,逻辑地址中可有32页,编号为0~31。 每一页有1024个字节,编号为0~1023. 这个32页到底是怎么得出来的 关于页式存储,整个那一章节,都...
假定地址总长度为15位,其中页号占5位,页内地址占10位。这样,逻辑地址中可有32页,编号为0~31。
每一页有1024个字节,编号为0~1023.
这个32页到底是怎么得出来的
关于页式存储,整个那一章节,都感觉学得很混乱!
哪位朋友能解释一下呢?
|
在x86系统中是由段页式存储的,共有三种地址模式:逻辑地址,线性地址和物理地址
其中物理地址就是对应内存的实地址
逻辑地址经过分段机制的转换以后得到线性地址,
此时若没有开启分页机制,线性地址就和物理地址一一对应,
若开启了分页机制(IA-32体系一般含有两级页表,其中第一级成为页目录),其转换
形式为:从页目录查找页表项,再从对应的页表项找到页的起始地址在加上页内偏移
便得到物理地址。
详细请参考(Intel manal第三卷第二章)
其中物理地址就是对应内存的实地址
逻辑地址经过分段机制的转换以后得到线性地址,
此时若没有开启分页机制,线性地址就和物理地址一一对应,
若开启了分页机制(IA-32体系一般含有两级页表,其中第一级成为页目录),其转换
形式为:从页目录查找页表项,再从对应的页表项找到页的起始地址在加上页内偏移
便得到物理地址。
详细请参考(Intel manal第三卷第二章)
|
1、頁號占5位,那麼頁號的範圍就是0 --- 2^5(31),共32個頁
今天實在是心情不爽,就给你讲分页模式吧。
假如产生的线性地址是32位的,并且内存管理采用了分页模式,那32位的线性地址并不是物理地址,必须经过分
页转换部件处理了以后,变成物理地址的。处理的过程是这样的:
1、首先取32位线性地址的高10位作为页目录表偏移量,和CR3寄存器中的的20位页目录表基址相加,得出来的值
能够索引到页目录表中的某个表项。
2、然后再取32位线性地址的中间10位作为页表偏移量,和页目录表中的那个指示页表项的20位基址相加,得出来
的值能够索引到页表中的某个表项。
3、将最低的12位作为偏移量和页表中指示的物理地址的基址相加,得到指向某个物理地址的32位地址。
4、总结起来就是分成三步:第一步和CR3寄存器一起定位到页目录表的位置;第二步和页目录表中的某个项一起
定位到页表的位置;第三步和也表中的基址一起定位到物理地址,这就是分页模式的工作原理。