`
waterlife
  • 浏览: 67860 次
  • 性别: 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内核完全注释:基于0.11内核(V5.0)_0.11内核_linux_linux内核完全注释_Linux内核注释_

    3. 内存管理:了解Linux如何分配和回收内存,包括物理内存的组织、虚拟内存的映射、页面缓存等机制。这些知识对于优化程序性能和避免内存泄漏至关重要。 4. 文件系统:Linux内核支持多种文件系统,如EXT2、EXT3、...

    linux 内核精髓-精通linux内核必会的75个绝技

    3. **内存管理**:探讨Linux内核如何分配、释放和管理物理及虚拟内存,包括页面缓存、内存映射、交换机制等,这对优化系统性能至关重要。 4. **文件系统**:详述Linux下的VFS(虚拟文件系统)和具体文件系统的实现...

    linux内核图解-linux内核图解

    Linux内核支持多任务并行处理,通过调度算法如CFS(完全公平调度器)确保系统资源的高效分配。 - 内存管理:内核负责内存的分配、回收和页面交换。Linux使用分页内存管理系统,通过虚拟地址映射物理地址,实现内存...

    LINUX内核源代码情景分析_linux_

    7. **内存管理**:Linux内核采用分页内存管理,包括物理内存分配、虚拟地址空间映射、页面替换策略等,这些在源代码分析中都是重点。 8. **文件系统**:Linux支持多种文件系统,如EXT4、XFS等。文件系统的实现涉及...

    Linux内核分析.pdf

    ### Linux内核分析知识点 #### 一、Linux与GNU通用公共许可证 - **知识点1:GNU通用公共许可证(GPL)** - **定义**:GNU通用公共许可证是一种开放源代码的授权方式,允许用户自由使用、复制、研究、更改及改进...

    Linux内核修炼之道精华版

    《Linux内核修炼之道》是一本深度探讨Linux内核的权威书籍,旨在帮助读者深入了解这个开源操作系统的灵魂。书中的内容涵盖了从内核基础到高级技术的方方面面,为那些希望提升Linux内核理解和开发能力的读者提供了...

    Linux内核源码(0.01版本)

    2. **内存管理**:这部分代码负责内存的分配、释放以及页面交换,确保高效利用有限的物理内存资源。在早期版本中,内存管理可能基于固定大小的页框,并未涉及复杂的分页策略。 3. **文件系统**:Linux内核支持多种...

    Linux内核完全注释2.pdf

    读者将了解到如何通过系统调用创建新进程,以及Linux内核如何高效地分配CPU时间给各个进程。此外,书中还讲解了信号量、互斥锁等同步原语,这些都是多线程编程中的重要概念。 其次,内存管理是内核的关键部分。赵炯...

    linux内核内存管理

    Linux内核内存管理机制包括页面类型与组织、页面回收逻辑、内存区域划分、页面分配策略、页面引用和回收规则等多个方面。 首先,Linux内核将物理内存划分为不同的类型,以适应不同硬件和内存大小的需求。内存区域...

    Linux内核完全注释 txt

    - **内存分配**: 解释了Linux内核中内存分配的机制,包括物理内存和虚拟内存的管理。 - **页面管理**: 详细探讨了页面管理的具体实现方法,包括页面缓存、页面分配和回收策略。 ##### 4.6 设备驱动 - **块设备驱动...

    Linux内核代码及解析

    内存管理是内核的关键部分,涉及到物理内存分配、虚拟内存映射、页面缓存等内容。Linux内核采用分页技术,将内存划分为固定大小的页,通过页表进行地址转换。它还使用了伙伴系统和slab分配器来有效地管理内存。 四...

    《Linux内核注释》更易理解的Linux内核代码注释

    1. 进程管理:在Linux内核中,进程是资源分配的基本单位。书中的注释将解释如何创建、调度和终止进程,以及如何处理进程间的通信(IPC)和同步机制,如信号量、互斥锁等。 2. 内存管理:内存管理是内核的另一个核心...

    深度剖析linux内核

    内存管理是Linux内核的关键功能,它涉及到虚拟内存、物理内存和交换空间的管理。Linux采用分页机制,将内存划分为固定大小的页,通过页表进行映射。此外,内核还实现了伙伴系统和slab分配器来有效地分配和回收内存块...

    深入分析Linux内核源码

    内存管理是Linux内核的另一大核心,包括物理内存分配、虚拟地址空间映射、页面缓存等。深入源码,我们可以理解页表结构、内存分配算法(如slab分配器)以及内存泄漏检测机制,这对于优化程序性能和防止系统崩溃至关...

    linux内核图解-内核图解

    2. 内存管理:Linux内核采用虚拟内存系统,将物理内存与虚拟内存分离,实现内存的高效利用。它包括内存分配、页面替换、内存映射等功能,确保多个进程可以共享内存资源而不会互相干扰。 3. 文件系统:Linux内核支持...

    Linux内核精髓

    4. 内存管理:内存管理是内核的重要职责之一,涉及物理内存和虚拟内存的管理、内存分配和回收、页面置换算法等。 5. 文件系统:Linux支持多种文件系统类型,如ext4、xfs等,内核中包括了对文件的读写、权限控制、...

    LINUX内核设计与实现(第2版)

    2. **内存管理**:Linux内核采用虚拟内存技术,将物理内存抽象为逻辑地址空间,使得程序可以在更大的地址空间中运行。内存管理包括页面分配、页面回收、内存映射等功能,这些功能确保了系统的稳定性和效率。 3. **...

Global site tag (gtag.js) - Google Analytics