linux

深入理解Linux 内核 内存总结 一

2018-11-04  本文已影响0人  zh_harry

物理内存管理区

在一个理想的计算机体系结构中,一个页框就是一个内存存储单元,可用于任何事情:存放内核数据和用户数据,缓冲磁盘数据等等。任何种类的数据页都可以存放任何页框中,没有什么限制。
但是,实际的计算机体系结构有硬件的限制,这限制了页框可以使用的方式。尤其是,Linux 内核必须处理80x86体系结构的两件硬件约束:

为了应对这两种限制,linux 2.6 把每个内存节点的物理内存 划分为3个管理区(zone)。
在80x86 UMA 体系结构中的管理区为:

  1. ZONE_DMA

    包含低于16MB的内存管理页框

  2. ZONE_NORMAL
    包含高于16MB且低于896M的内存页框

  3. ZONE_HIGHMEN
    包含从896mb 开始且高于896MB的内存页框

32位物理内存分区布局

进程页表

进程的线性地址空间分成两部分

内核空间映射

宏PAGE_OFFSET =0xC0000000(32 bit) 这是进程在线性地址空间的偏移量,也是内核线性空间的开始之处。

linux 线性地址与物理地址映射
(内核0-896M)PA(Physical Address)=VA(virtual address)-PAGE_OFFSET
内核空间 参见Linux 内核p343

动态内存

RAM的某部分永久地分配给内核,并用于存放内核的代码以及静态的数据结构。RAM的其余部分称为动态内存(dynamic memory),这不仅是进程所需的宝贵资源,也是内核本身所需的宝贵资源。

动态内存由内核动态分配,由mmu(硬件)进行寻址(线性地址转换物理地址)(p294 & P63)

不论是内核和用户程序对内存的访问都是基于线性地址 (深入理解linux 内核P544)

参考
http://ilinuxkernel.com/?p=1013

上一篇下一篇

猜你喜欢

热点阅读