2022年大话Linux内核X内存管理 .pdf

上传人:C****o 文档编号:40228084 上传时间:2022-09-08 格式:PDF 页数:3 大小:48.14KB
返回 下载 相关 举报
2022年大话Linux内核X内存管理 .pdf_第1页
第1页 / 共3页
2022年大话Linux内核X内存管理 .pdf_第2页
第2页 / 共3页
点击查看更多>>
资源描述

《2022年大话Linux内核X内存管理 .pdf》由会员分享,可在线阅读,更多相关《2022年大话Linux内核X内存管理 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

3、那么这20 位总线可以表示的是 1M 个数,即通过20 位地址总线可以访问1M 个内存单元。可问题又来了,因为 8086 的寄存器是16 位的。如果我要把一个内存地址简单的存到寄存器中,只能最大表示64K 的内存。如果再多就无法表示了。那么怎么解决这个问题的。就必须把寄存器也设计成20 位。或再想其它的办法。Intel 公司的硬件工程师没有选择扩大寄存器的位数,而是想出了一个办法。他们用二个寄存器来表示内存地址。有点类似于我们的数学中的10 位数,比如27,用第一个寄存器表示2,用第二个寄存器表示7。如图:0 x1 0 x1AFFFF 0 x1B0000 0 x1B0001 1FFFFF 但二

4、个寄存器表示的范围太大了,每个16 位,二个就是32 位,足以表示4G(0 xFFFFFFFF)大小的内存。而实际上8086 的地址总线只有20 位。所以他们让二个寄存器错位叠加来表示一个 20 位的内存地址。把第一个寄存器向前错4 位再加上第二个寄存器。从而得到一个200 x001A0 xFFFF 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 3 页 -位的内存地址。这是就是传说中的8086 的段。如图:0 x1 0 x1AFFFF 0 x1B0000 0 x1B0001 1FFFFF 随着时间的推移,硬件的制造水平也不断发展。人们造出了32 位的寄存器。地址总线也变成了 3

5、2 位(注:286 24 位地址时代这里略过)。这就简单了,可以用32 位寄存器直接来存放 32 位的内存地址了。如果这时设计计算机会变的简单许多。但 8086 时代已经前生了很多运行在分段模式的应用程序,这些程序将不能应用在新设计的32 位计算机上。所以Intel的硬件设计师不得不兼容以前的老程序,而在硬件设计上作出折中的解决方案。于是二个名词产生了即实模式与保护模式。1、实模式在 Intel 设计的 386 计算机中,如果不作开启保护模式的操作,将在这种模式上对内存进行存取,这种模式即我们前面所说的内存存取方式。虽然寄存器全部是32 位的。但这种模式下只能用其低16 位,所能存取的内存也最

6、大只有1M。1M 以上的内存对这种模式来说无法对其操作。2、保护模式通过设定某个特殊的寄存器中相应的位,我们可以开启这种模式。开启这种模式后,我们就可以用完整的32 寄存器了。即然可以用32 位寄存器了,我们是否就可以简单的设计一个计算机,用一个寄存器表示一个实际的内存地址然后直接存取呢?实际情况远非如此。请考虑如下问题,有二个用户分别运行计算机上的二个程序。但这二个用户都有各自的秘密,A 用户用程序把秘密存入在内存单元0X8000 处,B 用户把秘密存放在内存单位0 x9000 处。如果用我们设计的计算来运行,二个用户根本无法保护自已的秘密。因为无论是谁都可以通过寄存器来访问这个二地址。那怎

7、样才能保护这二个地址的秘密呢?这就是保护模式要处理的问题。这时硬件设计者们又提出了二个概念,逻辑地址与 物理地址。让二个用户仍然认为他们的秘密保存到了他们想保存的内存地址中,但这个内存地址是逻辑地址,也就是说这二个地址只是他们自已知道的逻辑上的地址,并非真实的保存在这二个地址的内存中(物理内)。而是由操作系统来决定这二个地址存放到哪里。同时,操作系统严格的保守这二个真实地址(物理地址)的位置信息。不会让这二个用户知道。在此,就需要操作系统与硬件来配合完成这样的工作。在硬件设计上,用三个寄存器来生成一个内存的实地址。0 x1A0 00 x FFFF 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 3 页 -段表寄存器、段选择寄存器以及一个32 位的地址寄存器。由操作系统来管理段表寄存器的值,以及段表寄存器指向的物理地址的内容。而应用程序来管理自身的段选择寄存器。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 3 页 -

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

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁