《Linux内核设计与实现》第1、2章读书笔记
第一章
1.Unix内核特点
-
十分简洁:仅提供几百个系统调用并且有明确的目的;
-
在Unix中,大部分东西都被(或者正致力于)被当做文件对待;
-
Unix内核即相关系统工具软件都是用C语言编写的,这使得系统有着强大的可移植性;
-
Unix进程创建非常迅速,目标在于一次执行保质保量地完成一个任务
2.Linux与Unix异同
-
Linux是基于Unix的类系统,比如它也实现了Unix的API;
-
但它不同于Unix,没有利用Unix内核源代码;
-
Linux是非商业的产品,任何人都可以参与到它的开发中
-
Unix内核与Linux内核的比较
- Unix内核是一个不可分割的静态可执行库,通常需要硬件系统提供页机制(MMU)以管理内存;
- Linux支持动态加载内核模块,并且是可抢占的。
3.Linux系统的基础是内核、C库以及工具集和系统的基本工具。
4.操作系统&内核
-
操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分,包括内核;
-
内核是操作系统的核心,系统其它部分必须依靠内核这部分软件提供的服务;
-
内核的组成&功能完成
- 内核由调度、中断服务、通信等程序组成;
- 内核处于的系统态以及受保护的内存空间被称为内核空间;
- 应用程序通过系统调用接口与内核通信(这种交互方式是应用程序完成其工作的基本方式之一),有以下三种情况:
- 函数较为复杂,系统调用只是工作的一部分;
- 函数和系统调用是一一对应的关系;
- 函数根本不需要调用系统级的操作。
4.内核分类
-
单内核(比如大多数Unix及Linux)
- 把内核整体上作为一个大的单独的过程来实现,同时运行在一个单独的地址空间上
- 简单,性能高
-
微内核(比如Windows NT)
- 微内核的功能被划分为多个独立的功能,每个过程叫做一个服务器;便于处理内核间通信,还使用了IPC机制;
第二章
1.源代码管理
-
使用Git内核源代码一般安装在/usr/src/linux目录下,这个源码树并不能用于开发
- Git作为版本控制系统来管理Linux内核源代码;
-
源代码树
- 有很多目录值得被注意:
- arch:特定体系结构的源代码;
- include:内核头文件;
- kernel:像调度程序这样的核心子系统。
- 有很多目录值得被注意:
2.编译内核
-
目的:将自己需要的功能编译进内核
-
步骤:
- 配置内核
- 前提:可以配置的各种变量都以CONFIG_前缀表示。
- 衍生多个编译作业
- 一般每个处理器都会衍生1——2个作业,改善处理器的利用率
- make -j32 > /dev/null
- 安装新内核
3.内核开发特点
-
无lib库或者标准头文件,不能直接使用标准C函数库
-
内核编程时使用GNU C,比如内联函数、内联汇编等
-
没有内存保护机制