Android培训班(107)start_kernel函数4

cgroup_init_early()

这个函数主要作用是控制组进行早期的初始化。什么叫控制组(controlgroups)呢?简单地说,控制组就是定义一组进程具有相同资源的占有程度。比如可以指定一组进程使用CPU30%,磁盘IO40%,网络带宽为50%。因此通过控制组就可以把所有进程分配不同的资源。可以参考这个文档(http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html)。



local_irq_disable()

这个函数主要作用是关闭当前CPU的所有中断响应。在ARM体系里主要就是对CPSR寄存器进行操作。



early_boot_irqs_off()

这个函数主要作用是标记内核还在早期初始化代码阶段,并且中断在关闭状态,如果有任何中断打开或请求中断的事情出现,都是会提出警告,以便跟踪代码错误情况。早期代码初始化结束之后,就会调用函数early_boot_irqs_on来设置这个标志为真。



early_init_irq_lock_class()

这个函数主要作用是对中断请求描述符进行锁的早期初始化。在ARM里,这个函数没有任何代码。



lock_kernel()

这个函数主要作用是初始化大内核锁。在对称多处理器的系统里,每一个CPU都可以运行内核的代码,但有时需要只能一个CPU运行内核代码,那么怎么办呢?要解决这个问题,就需要给内核配备一把锁,只要拥有这把锁的CPU才可以运行内核的代码,并且同一个CPU可以递归地运行内核。大内核锁显然有一个优点,就是同一个CPU可以递归地运行,而自旋锁就不行了,一旦拥有,就不能跑掉了。不过大内核锁也有一个明显的坏处,就是多个CPU资源浪费,并不能并行地执行。因此,新版本的内核慢慢把可以并行的代码使用别的信号量锁来代替了,只有在某种特定的架构下才使用大内核锁,以便提高整个系统的并行性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值