存储管理
Posted lijia-xiansheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储管理相关的知识,希望对你有一定的参考价值。
一、Linux 内存管理的基本框架
线性地址的映射分为4步:
1.线性地址最高的位段作为下标 在PGD(页面目录)中找到表项,该表项指向PMD(中间目录)。
2.线性地址第二位段作为下标在PMD中找到表项,该表项指向页面表。
3.线性地址第三位段作为下标在页面表中找到PTE,该表项存放指向物理页面的指针。
4.线性地址最后位段为 物理页面 内的相对位移 该位移 跟物理页面的起始地址相加得到相应的物理地址。
如图所示:
二、重要的数据结构和函数
1.内核中有个指针全局变量mem_map,指向page数据结构的数组,每个page代表一个物理页面,那么整个数组代表系统中全部物理页面,相当一个仓库。该仓库分为ZONE_DMA与ZONE_NORMAL两个管理区(可能有第三个ZONE_HIGHMEM用于物理地址超过1GB的存储空间)。
2.ZONE_DMA专给DMA用的,DMA不经过MMU提高的地址映射的。所以:1、外设要直接提供物理地址。2、DMA地址必须连续。
3.每个管理区有个 zone_struct数据结构,里面有 一组 空闲区间队列 free_area_struct ,该结构维持双向链队列的结构 list_head,page结构体里也有一个list_head,page就是通过它进入free_area_struct。
4.由于非均质存储结构(就是包含各种rom/ram等cpu访问的所需时间不一样的器件),在zone_struct page等结构体之上又 引出 代表 存储节点的pglist_data结构体,若干个节点组成单链队列 ,该结构体的 node_mem_map指向page数组,node_zones 管理区。
以上是关于存储管理的主要内容,如果未能解决你的问题,请参考以下文章