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

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

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…

线性表、顺序表

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

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

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

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

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

我和蓝牙BT,BLE有一腿

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

循环链表、双链表

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

[芦半山]Binder的异常机制

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

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

接上一篇《消息中间件核心实体(0)》,这一篇继续介绍消息中间件中的一些实体。 上一篇主要是Message、Topic、TopicMeta和Queue这样最基础的实体,这几篇介绍一些发送和消费的过程中会涉及到的实体和组件。 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…

该死的装修

周末了,没有写技术文~因为最近的新房子需要装修,谈了几个装修公司,不知道为什么,我对装修这个事情非常抵触,繁琐的事情太多了,还没有装修,我就觉得有很多事情要斗争。因为家里有小孩&#xff0c…

SKLEARN模型选择

数据集划分方法 K折交叉验证法 将全部训练集S分成k个不相交的子集,假设S中的训练样例子数为m,那么每一个子集有m/k个训练样例,相应子集称作{s1,s2……sk}每次从分好的子集里面,拿一个作为测试集,其他k-1作为训练集在k…

被该死的Openssl编译嘲讽了一个下午

昨晚比较尴尬,下班的时候已经很晚了,到半路突然想起来没有带钥匙回去,赶紧折返回公司拿钥匙,在已经很晚的路上我们又多花费了20分钟,到家已经挺晚了,具体多少点我都不好意思说,我要是说出来&…

JavaScript中本地对象、内置对象和宿主对象

http://www.jianshu.com/p/a52e6e183427 http://blog.csdn.net/weiyastory/article/details/52837466 http://www.cnblogs.com/qigang/p/3520974.html 在ECMAScript中,所有对象并非同等创建的。 一般来说,可以创建并使用的对象有3种:本地对象…

类的真正形态

类的真正形态 类的关键字 struct在C语言中已经有了自己的定义,必须继续兼容 在C中提供了新的关键字,class用于类定义 class和struct用法是完全相同 struct和class区别 用struct定义时,所有成员默认为public 用class定义时,所…

分类器

sklearn分类器性能指标 分类器性能评估指标 只限于二元单元标签分类问题 可用于二元多标签分类问题的评估指标 如何将二元分类指标扩展到多类或多标签问题中去 可用于多类分类问题的评估指标(紫色的可用于多标签问题) accuracy_score准确率 函数计算分类…

Cucumber+Rest Assured快速搭建api自动化测试平台

转载:http://www.jianshu.com/p/6249f9a9e9c4 什么是Cucumber?什么是BDD?这里不细讲,不懂的直接查看官方:https://cucumber.io/  什么是Rest Assured?传送门:https://github.com/rest-assured…

让这个该死的服务跑起来了~

#前言被该死的Openssl编译嘲讽了一个下午之前的文章说了我的那个编译的问题,这里说下,知识点有点零散,最后的解决也是一个同事提示,感觉也有点奇葩的赶脚。到目前为止,我现在感受到了写文章的好处,昨晚的问…