匿名内存

1,匿名内存的概念

匿名内存是指那些在文件系统里没有相对应的”储备文件“的那些内存,堆和栈空间的内存都属于匿名内存。
匿名内存的用途: 当一个程序很久没有运行的时候,需要要将程序占用的堆   栈交换到 swap 分区,而程序打开的文件则不需要放到 swap 分区,因为打开的文件直接可以放到其文件系统, swap 分区还包括堆栈中的一些状态和变量数据等



2,Android匿名内存
Android系统中,匿名共享内存也是进程间通信方式的一种。相比于mallocanonymous/named mmap等传统的内存分配机制,Ashmem的优势是通过内核驱动提供了辅助内核的内存回收算法机制(pin/unpin)。内存回收算法机制就是当你使用Ashmem分配了一块内存,但是其中某些部分却不会被使用时,
那么就可以将这块内存unpin掉。unpin后,内核可以将它对应的物理页面回收,以作他用。
http://blog.csdn.net/yangwen123/article/details/9318319
实现文件  kernel\mm\ashmem.c
struct ashmem_area { 
    char name[ASHMEM_FULL_NAME_LEN];   /* 用于/proc/pid/maps中的一个标识名称 */ 
    struct list_head unpinned_list;    /* 所有的匿名共享内存区列表 */ 
    struct file *file;                 /* Ashmem所支持的文件 */ 
    size_t size;                       /* 字节数 */ 
    unsigned long prot_mask;           /* vm_flags */ 
};
file表示这个共享内存在临时文件系统tmpfs中对应的文件,匿名共享内存是基于Linux内核的临时文件系统tmpfs实现的,每一块匿名共享内存在临时文件系统tmpfs中都有一个对应的文件
 
ashmem_range数据结构就是用来表示某一块被解锁(unpinnd)的小块匿名共享内存,这些解锁的小块内存都是从一块匿名共享内存中划分出来的。
struct ashmem_range { 
    struct list_head lru;            /* LRU列表 */ 
    struct list_head unpinned;       /* unpinned列表 */ 
    struct ashmem_area *asma;        /* ashmem_area结构 */ 
    size_t pgstart;                  /* 开始页面 */ 
    size_t pgend;                    /* 结束页面 */ 
    unsigned int purged;             /* 是否需要清除(ASHMEM_NOT_PURGED 或者ASHMEM_WAS_PURGED) */ 
};
 
Ahshmem驱动程序在加载时,会创建一个/dev/ashmem的设备文件,这是一个misc类型的设备。注册misc设备是通过misc_register函数进行的调用这个函数成功后,就会在/
 
当应用程序调用mmap函数将匿名共享内存设备文件映射到进程的地址空间时,ashmem_mmap被调用,在映射的过程中为该匿名共享内存块创建一个临时文件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值