
linux 内存管理
sadamoo
这个作者很懒,什么都没留下…
展开
-
linux内存管理浅析
linux内存管理浅析[地址映射](图:左中)linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存放在内存里面的),才能完成映射。也就是说,要实现一次内存访问转载 2013-01-11 14:48:52 · 731 阅读 · 0 评论 -
linux内存管理之sys_brk实现分析【三】 .
4.2 用户空间的伸展4.2.1 find_vma_intersectionfind_vma_intersection()在mm.h文件中,实现如下://判断进程的地址空间是否与给定的地址区间相交叉[cpp] view plaincopyprint?/* Look up the first VMA which intersects the inter转载 2013-07-25 09:38:35 · 819 阅读 · 0 评论 -
linux内存管理之sys_brk实现分析【二】 .
4 sbrk()系统调用代码分析// sbrk:用来扩大或者缩小进程的数据段边界,brk为新的数据段边界,其函数实现在文件/mm/mmap.c中。函数原型如下:[cpp] view plaincopyprint?SYSCALL_DEFINE1(brk, unsigned long, brk) { unsigned long转载 2013-07-24 17:02:57 · 949 阅读 · 0 评论 -
linux内存管理之sys_brk实现分析【一】 .
linuxstruct数据结构file代码分析tree目录(?)[+]概述报告题目系统调用功能概述数据结构分析数据结构vm_area_struct结构体mm_struct结构体 Linux内存管理分析报告分析内容: linux 内存管理之sys_brk 实现分析 目 录1 概述... 21.1转载 2013-07-24 16:43:03 · 887 阅读 · 0 评论 -
linux页面回收浅析
被扫描到的页面根据访问标记是否置位来决定其去留。那么这个访问标记是如何设置的呢?有两个途径,一是用户通过read/write之类的系统调用访问文件时,内核操作磁盘高速缓存中的页面,会设置这些页面的访问标记(设置在page结构中);二是进程直接访问已映射的页面时,mmu会自动给对应的页表项加上访问标记(设置在页表的pte中)。关于访问标记的判断就基于这两个信息。(给定一个页面,可能有多个pte引用到转载 2013-07-30 11:50:15 · 638 阅读 · 0 评论 -
Linux内存管理之页面回收
请求调页机制,只要用户态进程继续执行,他们就能获得页框,然而,请求调页没有办法强制进程释放不再使用的页框。因此,迟早所有空闲内存将被分配给进程和高速缓存,Linux内核的页面回收算法(PFRA)采取从用户进程和内核高速缓存“窃取”页框的办法不从伙伴系统的空闲块列表。 实际上,在用完所有空闲内存之前,就必须执行页框回收算法。否则,内核很可能陷入一种内存请求的僵局中,并导致系统崩溃。也转载 2013-07-30 11:08:16 · 675 阅读 · 0 评论 -
linux内存管理之sys_brk实现分析【三】
4.2 用户空间的伸展4.2.1 find_vma_intersectionfind_vma_intersection()在mm.h文件中,实现如下://判断进程的地址空间是否与给定的地址区间相交叉[cpp] view plaincopyprint?/* Look up the first VMA which intersects the inter转载 2013-02-28 17:08:28 · 679 阅读 · 0 评论 -
linux内存管理之sys_brk实现分析【二】
4 sbrk()系统调用代码分析// sbrk:用来扩大或者缩小进程的数据段边界,brk为新的数据段边界,其函数实现在文件/mm/mmap.c中。函数原型如下:[cpp] view plaincopyprint?SYSCALL_DEFINE1(brk, unsigned long, brk) { unsigned long转载 2013-02-28 17:07:58 · 3171 阅读 · 1 评论 -
linux内存管理之sys_brk实现分析【一】
目 录1 概述... 21.1 报告题目... 22 系统调用功能概述... 23 数据结构分析... 43.1 数据结构... 53.2 vm_area_struct结构体... 63.3 mm_struct结构体... 84 sbrk()系统调用代码分析... 10转载 2013-02-28 17:07:13 · 1607 阅读 · 0 评论 -
Linux内核分析之缺页中断
Linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配物理页框的页所引起的异常。在x86-ia32体系上由do_page_fault函数处理,每个版本有所差异,现分析的版本为2.6.32 /* regs:该结构包含当异常发生时的微处理器寄存器的值 3位的error_code,当异常发生时由控制单元压入栈中 -如果第0位被清0,则异常由访转载 2013-02-28 16:32:08 · 804 阅读 · 0 评论 -
alloc_page 代码
alloc_pages()->alloc_pages_node()->__alloc_pages()->__alloc_pages_nodemask()->get_page_from_freelist()->buffered_rmqueue()->__rmqueue()->__rmqueue_smallest()->expand()include\linux\Gpf.h#define al原创 2013-01-25 16:41:08 · 1348 阅读 · 0 评论 -
linux的物理内存与线性地址空间布局--1
在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中。n物理存储空间布局Linux的物理存储空间布局与处理器相关,详细情况可以从处转载 2013-01-11 15:10:15 · 495 阅读 · 0 评论 -
vmalloc代码
vmalloc()->__vmalloc_node_flags()->__vmalloc_node()->__vmalloc_node_range()->__vmalloc_area_node()->alloc_page() mm/vmalloc.cvoid *vmalloc(unsigned long size){ return __vmalloc_node_flags(si原创 2013-01-25 16:54:46 · 807 阅读 · 0 评论 -
kmalloc分配大小的限制
kmalloc是通过cache来实现的, 只不过每次kmalloc的大小不同, 因此是从不同的cache中分配:/* include/linux/slab.h */// 注意kmalloc是在头文件中定义的static inline void *kmalloc(size_t size, gfp_t flags){ if (__builtin_constant_p(size))转载 2013-01-25 16:10:17 · 4847 阅读 · 0 评论 -
linux的物理内存与线性地址空间布局--2
Linux 2.6.10内核中的ARM处理器平台部分没有对高端内存的支持,图18-6和图18-7分别列出了SA1100和IXP4XX处理器平台的Linux线性地址空间布局。 Linux内存线性地址空间大小为4GB,分为2个部分:用户空间部分(通常是3G)和内核空间部分(通常是1G)。在此我们主要关注内核地址空间部分。 内核通过内核页全局目录来管理所有的物理内存,由于线形地址转载 2013-01-11 15:11:36 · 480 阅读 · 0 评论 -
探索 Linux 内存模型
简介: 在这篇 Linux® 内存模型指南中,我们将学习如何构建和管理内存方面的基础知识。本指南介绍了内存控制单元、分页模型方面的内容,并详细介绍了物理内存区域方面的知识。发布日期: 2006 年 2 月 23 日 级别: 初级 访问情况 : 12068 次浏览 评论: 2 (查看 | 添加评论 - 登录) 平均分 (24个评分)为本文评分转载 2012-12-28 19:36:07 · 491 阅读 · 0 评论 -
Linux内存寻址和内存管理
1. x86的物理地址空间布局 以x86_32,4G RAM为例:物理地址空间的顶部以下一段空间,被PCI设备的I/O内存映射占据,它们的大小和布局由PCI规范所决定。640K~1M这段地址空间被BIOS和VGA适配器所占据。由于这两段地址空间的存在,导致相应的RAM空间不能被CPU所寻址(当CPU访问该段地址时,北桥会自动将目的物理地址“路由”到相应的I/O设备上,不会发转载 2012-12-28 19:23:28 · 1038 阅读 · 1 评论 -
kmalloc 代码
Kmalloc()->__kmalloc()->__do_kmalloc()->__cache_alloc()->____cache_alloc()->cache_alloc_refill()->cache_grow()->kmem_getpages()->alloc_pages_exact_node()->__alloc_pages() include\linux\Slab_def.h原创 2013-01-25 16:07:58 · 1003 阅读 · 0 评论 -
Linux 2.6 中的页面回收与反向映射
简介: 本文主要介绍 Linux 2.6 中的页面回收机制是如何工作的,反向映射是如何设计并实现的,以及 Linux 操作系统如何利用反向映射机制进行页面地回收。 Linux 2.6 中关于反向映射和页面回收的代码在不断地更新,不同版本的内核在这部分的代码上会有很大差异,本文将基于 2.6.18.1 版本的内核来探讨 Linux 中的反向映射和页面回收。发布日期: 2011 年 3 月 1转载 2013-07-26 11:53:15 · 595 阅读 · 0 评论