第一章:Linux内核简介linux
1、Unix和linuxgit
Unix是一个强大、健壮和稳定的操做系统。shell
1.Unix内核特色
- 十分简洁:仅提供几百个系统调用而且有明确的目的;
- 在Unix中,大部分东西都被(或者正致力于)被当作文件对待;
- Unix内核即相关系统工具软件都是用C语言编写的,这使得系统有着强大的可移植性;
- Unix进程建立很是迅速,目标在于一次执行保质保量地完成一个任务
2.Linux与Unix异同
- Linux是基于Unix的类系统,好比它也实现了Unix的API;
- 但它不一样于Unix,没有利用Unix内核源代码;
- Linux是非商业的产品,任何人均可以参与到它的开发中
- Unix内核与Linux内核的比较
- Unix内核是一个不可分割的静态可执行库,一般须要硬件系统提供页机制(MMU)以管理内存;
- Linux支持动态加载内核模块,而且是可抢占的。
.Linux系统的基础是内核、C库以及工具集和系统的基本工具。
2、操做系统和内核简介
操做系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。编程
- 内核
- 设备驱动程序
- 启动引导程序
- 命令行shell或者其余种类的用户界面
- 基本的文件管理工具和系统工具
内核独立于普通应用程序,通常处于系统态,拥有受保护的内存空间和访问硬件设备的全部权限。
这种系统态和被保护起来的内存空间,统称为内核空间。
在系统中运行的应用程序经过系统调用来与内核通讯。服务器
内核分类
- 单内核(好比大多数Unix及Linux)
- 把内核总体上做为一个大的单独的过程来实现,同时运行在一个单独的地址空间上
- 简单,性能高
- 微内核(好比Windows NT)
- 微内核的功能被划分为多个独立的功能,每一个过程叫作一个服务器;便于处理内核间通讯,还使用了IPC机制;
应用程序完成其工做的基本行为方式是:
应用程序经过系统调用界面陷入内核。并发
处理器的活动必然其下三者之一:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,表明某个特定的进程执行
- 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断
第二章 从内核出发
1.源代码管理
- 使用Git
- Git做为版本控制系统来管理Linux内核源代码;
- 下载并更新最新版本:
- git clone git://[网址]
- 内核源代码通常安装在/usr/src/linux目录下,这个源码树并不能用于开发
- 源代码树
- 有不少目录值得被注意:
- arch:特定体系结构的源代码;
- include:内核头文件;
- kernel:像调度程序这样的核心子系统。
二、内核源码树


3.编译内核
- 目的:将本身须要的功能编译进内核
- 步骤:
- 配置内核
- 前提:能够配置的各类变量都以CONFIG_前缀表示。有二选一(yes or no)和三选一(还有一个选项是module,即选定该配置项但编译的时候以模块形式生成); 【我我的的理解就是,对相似于驱动程序这样须要模块化也就是较为独立地完成功能而不必定随时都要开启的程序代码须要此选项】
- 方式:
- make config【这个在作实验的时候遇到过,应该属于那种傻瓜似的逐一遍历(适用于系统比较简单的状况)】
- make menuconfig
- make gconfig
- 后续:
- 配置选项CONFIGIKCONFIGPROC把完整的压缩的配置文件放在/proc/config.gz下面,这样编译新的内核的时候就能够直接拷贝使用了
- 衍生多个编译做业
- 通常每一个处理器都会衍生1——2个做业,改善处理器的利用率
- make -j32 > /dev/null【以16核处理器为例】
- 安装新内核
- 以root身份运行 make modules_install便可
- 全部已编译的模块都会安装到lib/modules下
- 内核开发时既不能访问C库也不能访问标准的C头文件
应对:include/linux文件夹中包含了所需的内核头文件。
- 内核编程时必须使用GNU C
4.内核开发的特色
内联函数:
函数会在所调用的位置上展开。
定义时,须要使用static做为关键字,用inline限定它。
内联函数必须在使用以前就定义好,通常在头文件中定义。
内核中优先使用内联函数而不是宏。异步
内联汇编:
一般使用asm()指令嵌入汇编代码,用volatile表示不优化模块化
- 分支声明:
unlikely(x) - x不多出现,绝少发生,一般为假
likely(y) - y常常出现,一般为真
- 内核编程时缺少像用户空间那样的内存保护机制
内核中内存不分页。
- 内核编程时难以执行浮点运算
- 内核给每一个进程只有一个很小的定长堆栈
- 因为内核支持异步中断、抢占和SMP,必须时刻注意同步和并发
SMP:对称多处理系统。
经常使用的解决竞争的方法:自旋锁和信号量。
- 要考虑可移植性的重要性
诸如保持字节序,64位对其,不假定字长和页面长度等。
总结:这两章内容比较少,仍是容易去理解的,由于有娄老师的上学期的教授,各方面就像在复习学过的知识同样。做者也写得颇有风趣,有种比较平易近人的感受。函数