内核地址空间的划分

整个内核地址空间的划分请参见下图:

图中PAGE_OFFSET=0xc0000000,TEXT_OFFSET=0x00008000在arch/arm/makefile中指定,swapper_pg_dir=0x00004000在head.S中指定。

    地址空间的第一段用于将系统的所有物理内存页映射到内核的虚拟地址空间中。由于内核地址空间从偏移量0xc0000000开始,即3GB,所以每个虚拟地址x都对应于物理地址x-0xc0000000,因此这是一个简单的线性偏移。

    直接映射区:从PAGE_OFFSET(即0xc0000000)开始到high_memory的地址空间,在内核调用bootmem_init函数中,把high_memory的值设置为实际物理内存的结束地址对应的虚拟地址,最大不超过896M。当实际物理内存大于896M时,超出的部分映射为高端内存区。物理内存的起始地址的16K未用,从swapper_pg_dir到0xc0008000的16K存放段地址的页表项内容。从0xc0008000开始存放内核的代码段、初始化的数据段和未初始化的数据段。紧接着内核的代码段和数据段的是bootmem分配器的位图区域。

    VMALLOC区:虚拟内存中连续、但物理内存中不连续的内存区,可以在vmalloc区域分配。该机制通常用于用户过程,内核自身会试图尽力避免非连续的物理内存。但在已经运行了很长时间的系统上,在内核需要物理内存时,可能出现可用内存不连续的情况。此类情况,主要出现在动态加载模块时。vmalloc区域在何处结束取决于是否启用了高端内存支持。如果没有启用,那么就不需要持久映射区,因为整个物理内存都是可以直接映射的。因此根据配置的不同,该区域结束于持久内核映射或固定映射区域的起始处,中间总会留下两页,作为vmalloc区与这两个区域之间的保护措施。

    持久映射区:用于将高端内存域中的非持久页映射到内核。

    固定映射区:是与物理地址空间中的固定页关联的虚拟地址空间页,但具体关联的页帧可以自由选择。它通过固定公式与物理内存关联的直接映射页相反,虚拟固定映射地址与物理内存位置之间的关联可以自行定义。

    在直接映射区和vmalloc区域之间有一个8M的缺口,这个缺口可用作针对任何内核故障的保护措施。如果访问越界地址,则访问失败并生成一个异常,报告该错误。如果vmalloc区域紧接着直接映射,那么访问将成功而不会注意到错误。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Linux 中,内核地址空间是操作系统内核独占的虚拟内存空间,用于存放内核代码、数据结构和驱动程序等。内核地址空间对用户进程是不可见的,用户进程无法直接访问和修改内核地址空间中的内容。 Linux 内核地址空间通常被划分为以下几个部分: 1. 物理内存映射区(Physical Memory Mapping):这个区域用于将物理内存映射到内核地址空间中,使得内核可以直接访问物理内存的内容。在这个区域中,每个物理页都有一个对应的内核虚拟地址,内核可以通过这些虚拟地址来访问物理内存。 2. 内核代码区(Kernel Code):这个区域存放了内核的代码,包括各种系统调用、中断处理程序和驱动程序等。内核代码区通常是只读的,以保证内核代码的完整性和安全性。 3. 内核数据区(Kernel Data):这个区域用于存放内核运行时的数据结构,如进程控制块(Process Control Block)、中断向量表、系统全局变量等。内核数据区中的数据可以被内核读写,但对用户进程来说是不可见的。 4. 内核堆(Kernel Heap):内核堆是内核动态分配内存的区域,用于存放内核运行时需要的临时数据结构和缓冲区等。内核堆的大小是可变的,根据需要进行扩展或收缩。 5. 内核栈(Kernel Stack):每个内核线程和中断处理程序都有自己的内核栈,用于保存函数调用的上下文信息。内核栈的大小通常比较小,以节省内存空间。 总体来说,Linux 的内核地址空间是操作系统内核独占的一块虚拟内存空间,用于存放内核代码、数据和驱动程序等。内核地址空间对用户进程是不可见的,用户进程无法直接访问和修改其中的内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值