Posts in category 内存管理
Linux物理内存页面分配
在用户态C语言程序中,我们对内存分配函数malloc()或calloc()非常熟悉;函数执行成功,就会返回需要的内存起始地址。显然这些函数在在内核态没法运行,在内核态有专门的内存申请/释放函数。 Linux内核中,如何分配和回收内存?空闲内存如何管理?本文以linux 2.6.32-220.el6版本内核源码为基础,介绍Linux内核中如何分配物理内存页面。 目 录 1 概述 2 内核页面分配与回收API 3 空闲页面的管理 3.1 物理内存空间描述 3.2 空闲页面的管理 4 伙伴算法 4.1 Buddy System 4.2 伙伴算法举例 4.2.1 页面分配过程 4.2.2 页面回收过程 4.3 Buddy系统信息查看 5 页面分配 5.1 UMA页面分配 5.2 NUMA页面分配 5.2.1 NUMA策略与cpuset功能 5.2.2 alloc_pages_current() 5.3 __alloc_pages_nodemask() 5.3.1 内存迁移类型与lockdep 5.3.2 __alloc_pages_nodemask() 5.4 get_page_from_freelist() 5.4.1 区域(Zone)水准 5.4.2 Hot-N-Cold页面 5.4.3 […]
READ MORE »Linux物理内存描述
Linux内核采用页式存储管理,进程的地址空间被划分成固定大小的“页面”;物理内存同样被分为与页面大小相同的“页帧”,由MMU在运行时将虚拟地址“映射”成某个物理内存页面上的地址。 本文以linux-2.6.32-220.el6版本内核源码为基础,介绍Linux内核中有关物理内存的概念,和如何描述物理内存。注意:本文中涉及到的仅是和物理内存有关的概念、数据结构。和地址如何映射、线性地址、物理地址;内存如何分配/回收等概念无关。 目录 1 概述… 3 2 物理内存相关概念… 3 2.1 NUMA(Non Uniform Memory Access)… 3 2.2 页面和虚拟内存(Paging and Virtual Memory)… 5 2.2.1 PAE(Physical Address Extensions)… 6 2.2.2 PSE(Page Size Extensions)… 6 2.3 TLB(Translation Lookaside Buffers)… 7 3 Linux内核对物理内存描述… 7 3.1 节点(Node)… 8 3.2 区域(Zone)… 10 3.2.1 区域类型… 10 3.2.2 struct zone结构体… 13 3.3 […]
READ MORE »[转]What Every Programmer Should Know About Memory
非常经典且全面介绍内存的资料,强烈推荐。 内容包括: Commodity Hardware Today CPU Caches Virtual Memory NUMA Support What Programmers Can Do Memory Performance Tools Upcoming Technology 点击下载:What Every Programmer Should Know About Memory
READ MORE »Linux内核在x86_64 CPU中地址映射
在《Linux内存地址映射》(http://ilinuxkernel.com/?p=1276),详细介绍了在32位x86 CPU中Linux内核地址映射过程,并且给出实验验证整个地址映射过程。 64位CPU中,地址映射稍微复杂,本文介绍Linux内核在x86_64 CPU中地址映射过程,同样给出实验和源码,验证整个地址映射过程。 完整文档下载地址:Linux内核在x86_64 CPU中地址映射 实验源码下载地址:Memory_Address_Mapping_x86-64
READ MORE »Linux内存地址映射
在Intel体系结构的CPU中,现代操作系统如Linux都采用内存保护模式来管理内存。我们看Linux内核中的内存管理相关内容时,会遇到一个基本问题:普通用户程序中的地址是如何转换到内存上的物理地址的?IA-32架构的CPU规定地址映射过程是逻辑地址–>线性地址–>物理地址。Linux既然能在Intel架构的CPU上运行,就要遵守这个规定,那么Linux又是如何进行地址映射的?
READ MORE »Linux内存管理伙伴算法
伙伴算法 Linux内核内存管理的任务包括: 遵从CPU的MMU(Memory Management Unit)机制 合理、有效、快速地管理内存 实现内存保护机制 实现虚拟内存 共享 重定位
READ MORE »Intel Nehalem服务器中物理内存地址分布
Nehalem架构中系统内存地址空间如下。共有三个基本内存地址区域: (1)低于1MB; (2)1MB~4GB; (3)高于4GB。 TOLM: Top of Low Memory CSR: Control and Status Register
READ MORE »