Posted on 2007-09-24 11:22 
ZelluX 阅读(667) 
评论(0)  编辑  收藏  所属分类: 
Linux 
			 
			
		 
		开始看lkd,不过最新可以抽出来的时间不多,下星期Java课还有project,还要写一份robocode的项目文档,然后编译课也得跟上,英语高口课还得准备资料。。。先转一篇学习计划过来
发信人: ccedcced (turing), 信区: KernelTech
标  题: 整理的内核学习计划
发信站: 水木社区 (Fri Jan  6 18:15:35 2006), 转信
内核学习现在开始 
方法就是: 
读书(lkd)+源代码阅读-->项目 
先从基础做起! 
希望大家都能积极地参与讨论,写读书笔记和源码阅读笔记! 
------------------------------
内核学习第一周计划--Are you ready? 
时间:11月2号--11月5日 
阅读内容:前言和第一章 
导读:这是比较容易阅读的开头部分,内容比较少而且常识性的内容比较多。请在阅读的过程中考虑如下的问题: 
1.linux和unix相比有哪些特点? 
2.内核编程和用户空间编程相比有哪些不同之处? 
3.自己编译一下内核,你编译成功了么?如果不成功,有什么问题?使用你新编译的内核, 
  能顺利启动么?有什么问题? 
4.linux内核源代码树中你能找到sg设备驱动是在那个文件中实现的么?sg是什么含意? 
  清楚地了解一下内核中源代码树的结构。 
Are you ready? 
------------------------------
内核学习第二周计划 
时间:11.7-11.13 
内容: 
 主要是lkd中文版第一版第二章(英文第二版版第三章)的内容,比较重要。 
 1.和进程管理相关的内核文件都有哪些?找出来大致浏览一下. 
 2.什么是进程和线程?在Linux中有什么独特的地方? 
 3.什么是进程描述符?怎样得到当前进程的进程描述符?进程的内核栈有多大? 
 4.进程的状态都有哪些?在什么情况下发生转化? 
 5.Linux中所有进程之间的关系是怎么样的? 
 6.用户线程和内核线程的区别和联系? 
 7.Linux是怎样创建进程和线程的? 
 8.Linux怎样终结进程? 
 9.对照相应的内核源代码文件,分析一下问题3、5、6、7。 
------------------------------
内核学习第三、四周计划 
内核学习第三、四周计划: 
时间:11.14-11.27 
调度是操作系统中非常重要的部分,也是最核心的东西。通过学习这一章,希望大家都能大致掌握Linux的调度策略,以及为什么要这么做,Linux相比其它的系统有什么优点。重点多分析源代码中的算法实现!!我希望我能有时间和大家一起分析代码,也希望大家积极主动地分析一些代码片断。 
学习内容: 
1.进程调度最基本的原理是什么? 
2.列举出几个I/O消耗性和处理器消耗型的进程。 
3.Linux都采用了哪些调度的算法?详细解释一下这些算法。 
4.进程什么时间进入运行态?什么时间进入休眠(阻塞)状态? 
5.了解进程抢占的算法; 
6.讨论一下Linux进程调度的实时性怎么样,还有哪些需要提高的地方? 
7.自己查找进程调度的相关文件,分析为题3-6。 
------------------------------
 内核学习第五周计划 
时间:11.28--12.5 
1、什么是系统调用? 
2、为什么需要系统调用? 
3、实现系统调用相关的代码有哪些,找出来浏览一下 
4、详细阅读getuid()这一下系统调用的实现代码 
5、如何导出sys_call_table,有几种方法,注意不同内核版本的区别 
6、尝试自己给kernel添加一个简单的系统调用 
   功能要求:调用这个系统调用,使用户的uid等于0。(这个题目取自《边干边学》) 
7、采用添加系统调用的方式实现一个新功能的利弊有哪些,替代方法是什么? 
------------------------------
内核学习第六周计划 
这一周就总结了一下中断和下半部相关的知识点,供大家参考一下!同时附件里有我以前学习时候的笔记,写的不好请多多指教。 
内核学习第六周计划: 
1、如何理解中断、中断上下文和进程上下文的区别、为何中断不能睡眠 
2、关于x86中选择子、描述符和各种门的理解 
3、查阅相关资料和内核源码理解: 
中断是如何发生以及硬件和内核是如何相应的,如何返回的 
x86上中断发生时上下文(寄存器)如何保存以及中断返回时上下文如何恢复的,系统的第一个任务是如何启动的 
4、内核中安排下半部的理由 
5、软中断及其他的下半部策略适用于什么样的任务和场合? 
6、下半部可以睡眠么?为什么? 
7、2.4和2.6内核中下半部包括哪些部分,为何2.6内核相比2.4内核会做这样的改进 
8、阅读内核中关于软中断、tasklet以及工作队列的代码、相关书籍和资料,总结如下两个问题: 
软中断、tasklet以及工作队列是如何初始化,注册以及触发的,使用了哪些关键的数据结构及内核变量? 
软中断、tasklet以及工作队列都在什么场合下使用? 
------------------------------
内核学习第七周计划 
内核学习第七周计划: 
时间:12月13日--12月19日 
内容:内核同步的理论知识。 
 
问题: 
1.为什么要进行内核的同步? 
2.内核中怎么定义原子操作? 
3.竞争产生的条件与加锁的顺序? 
4.要保护的对象? 
5.死锁产生的条件与解决办法? 
6.你有什么比较好的方法来调试多线程的程序? 
7.据一个内核中产生竞争的例子。 
------------------------------
内核学习第八周计划 
第八周: 
内容: 
上一周我们分析了内核中的同步,这一次我们要接触的是内核中怎么进行同步和互斥。 
   
问题: 
1.原子操作的粒度问题; 
2.自旋锁的设计及其应用场合,分析自旋锁; 
3.信号量及其应用,信号量怎么使用? 
4.锁的粒度以及其分类; 
5.内核可抢占性的实现及其与锁的关系; 
6.smp中需要考虑哪些同步与互斥; 
------------------------------   
内核学习第九周计划 
前面的话: 
   内核学习已经进行了两个月的时间,LKD这本书我们基本上已经进行了一半。希望大家在下面多用功。 
我们在这个计划里面列出来的只是一些比较基本的问题,而且我们没有给出问题的答案,但是只要你在下面 
用功了,我想答案就在这本书里和源代码里面。 
本周内容:TIMERS AND TIME MANAGEMENT 
1.HZ和jiffies值的定义? 
2.内核中怎样解决jiffies的回绕?为什么这样可以解决jiffies回绕? 
3.时钟中断处理程序有哪些值得注意的地方? 
4.xtime_lock锁和seqlock锁? 
5.定时器的实现、使用和竞争条件? 
6.udelay()&mdelay()? 
------------------------------  
 内核学习第十周计划: 
内存管理 
    学习内容 
        内存管理是比较庞大的一个部分,在lkd这本书中用了很少的篇幅,从这里面我们基本能看清楚 内存管理的概貌。《情景分析》一书关于内存管理的部分讲得比较多,代码分析比较透彻也比较深入。 但是相对的难度也比较大,建议先看看lkd这本书,然后再看《情景分析》一书的内存管理。 
    
   问题: 
        1.内核中内存的分页、分区; 
        2.内核中有哪些函数来获得内存?内核中分配内存要注意什么? 
        3.为什么使用slab?slab对象的详细分析。 
        4.内核栈上内存的静态分配问题;