`

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资源浪费,并不能并行地执行。因此,新版本的内核慢慢把可以并行的代码使用别的信号量锁来代替了,只有在某种特定的架构下才使用大内核锁,以便提高整个系统的并行性能。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics