大话Linux内核X86内存管理

上传人:博****1 文档编号:560956404 上传时间:2023-03-11 格式:DOCX 页数:2 大小:36.26KB
返回 下载 相关 举报
大话Linux内核X86内存管理_第1页
第1页 / 共2页
大话Linux内核X86内存管理_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《大话Linux内核X86内存管理》由会员分享,可在线阅读,更多相关《大话Linux内核X86内存管理(2页珍藏版)》请在金锄头文库上搜索。

1、大话 Linux 内核 X86 内存管理作者:AlanxEmail: 即然用“大话”二字,表明本文非正规的教程,可能会有勘误,也可能因本人水平有限, 存在的理解错误,希望大家能及时帮我纠正这些错误,以免误人子弟。很早以前我一直想研究内核,但通常看完第一章linux介绍后,在第二章的内存管理上 一头雾水,兴趣顿失。这几天刚好忙完项目,有些时间,所以仔细思考了一下,终于对内存 管理的一点肤浅的认识,即尔提笔写此文章。希望对同样对内存管理茫然无助的朋友有所帮 助。一、最简单的内存管理模式应该是什么样子的? 我们都知道,内存存取的最小单位是字节,我们的程序每次可以存取一个字节的内存单元。 那么好了,让

2、我们时光倒流,回到计算机设计的最初。如果是我设计,可能是这样的。我有一个16位的地址总线,那么这16位地址总线可以表示的范围是065535个数。即64K 个数。如果我用这16位地址总线来存取内存单元,那么最多可能存取64K个字节。这时, 如果我们有一个16位的寄存器。可以在寄存器中保存这任何一个内存单元的地址。图:那么可能有人会说。64K个字节太小了。我想要大点可以吗?有一个办法就是增加地 址总线的宽度。比如,我们的8086把地址总线设计成了20位。那么这20位总线可以表示 的是1M个数,即通过20位地址总线可以访问1M个内存单元。可问题又来了,因为8086的寄存器是16位的。如果我要把一个内

3、存地址简单的存到寄 存器中,只能最大表示 64K 的内存。如果再多就无法表示了。那么怎么解决这个问题的。 就必须把寄存器也设计成20位。或再想其它的办法。Intel 公司的硬件工程师没有选择扩大寄存器的位数,而是想出了一个办法。他们用二 个寄存器来表示内存地址。有点类似于我们的数学中的10位数,比如 27,用第一个寄存器表示2,用第二个寄存器表示7。如图:但二个寄存器表示的范围太大了,每个16位,二个就是32位,足以表示4G(0xFFFFFFFF) 大小的内存。而实际上8086的地址总线只有20位。所以他们让二个寄存器错位叠加来表示 一个20位的内存地址。把第一个寄存器向前错4位再加上第二个寄

4、存器。从而得到一个20位的内存地址。这是就是传说中的8086 的段。 如图:0x10x1AFFFFOxIBOOOO0x1B00011FFFFF随着时间的推移,硬件的制造水平也不断发展。人们造出了32 位的寄存器。地址总线也变 成了32位(注:286 24 位地址时代这里略过)。这就简单了,可以用32位寄存器直接来存 放 32 位的内存地址了。如果这时设计计算机会变的简单许多。但 8086 时代已经前生了很多 运行在分段模式的应用程序,这些程序将不能应用在新设计的 32 位计算机上。所以 Intel 的硬件设计师不得不兼容以前的老程序,而在硬件设计上作出折中的解决方案。于是二个名 词产生了即实模

5、式与保护模式。1、 实模式在 Intel 设计的 386 计算机中,如果不作开启保护模式的操作,将在这种模式上对内存进 行存取,这种模式即我们前面所说的内存存取方式。虽然寄存器全部是32 位的。但这种模 式下只能用其低16位,所能存取的内存也最大只有IM。1M以上的内存对这种模式来说无 法对其操作。2、 保护模式 通过设定某个特殊的寄存器中相应的位,我们可以开启这种模式。开启这种模式后,我 们就可以用完整的32寄存器了。即然可以用32位寄存器了,我们是否就可以简单的设计一个计算机,用一个寄存器表 示一个实际的内存地址然后直接存取呢?实际情况远非如此。请考虑如下问题, 有二个用户分别运行计算机上

6、的二个程序。但 这二个用户都有各自的秘密,A用户用程序把秘密存入在内存单元0X8000处,B用户把秘 密存放在内存单位0x9000处。如果用我们设计的计算来运行,二个用户根本无法保护自已 的秘密。因为无论是谁都可以通过寄存器来访问这个二地址。那怎样才能保护这二个地址的秘密呢? 这就是保护模式要处理的问题。这时硬件设计者们又提出了二个概念, 逻辑地址 与 物理地址。让二个用户仍然认为他们的秘密保存到了他们想保存的内存地址中,但这个内存地址是逻辑 地址,也就是说这二个地址只是他们自已知道的逻辑上的地址,并非真实的保存在这二个地 址的内存中(物理内)。而是由操作系统来决定这二个地址存放到哪里。同时,操作系统严 格的保守这二个真实地址(物理地址)的位置信息。不会让这二个用户知道。在此,就需要操作系统与硬件来配合完成这样的工作。在硬件设计上, 用三个寄存器来生成一个内存的实地址。 段表寄存器、段选择寄存器以及一个32 位的地址寄存器。 由操作系统来管理段表寄存器的值,以及段表寄存器指向的物理地址的内容。而应用程序来 管理自身的段选择寄存器。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号