- 博客(24)
- 收藏
- 关注
原创 【linux kernel】虚拟内存分配
一、用户空间虚拟内存的分配【接口】1)mmap()函数2)malloc()函数1.mmap()->sys_mmap() //sys.c->sys_mmap_pgoff() //见SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,...) , mm/mmap.c->vm_mmap
2014-09-03 00:28:23
1238
原创 [Linux kernel]系统sleep
//以下是进入sleep的关键入口lpm_cpuidle_enter()或 lpm_suspend_enter() ->lpm_enter_low_power() ->lpm_cpu_prepare(system_state, cpu_index, from_idle); ->lpm_system_prepare(system_state, idx, from_idle); ->msm
2014-08-12 23:27:38
3517
转载 RPM(Resource Power Manager)
资源电源管理RPM(Resource Power Manager)RPM是高通专用的硬件引擎,用于管理共享的SoC(系统级芯片)相关资源,其中包括总线,时钟,电源轨等。RPM的目标是满足SoC的操作和性能要求的同时实现最大的功率节省。RPM接受多个RPM主控的资源请求。仲裁和聚合请求,并配置共享资源。RPM的主控方有应用处理器,调制解调处理器,以及一些硬件加速器。RPM驱动提供了一
2014-08-09 20:06:40
5864
原创 内存管理之SLUB
kernel 3.10使用slub,不是slab文件Slub.c (android\kernel\mm)Slab_common.c (android\kernel\mm)-------全局变量和接口----------------/*Slab cache management.*/struct kmem_cache { struct kmem_cache_cpu __percpu
2014-07-24 19:39:18
1442
转载 pfn_to_page()和page_to_pfn)
#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET)根据给出页地址求出对应的页帧号。两个结构相减,得出的是两者之间的对象个数,加上起始帧号偏移,即给出页地址的相对绝对页号。#define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSE
2014-07-23 17:13:13
6039
转载 arm上ldrex和strexeq指令用来尝试获取独占内存权限和设置在独占权限时回写
【duan注】关于LDREX 和 STREX这两对指令的具体使用方法,及其作用(独占访问存储器),请查看 DUI0204IC_rvct_assembler_guide.pdf 手册的148页。__raw_spin_lock在ARM处理器上的实现/******include/asm-arm/spinlock_types.h***/ typedef struct { vol
2014-07-22 14:32:37
1162
原创 ARM指令
指令细节可以参考arm官方具体架构版本的手册,如:《DDI0406C_b_arm_architecture_reference_manual(ARMv7-A and ARMv7-R edition).pdf》-> "A8:Instruction Details" -> "A8.8 Alphabetical list of instructions" 中找到具体的指令.-> "A5.1 AR
2014-07-17 00:00:43
466
原创 android QC Memory Map
■高通芯片android系统的memory map:Instructions to generate Memory Map Memory map is divided into three major areas: Non-HLOS memory HLOS-Static memory (includes ION Carveout memory and Frame Bu
2014-07-16 23:56:43
1059
原创 android long power key流程
长按power key1、android framework(for android 4.3)参考:http://blog.youkuaiyun.com/myarrow/article/details/8143717http://www.cnblogs.com/tarol/archive/2013/06/24/3152437.html /frameworks/base/core/res/res/v
2014-07-16 23:48:41
1392
转载 高速缓存
L i n u x系统使用了几种涉及到高速缓存的内存管理方法。1 缓冲区高速缓存缓冲区高速缓存中保存着块设备驱动程序所用到的数据缓冲区。这些缓冲区的大小固定,一般包括从块设备中读入的和将要写入到块设备中的信息块。快设备一次只能处理大小固定的数据块。硬盘就是块设备中的一种。缓冲区高速缓存使用设备标识符和块号作为索引来快速地查找数据块。块设备只通过缓冲区高速缓存进行存取。如果所需要的数据存在
2014-07-16 23:31:58
731
原创 等待队列的使用
----------等待队列的使用----------1.DEFINE_WAIT(wait); //定义当前进程的等待队列wait/*#define DEFINE_WAIT_FUNC(name, function) \wait_queue_t name = { \ .private = current, \ .func = function, \
2014-07-16 23:27:32
652
原创 class,device,DEVICE_ATTR和sysfs
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_creat
2014-07-16 23:16:20
810
原创 【Linux kernel】中断
-------------------------中断上下文注意事项------------------------1)"中断上下文(包括软中断上下文)不可以调用schedule()函数及其封装函数,如msleep(msecs), 因为不允许在中断上下文发生进程调”(在支持内核抢占的情况下不成立),但是可以调用wake_up_process(task)及其封装函数,如schedule_work
2014-07-13 23:01:53
907
原创 【Linux Kernel】抢占
struct thread_info->flags值: * thread information flags: * TIF_SIGPENDING - signal pending //有信号没有处理 * TIF_NEED_RESCHED- rescheduling necessary //当一个睡眠的进程被唤醒,当其要加入运行队列时,如果其动态优先级比当前正在运行进程curren
2014-07-13 23:00:16
777
原创 【Linux kernel】进程相关
//sched.h---------------------------------------以下代码是关于task_struct->state的:* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state(). * * We have two se
2014-07-13 22:51:39
554
原创 【Linux kernel】Timing
Droidphone: http://blog.youkuaiyun.com/droidphone/article/category/1263459timer/** * getnstimeofday - Returns the time of day in a timespec * @ts: pointer to the timespec to be set * * Returns
2014-07-13 16:57:59
643
原创 [栈]求中缀表达式的值
#include //求表达式的值,形如:(6+5*(2-8)/2) //中缀表达式//使用栈来实现,方法是先将中缀表达式转换为后缀表达式6528-*2/+, 再将后缀表达式来求值。//1.转换为后缀表达式的方法是:数字直接保存到后缀表达式中;符号按优选级决定(比较栈中的栈顶和当前表达式的字符的优先级,如果>则入栈, 如果//字符优先级如下://假如str1[i]是当
2014-07-10 08:34:43
895
原创 [深度优先]求迷宫中包含最多珠宝的路径
#include int N;int maze[11][11];int jewels_count;//迷宫maze中入口(0,0),出口(N-1, N-1),迷宫是二维n*n的数组表示,0表示通路,1表示障碍物,2表示珠宝jewel//求迷宫中包含最多珠宝的路径(该路径上的珠宝数目以及路径(每点用3表示,并把整个迷宫输出)) #define MAXSIZE
2014-07-02 13:45:45
785
转载 [Linux内存管理] linux内存布局的内核实现--用户空间的映射方式
linux内存布局的内核实现--用户空间的映射方式http://totoxian.iteye.com/blog/1219991
2014-07-01 23:53:51
851
原创 【完全背包问题】有1,2...K种类型的dollar,求组成价值为N的方法有多少种
//完全背包问题//有1,2...K种类型的dollar,求组成价值为N的方法有多少种。#include int nums[1001]; //组成最大dollar值N的总情况数,1#define MAXCASES 100000000int main(void){int tc, T;int N=0, K=0;int i=0,j=0;
2014-06-30 15:10:57
608
原创 [01背包]求将N重果汁填满杯子时,在保证营养最全的情况下所用的最小价格
//01背包问题//求将N重果汁填满杯子时,在保证营养最全的情况下所用的最小价格#include //XXLint MAX=1000000000; int w[500],p[500]; //w[i],p[i]表示i果汁的重量和价格int cost[10000]; //保存指定重量的最小cost(即最小price)int main(void
2014-06-30 15:07:49
810
转载 【深度优先_栈】:输出迷宫的所有路径,并求出最短路径长度及最短路径
//要求输出迷宫的所有路径,并求出最短路径长度及最短路径。//入口坐标设为(1,1),出口坐标设为(4,4)#include#define M 4 //行数#define N 4 //列数#define MaxSize 100 //栈最多元素个数int mg[M+2][N+2]= //一个迷宫,其四周要加上均为1的外框,0
2014-06-30 14:40:25
4406
原创 [算法]广度优先求迷宫是否有出口,可用于求连通区域的数目
#include #if 1 //定义队列#define MAX 10000typedef struct sNode{int x,y;int level;}sNode;typedef struct sQueue{int front,rear;sNode arrays[MAX];}sQueue;int isF
2014-06-30 12:26:37
665
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人