存储管理

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 管理区。

 

以上是关于存储管理的主要内容,如果未能解决你的问题,请参考以下文章

Spark存储管理

操作系统页式存储管理的问题

分页存储管理和分段存储管理

Mac本地存储空间管理软件

分页存储管理和分段存储管理

存储管理