Android 匿名共享内存初始化篇(三)

车机上的LMK优化 LMK是Android原生kernel中的一种kill应用进程的机制,其原理是当系统可用内存不足某些阈值时,开始kill一些优先级较低的进程。但有时候会遇到cache内存明明比limit的内存大,却依然还是进行了kill动作。 阅读详情

Ashmem初始化流程从ashmem.c的__ashmem_init方法开始,代码如下:

835 static int __init ashmem_init(void)
836 {
837     int ret;
838 
839     ashmem_area_cachep = kmem_cache_create("ashmem_area_cache",
840                       sizeof(struct ashmem_area),
841                       0, 0, NULL);
842     if (unlikely(!ashmem_area_cachep)) {
843         pr_err("failed to create slab cache\n");
844         return -ENOMEM;
845     }
846 
847     ashmem_range_cachep = kmem_cache_create("ashmem_range_cache",
848                       sizeof(struct ashmem_range),
849                       0, 0, NULL);
850     if (unlikely(!ashmem_range_cachep)) {
851         pr_err("failed to create slab cache\n");
852         return -ENOMEM;
853     }
854 
855     ret = misc_register(&ashmem_misc);
856     if (unlikely(ret)) {
857         pr_err("failed to register misc device!\n");
858         return ret;
859     }
860 
861     register_shrinker(&ashmem_shrinker);
862 
863     pr_info("initialized\n");
864 
865     return 0;
866 }

第839行和第847行使用函数kmem_cache_create创建了两个slab缓冲分配器,ashmem_area_cachep和ashmem_range_cachep,前者用来分配ashmem_area结构体,后者用来分配ashmem_range结构体,第855行注册设备类型为misc,ashmem_misc设备结构体定义为:

829 static struct miscdevice ashmem_misc = {
830     .minor = MISC_DYNAMIC_MINOR,
831     .name = "ashmem",
832     .fops = &ashmem_fops,
833 };

根据该结构体定义可知Ashmem对应的设备文件为:/dev/ashmem,该结构体定义了fops字段,具体内容为ashmem_fops如下:

816 static const struct file_operations ashmem_fops = {
817     .owner = THIS_MODULE,
818     .open = ashmem_open,
819     .release = ashmem_release,
820     .read = ashmem_read,
821     .llseek = ashmem_llseek,
822     .mmap = ashmem_mmap,
823     .unlocked_ioctl = ashmem_ioctl,
824 #ifdef CONFIG_COMPAT
825     .compat_ioctl = compat_ashmem_ioctl,
826 #endif
827 };

根据字段可以看出该结构体定义了对Ashmem的打开、释放、读取、映射、seek等操作。

继续看__ashmem_init函数的第861行,调用register_shrinker函数向内存管理系统注册了一个内存回收函数ashmem_shrinker,当系统内存不足的时候就会调用该函数释放内存。

Android USB(type-c)耳机调试分析(十) 简介:优快云博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!】🚀】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.​更多原创,欢迎关注:Android系统攻城狮​1.前言本篇目的:理解Android USB(type-c)耳机调试分析。 阅读详情

相关推荐

Lattice FPGA 开发流程(以 ECP5 为例)

以下是以 Lattice ECP5 FPGA 为例的开发流程,涵盖从需求分析到硬件部署的完整步骤。ECP5 系列是 Lattice 提供的高性能、低功耗 FPGA,适用于通信、工业控制和嵌入式系统等领域。

u011732210的博客 1258

Linux内存管理原理

本文以32位机器为准,串讲一些内存管理的知识点。 1. 虚拟地址、物理地址、逻辑地址、线性地址  虚拟地址又叫线性地址。linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻辑地址专指下文说的线性偏移前的地址)是一个概念。物理地址自不必提。内核的虚拟地址和物理地址,大部分只差一个线性偏移量。用户空间的虚拟地址和物理地址则采用了多级页表进行映射,但仍称之为线性地...

weixin_30319097的博客 464

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 319

Android系统中的进程管理:内存的回收

本文是Android系统进程管理的第三篇文章。进程管理的前面两篇文章,请参见这里: Android系统中的进程管理:进程的创建Android系统中的进程管理:进程的优先级 本文适合Android平台的应用程序开发者,也适合对于Android系统内部实现感兴趣的读者。 前言 内存是系统中非常宝贵的资源,即便如今的移动设备上,内存已经达到4G甚至6G的级别,但对于内存的回收也依

omnispace的博客 2997

Accelstepper 库中的参数计算公式

要完全调试电机的各个参数,例如最大速度,加速度等,就需要了解其计算公式和原理。 以下是代码注释: /// This code uses speed calculations as described in /// "Generate stepper-motor speed profiles in real time" by David Austin/// http://fab.cba.mi...

wenguitao的博客 4455

别再用LabelImg了!我手搓了一个C#“一站式”YOLO工具箱,标注训练推理全搞定

这个工具箱目前已经在两个小型产线项目中试用,反馈非常好。效率提升:原本需要 2 天完成的“数据准备 - 训练 - 验证”循环,现在缩短到了 2 小时。门槛降低:产线技术员经过 10 分钟培训,就能独立完成新产品的模型迭代。当然,它还有改进空间未来计划集成主动学习功能:自动筛选出置信度低的图片,推荐优先标注。支持多模型管理:方便在不同产品型号间快速切换。增加PLC 通信模块:直接在推理界面配置 IO 信号,实现真正的软硬联动。最后想说工具的本质是服务于人。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 441

Android 系统开发 - 进程管理之内存的回收

前言内存是系统中非常宝贵的资源,即便如今的移动设备上,内存已经达到4G甚至6G的级别,但对于内存的回收也依然重要,因为在Android系统上,同时运行的进程有可能会有几十甚至上百个之多。如何将系统内存合理的分配给每个进程,以及如何进行内存回收,便是操作系统需要处理的问题之一。本文会讲解Android系统中内存回收相关的知识。对于内存回收,主要可以分为两个层次:进程内的内存回收:通过释放进程中的资源...

Android技术之家 915

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(8).仿真场景创建与编辑

总结文件()包含了仿真过程中的总体统计信息,如车辆生成数、平均速度等。加载总结文件使用Python的提取关键信息通过以上步骤,可以使用SUMO及其相关工具和库创建和编辑交通仿真场景。无论是手动创建、使用工具转换现有数据,还是通过Python脚本自动生成,SUMO都提供了丰富的功能来满足不同需求。此外,Traci库允许在仿真过程中动态调整交通场景,从而实现更精细的控制和优化。最后,通过对输出文件的分析,可以评估仿真结果并进行进一步的改进。

kkchenjj的博客 1266

Android 匿名共享内存C接口分析

转自:https://blog.csdn.net/yangwen123/article/details/11757487 在Android 匿名共享内存驱动源码分析中详细分析了匿名共享内存在Linux内核空间的实现,虽然内核空间实现了匿名共享内存,但仍然需要在用户空间为用户使用匿名共享内存提供访问接口。Android系统在用户空间,C++应用程序框架层,Java层分别提供了访问接口 本文首...

飞翔的小鸟 556

UG NX二次开发(C#)-VS2022配置NX二次开发模板不能正常显示的问题

随着VS2022的发布,使用VS2022进行UG NX二次开发的人员也会越来越多,但是由于VS2022和以前的VS版本采用代码结构不同,而UG NX的二次开发编程模板还没有适应于VS2022的模板配置,所以不能正常的创建一个完整的工程。本文采用曲线救国的方式来实现VS2022下的UG NX二次开发。如果有读者能很好的解决模板配置,不吝赐教。

GimiGimmy 4272

C#实现OPC客户端与S7-1200 PLC通信:工控场景稳定通信的实战指南(附完整代码)

标准化优先:OPC UA是工业通信的标准,相比直接通信,更适合多设备集成的工控场景;稳定性第一:必须封装断线重连、异常处理、资源释放逻辑,满足7×24小时运行需求;效率优化:高频采集场景优先用批量读写,避免单个变量频繁请求;细节把控:节点ID、变量类型、端口配置等细节是新手最容易踩坑的地方,建议先用UA Expert验证。这套代码和方案已在多个工业项目中落地,从单台S7-1200到多台S7-1200/1500集群,都能稳定运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1033

Android 匿名共享内存C++接口分析

转自:https://blog.csdn.net/yangwen123/article/details/11768329 在上一篇Android 匿名共享内存C接口分析中介绍了Android系统的匿名共享内存C语言访问接口,本文在前文的基础上继续介绍Android系统的匿名共享内存提供的C++访问接口。在C++层通过引入Binder进程间通信机制可以实现跨进程访问匿名共享内存。我们知道Andro...

飞翔的小鸟 554

UG NX二次开发(C#)-外部模式-批量删除某些图层中的体对象和曲线对象

在 UG NX中,有时需要批量删除某文件夹下多个.prt文件中固定一些图层中的体对象和曲线对象,这时如果采用手动逐个打开模型,并选择针对的图层删除,即耗时也容易遗漏,因此采用外部模式来处理比较方便。本文介绍批量删除某些图层中的体对象和曲线对象。

GimiGimmy 3035

linux匿名共享内存,Ashmem匿名共享内存驱动

匿名共享内存匿名共享内存的实现是已Ashmem驱动程序为基础所构建起来的一套方案,基于linux的临时文件系统tmpfs.ashmem系统大概分成三层,如下: 最下方的是kernel层,也就是我们即将介绍的ashmem驱动程序,在启动时它会创建一个/dev/ashmem的设备文件。而上层的cutils库就通过文件访问操作open,ioctl来访问驱动程序。另外cutils主要提供了三个函数ashm...

weixin_42510645的博客 887

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析

在上一文章Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划中,我们简要介绍了Android系统的匿名共享内存机制,其中,简要提到了它具有辅助内存管理系统来有效地管理内存的特点,但是没有进一步去了解它是如何实现的。在本文中,我们将通过分析Android系统的匿名共享内存Ashmem驱动程序的源代码,来深入了解它是如何辅助内存管理系

老罗的Android之旅 6万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android 匿名共享内存驱动源码分析

Android系统的匿名共享内存Ashmem驱动程序利用了Linux的共享内存子系统导出的接口来实现,本文通过源码分析方式详细介绍Android系统的匿名共享内存机制。在Android系统中,匿名共享内存也是进程间通信方式的一种。相比于malloc和anonymous/named mmap等传统的内存分配机制,Ashmem的优势是通过内核驱动提供了辅助内核的内存回收算法机制(pin/unpin)。

深入剖析Android系统 5918

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android系统的Ashmem匿名共享内存子系统分析(1)- Ashmem驱动

Android系统中提供了独特的匿名共享内存子系统Ashmem (Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。能够辅助内存管理系统来有效地管理不再使用的内存块。通过 Binder进程间通信机制来实现进程间的内存共享。对于 Android 系统的匿名共享内存子系统来说,其主体是以驱动程序的形式实现在内核空间的,同时,在系统 Native 层提供了 C/C++ 调用接口和 Framework 层提供了 Java 调用接口。

Android系统工程师--小馬佩德罗 764

Anonymous Shared Memory android 匿名共享内存

原址 两个特点: 能够辅助内存管理系统来有效的管理不再使用的内存块 通过Binder进程间通信机制来实现进程间的内存共享。 Android系统的匿名共享内存子系统的主体是以驱动程序的形式实现在内核空间的。 应用程序框架层的Java调用接口是通过JNI方法来调用库层的C/C++调用接口 android应用程序框架层提供了一个MemoryFile接口来封装了匿名共享内存

Android系统攻城狮 1308
上一篇: Android 匿名共享内存基础数据结构篇(二)
下一篇: 算法Robert Sedgewick Java代码环境配置
杨鑫校
博客等级 码龄11年 24粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值