Linux内核设计的艺术

Linux内核设计的艺术 pdf epub mobi txt 电子书 下载 2026

出版者:机械工业出版社华章公司
作者:新设计团队
出品人:
页数:444
译者:
出版时间:2011-6-20
价格:79.00元
装帧:平装
isbn号码:9787111347446
丛书系列:华章原创精品
图书标签:
  • linux
  • 操作系统
  • kernel
  • 内核
  • 计算机
  • Linux
  • 系统
  • 计算机科学
  • Linux
  • 内核
  • 设计
  • 艺术
  • 操作系统
  • 编程
  • 计算机
  • 架构
  • 高性能
  • 系统编程
想要找书就要到 图书目录大全
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

关于Linux内核的书已经不计其数,但这本书却是独树一帜的,它的内容代表着Linux内核研究成果的世界顶尖级水平,它在世界范围内首次提出并阐述了操作系统设计的核心指导思想——主奴机制,这是所有操作系统研究者的一笔宝贵财富。本书可能也代表着同类图书的顶尖水平,是一本真正能引导我们较为容易地、极为透彻地理解Linux内核的经典之作,也可能是当前唯一能从本质上指引我们去设计和开发拥有自主知识产权的操作系统的著作。它的出版也许会成为Linux内核研究领域的一个里程碑事件。

本书的最大特点是它的写作方式和内容组织方式,与同类书完全不同。它在深刻地分析了传统讲解方法的利弊之后,破旧立新,从认知学的角度开创了一种全新的方式。以操作系统的真实运行过程为主线,结合真实的内核源代码、349幅精确的内核运行时序图和具有点睛之妙的文字说明,对操作系统从开机加电到系统完全准备就绪的整个过程进行了系统而完整地分析,深刻地揭示了其间每一个动作的设计意图和实现原理,完美地再现了操作系统设计者的设计思路。阅读本书就如同跟随着操作系统设计者一起去思考,我们会在阅读的过程中发现Linux内核设计的精妙,会发现原来处处都“暗藏玄机”,哪怕是一行很短的代码。

本书在所有细节上都力求完美。为了保证知识的准确性,操作系统运行过程中的每个动作都经过了严格的考证;为了让我们真正理解Linux内核的原理,它突破传统,以Linux的真实运行过程为主线进行讲解;为了做到真正易于理解,创新性地使用了图解的方式,精心绘制了349幅分辨率600dpi的时序图,图中表现的运行时结构和状态与操作系统实际运行时的真实状态完全吻合;为了提高阅读体验,本书采用了双色印刷,以便于我们更清楚地观察每一幅图中的细节。

《深度探索:操作系统核心奥秘》 本书旨在为读者提供一个全面而深入的操作系统核心概念理解框架。我们不局限于特定操作系统的实现细节,而是着重于揭示操作系统之所以成为操作系统,其背后通用的设计原则、核心算法以及演进逻辑。本书的每一章都力求从理论高度剖析问题,并辅以精炼的伪代码或概念性描述来阐明关键机制,帮助读者建立起对复杂系统运作方式的直观认识。 第一部分:基石——进程、线程与内存管理 进程模型与调度策略: 我们将首先探讨进程的概念,理解进程是操作系统进行资源分配和调度的基本单位。本书将详细阐述进程的生命周期、状态转换以及进程间通信(IPC)的多种机制,如管道、共享内存、消息队列等。在调度策略方面,我们将深入研究先来先服务(FCFS)、短作业优先(SJF)、优先级调度、轮转调度(Round Robin)以及多级反馈队列调度等经典算法,并分析它们在不同场景下的优劣势。同时,我们将引入现代操作系统中更复杂的调度思想,如 CFS (Completely Fair Scheduler) 的理念,理解如何平衡公平性与效率。 线程模型与同步机制: 紧接着,我们将转向线程,理解用户级线程与内核级线程的区别,以及多线程编程带来的优势和挑战。重点在于深入剖析线程同步的必要性,并详尽讲解互斥锁(Mutex)、信号量(Semaphore)、条件变量(Condition Variable)、读写锁(Read-Write Lock)等核心同步原语的工作原理及其使用场景。我们将通过具体案例,展示如何利用这些工具避免竞态条件(Race Condition)和死锁(Deadlock),确保并发程序的正确性。 内存管理: 内存管理是操作系统的核心职能之一。本书将从最基础的分段和分页机制入手,详细解释虚拟内存的引入如何极大地扩展了程序的寻址空间,并带来内存保护和多任务并发的能力。我们将深入剖析页面置换算法,如 FIFO、LRU、OPT 等,以及它们在实际系统中的应用。此外,我们还将探讨内存分配的策略,如首次适应、最佳适应、最坏适应等,以及堆(Heap)和栈(Stack)的内存管理方式。对于更高级的内存管理技术,如内存映射(Memory Mapping)和写时复制(Copy-on-Write),也将进行详尽的阐述。 第二部分:系统之魂——进程通信、文件系统与I/O 进程间通信(IPC)的深入探讨: 在第一部分对 IPC 进行了初步介绍后,本部分将对此进行更深入的挖掘。我们将重点分析不同 IPC 机制的性能特点、适用范围以及潜在的安全隐患。例如,对比共享内存的高效率与进程同步的复杂性,以及消息队列的可靠性与潜在的延迟。我们将还会探讨更现代的 IPC 方式,如套接字(Sockets)在网络通信中的应用,以及进程间信号传递的原理。 文件系统的设计与实现: 文件系统是用户与持久化存储交互的桥梁。本书将从文件系统的基本概念出发,包括文件、目录、 inode、超级块等核心组件。我们将详细介绍文件系统的层次结构,以及数据块的组织和管理方式。在此基础上,我们将深入剖析几种经典的文件系统设计思想,例如 FAT(File Allocation Table)、ext(Extended File System)系列以及日志文件系统(Journaling File System)的原理,理解它们如何实现数据的可靠存储、高效访问和快速恢复。我们将还会探讨文件系统的性能优化技术,如缓存机制、预读技术等。 输入/输出(I/O)管理: I/O 设备的高速发展与 CPU 性能的巨大差异,使得 I/O 管理成为操作系统设计的关键挑战。本书将详尽阐述 I/O 体系结构,包括用户空间、内核空间、设备驱动程序、中断处理等各个环节。我们将深入分析块设备 I/O 和字符设备 I/O 的区别,以及缓冲(Buffering)和缓存(Caching)在 I/O 性能提升中的作用。本书还将介绍 DMA(Direct Memory Access)技术如何绕过 CPU 实现高效数据传输,以及异步 I/O(Asynchronous I/O)的应用,以提高系统的并发处理能力。 第三部分:协奏曲——系统调用、中断与异常处理 系统调用接口: 系统调用是用户程序访问操作系统服务的唯一途径。本书将详细分析系统调用的工作机制,包括用户态到内核态的切换、参数传递、系统调用号的解析以及内核函数的执行。我们将通过分析一些常见的系统调用,如 `fork()`, `execve()`, `read()`, `write()`, `open()`, `close()` 等,来揭示其背后的实现逻辑,帮助读者理解应用程序是如何与操作系统进行交互的。 中断与异常处理: 中断和异常是操作系统响应外部事件和内部错误的机制。本书将深入剖析中断的产生、中断向量表的作用、中断服务程序的执行流程以及中断的优先级机制。我们将详细讲解不同类型的异常,如页面错误、除零错误、非法指令等,以及操作系统如何捕获、处理并恢复。我们将还会探讨中断和异常处理对系统性能的影响,以及如何进行优化。 中断与异常的交织: 本部分将着重强调中断和异常在操作系统中的协同作用。例如,当设备控制器产生中断请求时,操作系统如何通过中断处理程序来响应;当 CPU 发生页错误时,操作系统如何通过异常处理机制来调入所需的页面。我们将深入分析这些机制的配合,是如何共同构成了操作系统稳定、高效运行的基础。 第四部分:演进之路——并发、同步与分布式思想 并发与并行: 在对进程和线程有了深入理解后,本部分将进一步探讨并发(Concurrency)与并行(Parallelism)的区别和联系。我们将分析多核处理器架构对并发模型的影响,以及如何通过适当的设计来充分利用多核资源。 现代同步技术: 除了基础的锁机制,本书还将介绍一些更高级的同步技术,例如无锁数据结构(Lock-free Data Structures)的设计思想,以及原子操作(Atomic Operations)在并发编程中的应用。我们将探讨如何在避免锁竞争的情况下实现高效的并发访问。 分布式系统的初步探索: 随着计算能力的提升和网络的发展,分布式系统已成为现代计算的重要组成部分。本部分将对分布式系统的基本概念进行初步介绍,包括分布式事务、一致性协议(如 Paxos, Raft 的基本理念)以及远程过程调用(RPC)等,为读者建立对更广阔计算范畴的认识。 本书致力于提供一种“知其所以然”的学习体验,通过深入剖析操作系统核心组件的设计哲学和实现原理,帮助读者建立坚实的理论基础,从而能够理解不同操作系统在实现上的差异,并能够触类旁通,理解更复杂的系统设计。

作者简介

暂无

目录信息

本书导读
前言
第1章 从开机加电到执行main函数之前的过程1
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序1
1.1.1 BIOS的启动原理2
1.1.2 BIOS在内存中加载中断向量表和中断服务程序3
1.2 加载操作系统内核程序并为保护模式做准备4
1.2.1 加载第一部分代码—引导程序(bootsect)5
1.2.2 加载第二部分代码—setup7
1.2.3 加载第三部分代码—system模块12
1.3 开始向32位模式转变,为main函数的调用做准备16
1.3.1 关中断并将system移动到内存地址起始位置0x0000016
1.3.2 设置中断描述符表和全局描述符表18
1.3.3 打开A20,实现32位寻址20
1.3.4 为在保护模式下执行head.s做准备21
1.3.5 head.s开始执行24
1.4 本章小结41
第2章 从main到怠速42
2.1 开中断之前的准备工作43
2.1.1 复制根设备号和硬盘参数表 44
2.1.2 物理内存规划格局45
2.1.3 虚拟盘设置与初始化46
2.1.4 内存管理结构mem_map初始化47
2.1.5 异常处理类中断服务程序挂接48
2.1.6 初始化块设备请求项结构50
2.1.7 与建立人机交互界面相关的外设的中断服务程序挂接52
2.1.8 开机启动时间设置55
2.1.9 系统开始激活进程056
2.1.10 进程相关事务初始化设置57
2.1.11 时钟中断设置59
2.1.12 系统调用服务程序挂接59
2.1.13 初始化缓冲区管理结构61
2.1.14 初始化硬盘63
2.1.15 初始化软盘65
2.1.16 开中断66
2.2 进程创建的最基本动作67
2.2.1 操作系统为进程0创建进程1做准备67
2.2.2 在进程槽中为进程1 申请一个空闲位置并获取进程号71
2.2.3 复制进程信息之前,先将一些数据压栈73
2.2.4 初步设置进程1管理结构74
2.2.5 进程0创建进程1的过程中发生时钟中断76
2.2.6 从时钟中断返回78
2.2.7 调整进程1管理结构79
2.2.8 设置进程1的线性地址空间及物理页面81
2.2.9 继续调整进程1管理结构84
2.2.10 操作系统如何区分进程0和进程187
2.2.11 进程0准备切换到进程189
2.2.12 系统切换到进程1执行90
2.3 加载根文件系统92
2.3.1 进程1如何开始执行96
2.3.2 进程1开始执行98
2.3.3 进程1开始以数据块的形式操作硬盘99
2.3.4 将找到的缓冲块与请求项挂接101
2.3.5 将请求项与硬盘处理函数挂接104
2.3.6 进行硬盘读盘前的准备工作105
2.3.7 给硬盘下达读盘指令106
2.3.8 进程1由于等待读盘操作挂起107
2.3.9 系统切换到进程0执行109
2.3.10 进程0的执行过程110
2.3.11 进程0执行过程中发生硬盘中断111
2.3.12 硬盘中断服务程序响应后,进程0继续执行113
2.3.13 再次响应硬盘中断并唤醒进程1114
2.3.14 读盘操作完成后,进程1继续执行116
2.3.15 进程1继续设置硬盘管理结构117
2.3.16 进程1获取软盘超级块,为加载根文件系统做准备118
2.3.17 进程1备份超级块数据119
2.3.18 进程1将根文件系统从软盘拷贝到虚拟盘120
2.3.19 进程1开始加载根文件系统122
2.3.20 进程1准备加载根文件系统超级块123
2.3.21 进程1加载根文件系统超级块124
2.3.22 进程1继续加载根文件系统126
2.3.23 进程1准备读取根目录i节点127
2.3.24 进程1加载根目录i节点128
2.3.25 进程1结束加载根文件系统的过程129
2.4 打开终端设备文件及复制文件句柄131
2.4.1 进程1与内核文件表挂接,为打开文件做准备133
2.4.2 确定打开操作的起点135
2.4.3 获得枝梢i节点—dev目录文件的i节点136
2.4.4 确定dev目录文件i节点为枝梢i节点137
2.4.5 继续返回枝梢i节点138
2.4.6 查找tty0文件的i节点138
2.4.7 将tty0设备文件的i节点返回给sys_open系统调用 139
2.4.8 分析tty0文件i节点140
2.4.9 设置文件管理结构并返回给用户进程141
2.4.10 进程1复制tty0文件句柄142
2.4.11 进程1继续复制tty0文件句柄144
2.5 创建进程2145
2.5.1 进程1准备创建进程2145
2.5.2 复制进程2管理结构并进行调整146
2.5.3 设置进程2的页目录项并复制进程2的页表146
2.5.4 调整进程2管理结构中与文件有关的内容146
2.5.5 进程1执行过程中发生时钟中断148
2.5.6 进程1从时钟中断返回,准备切换到进程2150
2.6 进程1等待进程2退出150
2.6.1 进程1查找它自己的子进程151
2.6.2 对进程2的状态进行处理151
2.6.3 切换到进程2执行153
2.7 shell程序的加载154
2.7.1 进程2开始执行156
2.7.2 为打开/etc/rc文件做准备156
2.7.3 进程2打开“/etc/rc”配置文件157
2.7.4 通过压栈为加载shell文件做准备158
2.7.5 为参数和环境变量设置做准备159
2.7.6 得到shell文件的i节点160
2.7.7 为加载参数和环境变量做准备161
2.7.8 根据i节点,对shell文件进行检测162
2.7.9 检测shell文件头163
2.7.10 备份文件头并进行分析163
2.7.11 对shell文件进行进一步分析165
2.7.12 拷贝参数和环境变量166
2.7.13 调整进程2的管理结构167
2.7.14 继续调整进程2管理结构168
2.7.15 释放进程2继承的页面169
2.7.16 检测协处理器170
2.7.17 调整shell程序所在的线性空间地址171
2.7.18 为shell程序准备参数和环境变量172
2.7.19 继续调整进程2管理结构173
2.7.20 调整EIP,使其指向shell程序入口地址173
2.7.21 shell程序执行引发缺页中断175
2.7.22 缺页中断中shell程序加载前的检测175
2.7.23 为即将载入的内容申请页面177
2.7.24 将shell程序载入新获得的页面177
2.7.25 根据shell程序的情况,调整页面的内容178
2.7.26 将线性地址空间与程序所在的物理页面对应179
2.8 系统实现怠速180
2.8.1 shell进程准备创建update进程180
2.8.2 进程2开始执行/etc/rc文件181
2.8.3 准备加载update进程181
2.8.4 update进程的作用182
2.8.5 shell程序检测“/etc/rc”文件183
2.8.6 shell进程退出184
2.8.7 shell进程退出善后处理185
2.8.8 进程1清理shell进程管理结构187
2.8.9 系统开始重建shell190
2.8.10 shell进程为何不会再次退出192
2.9 小结194
第3章 安装文件系统195
3.1 获取硬盘设备号196
3.1.1 用户发出安装硬盘文件系统指令196
3.1.2 从分析路径开始,准备查找hd1设备的挂接点197
3.1.3 以根目录i节点为依托,得到dev目录文件的i节点197
3.1.4 从dev目录文件中找到代表hd1设备文件的目录项198
3.1.5 得到hd1设备文件的i节点号199
3.1.6 释放dev目录文件的相关内容200
3.1.7 得到hd1设备文件的i节点200
3.1.8 获得hd1设备的设备号200
3.1.9 释放hd1设备文件的i节点201
3.2 获取虚拟盘上的挂接点202
3.3 得到hd1设备文件的超级块202
3.3.1 准备读取hd1设备文件超级块203
3.3.2 为hd1设备文件的超级块找到存储位置203
3.3.3 初始化空闲超级块并加锁203
3.3.4 从硬盘获得hd1设备文件的超级块204
3.3.5 加载逻辑块位图和i节点位图205
3.4 将hd1设备文件与mnt目录文件的i节点挂接206
3.5 小结207
第4章 文件操作208
4.1 打开文件211
4.1.1 用户程序调用open库函数产生软中断212
4.1.2 建立用户进程与文件管理表的关系213
4.1.3 从硬盘上获取helloc.txt文件的i节点214
4.1.4 将helloc.txt文件与文件管理表相挂接226
4.2 读文件227
4.2.1 为按照用户要求读入文件做准备228
4.2.2 确定要读入的数据块的位置230
4.2.3 将指定的数据块从硬盘读入到高速缓冲块233
4.2.4 将数据拷贝到用户指定的内存234
4.3 新建文件237
4.3.1 查找路径“/mnt/user/hello.txt”238
4.3.2 为hello.txt文件新建一个i节点240
4.3.3 为hello.txt文件新建目录项242
4.3.4 完成hello.txt新建操作并返回给用户进程245
4.4 写文件246
4.4.1 文件写入前的准备工作248
4.4.2 确定hello.txt文件的写入位置249
4.4.3 为数据的写入申请缓冲块252
4.4.4 将指定的写入数据从用户数据区拷贝到缓冲块253
4.4.5 数据同步到硬盘的方法1255
4.4.6 将文件写入硬盘的情况2257
4.5 修改文件260
4.5.1 对文件的当前操作指针进行重定位261
4.5.2 对文件进行修改261
4.6 关闭文件263
4.6.1 当前进程与文件管理表“脱钩”264
4.6.2 将文件管理表中hello.txt对应的引用次数减1265
4.6.3 hello.txt文件与文件管理表“脱钩”266
4.7 删除文件268
4.7.1 系统准备删除hello.txt文件268
4.7.2 删除hello.txt文件在硬盘上对应的数据和i节点270
4.7.3 对hello.txt文件所在的user目录做处理275
4.8 本章小结275
第5章 用户进程与内存管理277
5.1 用户进程的创建277
5.1.1 为创建进程str1准备条件277
5.1.2 为str1进程管理结构找到存储空间279
5.1.3 复制str1进程管理结构281
5.1.4 确定str1进程在线性空间中的位置282
5.1.5 复制str1进程页表并设置其对应的页目录项283
5.1.6 调整str1进程中与文件相关的结构285
5.1.7 建立str1进程与全局描述符表GDT的关联286
5.1.8 将str1进程设为就绪态287
5.2 为用户进程str1的加载做准备288
5.2.1 为str1进程加载自身对应的程序做准备288
5.2.2 读取str1可执行文件的i节点并统计参数和环境变量289
5.2.3 读取str1可执行文件的文件头290
5.2.4 对str1可执行程序文件头进行分析291
5.2.5 拷贝str1可执行程序的参数和环境变量292
5.2.6 调整str1进程管理结构中可执行程序对应的i节点292
5.2.7 继续调整str1进程管理结构—文件和信号相关的字段293
5.2.8 释放str1进程的页表294
5.2.9 重新设置str1的程序代码段和数据段295
5.2.10 创建环境变量和参数指针表296
5.2.11 继续根据str1可执行程序情况调整str1进程管理结构297
5.2.12 设置str1可执行程序的栈指针和eip值297
5.3 对缺页中断的处理298
5.3.1 产生缺页中断并由操作系统响应298
5.3.2 为str1程序申请一个内存页面299
5.3.3 将str1程序加载到新分配的页面中300
5.3.4 检测是否需要对页面剩余空间清0300
5.3.5 将str1程序占用的物理内存地址与str1进程的线性地址空间对应301
5.3.6 不断通过缺页中断加载str1程序的全部内容301
5.3.7 str1程序需要压栈302
5.3.8 str1程序第一次调用foo程序压栈302
5.3.9 str1程序第二次压栈,产生缺页中断302
5.3.10 处理str1程序第二次压栈产生的缺页中断302
5.3.11 str1程序继续执行,反复压栈并产生缺页中断303
5.3.12 str1程序运行结束后清栈303
5.4 str1用户进程的退出305
5.4.1 str1进程准备退出305
5.4.2 释放str1程序所占页面305
5.4.3 解除str1程序与文件有关的内容并给父进程发信号306
5.4.4 str1程序退出后执行进程调度307
5.5 多个用户进程“同时”运行308
5.5.1 依次创建str1、str2和str3进程308
5.5.2 str1进程压栈的执行效果309
5.5.3 str1运行过程中产生时钟中断并切换到str2执行309
5.5.4 str2执行过程遇到时钟中断切换到str3执行310
5.5.5 三个程序执行一段时间后在主内存的分布格局311
5.6 进程的调度与切换311
5.6.1 str1刚被shell创建并处于就绪态311
5.6.2 shell进程将自己挂起,然后准备切换到str1执行311
5.6.3 准备切换到str1进程执行312
5.6.4 str1执行时发生时钟中断314
5.6.5 时钟中断递减str1运行的时间片315
5.6.6 str1执行一段时间后挂起,shell进程新建str2进程315
5.6.7 str2运行期间发生时钟中断316
5.6.8 系统切换到str1程序执行317
5.7 内核的分页318
5.7.1 为设置内核的页目录表和页表做准备—所占空间清0318
5.7.2 设置内核对应的页目录项和页表项的内容319
5.7.3 设置内核对应的全局描述符表GDT320
5.8 页写保护321
5.8.1 进程A和进程B共享页面321
5.8.2 进程A准备进行压栈操作322
5.8.3 进程A的压栈动作引发页写保护322
5.8.4 将进程A的页表指向新申请的页面323
5.8.5 拷贝原页面内容到进程A新申请的页面324
5.8.6 进程B准备操作共享页面325
5.8.7 假设进程B先执行压栈操作的情况325
5.9 小结326
第6章 多个进程“同时”操作一个文件327
6.1 三个进程操作同一个文件327
6.1.1 进程A执行,hello.txt文件被打开328
6.1.2 进程A读取hello.txt文件并由于等待硬盘中断而被系统挂起328
6.1.3 进程B准备打开hello.txt文件330
6.1.4 系统准备为进程B获取hello.txt文件的i节点332
6.1.5 系统找到hello.txt文件已经载入的i节点333
6.1.6 系统准备为进程B从硬盘上读取hello.txt文件334
6.1.7 系统找到了正在操作的缓冲块,将进程B挂起335
6.1.8 系统再次切换到进程0执行337
6.1.9 进程C启动并打开hello.txt文件337
6.1.10 进程C也由于等待缓冲块解锁而被系统挂起338
6.1.11 缓冲块解锁后先唤醒进程C339
6.1.12 系统将进程B设为就绪状态340
6.1.13 系统将指定数据写入缓冲块341
6.1.14 写入完成后,进程C继续执行341
6.1.15 进程C准备切换到进程B342
6.1.16 进程C切换到进程B执行,进程B唤醒进程A342
6.1.17 进程B不断执行,直到时间片减为0后切换到进程A执行343
6.1.18 进程A、B、C退出,写入数据由update进程同步344
6.2 缓冲区与外设的数据同步344
6.2.1 系统不断为进程A向缓冲区写入数据346
6.2.2 继续执行引发缓冲块数据需要同步346
6.2.3 将缓冲区中的数据同步到硬盘上347
6.2.4 进程A由于等待空闲请求项而被系统挂起349
6.2.5 进程B开始执行350
6.2.6 进程B也被挂起351
6.2.7 进程C开始执行并随后被挂起352
6.2.8 进程A和进程C均被唤醒352
6.2.9 进程B切换到进程A执行354
6.3 小结356
第7章 IPC问题358
7.1 管道机制358
7.1.1 为管道文件在文件管理表中申请空闲项360
7.1.2 为管道文件与进程建立联系创造条件360
7.1.3 创建管道文件i节点361
7.1.4 将管道文件i节点与文件管理表建立联系362
7.1.5 将管道文件句柄返回给用户进程363
7.1.6 读管道进程开始操作管道文件363
7.1.7 写管道进程向管道中写入数据364
7.1.8 写管道进程继续向管道写入数据366
7.1.9 写管道进程已将管道空间写满366
7.1.10 写管道进程挂起366
7.1.11 读管道进程从管道中读出数据367
7.1.12 读管道进程继续执行,不断从管道中读出数据369
7.1.13 读管道进程执行中发生时钟中断369
7.1.14 读管道进程执行过程中再次发生时钟中断370
7.1.15 读管道进程切换到写管道进程执行371
7.1.16 写管道进程挂起切换到读管道进程执行371
7.1.17 读管道进程继续执行,直到把管道中的数据读完372
7.1.18 读取完成后,读进程挂起,写进程继续执行373
7.2 信号机制374
7.2.1 processig进程开始执行376
7.2.2 processig进程进入可中断等待状态377
7.2.3 sendsig进程开始执行并向processig进程发信号379
7.2.4 系统检测当前进程接收到信号并准备处理381
7.2.5 系统检测信号处理函数指针挂接是否正常382
7.2.6 调整processig进程的内核栈结构,使之先执行信号处理函数383
7.2.7 信号对进程执行状态的影响386
7.3 小结393
第8章 操作系统的设计指导思想395
8.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作395
8.2 操作系统的设计指导思想—主奴机制398
8.2.1 主奴机制中的进程及进程创建机制399
8.2.2 操作系统在内存管理中的主奴机制400
8.2.3 操作系统在文件系统中体现的主奴机制401
8.3 实现主奴机制的三种关键技术402
8.3.1 保护和分页402
8.3.2 特权级405
8.3.3 中断405
8.4 建立主奴机制的决定性因素—先机407
8.5 软件和硬件的关系:主机与进程、外设与文件408
8.5.1 非用户进程—进程0、进程1、shell进程408
8.5.2 文件与数据存储409
8.6 父子进程共享页面414
8.7 操作系统的全局中断与进程的局部中断—信号414
8.8 小结415
结束语415
“新设计团队”简介416
附录 搭建Linux 0.11系统环境421
· · · · · · (收起)

读后感

评分

做推广不要太过火了吧 如果要分析0.11版,赵炯博士的书朴实无华,看得出是作者心血之作,非常有诚意。 国内的书现在总是显得推广的广告口号太虚了,“艺术”之词更有是相当有胆量去用啊~ 而且,豆瓣上给这本书捧上天的人还真多啊,肉麻的程度让你发指了 ++++++++++++++++++...  

评分

想学习了解Linux内核方面的知识,抱着虚心虔诚的态度,鬼使神差的买了如题这本书。 开始阅读... 读完前言,读完第一章还没什么感觉, 第二章开始感觉有点不对头,等读到50页彻底崩溃,要疯了。 CPU 操作系统两个概念都搞混了,把中断处理机制乱讲一通......实在怀疑是计算机...  

评分

我从04年开始接触linux,《linux内核完全注释》是我的阅读内核的启蒙读本,那时候觉得linux很神秘,加上周围了解的同学很少,因此更加对linux产生了兴趣,在不到一年的时间里,我把书通读了好几遍,期间收获也不少。 后来从事网络安全,由于工作的需要,我也转向linux更高版本...  

评分

1. 这本书的文字表述真心不取恭维,整本书处处都可见到类似于下面稚嫩的文字。 我摘抄312 页7.3节的其中一段: “ 它们即是正确性的基础,又是让数据在缓冲区中停留的时间尽可能长的基础” 2. 章节缺少综合性的说明部分,一开始就陷入细节之中。有的章节虽然有,但也不够清楚。  

评分

1. 这本书的文字表述真心不取恭维,整本书处处都可见到类似于下面稚嫩的文字。 我摘抄312 页7.3节的其中一段: “ 它们即是正确性的基础,又是让数据在缓冲区中停留的时间尽可能长的基础” 2. 章节缺少综合性的说明部分,一开始就陷入细节之中。有的章节虽然有,但也不够清楚。  

用户评价

评分

这本深入探讨操作系统的经典著作,如同一张详尽的地图,为读者绘制了现代计算核心的复杂蓝图。它不仅仅是对理论概念的罗列,更是一场实践的旅程,引导我们穿梭于进程调度、内存管理和文件系统的迷宫之中。作者的叙述风格沉稳而精准,仿佛一位经验丰富的向导,在关键的岔路口提供清晰的指引,确保读者在面对那些晦涩难懂的底层逻辑时,不会迷失方向。我对书中关于并发控制的那一章印象尤为深刻,那种对锁机制、信号量和原子操作的层层剖析,使得原本抽象的同步问题变得触手可及。读完后,我对计算机如何高效地管理和分配稀缺资源有了全新的认识,这极大地拓宽了我对系统级编程的理解深度。

评分

阅读体验上,这本书给我的感觉是“扎实且可靠”,如同内核本身的代码一样,禁得起推敲。它没有过分渲染那些花哨的新特性,而是将重心放在了那些经过时间考验、构成系统基石的核心原理上。书中对I/O子系统的讲解尤其细致,从请求的发出、到硬件的响应,再到数据如何安全地回传给用户空间,每一步的锁点和同步机制都被描绘得一丝不苟。对于希望构建高性能、低延迟基础设施的人来说,这本书无疑是通往精通之路的必经之门。它不提供快速的答案,而是提供理解问题的深度,这种深度是构建任何健壮软件的根基。

评分

这本书最宝贵的地方在于其对“权衡”(Trade-offs)的强调。在内核设计中,几乎没有绝对的“最优解”,只有在特定场景下最合适的选择。作者在论述虚拟内存管理时,对于TLB的命中率与页面替换算法的复杂性之间的博弈分析得淋漓尽致。这种不偏不倚、多角度审视问题的态度,使得阅读过程充满了启发性。它教会我,真正的专家不是那些能背诵所有API的人,而是那些能理解背后设计哲学,并在约束条件下做出最佳工程决策的人。这种成熟的视角,远超出了单纯的技术手册范畴,更像是一份关于如何成为卓越系统架构师的箴言录。

评分

拿起这本书,我立刻感受到了一种对工程美学的极致追求。它不是那种枯燥的教科书,更像是一部关于“如何构建一个稳定、高效且可扩展的系统”的艺术品赏析指南。文字中充满了对设计取舍的深刻洞察——为什么选择这种数据结构而非另一种,这种决策背后的性能权衡和维护成本考量。我尤其欣赏作者在讲解模块化设计时所展现的清晰思路,如何将庞大的内核拆分成相互协作的、清晰界限的子系统。这种结构化的思维方式,不仅体现在代码层面,更渗透到读者的思维习惯中。它教会我的不仅仅是技术细节,而是一种系统思考的哲学,让人在面对任何复杂工程挑战时,都能保持清醒和条理分明的分析能力。

评分

坦率地说,初次翻开这本书时,我曾被其庞大的信息量和技术深度所震慑。然而,随着阅读的深入,我逐渐体会到作者高超的叙事技巧——如何将深奥的内核机制,用一种接近于讲故事的方式娓娓道来。书中对中断处理流程和上下文切换的描述,简直是教科书级别的范例,它将那些毫秒级的硬件交互,细致到足以让人在脑海中构建出一条完整的数据流路径。对于希望从应用层“晋升”到系统层面的开发者来说,这本书提供了必要的勇气和工具。它要求读者投入时间与精力,但最终的回报是,你将不再视内核为一个“黑箱”,而是能够洞察其每一个齿轮的精密咬合。

评分

写的鬼都看不懂,不是人看的

评分

难得找到一本比较薄的内核书,对于不准备写操作系统而只是想深入了解linux基本原理的人来说不错。

评分

它在世界范围内首次提出并阐述了操作系统设计的核心指导思想——主奴机制,这是所有操作系统研究者的一笔宝贵财富 蛋疼啊,从没听说过

评分

只看了两章。。。

评分

感觉还可以

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.wenda123.org All Rights Reserved. 图书目录大全 版权所有