Linux学习 内存管理(1) 页框管理

LInux有效地利用Intel分段和分页单位把逻辑地址转换为物理地址

RAM的某些部分永久地分配给内核用来存放内核代码以及静态内核数据结构

RAM的其余部分称为动态内存,这不仅是进程所需的宝贵资源,也是内核本身所需的宝贵资源

1.页框管理
2.内存区管理
3.非连续内存区管理:处理不连续的内存区

一、页框管理

Intel 奔腾处理器可以采用两种不同的页框(page frame)大小:4KB/4MB
linux采用4KB页框大小作为标准的内存分配单元

分页单元可以自动检测正在被访问的页是否包含在某个页框中
4KB是大部分磁盘块大小的倍数

内核必须记录每个框页当前的状态
1.内核必须能区分哪些页框包含的是属于进程的页
哪些页框包含的是内核代码或内核数据
2.内核必须能够确定动态内存中页框是否空闲

struct page描述符数组介绍
next双向循环链表
prev双向循环链表
inode
offset
next_hash
count
flags由32个标志组成的数组来描述页框状态
wait
pprev_hash
buffers
flags描述页框状态的标志
PG_decr_after
PG_dirty
PG_error
PG_free_after
PG_DMA由ISA DMA使用
PG_locked页不能被换出
PG_referenced
PG_reserved
PG_skip
PG_Slab
PG_swap_cache
PG_swap_unlock_after
PG_uptodate

系统中所有的页框描述符都存放在一个叫mem_map的数组中。由于每个描述符最多要占用64字节

请求和释放页框

请求页框说明
__get_free_pages(gfp_mask,order)
__get_dma_pages(gfp_mask,order)
__get_free_page(gfp_mask)
get_free_pages(gfp_mask)
gfp_mask
__GFP_WAIT
__GFP_IO
__GFP_DMA请求的页框必须适用于DMA时设置该位
__GFP_HIGH, __GFP_MED, __GFP_LOW指定请求的优先级

用于请求页框的标志值组

组名__GFP_WAIT__GFP_IO优先级
GFP_ATOMIC00__GFP_HIGH
GFP_BUFFER10__GFP_LOW
GFP_KERNEL11__GFP_MED
GFP_NFS11__GFP_HIGH
GFP_USER11__GFP_LOW
释放页框说明
free_pages(addr,order)
__free_page( p)
free_page(addr)

伙伴(Buddy)系统算法

内核应该为分配一组连续的页框而建立一种稳定、高效的分配策略、
解决外碎片问题:在已分配页框的块内分散许多小块的空闲页框。由此带来的问题是,即使有足够的空间页框可以满足请求,但要分配一个大块的连续页框可能无法满足

开发一种适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的请求而把大块的空闲块进行分割

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值