《LInux内核设计与实现》第一、二章读书笔记

时间:2022-06-12 16:54:32

第一章 Linux内核简介

1.1 Unix的历史

  • 由文件系统原型演化而来
  • 简洁
  • 抽象为文件
  • C语言编写
  • 进程创建迅速和fork()调用
  • 进程间通信原语

1.2 linux简介

  • 类Unix系统
  • 内核公开*
  • 基础:内核、C库、工具集、系统的基本工具
  • 支持windows系统——完整的图形用户桌面环境

1.3 操作系统和内核简介

操作系统负责完成最基本功能和系统管理部分。这些部分包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。

内核态

  • 内核有时被称为管理者或操作系统核心,内核=中断服务程序+调度程序+内存管理程序+网络、进程间通信等系统服务程序。
  • 一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。(内核空间)

系统调用:

  • 在系统中运行的应用程序通过系统调用来与内核通信。
  • 当一个应用程序执行一条系统调用,我们说内核正在代其执行。
  • 应用程序被称为通过系统调用在内核空间执行,内核被称为运行于上下文中。
  • 应用程序完成其工作的基本行为方式——应用程序通过系统调用陷入内核。

中断机制:

  • 异步的中断信号->中断号->中断服务程序->程序调用
  • 处理器的三种活动:

            用户空间-用户进程

            内核空间-进程上下文

            内核空间-中断上下文

 

1.4 Linux内核和传统Unix内核比较

单内核:

  • 从整体上作为一个大过程,运行在一个单独的地址空间
  • 单个静态二进制文件存储
  • 内核间通信微不足道
  • 内核直接调用函数

微内核:

  • 功能被划分为多个独立的过程
  • 通过消息传递处理微内核通信:IPC机制
  • 让大部分或全部服务器位于内核

Linux与Unix差异见 P6—7

 

1.5 linux内核版本

  • 用.分隔
  • 主版本号+从版本号+修订版本号+稳定版本号(从版本号奇数为开发版,偶数为稳定版)

 

第二章 从内核出发

2.1 获取内核源码

  • git获取代码
  • tar解压代码

(内核源码安装在/usr/src/linux目录下)

  • patch添加补丁

 

2.2内核源码树

书P11

  • COPYING是内核许可证
  • CREDITS是开发者列表
  • MAINTAINERS是维护者列表,负责维护内核子系统和驱动程序
  • Makefile是基本内核的Makefile

 

2.3编译内核

配置和定制:可以配置的各种选项,以CONFIG_FEATURE为形式表示,其前缀CONFIG。配置项为二选一或三选一(不懂选了module后如何以模块形式生成独立代码)。配置选项也可以是字符串或整数(预处理宏)。

使用make config等可以简化内核配置

配置好后使用make编译(make配合不同的命令可以对输出进行重定向或以多个作业编译内核)

 

2.4 内核开发的特点

  • 无lib库或无标准头文件
  • 使用GNU C(内联函数、内联汇编、分支声明)
  • 没有内存保护机制(不要轻易在内核中使用浮点数、容积小而固定的栈、同步和并发、可移植)