`
waterlife
  • 浏览: 65800 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Linux内核之物理页面的分配

阅读更多

物理页面的分配使用函数:

static inline struct page * alloc_pages(unsigned int gfp_mask, unsigned int order)

 

参数gfp_mask表示分配的策略,order表示所需物理块的大小。gfp_mask作为下标查找数组node_zonelists[]决定具体的分配策略。

 

其具体分配的流程如下:

1. 如果只分配单个页面且等待分配完成,又不是用于管理目的,把direct_reclaim设为1,就从不活跃的干净页面缓冲队列中回收一块,因为这些页面很难保证连续。

 

2.如果当前页面总量比较充裕,内存分配压力较小,就用rmqueue()试图从管理区分配。每个管理区都有 zone->free_area指向管理区的空闲区。如果页面总量已经将到最低点,唤醒内核线程kreclaimd辅助回收一些页面。

 

3.rmqueue()从管理区挨个扫描直到分配成功或最终失败,如果失败就加大力度。其一降低管理区保存水位的要求,其二是把缓冲在管理区不活跃的干净页面也考虑进去。成功就返回一个page结构指针,指向页面块的第一个页面。

 

4.如果还不行的话,就唤醒内核线程kswapd设法换出一些页面。如果分配策略对内存分配志在必得,则让系统再进行一次调度,并且让当前进程为其他进程让路。如果还是失败,就要检查当前正在分配内存的进程是什么。如果是kswapd或kreclaimed,他们的task_struct里的flags字段的PF_MEMALLOC标志为1,会比一般的进程更重要。

 

5.此时可以调用page_launder()洗干净脏页面,并把它们回收整合成大的页面块。如果还是失败,就表示管理区的页面总量真的很少。就要再次加大力度,此时判断的标准是高于 z->pages_min。如果还是失败就表明系统出现问题了。

分享到:
评论

相关推荐

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    2.7 物理页面的分配 2.8 页面的定期换出 2.9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的...

    深入分析Linux内核源码

    6.3.2 物理页面的分配和释放 6.3.3 Slab分配机制 6.4 地址映射机制 6.4.1 描述虚拟空间的数据结构 6.4.2 进程的虚拟空间 6.4.3 内存映射 6.5 请页机制 6.5.1 页故障的产生 6.5.2 页错误的定位 6.5.3 进程...

    疯狂内核之——Linux虚拟内存

    2.4.2 通过每CPU 页高速缓存分配页面 82 2.4.3 释放页面到每CPU 页面高速缓存 83 2.5 slab分配器 85 2.5.1 数据结构 86 2.5.2 分配/释放slab页面 92 2.5.3 增加slab数据结构 93 2.5.4 高速缓存内存布局 94 2.5.5 ...

    linux 内核源代码分析

    2.7 物理页面的分配 2.8 页面的定期换出 2. 9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU...

    包含LINUX内核同步、信号、内存、调度、文件系统.rar

    进程调度 : 进程 是 系统中 进行 资源分配 的 基本单位 ; 每个进程 在 运行时 , 都 感觉自己占有 全部硬件资源 ,...物理内存管理 包括 : 页面分配器 等 ; 内存管理 位于 下图 Linux 内核整体架构图 中的 内核空间 ;

    LINUX内核源代码情景分析

    2.7 物理页面的分配 2.8 页面的定期换出 2. 9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() . 第3章 中断、异常和系统调用 3.1 X86 ...

    Linux内核情景分析(二级标题).pdf

    2.7 物理页面的分配 2.8 页面的定期换出 2.9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 第4章 进程与进程调度...

    linux内核源代码情景分析

    2.7 物理页面的分配 2.8 页面的定期换出 2.9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断...

    Linux内核情景分析

    2.7 物理页面的分配 2.8 页面的定期换出 2. 9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的...

    LINUX内核源代码情景分析(上).part1.rar

    2.7 物理页面的分配 2.8 页面的定期换出 2. 9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() . 第3章 中断、异常和系统调用 3.1 x86 ...

    Linux内核情景分析(非扫描版)

    2.7 物理页面的分配 2.8 页面的定期换出 2. 9 页面的换入 2.10 内核缓冲区的管理 2.11 外部设备存储空间的地址映射 2.12 系统调用brk() 2.13 系统调用mmap() 第3章 中断、异常和系统调用 3.1 X86 CPU对中断的...

    Linux操作系统的内存使用方法详细解析

    Linux内核在用户申请内存的时 候,只是给它分配了一个线性区(也就是虚存),并没有分配实际物理内存;只有当用户使用这块内存的时候,内核才会分配具体的物理页面给用户,这时候才占用 宝贵的物理内存。内核释放...

    清华大学Linux操作系统原理与应用

    4.4.2 物理页面的分配 86 4.4.3 物理页面的回收 88 4.4.4 slab分配模式 89 4.4.5 内核空间非连续内存区的分配 93 4.5 交换机制 95 4.5.1 交换的基本原理 95 4.5.2 页面交换守护进程kswapd 99 4.6 内存管理实例 99 ...

    linux 虚拟地址与物理地址的关系

    进程所能直接操作的地址都为虚拟地址。当进程需要内存时,从内核获得的仅仅是虚拟的...实际的物理内存只有当进程真的去访问新获取的虚拟地址时,才会由“请求页机制”产生“缺页”异常,从而进入分配实际页面的例程。

    LINUX内存管理

    Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。 不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,...

    linux系统编程之线程.zip

    相同的虚拟址,映射到不同的物理页面内存单元,最终访问不同的物理页面。 但!线程不同!两个线程具有各自独立的PCB,但共享同一个页目录,也就共享同一个页表和物理页面。所以两个PCB共享一个地址空间。 实际上,...

    1-选题任务书1

    (2)页面调度、分配、回收算法尝试使用linux2.6的二进制伙伴分配算法管理物理页面,Linux2.6为每个管理区使用不同的伙伴系统,内核空间分为三种区,DM

    linux-mm-notes:linux mm 子系统简明笔记

    - NUMA 节点、区域和物理页面(伙伴)分配器。 - 内存回收、压缩和 OOM - 即当区域低于低阈值和最小阈值时内核如何找到更多内存。 说明 这是一组关于linux内存管理子系统的笔记。 它们假定采用 x86-64 架构,所有...

    Linux系统故障诊断与排除--James Kirkland

    4.2.9 分配共享内存时“设备上无剩余空间”错误的故障诊断 101 4.2.10 其他性能工具 102 4.3 小结 103 第5章 针对PCMCIA和USB通过SAN添加新存储 104 5.1 配置 105 5.2 内核模块 106 5.3 通过PCI添加...

Global site tag (gtag.js) - Google Analytics