读书笔记第一二章
Linux内核设计与实现》读书笔记——第一二章
20135221黄卫估算学习时间:共4小时
读书:2
代码:0
作业:0
博客:2
实际学习时间:共5小时
读书:3
代码:0
作业:0
博客:2
耗时估计的公式:Y=X+X/N ,Y=X-X/N
第一章 Linux内核简介
1.1 Unix的历史
- 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发。
- Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀的系统。从1969年诞生以来,由Dennis Ritchie和Ken Thompson的灵感火花点亮的这个Unix产物已经成为一种传奇,它历经了时间的考验依然声名不坠。
1.2 追寻Linus足迹:Linux简介
1.3 操作系统和内核简介
处理器在任何指定时间点上的活动范围可以概括为下列三者之一:
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行。
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。
- 运行于用户空间,执行用户进程。
1.4 Linux内核和传统Unix内核的比较
Linux内核和传统UNIX内核特点的比较
- Linux支持动态加载内核模块。
- Linux支持对称多处理(SMP)机制
- Linux内核可以抢占。
- Linux内核并不区分线程和其他的一般进程
1.5 Linux内核版本
命名规则:
1.6 Linux内核开发者社区
这个社区最重要的论坛:Linux kernel mailing list(lkml)
1.7 小结
第二章 从内核出发
1.获取内核源码
使用git获取源码:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
git pull # 更新分支到Linux的最新分支
安装内核源代码:
- 如果压缩形式是bzip2,则运行:
tar xvjf linux-x.y.z.tar.bz2
- 如果压缩形式是GNU的zip,则运行:
tar xvzf linux-x.y.z.tar.gz
PS:如果使用git获取就不需要下载压缩文件,运行git clone命令,git就会下载解压最新的源代码
PS2:内核源代码一般安装在/usr/src/linux目录下,即使在安装新内核时,/usr/src/linux目录应当保证原封不动,不要将其用于开发,不要以root身份对内核进行修改。
使用补丁
patch -p1 < ../patch-x.y.z
配置内核
内核提供了各种不同的工具来简化内核配置。最简单的一种是一个字符界面下的命令行工具:
$ make config
配置选项CONFlG_lKCONFIG_PROC把完整的压缩过的内核配置文件存放在/proc/con且g.gz 下,这样当你编译一个新内棋的时候就可以方便地克隆当前的配置。如果你目前的内核已经启用了此选项,就可以从/proc下复制出配置文件并且使用它来编译一个新内核:
zcat /proc/con且.g.gz > .config
make oldconfig
- config:用户用来存放内核配置后结果的文件。
- 可以配置的各种选项:用CONFIG_FEATURE形式表示,其前缀为CONFIG。
一旦内核配置好了(不论你是如何配置的),就可以使用一个简单的命令来编译它了:
$ make
安装新内核
make modules_install
把所有已编译的模块安装到正确的主目录/lib/modules下
2.4 内核开发的特点
最重要的差异包括以下几种:
- 内核编程时既不能访问 C库也不能访问标准的 C头文件。
- 内核编程时缺乏像用户空间那样的内存保护机制。
- 内核编程时难以执行浮点运算。
- 内核给每个进程只有一个很小的定长堆钱。
- 由于内核支持异步中断、抢占和 SMP,因此必须时刻注意同步和并发。
要考虑可移植性的重要性。