《Linux内核设计与实现》第一二章笔记

第一章 linux内核简介

每个处理器在任何时间点上的活动必然概括为下列三者:

  • 运行于用户空间,执行用户进程
  • 运行于内核空间,处于进程上下文,代表某个特定的进程执行
  • 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断

Linux内核与传统的Unix系统之间的差异:

  • linux内核可以抢占
  • linux内核并不区分线程和其他一般进程
  • linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统
  • linx忽略了一些被认为设计得很拙劣的unix特性,及难以实现的过时标准
  • linux体现了“自由”的精髓,现有的linux特性集就是linux公开开发模型自由发展的结果

单内核与多内核设计之比较:

单内核

  • 整个内核都在一个大内核地址空间上运行
  • 优点:简单、高效。所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销
  • 缺点:一个功能的崩溃会导致整个内核无法使用

微内核

  • 内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上
  • 优点:安全。内核的各种服务独立运行,一种服务挂了不会影响其他服务
  • 缺点:内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低

Linux内核设计

  • 基于单内核
  • 具备微内核的一些特征:模块化设计、抢占式内核、支持内核线程、动态装载内核模块
  • 规避微内核设计上的性能缺陷:让所有事情运行在内核态,直接调用函数,无需消息传递

第二章 从内核出发

内核源码树:

目 录描 述
arch 特定体系结构的代码
block 块设备I/O层
crypo 加密API
Documentation 内核源码文档
drivers 设备驱动程序
firmware 使用某些驱动程序而需要的设备固件
fs VFS和各种文件系统
include 内核头文件
init 内核引导和初始化
ipc 进程间通信代码
kernel 像调度程序这样的核心子系统
lib 同样内核函数
mm 内存管理子系统和VM
net 网络子系统
samples 示例,示范代码
scripts 编译内核所用的脚本
security Linux 安全模块
sound 语音子系统
usr 早期用户空间代码(所谓的initramfs)
tools 在Linux开发中有用的工具
virt 虚拟化基础结构
  • COPYIN:内核许可证
  • CREDITS:开发者列表
  • MAINTAINTERS:维护者列表(维护内核子系统和驱动程序)

内核开发特点:

  • 内核编程时既不能访问C库也不能访问标准的C头文件
  • 内核编程时必须使用GUN C
  • 内核编程时缺乏像用户空间那样的内存保护机制
  • 内核编程时难以执行浮点运算
  • 内核给每个进程只有一个很小的定长堆栈
  • 由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发
  • 要考虑可移植性的重要性
原文地址:https://www.cnblogs.com/huyufeng/p/5283813.html