存储管理

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

物理空间是从“供”的角度来管理的   虚拟空间从 “需”的角度

虚拟空间

1.vm_area_struct结构体,在内核中变量名常为vm

   vm_start   vm_end 决定一个区间,同区间的访问权限都一样。

  还有个vm_mm指针,指向mm_struct。

2.mm_struct是进程整个用户空间的抽象,每个进程只有一个,放在进程控制块中 即 task_struct结构体中。

3.虚拟存储管理各个数据结构体关系:

                                         

 

三、物理页面的使用与周转

1.内核有个 swap_info_struct 来描述与管理 用于页面交换的文件和设备:

                          

  其中swap_map 指向一个数组,数组下标决定磁盘或者文件中的位置; lowest_bit 和highest_bit 说明文件供页面交换使用的区间;内核定义了 swap_list ,当一个文件用于交换时,

将该文件的swap_info_struct加入到 swap_list中。


  

 

转载于:https://www.cnblogs.com/lijia-xiansheng/p/9260725.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值