Linux Kernel Development Chapter 1: Introduction to the Linux Kernel

Chapter 1: Introduction to the Linux Kernel

本书为 《Linux Kernel Development 3rd Edition》的学习笔记

本章从 Unix 的发展历史开始, 介绍 Linux Kernel 和 Linux 操作系统, 要理解 Linux, 我们必须首先讨论 Unix 操作系统.

Unix 历史

Unix 起源于 Multics, Multics 是由 Bell 实验室参与的失败的多用户操作系统, 这个项目结束后, Bell 实验室的计算机科学家们发现, 他们没有一个能够方便稳定的操作系统, 因此在 1969 年夏天, Bell 实验室的程序员们构建了一款操作系统, 最终被称为 Unix. 1971 年, Unix 被移植到 PDP-11 上, 在 1973 年, Unix 被使用 C 语言重写, 被使用 C 语言重写, 是 Unix 发展史上重要的一步. 第一个被广泛使用的 Unix 系统是 Unix 第 6 版, 即 Unix V6.

其他公司将 Unix 移植到其他新机器上, 同时增加了其他许多增强功能, 导致了 Unix 的几种变体. 1977 年 Bell 实验室发布了一款集合了这些变体的系统版本, 叫做 Unix System III; 1982 年, AT&T 公司发布了 System V.

Unix 设计简洁, 并且在发布时同时包括了源代码, 所以极大的促进了后续的发展. 最有影响力的是 University of California at Berkeley 的贡献, 其 Unix 变体叫做 Berkeley Software Distributions (BSD).

  • 其首个版本是于 1977 年所发布的 1BSD, 基于 Bell 实验室版本的 Unix 增加了一些补丁和额外的软件.
  • 1978 年发布了 2BSD 版本, 添加了 cshvi 组件, 这两项组件一直使用到了现在.
  • 1979 年发布了 3BSD 版本, 这是 Berkeley Unix 的第一个独立版本, 添加了 virtual memory 的功能.
  • 之后发布了一系列 4BSD 版本, 包括 4.0BSD, 4.1BSD, 4.2BSD 以及 4.3BSD. 这些版本中添加了 job control, demand paging 以及 TCP/IP.
  • 1994 年, 发布了 4.4 Berkeley Unix 版本, 重写了 VM 子系统.

因为 BSD 的宽容的许可协议, 才有了后来的 Darwin, FreeBSD, NetBSD 以及 OpenBSD 系统.

20 世纪 80 年代到 90 年代, 许多的工作站以及服务器公司开发了自己的商业版 Unix 系统. 这些系统基于 AT&T 或者 Berkeley 的发行版. 这些系统包括: Digital's Tru64, Hewlett Packard's HP-UX, IBM's AIX, Sequent's DYNIX/ptx, SGI's IRIX, 以及 Sun 公司的 Solaris & SunOS.

经过多年的发展, Unix 有以下的优点:

  • Unix 非常简单, Unix 只有几百个系统调用, 并且设计上非常直白, 基础.
  • Everything is a file.
  • Unix 内核以及相关的系统工具都使用 C 语言编写, 使得其可移植性很强.
  • Unix 快速的进程创建时间, 使用唯一的 fork() 系统调用.
  • 使用简洁但是强壮的进程间通信 (interprocess communication, IPC).

现如今, Unix 是一个现代的操作系统, 拥有先进的多任务 (multitasking), 多线程 (multithreading), 虚拟内存 (virtual memory), 需求分页 (demand paging), 共享库 (shared libraries), 需求加载 (demand loading) 以及 TCP/IP 网络等功能.

Unix 成功与其简洁性及其设计的优雅, 这得益于其最初的开发者 Dennis Ritchie, Ken Thompson 等人所作的决定.

接下来, 就有了 Linux

1991 年, Linus Torvalds 开发了第一个版本的 Linux, 基于 Intel 80386 处理器. 当时 Linus 是 University of Helsinki 的学生.

因为其开源性, 其在网上发布之后, 迅速吸引了一大批用户和开发者, 促进了其迅速发展.

Linux 的最有趣的特性是其非商业项目, 其是由网上的开发者们共同开发的. Linux 内核是免费和开源的, Linux 使用 GNU General Public License (GPL) version 2.0 许可协议.

Linux 系统最基础的包括 kernel, C library, toolchain 以及基本的系统工具.

操作系统和内核

因为不断增长的特性和一些现代操作系统不完善的设计, 很难精准的对操作系统下一个通用的定义. 在书中提到的操作系统 (operating system), 顺从包括 kernel, device drivers, boot loader, command shell 或其他的 user interface, basic file system utilities. 系统 (system) 为包括应用程序在内的整个系统.

本书主要研究的是系统内核, 内核是一个最基础的软件系统, 为系统的其他部分提供最基础的服务, 包括:

  • 硬件管理 (manages hardware)

  • 系统资源调度 (distributes system resources).

内核的传统组成部分包括:

  • 终端管理器 (interrupt handlers)
  • 用来管理进程地址空间 (manage process address spaces)的内存管理系统 (a memory management system)
  • 网络服务 (networking service)
  • 进程间通信 (IPC, interprocess communication).

现代操作系统拥有受保护的内存管理单元, 内核通常运行于一个高于普通用户应用程序的系统状态之中, 使得内核处于一个受保护的内存空间 (protected memory space), 并且内核可以完全的操作硬件 (full access to the hardware), 这个系统状态嗯哼内存空间通常被统称为内核空间 (kernel-space); 与之相对的是, 用户的应用程序运行在用户空间 (user-space) 中.

应用与内核通过系统调用 (system calls) 完成通信. 应用调用库函数, 例如 C 程序库, 然后 C 程序库去调用系统调用接口 (system call interface), 来向内核下达指令, 来完成各种行为. 当一个应用执行系统调用时, 我们称内核代表应用完成了一些操作, 内核运行在进程上下文中 (process context), 进一步的, 我们称应用在内核空间执行了系统调用 (executing a system call in kernel-space). 这是一个应用程序完成任务同内核基本的交互形式.

内核同时管理系统硬件. 几乎所有的架构, 包括 Linux 所支持的所有架构都提供了中断 (interrupt)的概念. 当硬件想要同系统进行通信时, 它发出一个中断, 立即中断处理器, 进而中断内核. 每个中断通过一个数字来区分, 内核根据不同的数字来执行不同的中断处理程序 (interrupt handller) 来响应中断. 例如, 当你在键盘上敲击时, 键盘控制器发起中断, 中断处理程序执行键盘数据并告知键盘控制器可以接收更多数据. 如果需要同步执行时, 内核可以屏蔽中断, 可以关闭所有中断, 也可以关闭部分中断. 在包括 Linux 的许多操作系统中, 中断处理程序并不运行在进程上下文中, 而是运行在中断上下文 (interrupt context) 中, 该上下文不与任何进程相关. 这个特殊的上下文仅仅用来快速的响应中断, 然后退出.

在 Linux 中, 处理器在某一时刻, 将工作在以下三个状态中的一个:

  • 用户空间, 在进程中执行用户代码.
  • 内核空间, 在进程上下文中, 代表一些进程来执行一些操作.
  • 内核空间, 在终端上下文中, 不和任何一个进程相关, 执行中断.

Linux 内核版本

image-20181104002333768

Linux 内核版本分为四部分:

  • 主版本号
  • 小版本号
  • 修改版本号
  • 稳定版本号
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容