Advertisement

《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 通常包含硬件驱动等等“非核心的功能”。

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 是系统设计的重要思想,需要经常回味,以后自己设计一些程序也可能会用到。

全部评论 (0)

还没有任何评论哟~