《Linux Kernel》第一章笔记
目录
-
摘要
-
回顾主要内容
-
重点学习的内容
-
- Kernel architecture
- Hard link / soft link
- Unix 文件类型
- Process/Kernel Model
- Kernel routines
- Process 的结构
- Inter process communication
- Virtual memory
- Virtual address space
- Device drivers
-
小结
摘要
这篇文章主要总结我读的这本书的第一章的内容。距离上次写计划已经过了2周,因为写论文和懒,才读完Introduction这一章。在这里我主要(1)回顾第一章大概讲了什么内容,(2)记录哪些内容是我之前不太了解的,以便于后面重点学习。
回顾主要内容
这一章的主要内容包含以下三点:
- OS 的基本概念:主要从design的角度描述Unix/Linux的一些概念,比如进程,微内核,等等
- Unix 的文件系统:主要讲文件系统的概念
- Linux 内核概述:包含了OS的几大部分:
- CPU 的 User/Kernel mode
- 进程的实现,进程间的同步(synchronization)
- Inter process communication (IPC)
- 内存管理
- 硬件驱动
重点学习的内容
这里我把我不熟悉的每一个知识点作为一个小标题记录下来,按照这一章的顺序。
Kernel architecture
理论上kernel的架构分为 monolithic 和 micro kernel 两种。第一种架构是将所有的程序都载入到当前的 kernel 进程中运行。第二种是只将一些核心功能(例如 进程scheduler, 同步机制)载入进程,把其他功能(例如 内存allocator, 硬件驱动)在更高的一个layer与内核进行交互。
Linux采取了 module 这个设计。在 micro kernel 架构中,两层 kernel 之间通过message进行交互,会导致程序运行慢。Module 则不是单独的程序,而是编译好的 object file,可以在运行中与 kernel 进行 link。Module 通常包含硬件驱动等等“非核心的功能”。
Hard link / soft link
Unix中,一个文件可以有多个文件名。Hard link 指的是包含了 directory + filename 来指定一个文件的标识。Hard link 有两个缺点:一个是不能用来指定 directory,另一个是只能在同一个文件系统里有效。为了解决这个问题,Soft link (也叫 Symbolic link) 是 Unix中另一种标识。Soft link 本身也是一个文件,这个文件的内容是 另一个文件的 pathname 。Soft link非常灵活(我自己理解有点类似于“指针”的概念),所以这也带来了维护的问题。当一个文件所有的 hard link都被删除了,这个文件就会被删除,但它的 soft link 就指向了一个不存在的文件。
Unix 文件类型
我一直听说一个概念,“Unix里面一切都是文件”。所以文件的类型包括了:
- Regular file
- Directory
- Symbolic link
- Device file (block-oriented / character-oriented)
- Pipe and named pipe
- Socket
这里面很多内容我还不了解,特别是pipe, socket, device file这些内容,后面要专门学习。
Process/Kernel Model
Process/Kernel 模型指的是 Linux 执行程序的一种模式,即应用程序在Process中执行,而 Kernel 作为 process 的管理者。在process执行时,默认是user mode,在app调用系统OS资源时,在kernel mode中执行。在不同的 mode 下,CPU 的权限不同(CPU 在硬件上支持不同的模式,至少有这两种)。CPU 在 user 模式下不能出发某些 kernel 程序,不能访问一些 kernel 的数据结构,kernel 模式相反。 App 程序在执行 system call 的时候,CPU 的执行会从 user 到 kernel mode,且在完成服务后返回 user mode。
Kernel routines
Kernel routine 指的是 kernel 一些特定的功能,会在以下情况下出发:
- 一个 process 执行 system call
- CPU 在执行程序时产生了一个 exception,kernel routine 负责处理这个异常情况
- 一个设备出发了 interrupt,比如一个 I/O 操作完成,这时会被 interrupt handler 处理
- 一个程序在 kernel mode 下执行了一段 kernel routine
Process 的结构
一个进程在 Linux 中包含了以下成分:
- Program counter (PC) 和 stack pointer (SP)register
- General purpose register, floating point register
- processor control register
- Memory management register
Register在这里指的 CPU 中的寄存器。他们具体的结构我还不太清楚,但先不深入了解。
Inter process communication
这里的进程间通信应该是指 User mode 下的互相通信。Kernel 对用户 process 的通信是通过 signal (比如用户按下 ctrl-c,系统会对当前进程发送 SIGINT 信号)。用户之间的通信有很多种方法,比如 semaphores,shared memory,等等。这些方法由 kernel 管理,这些叫做 IPC resources。
Virtual memory
这个概念是OS基本概念,主要目的是为 user process 提供一个内存的抽象 。Abstraction 的好处很多,这里不说了。现在的 CPU 提供硬件上对 virtual memory 和物理 memory 转化的支持,主要是提供一个 page table 数据结构。一个 page 大概是 4 or 8 KB。整个系统中的 RAM 分为两部分:一个是 virtual memory system,另一个是 kernel image (大约几兆大小)。
Virtual address space
虚拟内存系统负责给每一个 process 分配一段 virtual address space,其中包含了所有的 process 需要的空间,包括:
- 程序代码
- 初始数据
- 初始堆(stack),栈(heap)
- link 的 library 的代码
Device drivers
Linux 的设备驱动是基于一个 Virtual File System 的架构。我理解和 memory 的管理类似,提供一层 abstraction,使 kernel 和特定的 hardware 低耦合,让实现更容易。下面是原文中的一个示意图。

小结
通过阅读第一章,基本上复习了一下操作系统的基础知识。这里记录了之前不是很清楚的一些概念,有 OS 通用的,也有 Linux 专有的。其中我认为最值得记住的地方有几个:(1)kernel不是一个进程,是在启动时载入RAM的一段代码,服务于进程;(2)进程管理和内存系统这些功能都是需要硬件支持的;(3)user mode 下的进程的数据结构,执行方式与 kernel mode 下有很多不同,以前作为 app 级编程并没有特别去了解一些功能是怎么实现的;(4)Abstraction 是系统设计的重要思想,需要经常回味,以后自己设计一些程序也可能会用到。
