Linux中线性内存区,Linux内存线性地址空间格局解析_96719

Linux内存线性地址空间格局解析

实用平台:i386

Linux内存线性地址空间大小为4GB,分为2个局部:用户空间局部(等闲是3G)和内核空间局部(等闲是1G)。在此我们重要关怀内核地址空间局部。

内核穿越内核页大局目录来管教所有的物理内存,由于线形地址前3G空间为用户利用,内核页大局目录前768项(刚好3G)除0、1两项外全副为0,后256项(1G)用来管教所有的物理内存。内核页大局目录在编译时静态地定义为swapper_pg_dir数组,该数组从物理内存地址0x101000处开始储藏。

由图可见,内核线形地址空间局部从PAGE_OFFSET(等闲定义为3G)开始,为了将内核装入内存,从PAGE_OFFSET开始8M线形地址用来照射内核所在的物理内存地址;接下来是mem_map数组,mem_map的起始线形地址与系统构造相干,例如对于UMA构造,由于从PAGE_SIZE开始16M线形地址空间对应的16M物理地址空间是DMA区,mem_map数组等闲开始于PAGE_SIZE+16M的线形地址;从PAGE_SIZE开始到VMALLOC_START

VMALLOC_OFFSET的线形地址空间直接照射到物理内存空间(一一对应影射,物理地址=线形地址-PAGE_OFFSET),这段区域的大小和机器切实具有的物理内存大小有关,这儿VMALLOC_OFFSET在x86上为8M,重要用来遏止越界讹谬;在内存比拟小的系统上,余下的线形地址空间(还要再扣除空白区即VMALLOC_OFFSET)被vmalloc()函数用来把不继续的物理地址空间照射到继续的线形地址空间上,在内存比拟大的系统上,vmalloc()利用从VMALLOC_START到VMALLOC_END(也即PKMAP_BASE扣除2页的空白页大小PAGE_SIZE)的线形地址空间,此刻余下的线形地址空间(还要再扣除2页的空白区即VMALLOC_OFFSET)又能够分成2局部:第一局部从PKMAP_BASE到FIXADDR_START用来由kmap()函数照射高端内存;第二局部,从FIXADDR_START到FIXADDR_TOP,这是一个安宁大小的线形地址空间,(引用:Fixed

virtual addresses are needed for subsystems that need to know the

virtual address at compile time such as the

APIC),在x86系统构造上,FIXADDR_TOP被静态定义为0xFFFFE000,此刻这个安宁大小空间告终于全副线形地址空间最后4K前面,该安宁大小空间大小是在编译时计算出来并存储在__FIXADDR_SIZE变量中。真空断路器o:p>

正是由于vmalloc()利用区、kmap()利用区及安宁大小区的存在才使ZONE_NORMAL区大小受到局限,由于内核在运行时必需这些函数,因而在线形地址空间中起码要VMALLOC_RESERVE大小的空间。VMALLOC_RESERVE的大小与系统构造相干,在x86上,VMALLOC_RESERVE定义为128M,这即便为什么我们看到ZONE_NORMAL大小等闲是16M到896M的起因。

即便一个大广度的问题,这时,作为一种组织措施,“面向对象”不能帮我们些什么吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值