kernel怎么知道是user还是system空间(ARM架构实现)
来源:互联网 发布:js 函数触发submit 编辑:程序博客网 时间:2024/06/05 06:39
有的时候,如linux kernel的负载统计任务等
tick 发生的时候,需要知道系统此时是user/system空间。
如kernel一下场景有应用:
void account_process_tick(struct task_struct *p, int user_tick){if (user_tick)account_user_time(p, cputime_one_jiffy, one_jiffy_scaled);else if ((p != rq->idle) || (irq_count() != HARDIRQ_OFFSET))account_system_time(p, HARDIRQ_OFFSET, cputime_one_jiffy, one_jiffy_scaled);elseaccount_idle_time(cputime_one_jiffy);
此宏可判断处于什么模式:
user_mode(get_irq_regs())
//得到当前进程的寄存器信息static inline struct pt_regs *get_irq_regs(void){return current_thread_info()->regs;}
// 可以大概了解下,ARM寄存器的基本信息
#define ARM_cpsr uregs[16]
#define ARM_pc uregs[15]
#define ARM_lr uregs[14]
#define ARM_sp uregs[13]
#define ARM_ip uregs[12]
#define ARM_fp uregs[11]
#define ARM_r10 uregs[10]
#define ARM_r9 uregs[9]
#define ARM_r8 uregs[8]
#define ARM_r7 uregs[7]
#define ARM_r6 uregs[6]
#define ARM_r5 uregs[5]
#define ARM_r4 uregs[4]
#define ARM_r3 uregs[3]
#define ARM_r2 uregs[2]
#define ARM_r1 uregs[1]
#define ARM_r0 uregs[0]
#define ARM_ORIG_r0 uregs[17]
具体可参照CPSR寄存器:
#define USR_MODE 0x00000010
#define FIQ_MODE 0x00000011
#define IRQ_MODE 0x00000012
#define SVC_MODE 0x00000013
#define ABT_MODE 0x00000017
#define UND_MODE 0x0000001b
最终可判断处于什么模式
#define user_mode(regs)\(((regs)->ARM_cpsr & 0xf) == 0)
- kernel怎么知道是user还是system空间(ARM架构实现)
- 怎么知道mysql是MyISAM还是InnoDB
- 根据IP地址怎么知道是电信还是网通
- 怎么知道windows dll是32位还是64位?
- ARM内核和架构的是怎么定义的
- 如何知道一个apk是放在system/app下还是放在/data/app下?
- 你知道PING功能是怎么实现的吗
- 怎么知道自己的电脑是32位的还是64位的
- 怎么知道当前Ubuntu系统是32位还是64位?
- 怎么知道鼠标是向前滚动还是向后滚的了js代码
- 内核空间(kernel-space) VS 用户空间(user-space)
- ARM是怎么运行的?
- Linux Kernel之flush_cache_all在ARM平台下是如何实现的
- ARM是32位,地址空间是
- 不知道怎么了,但还是要知道
- 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
- 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
- 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
- 关于GDAL180中文路径不能打开的问题分析与解决
- 我爱天文 - 初级天文爱好者理想的天文望远镜是什么?
- 从 Java 代码到 Java 堆
- 一次对某韩国网站渗透记
- poj 3253(哈夫曼树priority_queue实现)
- kernel怎么知道是user还是system空间(ARM架构实现)
- Windows 64位环境的Java 服务配置 from iteye
- what is IDE insight
- cd_old
- HDU 2065 "红色病毒"问题
- Linux环境变量的设置和查看方法
- UVA10134- Solve It
- poj 2442(堆的stl实现)
- poj 1442(两个优先队列)