读《Linux内核设计与实现》我想到了这些书

2023-05-16

      从题目中可以看到,这篇文章是以我读《Linux内核设计与实现》而想到的其他我读过的书,所以,这篇文章的主要支撑点是《Linux内核》。

      开始读这本书已经是很久以前的事了,不过,由于时间和精力原因,没有认真的分析和深入研究这本书所涉及的诸多内容,现在想来,仍旧很是遗憾,直到最近,再次把这本书拿过来阅读,才勉强可以说是对书中的知识点有了一定的了解,我说的这种了解,远达不到精通的地步,可能略懂才更适合我。

      好吧,首先先简单的介绍下这本书。这本书的作者是:Robert Love ,相信系统的学习过Linux的朋友都应该知道这个人,可是,很遗憾,我在百度百科里查不到他的介绍。这是一本翻译过来的书,书的原名叫做《Linux Kernel Development》,我目前看的是第三版,如下图所示。相对前两版来说,第三版中增加了几章非常好的内容,比如,内核数据结构。这本书基于Linux2.6内核展开讨论,对实现Linux内核进行了多方面的分析。


      作者在序言里写下读者应该怎么去看这本书,这本书适合的阅读人群。我在这里也多说几句吧。其实,开发内核和驱动的人相对来说不多,不过,很多人喜欢Linux系统,想去了解这个系统,当学习到了一个新的高度的时候,就想去深入内核,去感受怎样实现这个系统,那么,我建议你好好看这本书,绝对是一个不错的选择。

      介绍这本书,我从它的内容说起吧。

      第一章和第二章

      这两章的内容我们可以在任何一本介绍Linux的书中看到,第一章是对Linux的历史和发展进行介绍,第二章是教我们怎样获取Linux内核源码。这里我又要多说几句了,如果,我们用书中的方法,可能你等了好久也获取不到,因为网络限制,你连接不到服务器,解决办法有两个,最简单的是搜索别的资源;第二个,如果你会的话,翻墙吧。

      第三章--进程管理

      这一章介绍内核最基本的东西--进程,分析了进程的创建,休眠和销毁等各个进程声明周期。这一章的内容不是很难,相信,如果你读过系统编程之类的书就应该知道在内核中怎么创建和销毁进程,而这里所说的那两个函数(fork和wait)是不是很眼熟呢?从这里我想提到两本书,其中一本也是Robert Love的作品--《Linux系统编程》,如下左图所示。从名字我们就可以看出,这本书侧重点是系统编程,所以,书中所述都是系统调用,是一本不错的工具书,不过,书中内容简短,需要更详细的介绍还是需要看另外一本书--《Unix环境高级编程》,如下右图所示。这本书读过的人肯定很多,它很厚,却很吸引人,如果你想了解更多的系统编程之类的知识,去看看这本书吧。

                                                       

      第四章--进程调度

      这一章介绍的内容在Linux相关的书中也有介绍,不过不是很多,不过,这一章的内容让我想起了“很久以前”我学过的一门课--《操作系统》,确实,在那里有介绍关于进程调度和进程调度算法之类的,在《内核设计》这本书中,进程调度的介绍很全面,但是篇幅简短,也是需要一定的知识储备,如果你看不懂或是对书中的内容有所疑问的话,建议你看看这本相对简单的书--《计算机操作系统》,哈哈,没错,就是这本教科书,如下图所示:


      第五章--系统调用

      只看这一章的题目或许你会认为这一章介绍的是系统调用函数,不过,看看书中的内容你就会知道,这里介绍的不是那些接口的调用,毕竟那些太简单,只要你会用就行。这一章介绍的是系统调用是怎样实现的。当我们在写代码的时候用到系统调用,我们需要传入相应的参数便可由内核执行,那么这些函数是怎么实现的呢,是怎么被注册到内核中的呢,我能不能写系统调用给我或者他人使用呢,那看看这一章吧,绝对会让你受益匪浅。

      第六章--内核数据结构

      这一章的内容相比前两版是作者新加入的。这一章里介绍的数据结构包含有链表,队列,红黑树等,这里介绍的数据结构比之前我们学过的数据结构难理解,原因有两个,主要的是作者介绍的不够详细,第二个是对原有数据结构加入面向对象的思想。当然,我们也可以参考相应的介绍数据结构的书来重新回顾下书中所说的知识点,这里,我就不推荐太难的了,毕竟我水平有限,也不大看得懂,建议大家看看严奶奶的那本《数据结构》,如下图所示:


      第七章和第八章

      这两章的标题分别叫做中断和中断处理,下半部和退后执行的工作。中断,这个词我们经常会看到,它是CPU接收硬件发送消息的一种处理,当接收到中断消息后会通知相应的中断处理程序执行相应的工作,然而,中断处理程序可能会有一些耗时的操作,那么这时就需要把响应中断先执行,也就是CPU通知硬件接收到了硬件所发送的中断,而把耗时的工作放在以后“有空”的时候执行,一般,这个有空指的就是中断处理程序返回时。对待这两章,如果你想深入的研究,就去好好翻翻计算机体系结构相关的书。好吧,这里我也推荐一本比较简单的书,也是一本我学习过的教科书,哈工大的唐奶奶的书--《计算机组成原理》,如下图所示:


      第九章和第十章

      第九章的标题是内核同步介绍,第十章紧接着上一章,这一章介绍的是内核同步方法。这两个标题中都提到的是内核同步。关于什么是同步,我在这里就不多做介绍了。正是因为Linux是多线程的操作方式,所以,避免不了存在竞争,然后,我们就需要处理同步。这两章的篇幅不是很多,但是内容很多,甚至可以说是有点复杂,涉及到多种处理同步的方法,有些方法还很难理解,由此可见作者写这本书的定位不是没有基础的人群,所以,如果你想把这两章看明白,还是建议你去看看基础点的书吧。

      第十一章--定时器和时间管理

      我们都知道,CPU存在一个时钟中断,它存在一个周期,到了一定的时间后,就会触发中断,那么这个是怎样实现的呢?我们的计算机在右下角会显示当前的时间,这个又是怎么实现的呢?这一章就是介绍诸如此类的问题,可能我们不常用这些知识点,但是,扩充下自己的知识量也不失为一件快事,所以,这一章的内容我没有深入的去研究,只是“匆匆”浏览了下。

      第十二章--内存管理

      既然这本书名字叫内核,所以,这一章所说的内存管理指的是内核怎样去管理它使用的那部分内存,这一章中的内容很好,而且较为详细,一共23页,建议大家好好学习这一章的内容,看看Linux的设计者是怎么让内核去管理它所占据的内存的,同时,也为以后的章节打下基础,例如进程的内存管理。

      第十三章--虚拟文件系统

      你在使用操作系统的时候对于文件系统这个概念可能并不陌生,但是你知道为什么我们可以写一份代码可以在几乎所有不同的文件系统上执行。哈哈,当时我也不清楚,不过,看了这一章的内容后,明白了许多,注意,这里我说的是明白了许多,并不是说“我明白了”。因为,我并没有去查看实现这些通用系统调用的源码,我只是明白了为什么可以这样做,它是怎样执行的,但是我不懂是怎么实现的。在这本书里并没有介绍这些通用函数是怎样实现的,我认为作者是为了节省不必要的篇幅,因为这些内容显然超出了这本书的主题。

      第十四章--块I/O层

      什么是块?我们的计算机中都存在硬盘,硬盘最小的寻址单位叫做扇区,但是在计算机中,计算机对硬盘的寻址是多个扇区(一般是4个),而这多个扇区就被称作是“块”。这一章介绍的是内核的IO操作,其中的重点内容是IO调度策略,确实,就像书中说的一样,如果不存在这样的一组策略,那么即使是你的IO请求不多,也会使你的计算机性能急剧降低。可见,这些调度策略是多么的重要,所以,这一章的内容需要认真的学习,研究,这么重要的一章篇幅仍旧是不多,所以,需要把这一章弄明白去查一些资料也就显得很正常了,这里,我没有什么推荐的书籍,遇到不懂的就开始百度或者谷歌吧,这也是最快的学习方法。

     第十五章--进程地址空间

      第十二章我我介绍了需要好好看看内存管理那一章,因为后面这一章需要那一章的知识,这也体现了内容的呼应。在书内容的开始就介绍了进程,但是没有多做讨论,毕竟开始就不好理解容易让人失去看这本书的兴趣,所以,作者把它放在了这里,其实这样说可能不太准确,因为如果你认真学习过编程语言,那么当你的程序运行的时候你可以写出相应的代码测试进程的每一部分。既然这里说到了编程语言,我再说下语言的事,我喜欢用C,C++,Java写程序,Java没看过什么书,因为都是面向对象,所以,不用过多的去学习语言,我建议学习C和C++,看看下面的这两本书会是不错的选择,这两本书都偏向语言本身,而且都提供了较多的测试代码,适合语言的初学者。

注:由于没有找到一样大小的图片,这里贴的很不好看,很是抱歉。。。。。。

                                           

      第十六章--页高速缓存和页回写

      记得上大学的时候看《计算机操作系统》这本书中提到过时间和空间局部性原理的时候用到了缓存,当时也提到了缓存查找用到了TLB(快表),不过,当时只是应付考试记住那些东西就行,现在看这本书的这一章感觉特别亲切,因为至少见过那些东西。然而,这一章介绍的内容比大学时候的那些要难的太多,作者在这一章中也费了好多笔墨,对这一章的描述很是清晰,建议应该好好这一章的内容,这是几乎所有的操作系统都需要实现的东西。

      第十七章及结尾

      十七章以后的内容我就没再翻了,因为现在还没到做驱动和内核开发那一步,而后面的那些内容我认为更合适于实战,所以,后面的内容并没有去研究了。

      好吧,我给出一点读这本书的建议。不得不说,这本书介绍的内容较难,如果你只打算读一遍,那么建议你不要花时间了。其实这本书的每一章内容都可以编写出一本很厚的书,我们通常见到的介绍内核的书一般是一本书介绍一个子系统或者是整合成一本书,不过,那个厚度绝对不比《牛津词典》薄多少。而《Linux内核设计与实现》这本书仅有335页,Linux的诸多子系统大多分成了章节或者几章内容来介绍,而且我们可以看到每一章的内容大多都在20页左右,可见作者把内容精简了太多,几乎可以说是“字字珠玑”。所以,不花大量的时间很难把上面介绍的知识点弄懂,当然,如果你是Linux方面的专家,那么这句话不适合你。还有,由于Linux2.6内核很是庞大,所以,建议大家读这本书之前先看看简单的内核版本,我在这里首推0.11版,也就是Linus编写的第一个Linux系统,简单易学,而且也完整的包含了Linux的各个子系统。所以,这里我推荐最后一本书《Linux内核设计的艺术》,这本书以Linux0.11内核源码展开讨论,书中源码配合图解展开论述,非常适合内核初学者初探内核世界的奥秘,如下图所示:


      说完了这些偏技术性的书之外,再说下Linux入门适合看的书,其实我感觉学习Linux没有那么难,但是需要你找到一个好方法,最好是有人指导,当然,如果没能找到人指导你,就看看下面这段话吧.

      如果你想知道这个东西是怎么回事,你就去做,去看,去体会。所以,你最好在你的电脑上安装Linux系统,入门的话建议安装Ubuntu,非常简单也非常易用的操作系统。接着,建议你准备一本书--《鸟哥的Linux私房菜之基础学习篇》,这本书有两个版本,另一个是《系统运维篇》,开始学习当然是第一个,也就是下左图所示的这本。这本书的作者是台湾人,介绍自己原本是Linux菜鸟,现在俨然成为Linux大牛,他以自己学习的经历和方法教你认识这个操作系统,之后介绍Linux的许多常用命令,看到这时你应该把上面的命令尝试着敲一遍,做到学为所用。这本书以简单易懂的方式介绍Linux,教你学习这个系统,个人认为可以算作是入门的经典之作,所以,推荐在这篇文章中。不过,当你拿到这本书的时候可能会感觉很沮丧,因为它实在是太厚了,你可能没那么多的时间。好吧,我再推荐另外一本书,这本书的作者是印度人,书很薄,我印象中就两百多页吧,书的名字叫做《Linux Shell脚本攻略》,虽然看名字似乎是在教你怎么去写Shell脚本,但是就我看完这本书之后感觉还是挺适合学习Linux常用命令的,所以,入门的话看看这本书也是不错之选,当然,可能大部分人觉得这本书介绍的内容稍难,这里我讲下看这本书的经验。我看这本书的目的是为了能看懂Shell脚本,Shell脚本其实就是Linux命令的组合再加上一些简单的语法,我可不打算去写Shell脚本。所以,这本书里牵扯到脚本编写的部分,直接略过就行,看懂命令,知道是怎么回事就可以了。个人感觉,绝对是一本好书。如下右图所示。

                                                     


      最后,我介绍一本我将要看的书--《Unix网络编程》,相信知道这本书的朋友很多,这是一本介绍网络编程的经典之作,书分为两卷,设计的也很好看,如下图所示。不过,确实需要花费好多时间,因为两本书都很厚。Unix设计的原则是“一切皆文件”,当你看了一些介绍Linux/Unix的书籍之后,你会明白这句话的道理;不过,还有一句话说的也很好,“一切皆Socket”,这也是形容Unix,Unix最大的特点就是它的网络行为,所以,学习了“本地”内容之后,去看看Internet吧。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读《Linux内核设计与实现》我想到了这些书 的相关文章

随机推荐

  • 解决git-gui文件数量的上限的问题

    原文链接 xff1a https blog csdn net u014221090 article details 55505228 遇到的情况 对于git的使用 xff0c 有一部分人是使用git bash xff08 命令行 xff09
  • 快速复制论文中的公式

    设备情况 MacOSOffice xff08 WPS不行 xff09 Mathpix Snipping Toolhttps www latex4technics com xff08 需要科技才能访问 0点云 xff09 步骤 xff1a 打
  • k8s官方文档学习

    文章目录 节点1 Addresses xff1a 2 conditions 块描述了所有 Running 节点的状态 xff1a 3 Capacity 块描述节点上的可用资源 xff1a CPU 内存 xff08 memory xff09
  • 一种简单有效的锂电池充电均衡电路

    这个均衡电路用的是三个一模一样的并联稳压电路组成的 xff0c 每个电池上并一个 电路原理图如下 xff1a 每个稳压电源都调节到4 2V 均衡的原理是 xff0c 当电池电压都小于4 2V时 xff0c 并联稳压电路不起作用 xff0c
  • 基于opencv对图片的二进制流进行编解码

    span class token keyword import span cv2 span class token keyword import span numpy span class token keyword as span np
  • STM32与传感器串口通讯问题

    前言 STM32F407ZGT6使用串口通信发送指令给传感器 xff0c 让传感器返回测得的数据 1 过程 大家看我这个程序 xff0c 在main函数前面我定义了一个read instruction数组 xff0c 存放读取传感器的指令
  • 检测到"_ITERATOR_DEBUG_LEVEL"的不匹配项

    最近在项目中遇到了问题 xff0c 编译器提示 检测到 34 ITERATOR DEBUG LEVEL 34 的不匹配项 xff0c 上网查找后发现是编译Release版本用到了DEBUG库的原因 xff0c 其中也提供了在预编译中加入 3
  • C语言实现单链表的逆置

    单链表的逆置是一个非常经典的问题 xff0c 这里利用两个思想进行解决 首先 xff0c 我们需要看下原理图 xff0c 其实两个思想都是一样的 xff0c 都是使后一个的节点的 next 指针指向前一个节点 xff0c 依次递推 xff0
  • UNIX下C语言的图形编程-curses.h函数库

    相信您在网路上一定用过如 tin elm 等工具 这些软体有项共同的特色 即他们能利用上下左右等方向键来控制游标的位置 除此之外 这些程式 的画面也较为美观 对 Programming 有兴趣的朋友一定对此感到好奇 也 许他能在 PC 上用
  • 如何同时启动多个Tomcat服务器

    这篇文章转载自 如何同时启动多个Tomcat服务器 conf子目录中打开server xml文件 xff0c 查找以下三处 xff1a 1 修改http访问端口 xff08 默认为8080端口 xff09 span class hljs t
  • 找到合适的方案记录服务端日志

    做过服务端开发的同学都清楚日志是多么的重要 你要分析应用当天的 PV UV 你需要对日志进行统计分析 你需要排查程序 BUG 你需要寻找日志中的异常信息等等 所以 建立一套合适的日志体系是非常有必要的 日志体系一般都会遵循这么几个原则 根据
  • doPDF——word转为PDF软件的使用方法

    doPDF软件下载链接 xff0c 版本doPDF 7 3 379 点击打开链接 1 下载好doPDF软件我们就可以动手安装了 安装到选择打印机的界面 软件使用方法如图所示 xff08 备注我用的是word2007 xff0c 可能与200
  • 过去的 2017 年

    过去的 2017 年分为两个部分 xff0c 前半部分偏忙碌 xff0c 个人时间较少 xff0c 但是收获甚微 xff1b 后半部分进入了一个学习的环境 xff0c 最主要的就是个人可自由支配的时间多了 xff0c 留给了我很多思考的时间
  • Android四大组件详解

    注 xff1a 本文主要来自网易的一个博主的文章 xff0c 经过阅读 xff0c 总结 xff0c 故留下文章在此 Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity xff0c Service服务
  • Socket通信原理和实践

    我们深谙信息交流的价值 xff0c 那网络中进程之间如何通信 xff0c 如我们每天打开浏览器浏览网页时 xff0c 浏览器的进程怎么与web服务器通信的 xff1f 当你用QQ聊天时 xff0c QQ进程怎么与服务器或你好友所在的QQ进程
  • linux下查看和添加PATH环境变量

    linux下查看和添加PATH环境变量 PATH xff1a 决定了shell将到哪些目录中寻找命令或程序 xff0c PATH的值是一系列目录 xff0c 当您运行一个程序时 xff0c Linux在这些目录下进行搜寻编译链接 编辑你的
  • Linux 内存映射函数 mmap()函数详解

    一 概述 内存映射 xff0c 简而言之就是将用户空间的一段内存区域映射到内核空间 xff0c 映射成功后 xff0c 用户对这段内存区域的修改可以直接反映到内核空间 xff0c 同样 xff0c 内核空间对这段区域的修改也直接反映用户空间
  • Cygwin获取root权限

    1 找到cygwin 的etc目录中有一个名为passwd的文件 2 用写字板打开passwd 这个文件 xff0c 找到以下部分 xff0c 把其中的windows用户名换成root xff08 共3处都改过来 xff09 Adminis
  • Linux Shell 只列出目录的方法

    在实际应用中 xff0c 我们有时需要仅列出目录 xff0c 下面是 4 种不同的方法 1 利用 ls 命令的 d 选项 xff1a ls d Desktop pic shell src 2 利用 ls 命令的 F 选项 xff1a ls
  • 读《Linux内核设计与实现》我想到了这些书

    从题目中可以看到 xff0c 这篇文章是以我读 Linux内核设计与实现 而想到的其他我读过的书 xff0c 所以 xff0c 这篇文章的主要支撑点是 Linux内核 开始读这本书已经是很久以前的事了 xff0c 不过 xff0c 由于时间