LKD-第1&2章总结

总结

前两章主要是简略的描述了整个2.6版本的Linux内核的基本情况,为后续章节奠定了基础。

第一章

采用的版本是Linux 2.6.34版本,翻译者是西安邮电大学的陈莉君老师,陈老师还设计了相应的课程网站Linux内核之旅,非常值得借鉴。另外加一句,在Linux/C++学习过程中,华中科技大学的侯捷老师也是一位好老师和好译者。

Linux设计的原则:接口定义合理,代码风格一致,一次做一件事情并且做到完美。

本书对Linux内核核心开发者和外部设备驱动开发者都有帮助。应用程序员应该理解内部的操作系统实现,内核和库函数的设计者也要学会去使用自己的接口。所以在书中,既讨论了内核的设计原理,也讲了内核应该如何去使用。

一些Unix早期的版本:V6是第一次在外界被广泛使用的版本,AT&T提出的System V 版本,伯克利的BSD系列。

Unix的特点:简洁,万物文件,C语言编写,策略和机制分离,进程创建非常迅速,一个进程完成一件事情,进程之间有着丰富的IPC机制(丰富的进程间通信机制)。

Linux不是Unix,尽管Linux实现了Unix的绝大部分的API,但是有一些方面(一些内部调用函数的实现上),Linux甚至和Unix截然相反。

一个操作系统内核主要由以下几个方面组成:负责响应中断的中断处理程序;调度多个进程的调度模块;负责管理进程地址空间的内存管理程序;网络模块;进程间通信的模块等等。

Linux在中断处理这方面:很多操作系统(包括Linux)处理中断都是在一个独立的上下文环境中的!

实际上,我们可以将每个处理器在任何时间的活动归纳为以下三个方面:

图片说明

这里出现了一个对我比较陌生的概念:中断上下文环境,也就是说,处理中断的时候,与任何进程无关,处在一个特定的上下文内核环境中。

图片说明

单内核与微内核的概念

实际上在现代实用主义操作系统中,没有真正意义上的微内核……

图片说明

图片说明

图片说明

图片说明

Linux不区分线程和进程,在内核看来,线程和进程并没有什么本质上的区别……

图片说明

Linux同样丢弃了一些Unix中愚蠢的设计……

第二章

我已经下载了2.6版本的Linux内核程序,作为参考,但是先暂时不编译……

Linux2.6内核代码的目录工程结构

图片说明

图片说明

内核开发的时候需要注意的问题

图片说明

Linux内核中的内联函数,优先使用内联函数而不是宏(针对小模块经常使用的短时间函数可以使用inline)。

图片说明

优化:分支声明,likely和unlikely的使用

图片说明

用户栈和内核栈的概念,8kb和16kb的内核栈

图片说明

使用信号量和自旋锁去解决Linux中同步与互斥的问题。

图片说明