深度分析linux内核高端内存分析

深度分析linux内核高端内存分析

ID:22209981

大小:280.15 KB

页数:7页

时间:2018-10-27

深度分析linux内核高端内存分析_第1页
深度分析linux内核高端内存分析_第2页
深度分析linux内核高端内存分析_第3页
深度分析linux内核高端内存分析_第4页
深度分析linux内核高端内存分析_第5页
资源描述:

《深度分析linux内核高端内存分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux内核高端内存1.Linux内核地址映射模型x86CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射活,才真正访问物理内存。段页式机制如下图LogicalAddress(orFarPointer)SegmentSelectorOffsetLinearAddressSegmentationPaging2.Linux内核地址空间划分通常32位Linux内核地址空间划分0〜3G为用户空间,3〜4G为内核空间。注意这里是32位内核地址空间划分,64位内核地址空间划分是不同的。kernelmemory(1GB)OxCOO

2、OOOOOTASK_SI2E=OxCOOOOOOO(Upper-limitofuser-space)usermemory(3GB)PAGE_OFFSET=OxCOOOOOOO(Lowerboundofkernelspace)0x000000003.Linux内核高端内存的由来当内核模块代码或线程访内存吋,代码屮的内存地址都为逻辑地址,而对I、V:到真正的物理内存地址,需耍地址一对一的映射,如逻辑地址0XC0000003对应的物理地址为0x3,0xc0000004对应的物理地址为0x4,,逻辑地址与物理地址对应的关系为物理地址=逻辑地址-OxCOO

3、OOOOO逻辑地址物理内存地址OxCOOOOOOO0x00xc00000010x10xc00000020x20xc00000030x3•譬穆0xe00000000x20000000……Oxffffffff0x40000000??假设按照上述简单的地址映射关系,那么内核逻辑地址空间访问为OxcOOOOOOO〜Oxffffffff,那么对应的物理内存范M就为0x0〜0x40000000,即只能访W1G物理内存。苦机器中安装8G物理内存,那么内核就只能访问前1G物理闪存,物理㈧存将会无法访问,因为闪核的地址空间已经企部映射到物理內存地址范围0x0〜0x

4、40000000。即使安装了8G物理内存,那么物理地址为0x40000001的内存,内核该怎么去访问呢?代码中必须要有內存逻辑地址的,0XC0000000〜Oxffffffff的地址空间已经被用完了,所以无法访问物理地址0x40000000以后的闪存。站然不能将内核地址交间OXCOOOOOOO-Oxfffffff全部川来简申的地址映射,因此X86架构中将内核地址空间划分三部分:ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM,ZONE_HIGHMEM即为高端内存,这就足内存商端内存概念的山来。在x86结构巾,三种类型的区域如下:

5、ZONENORMAL16MB〜896MBZONE_HIGHMEM896MB〜结朿896-MBVirtualaddress-space4.Linux内核高端内存的理解前面我们解释了高端内存的由来。Linux将内核地址空问划分为三部分ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM,高端内存HIGH_MEM地址空间范M为0xF8000000〜OxFFFFFFFF(896MB〜1024MB)。那么如內核足如何借助128MB高端内存地址空间是如何实现访问可以所有物理内存?当内核想访问岛于896MB物理地址闪存时,从0xF8000000~

6、OxFFFFFFFF地址空间范围I人J找一段相应人小中W的逻辑地址中间,借用一会。借用这段逻辑地址空间,建立映射到想访闷的那段物理内存(即填充内核PTE页面表),临时用一会,用完后归还。这样别人也nj_以借川这段地址空间访问其他物理內存,实现了使川有限的地址空间,访问所有所有物玴内存。如下图。内核髙端内存逻辑地址空间OxF8000000-OxFFFFFFFF0〜896MBDRAM896MB〜内存物理地址空间例如內核想访问2G开始的一段大小为1MB的物理内存,即物理地址范围为0x80000000〜0X800FFFFF。访问之前先找到一段1MB人小的

7、空闲地址空间,假设找到的空闲地址空间为0XF8700000〜0XF87FFFFF,用这1MB的逻辑地址空间映射到物理地址空间0x80000000〜0X800FFFFF的内存。映射关系如下:逻辑地址物理内存地址OXF87000000x800000000XF87000010x800000010XF87000020x80000002……0XF87FFFFF0X800FFFFF当内核访问完0x80000000〜0X800FFFFF物理内存后,就将0xF8700000〜0XF87FFFFF闪核线性空间释放。这样其他进程或代码也可以使用0xF8700000〜

8、0XF87FFFFF这段地址访问其他物理內存。从上面的描述,我们可以知道髙端内存的最基本思想:借一段地址空间,建立临吋地址映射,用完后释

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。