TIPS14_内核的一些小概念:idle()的三种实现,内存屏障,need_sched,thread_info,bug_on和warn_on。

1.idle()函数的三种可能实现:

1.default_idle():执行hlt指令;
2.poll_idle():如果核心参数上定义了"idle = poll",则pm_idle会指向poll_idle(),它将need_resched设置为-1,反复循环直到不为-1,比default_idle()效率高。
3.电源管理相关的idle过程:如APM和ACPI模块中定义的idle过程;

2.内存屏障

关于内存屏障__asm__volatile__("":::“memory”)
#define set_mb() _____
#define rmb() ______

追踪到底rmb(),set_mb(),mb()…都是
asm__volatile("":::“memory”)指内存屏障,
__asm__volatile__用于只是编译器此处插入汇编语句;
“:::”用于告诉编译器此处的汇编语句严禁组合优化;
“memory”强制gcc编译器假设RAM所有的内存单元均被汇编指令修改,这样CPU中的register和cache中已缓存的内存单元中的数据将作废。

3.BUG_ON和WARN_ON的理解

都是内核用来调试用的,调用BUG_ON()时会引发oops(即打印一些提示信息),导致栈的回溯和错误信息的打印。因为大部分体系结构把BUG_ON()定义成某种非法操作,这样自然会产生需要的oops;
而WARN_ON()则是调用dump_stack(),打印堆栈信息,不会oops,且与中断相关。

4.need_sched

表示cpu从系统空间返回到用户空间前要进行一次调度;一般设定值为1;
idle线程有特定的函数来决定need_sched轮询状态;
1.基于TS_POLLING,用thread_info(线程描述符).status;
2.基于TIF_POLLING_NRFLAG,用thread_info.flags

5.thread_info

linux对每个进程都会单独分配内存区域,放入两个数据结构,一个是内个态的进程堆栈,一个是紧挨着进程描述符的thread_info(线程描述符)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值