start_kernel
1.start_kernel 【程序编程相关:uClinux下编译microwin程序】第一部分 总体 【推荐阅读:Microwindows及基于Nano-】 进入start-kernel的第一件事情就是,lock_kernel.本来流浪想跳过这些代码的阅读,不过发现里面mimi还是很多,便写了两句. 【扩展信息:Scientific Linux 4.0】 核心从/arch/kernel/head.s跳转出来后,进入init/main.c,的start-kernel函数.该函数初始化核心数据结构,页表等等,到时候在说吧.lock_kernel与unlock_kernel. 这两个家伙的作用是在smp上.锁住所有内核数据结构访问.对于单cpu来说他们什么也不干. lock_kernel的实现是使用spin_lock实现的.参数是global变量 kernel_flag ,2.6的核心增加了内核抢占机制,所以代码有点复杂,不过可以先不看抢占的东西,直接看自旋锁的实现.spin_lock的主要内容是spin_lock_string这个宏.#define spin_lock_string \ "\n1:\t" \ "lock ; decb %0\n\t" \ "js 2f\n" \ lock_section_start("") \ "2:\t" \ "rep;nop\n\t" \ "cmpb ,%0\n\t" \ "jle 2b\n\t" \ "jmp 1b\n" \ lock_section_end 结合unlock_kernel的spin_unlock_string来看.可以知道解锁的时候并不是象信号量一样把kernel_flag++,而是让kernel_flag=1;#define spin_unlock_string \ "movb ,%0" \ :"=m" (lock->lock) : : "memory"spin_lock_string特点 1.使用x86指令前缀lock从硬件上锁定总线.... 下一页