Linux内核设计的艺术

Linux内核设计的艺术这本书是我认为对Linux内核描述非常优秀的书籍。书籍中描述了内核启动的流程,内核运行的机理,内存管理,进程管理等等。

#书籍目录

第1章 从开机加电到执行
main函数之前的过程1
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序1
1.1.1 BIOS的启动原理2
1.1.2 BIOS 在内存中加载中断向量表和中断服务程序3
1.2 加载操作系统内核程序并为保护模式做准备5
1.2.1 加载第一部分内核代码——引导程序(bootsect)5
1.2.2 加载第二部分内核代码——setup7
1.2.3 加载第三部分内核代码——system模块13
1.3 开始向32位模式转变,为main函数的调用做准备17
1.3.1 关中断并将system移动到内存地址起始位置0x0000017
1.3.2 设置中断描述符表和全局描述符表19
1.3.3 打开A20,实现32位寻址21
1.3.4 为保护模式下执行head.s做准备23
1.3.5 head.s开始执行26
1.4 本章小结44
第2章 设备环境初始化及激活进程045
2.1 设置根设备、硬盘46
2.2 规划物理内存格局,设置缓冲区、虚拟盘、主内存46
2.3 设置虚拟盘空间并初始化48
2.4 内存管理结构mem_map初始化50
2.5 异常处理类中断服务程序挂接51
2.6 初始化块设备请求项结构57
2.7 与建立人机交互界面相关的外设的中断服务程序挂接59
2.7.1 对串行口进行设置59
2.7.2 对显示器进行设置60
2.7.3 对键盘进行设置61
2.8 开机启动时间设置63
2.9 初始化进程065
2.9.1 初始化进程068
2.9.2 设置时钟中断71
2.9.3 设置系统调用总入口71
2.10 初始化缓冲区管理结构73
2.11 初始化硬盘75
2.12 初始化软盘77
2.13 开启中断78
2.14 进程0由0特权级翻转到3特权级,成为真正的进程78
2.15 本章小结80
第3章 进程1的创建及执行81
3.1 进程1的创建81
3.1.1 进程0创建进程181
3.1.2 在task[64]中为进程1申请一个空闲位置并获取进程号87
3.1.3 调用copy_process函数89
3.1.4 设置进程1的分页管理94
3.1.5 进程1共享进程0的文件99
3.1.6 设置进程1在GDT中的表项99
3.1.7 进程1处于就绪态100
3.2 内核第一次做进程调度103
3.3 轮转到进程1执行107
3.3.1 进程1为安装硬盘文件系统做准备109
3.3.2 进程1格式化虚拟盘并更换根设备为虚拟盘135
3.3.3 进程1在根设备上加载根文件系统138
3.4 本章小结151
第4章 进程2的创建及执行152
4.1 打开终端设备文件及复制文件句柄152
4.1.1 打开标准输入设备文件152
4.1.2 打开标准输出、标准错误输出设备文件166
4.2 进程1创建进程2并切换到进程2执行169
4.3 加载shell程序178
4.3.1 关闭标准输入设备文件,打开rc文件178
4.3.2 检测shell文件181
4.3.3 为shell程序的执行做准备186
4.3.4 执行shell程序192
4.4 系统实现怠速196
4.4.1 创建update进程196
4.4.2 切换到shell进程执行198
4.4.3 重建shell204
4.5 本章小结205
第5章 文件操作206
5.1 安装文件系统206
5.1.1 获取外设的超级块206
5.1.2 确定根文件系统的挂接点209
5.1.3 将超级块与根文件系统挂接210
5.2 打开文件211
5.2.1 将进程的*filp[20]与file_table[64]挂接212
5.2.2 获取文件i节点213
5.2.3 将文件i节点与file_table[64]挂接223
5.3 读文件224
5.3.1 确定数据块在外设中的位置224
5.3.2 将数据块读入缓冲块228
5.3.3 将缓冲块中的数据复制到进程空间228
5.4 新建文件230
5.4.1 查找文件230
5.4.2 新建文件i节点231
5.4.3 新建文件目录项233
5.5 写文件238
5.5.1 确定文件的写入位置238
5.5.2 申请缓冲块241
5.5.3 将指定的数据从进程空间复制到缓冲块241
5.5.4 数据同步到外设的两种方法242
5.6 修改文件245
5.6.1 重定位文件的当前操作指针246
5.6.2 修改文件246
5.7 关闭文件248
5.7.1 当前进程的filp与file_table[64]脱钩248
5.7.2 文件i节点被释放249
5.8 删除文件250
5.8.1 对文件的删除条件进行检查251
5.8.2 进行具体的删除工作252
5.9 本章小结255
第6章 用户进程与内存管理256
6.1 线性地址的保护256
6.1.1 进程线性地址空间的格局256
6.1.2 段基址、段限长、GDT、LDT、特权级257
6.2 分页260
6.2.1 线性地址映射到物理地址260
6.2.2 进程执行时分页261
6.2.3 进程共享页面267
6.2.4 内核分页270
6.3 一个用户进程从创建到退出的完整过程273
6.3.1 创建str1进程273
6.3.2 str1进程加载的准备工作285
6.3.3 str1进程的运行、加载289
6.3.4 str1进程的退出296
6.4 多个用户进程同时运行299
6.4.1 进程调度299
6.4.2 页写保护303
6.5 本章小结309
第7章 缓冲区和多进程操作文件310
7.1 缓冲区的作用310
7.2 缓冲区的总体结构311
7.3 b_dev、b_blocknr及request的作用312
7.3.1 保证进程与缓冲块数据交互的正确性312
7.3.2 让数据在缓冲区中停留的时间尽可能长320
7.4 uptodate和dirt的作用325
7.4.1 b_uptodate的作用326
7.4.2 b_dirt的作用331
7.4.3 i_uptodate、i_dirt和s_dirt的作用334
7.5 count、 lock、wait、request的作用336
7.5.1 b_count的作用336
7.5.2 i_count的作用338
7.5.3 b_lock、*b_wait的作用341
7.5.4 i_lock、i_wait、s_lock、*s_wait的作用344
7.5.5 补充request的作用347
7.6 实例1:关于缓冲块的进程等待队列349
7.7 总体来看缓冲块和请求项370
7.8 实例2:多进程操作文件的综合实例373
7.9 本章小结388
第8章 进程间通信389
8.1 管道机制389
8.1.1 管道的创建过程391
8.1.2 管道的操作396
8.2 信号机制410
8.2.1 信号的使用412
8.2.2 信号对进程执行状态的影响422
8.3 本章小结431
第9章 操作系统的设计指导思想432
9.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作432
9.2 操作系统的设计指导思想——主奴机制434
9.2.1 主奴机制中的进程及进程创建机制435
9.2.2 操作系统的设计如何体现主奴机制436
9.3 实现主奴机制的三种关键技术438
9.3.1 保护和分页438
9.3.2 特权级440
9.3.3 中断441
9.4 建立主奴机制的决定性因素——先机443
9.5 软件和硬件的关系444
9.5.1 非用户进程——进程0、进程1、shell进程444
9.5.2 文件与数据存储445
9.6 父子进程共享页面450
9.7 操作系统的全局中断与进程的局部中断——信号450
9.8 本章小结451
结束语452

#获取书籍pdf

微信公众号回复 「 Linux内核设计的艺术 」。

留言分享一段自己的校招经历,我选 3 位读者赠送实体书籍。截止明天晚上 20:00。

想拿实体书籍的,请用心评论~


  回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sklearn

文章目录机器学习机器怎样学习机器学习的两种方式用处监督学习三要素监督学习概念与数学形式统计学习三要素模型策略两大策略监督学习三大问题分类问题精确率与召回率标注问题回归问题无监督学习无监督学习主要方法无监督学习之聚类分析用途高斯混合模型密度分布估计协方差估计…

gtp6 linux 启动_Win10更新后导致双系统(LinuxWindows)开机引导失败出现grub rescue的修复办法...

Windows10更新有一定几率会破坏grub,找不到grub引导文件,所以我们要让它找到引导文件。当屏幕上提示:grub resume> 时。1、set命令查看当前grub引导指向哪个盘。grub resume> set显示结果,例如,cmdpath(hd0,gtp2)/EFI/parro…

Tomcat 在mac上(Idea)端口冲突解决办法

Port already in use: 1099 在mac上解决办法直接是找到占用1099端口的pid; 解决方式: lsof -i:1099 回车,之后会有pid,然后执行 kill (pid号) 最后问题就得到了解决! 注意:有的时候kill不能将占用端口的pid…

调试LCD反被调戏了

相关文章调试,是一件有挑战的事情这篇文章的题目应该写做 - 我又被LCD艹了一个晚上。写个文档简单总结下#LCD显示的一些基本概念数字视频的基本概念源自于模拟视频。对于模拟视频我们可以这样理解:视频可以分解为若干个基本视点(像素&#xf…

被LCD调戏睡不着了

好吧,我承认我不是因为被调戏睡不着的,我是因为今天晚上喝了一杯该死的咖啡,然后就睡不着了,这个点[3:40]在床上翻来覆去,刚开始我摸着楠哥的小腿,过了一会,觉得没意思了&#xff0c…

python 随机名言_如何用简易代码自动生成经典语录

“不要空想不可能的事情”“增加自己的幸福感”“我们最终将创造地面,并呵护它”“保持希望并学会放弃奇迹”上面所有引号内的句子都是由一段代码生成的,使用的程序由少于20行的python代码组成。当涉及到生成自然语言时,人们通常会想到使用高…

链家笔试2

链家笔试2 把m升水倒入n个相同的杯子(假设容器足够大)&#xff0c;允许有的容器是空的&#xff0c;共有多少种不同的倒法&#xff1f;&#xff08;用k表示&#xff09;5 1 1 和1 5 1 和1 1 5 是同一种倒法 输入&#xff1a; 第一行是测试数据的数目 x(0 < x < 20),以下每…

线性表、顺序表

文章目录线性表、顺序表线性表概念线性结构特点线性表概念两种分类顺序表代码遍历查找插入删除逆置链表&#xff08;用指针实现变长的先行存储结构&#xff09;特点习题线性表、顺序表 线性表概念 线性结构特点 存在唯一一个被称为“第一个”的数据元素存在唯一一个被称为“最…

lte 在网络覆盖方面应该注意哪些问题_LTE弱覆盖问题分析与优化

LTE弱覆盖问题分析与优化摘要&#xff1a;本文结合现网实际工作情况介绍了LTE弱覆盖的发现手段&#xff0c;LTE弱覆盖的成因&#xff0c;以及LTE弱覆盖的解决方法&#xff0c;总结相关经验&#xff0c;为LTE的规划建设提供参考依据。关键字&#xff1a;LTE弱覆盖、MR数据、站点…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(33)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(32) 上一回了开始对于drm_gem_handle_create_tail函数的解析,对于函数的注释和第一段代码进行了讲解,本回开始对于drm_gem_handle_create_tail函数的核心功能代码进行解析。为了便于理解,再次贴出drm…

Linux 5.7 将支持国产 RISC-V 芯片 K210

这是转载的一篇文章&#xff0c;文章主要内容是Linux合入了一个国产芯片k210的代码&#xff0c;虽然这个芯片不是很强大&#xff0c;但是对于学习来说非常有意义&#xff0c;而且&#xff0c;还有人在这个开发板上移植了Linux 0.11。今天早上我在查阅 Linux 内核邮件列表的时候…

动态路由选择协议(二)距离矢量路由选择协议

大多数的路由选择协议属于下面二者之一&#xff1a; 距离矢量&#xff08;distance vector&#xff09;和链路状态&#xff08;link state&#xff09;。 本篇学习的是距离矢量路由选择协议的基础。 大多数的距离矢量算法是R.E.Bellman、L.R.Ford和D.R.Fulkerson所做的工作为基…

我和蓝牙BT,BLE有一腿

你好&#xff0c;很不幸&#xff0c;你被一个标题骗了进来&#xff0c;可能我以后还会骗你&#xff0c;我这篇文章主要是写蓝牙相关的&#xff0c;不会涉及技术细节&#xff0c;主要是总结一些概念&#xff0c;这些概念会帮助你了解蓝牙知识&#xff0c;帮助你在面试或者聊天的…

Python之路,week03 - Python基础3

本节内容 函数与函数式编程函数式编程之参数详解局部变量与全局变量作用域嵌套函数 递归函数式编程介绍高阶函数内置函数1. 函数与函数式编程 1.面向对象&#xff1a;华山派---》类---》class 2.面向过程&#xff1a;少林派---》过程---》def 3.函数式编程&#xff1a;逍遥派--…

循环链表、双链表

文章目录循环链表、双链表双链表插入删除单循环链表双循环链表习题线性表实现方法比较循环链表、双链表 双链表 插入 删除 单循环链表 双循环链表 习题 线性表实现方法比较

[芦半山]Binder的异常机制

文中代码分析基于Android 10.0 (Q)两个进程之间若是要进行Binder通信&#xff0c;那么发起通信的一端我们就称它为Client进程。Client进程调用每一个代理对象的方法&#xff0c;本质上都是一次跨进程通信。如果这个方法是同步方法&#xff08;非oneway修饰&#xff09;&#xf…

bufg和bufgp_如何将自己写的verilog模块封装成IP核(一)

平台与材料一个写好的工程&#xff0c;综合通过&#xff0c;不用布局布线&#xff0c;ISE或Vivado皆可。如果是ISE&#xff0c;需要在properties里取消选中 iobuf 。这样就只能被当做内部模块调用了。Vivado步骤打开Vivado&#xff0c;创建一个工程Tools -> Create or packa…

消息中间件核心实体(1)

接上一篇《消息中间件核心实体(0)》&#xff0c;这一篇继续介绍消息中间件中的一些实体。 上一篇主要是Message、Topic、TopicMeta和Queue这样最基础的实体&#xff0c;这几篇介绍一些发送和消费的过程中会涉及到的实体和组件。 1. 发送 1.1 增强Message属性 Message一般只包含…

sklearn(2

算法库顶层设计 SKLEARN监督学习模块 近邻算法 neighbors支持向量机SVM岭回归 kernal_ridge判别分析discriminant_analysis广义线性模型linear_model集成方法ensemble决策树tree朴素贝叶斯naive_bayes交叉分解cross_decompostition高斯过程gaussian_process多层神经网络neural…

sox处理mp3_SoX 音频处理工具使用方法

一、简介SoX 可以读取和写入常见格式的音频文件&#xff0c;并在此过程中选择性的加入一些声音效果。它可以组合多个输入源及合成音效&#xff0c;在许多系统上也可以作为音频播放器或多轨录音机使用。SoX 工具在大部分 Linux 系统上都可以直接通过软件包管理器安装(如sudo apt…