自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Linux CMA简介及使用案例

1. 背景在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。CMA(Contiguous Memory Allocator)连续内存分配,是一种用于申请大量的,并且物理上连续的内存块的方法,是 Linux Kernel 内存管理系统的扩展,目的在于解决驱动设备需要预留大量连续内存导致运行内存紧张的问题。通过这套机制,我们可以做到不预留内存,这些内存平时是可用的,只有当需要的时候才被分配给C

2020-08-21 17:06:55 2661

原创 CFS对vruntime的迭代更新

cfs调度器对vruntime的迭代更新是调度器实现公平调度策略的核心机制,下面我们来分析vruntime的迭代更新机制。1. 调度实体描述vruntime是调度实体的成员,所以我们先明确调度实体的相关描述:(1)load用以追踪进程组和进程的权重信息,进而影响vruntime的增加速度。(2)虚拟运行时间,用于cfs决策选择哪一个进程作为即将要运行的进程。(3)当前调度实体隶属于的队列。(4)进程组的就绪队列,非空表示进程组,NULL表示进程。2. 调度实体vrntime的设置2.1 v

2020-08-17 19:54:30 721

原创 InteractiveGovernor调频策略

本文基于eval_target_freq分析InteractiveGovernor如何根据cpu负载变化来实现调频策略。1. InteractiveGovernor的运转和原理框图1.1 InteractiveGovernor的运作框图(1)linux进程管理和调度框架会在合适的时机调用irq_work_queue去enqueue governor的irq_work,这个irq_work会计算是否需要变频,如果需要变频,那么会唤醒实时进程speedchange_task进行变频。(2)speedc

2020-08-14 20:00:32 707

原创 CFS对linux周期性调度的实现

当系统软件调用schedule放弃cpu的时候会发生进程切换,如果某一cpu消耗性进程长时间不调用schedule,我们如何推进调度器的运行来保障系统性能呢?这就是本文要分析的cfs对linux周期性调度的支持。CFS调度器并不会显示地为进程分配对应的时间片,相应地CFS用周期性调度实现进程的及时切换:在SysTick的中断函数中通过一层层函数调用最终到scheduler_tick函数,周期性地检查当前进程是否耗尽了自己应该分得的一个调度周期里面对应的时间片,并以此为依据决策是否要设置抢占标志,同时设计r

2020-08-14 17:20:42 971

原创 CFS进程组的cpu带宽限制

前文我们分析了实时进程组的带宽限制,本文将顺着前文的思路继续分析cfs进程组的带宽限制,由此进一步体会linux进程调度设计的优雅细节。1. 数据结构描述1.1 struct task_group这是描述进程组的数据结构,我们现在只列出带宽限制的相关成员:(1)当前进程组在各CPU上的cfs调度实体描述,数组长度是CPU的颗数。(2)当前进程组在各CPU上用于组织自己内部的就绪cfs调度实体的红黑树,数组长度也是CPU颗数。(3)当前CPU的权重,用于调度实体之间按权重比例分配CPU时间。

2020-08-13 20:01:20 1360

原创 RT进程组的cpu带宽限制

1.背景由于实时任务的优先级高于普通任务,因而为了防止cpu消耗型的实时任务一直占用cpu引发其他任务"饥饿"的情况发生,内核采用了带宽限制手段来抑制实时任务的运行时间。系统中将各个任务按层级组织成一个个任务组,组内的所有任务视为一个整体挂在一个运行队列上,而带宽限制的单位也是针对一个组来进行的。在任务调度中带宽限制就是指一定周期内一个队列上任务可运行的最大时间,内核中使用xxx_bandwidth结构来限制任务的运行时间。针对实时任务这个结构就是:(1)实时任务CPU使用率的检测周期(2)Rt_

2020-08-10 14:45:11 1527

原创 Linux kernelspace同步控制方案

Linux内核编程中必须解决的一个问题是多进程对共享资源的并发访问引发的竞态。解决竞态问题的途径是保证对共享资源的互斥访问。Linux内核可采用的互斥途径有中断屏蔽、原子操作、自旋锁、互斥体、信号量等。1.自旋锁1.1普通自旋锁自旋锁一般这样被使用:spinlock_t lock;//定义一个自旋锁spin_lock_init(&lock);//初始化自旋锁spin_lock(...

2020-07-31 18:53:56 378

原创 linux等待队列使用案例

工作队列实现阻塞IOstruct test_dev{struct cdev cdev;unsigned int current_len;unsigned char mem[SIZE];struct mutex mutex;wait_queue_head_t r_wait;wait_queue_head_t w_wait;};工作队列实现线程的挂起...

2019-12-18 09:06:57 564

原创 bfq如何优先服务新产生的优先级高的task

1.背景

2019-12-16 19:35:21 287

【移动操作系统】Android传感器子系统架构与实现:多层解耦设计下的物理传感数据高效采集与应用集成

内容概要:本文介绍了Android Sensor子系统的整体架构与工作原理,详细阐述了其从应用层到内核层的分层设计。系统通过Sensor HAL屏蔽底层硬件差异,利用独立线程采集传感器数据并向上层服务传递;SensorService在Native层监控HAL事件并将数据转发至Java层的SensorFramework;开发者可通过SensorManager调用传感器功能,注册监听并在onSensorChanged回调中处理数据。整个架构采用分层解耦设计,包含App、Framework、JNI、Native、HAL和Kernel六层,强调高效、低功耗地获取和传输物理世界数据。; 适合人群:具备Android开发基础,从事系统开发或传感器相关应用研发的工程师,尤其是有1-3年经验的技术人员; 使用场景及目标:①理解Android传感器系统的分层结构与数据流转机制;②掌握Sensor HAL与驱动交互的实现方式;③开发基于传感器的应用或定制HAL模块; 阅读建议:结合框图理解各层之间的调用关系,重点关注HAL层和App层的编码实现,理解线程管理、事件轮询与FMQ通信机制,建议配合实际项目调试加深对批处理和低功耗设计的理解。

2025-11-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除