博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从硬件了解寻址
阅读量:4094 次
发布时间:2019-05-25

本文共 1171 字,大约阅读时间需要 3 分钟。

学习Linux内核,内存管理是必学的,但是和自己以前设计译码电路的寻址完全不同,所以对抽象后地址映射不能很好地理解,虽然很多书都有介绍,但是领悟的还是有缺陷。所以这次以Intel微处理器为例子,去了解硬件是怎么寻址的,然后在转到Linux系统怎么抽象的。

80x86常见的工作模式有,实模式和保护模式。

先来看实模式,它的操作空间<=1MB。

所以这个时候段寄存器里面存放的是16位的段地址。然后段地址会和偏移地址运算后(段地址X10H+偏移地址)来读取对应的存储单元。段寄存器内的段地址是任何一个大小为64KB(2^16B=64KB)的存储器段的起始地址,偏移地址用来精确的读取该存储器段内的任一单元。

这里有一个存储器区域叫做高端存储器,大小为64KB,因为地址范围(0FFFF0H~10FFEFH)在1MB的最顶端,所以叫做高端存储器。

自己的思维是,如果一段内存区域已经被分配,那么它就已经固定了,不会再变动,一直到它被释放。

但实际上,段地址和偏移地址允许重定位,这样的好处是,在实模式下运行的程序可以在保护模式下运行。可重定位程序是一个可以放入存储器的任何区域,且不需要修改而仍能执行的程序。可重定位数据是可以放在存储器的任何区域,且不需要修改就可以被程序引用的数据。

另外需要注意的是,存储器段是可以相连或不相连的,也可以是重叠的。

到这儿,应该能看出段不是惯性思维中固定且有序的,它们会根据存储器的实际情况做出改变。

希望你忘了上边的再看下边的,要不然会乱的。

接下来是保护模式下的存储器寻址,它的操作空间在>1MB。

这个时候的段寄存器已经变了,它里面存放的是叫做选择子,以及两个标志(TI、RPL)。另外还有一个专业术语叫描述符表,它其实也就是一块存储区,里面放的是每个存储段的首地址以及他的大小。所以,这个时候,段寄存器会根据TI来选择实在全局描述符表还是局部描述符表查找选择子中对应的值,这个值说白来才是真正存储段所要的段首地址值。

但是保护模式下通过段最后得到的地址并不是实际的物理地址,因为它是根据程序产生的地址,叫做线性地址。

这东西吧,又被人分成了3部分,最高10位页目录地址,最低12位偏移量,中间的10位页表地址。所以,这又联系到了页,根据偏移地址(2^12=4KB)知道一个页4KB。

然后页目录回合一个名字叫做CR3的寄存器(这个寄存器的专职工作就是保存一个地址值)进行运算,得出在页目录表中的对应位置,取出,然后在页表进行运算,取出对应于页表中的值,接下来在和偏移量运算,得到最终的物理地址。运算过程是,(M<<2+N)线性地址中的页目录和页表左偏移两位相加对应的存储器中的数,(M+N)偏移量直接加不左移。

到这,硬件上的寻址就结束了,下来要做的就是去看操作系统中的代码是如何抽象这些东西的,呵呵。

转载地址:http://hpxii.baihongyu.com/

你可能感兴趣的文章
C++虚函数原理
查看>>
MySQL的索引
查看>>
今天,Python信息量很大!
查看>>
Flash 已死,Deno 当立?
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
程序员:凭自己能力吃饭,有什么理由瞧不起?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
副业过万的程序员都知道的网站有哪些
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
乔布斯18岁求职信拍卖价22.24万美元,值吗?
查看>>
为何程序员总喜欢写技术博客,看完恍然大悟...
查看>>
假如计算机是中国人发明的,那代码应该这么写
查看>>
科技公司最爱的 50 款开源工具,你都用过吗?
查看>>
触目惊心:比特币到底消耗了多少能源?
查看>>
面试官:简历上敢写技术精通?那我就不客气了!
查看>>
如何判断一家互联网公司要倒闭了?
查看>>