当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 2年前的读内核日记start_kernel第一部分 总体
 

 

 ·在redhat linux as 4下实现软件raid    »显示摘要«
    摘要:在redhat as 4下实现软件raid是通过mdadm工具实现的在redhat linux as 4下实现软件raid 通常情况下人们在服务器端采用各种冗余磁盘阵列(raid)技术来保护数据,中高档的服务器一般都提供了昂贵的硬件raid控制器。对于资金实力有限的中小企业来讲,在linux下通过软件来实现硬件的raid功能,这样既节省了投资,又能达到很好的效果。何乐而不为呢? 作为一个面向服务器......
 ·ftp的两种工作模式    »显示摘要«
    摘要:ftp(file transfer protocol)的缩写,即文件传输协议。其是tcp/ip协议族中的一种具体应用,它工作在osi模型的第七层,即应用层上,其使用tcp协议传输,即ftp传输的所有文件都是通过“三次握手”实现,也就是说当客户端与服务器端之间的数据包传输,一旦出现丢包现象,会重新传输,以保证数据的可靠。 ftp协议要使用两个tcp连接传送数据,一个是命令连接,用来在ftp......


边跑边读LINUX KERNEL
2年前的读内核日记

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从硬件上锁定总线.


...   下一页
    摘要:先下载主程序: http://prdownloads.sourceforge.net/stardict/stardict-2.4.3-1.i386.rpm?download 再下载字典: http://prdownloads.sourceforge.net/stardict/stardict-cdict-gb-2.4.2-1.noarch.rpm?download http://prdow......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE