文章吧手机版
《深入理解LINUX内核》读后感锦集
日期:2020-12-12 04:03:46 来源:文章吧 阅读:

《深入理解LINUX内核》读后感锦集

  《深入理解LINUX内核》是一本由Daniel P.Bovet / Marco Cesati著作,东南大学出版社出版的923图书,本书定价:98.00元,页数:2006-4-1,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助。

  《深入理解LINUX内核》精选点评:

  ●比LKD更关注于细节,于是也更容易过时。。。。

  ●同没看完,只看了内存管理

  ●linux的书过时太快了。。真正应该买本operating system concepts,然后跟着老师学,其实我觉得LDD似乎更好?

  ●非常好的linux内核读物,既不是纠结于具体实现,也不是像某些书只是粗浅的介绍,可以说恰到好处。

  ●又是一部大部头,曾经还拿着英文版的啃过,那个效率。这是一本偏理论的书籍,基础不好的不太好啃,建议先从一部小部头开始。《linux内核设计与实现》讲的简略一些,可以先考虑

  ●读了大概1/2。 Linux kernel居家旅行必备。

  ●这个要重看一遍

  ●怪我才学疏浅。。。

  ●当作代码注释看

  ●一般,对于初学或者精通的人都不太合适,可能是译者的问题。

  《深入理解LINUX内核》读后感(一):书名是怎么翻译的

  这本书的英文名是Understanding the linux kernel,怎么翻译成中文就是“深入理解linux内核”,“深入”在哪里,这么喜欢添油加醋,翻译别人的东西就不要自由发挥了,把意思翻译出来就行了,不必要添加这些无关紧要的东西

  《深入理解LINUX内核》读后感(二):值得钻研的一本书

  首先,我要强烈建议的是:这本书一定要看英文版的(买不到的话可以网上下pdf,然后淘宝上打印)!

  其次,我还要提醒一下linxu kernel的初学者:读这本书之前,要看一些讲解操作系统原理和概念的书。

  最后,对于初次看这本书的读者来说:不要指望读一遍就把这本书都搞懂。因为这部书各个章节之间(实际上是kernel的各个部分之间)是有交叉的,综合起来看才能得到一幅完整的图景。

  最最后,耐心是很重要的;不要追求速度(当然,如果您的理解能力和学习能力很强,就是学得快,请无视我所有话,除了这句),读懂书才是读书的目的。

  《深入理解LINUX内核》读后感(三):翻译的问题...别太纠结吧

  好多人说中文版的翻译问题...不过,我不觉得中文版很不好,总体感觉还是可以的。声称因为这些问题看不下去的,我估计原版书也很难看下去。

  这本书内容极力做到讲清楚细节,喜欢不厌其烦的讲内核的数据结构,我认为这个是很必要的,如果不说清楚,没办法再细讲下去,只能空说概念了。序里面也说到了,这本书最初是根据Linux课程的讲义整理而成的,我估计这也是本书比较详细的原因。

  可以作为参考书,我觉得更适合作为学习内核的书,坚持看完。需要一点点汇编基础,操作系统的基础,少量Linux的基础,此外几乎不需要任何补充就可以上手。

  我已经看了断断续续2个月,看了一大半,决定继续看完剩下的。

  《深入理解LINUX内核》读后感(四):2.6.23之后的进程调度方式已经改了

  这本书是好书,我就不重复那些赞美之词了。

  但提醒一下,新买这本书的战友们要注意了,从2.6.23版本的内核开始,进程调度方式就不再是书中提到的O(1)调度方式,而是改成了完全公平调度(CFS),大家可以看看Robert Love的《Linux内核设计与实现》第三版。还可以参考下面地址:

  http://www.chinaunix.net/jh/4/1063798.html

  我把进程调度那一章仔细看完了,后来看到内核代码才知道和书上的不一样了,希望大家不要走我走过的弯路。

  《深入理解LINUX内核》读后感(五):灵与肉的结合

  曾几何时,我们为调试成功第一段汇编小程序而欢欣鼓舞,为写完C语言小程序通宵达旦,为自己的数据结构解决了一个实际问题而踌躇满志。再后来我们学习了计算机组成原理或者高级点的计算机系统结构,学习过操作系统的实现和设计,看过算法导论...但好像一切又渐渐变得遥远了,虽然书本上的一切也都感觉上能理解,但总是朦朦胧胧觉得缺少点什么,或许是觉得所有的知识都是断断续续的,感觉很多知识是无本之源。但这本书拂去了一切挡在眼前的薄薄尘埃,让我看见所有的一切都在这里完美结合了,有如灵魂和肉体的结合,一切都富有活力起来。汇编、数据结构、算法、操作系统理论、计算机系统结构、C语言、编译器等等好像都在这里闪动着五颜六色的极富魅力的小光线,我揉了揉干涩的眼睛,渐渐地,我看清了它们组成的光芒照耀着的是操作系统...

  看的是影印版,本书特点:

  1.也是最大的特点,用足够多的汇编来介绍操作系统的一些功能如启动、切换、同步、中断。汇编(不是DOS下的汇编)是了解操作系统跳不过去的坎,有了至少一种CPU汇编的理解,其实相当于理解了相应CPU的架构,这才算真正的开始了解操作系统。这本书是汇编和Linux操作系统的桥梁。

  2.对编译操作系统需要的编译选项也做了不少铺垫,真的算体贴入微了。

  3. 有如外科手术刀,提供了很好的几个断面来了解Linux。即使这么复杂的系统,也能这样娓娓道来,非常不容易。 循序渐进、深入浅出,书中出现的未知内容或者重要概念一般会提示你在哪里查找。

  本书是我看过花费时间最长的书,总结原因如下:

  1. 知识量大:操作系统本身概念多、难点多、平时接触少。

  2. 细节太多:本书主要从下至上的形式讲解,一开始就有太多的细节(汇编、数据结构、函数),需要熟读几遍的基础上才有可能再从上到下的方法进行总结,知道了重点和纽带,思路才变得慢慢清晰起来。遗忘和迷失方向是经常的,每次学习也带来新的自我提问。查看相关代码的数据结构、函数、相互引用、书本内容的确认需要很多时间。另外Linux 2.6是个实际运行系统,太多的错误处理、接口、参数和扩展等,使得源码变得更加晦涩难懂。

  3. 内容交织:书中几乎每一章与其他章节都联系紧密。仅仅一个函数,可能引用了书中很多其他章节或操作系统的许多概念,变得非常难以理解(如Page Fault Exception Handler(P376)),因此你根本无法仅依赖熟读某一章里面就完全了解这一章内容,而且几乎每一章都包含一些后面章节未介绍的概念,很多时候觉得有点无处下手。每个功能的区别可能用一个位来表示,变得非常隐晦,很难记住这么多。操作系统的概念介绍一般包括功能、实现方式、数据结构、相关函数(算法)、汇编实现、全局变量、初始化、正常关闭等。同时每个概念的实现中还可能包括系统调用、特殊文件目录(/proc或/sys)、shell命令、系统初始化(start_kernel下的函数)、权限、资源、中断、信号、编译选项、统计等。因此也积累了无限的可能,这也许操作系统难学的原因吧。操作系统的复杂也许来自于层次性和不可分割性。

  看了本书的体会:

  1. linux操作系统让数据结构、算法、计算机系统结构、汇编、驱动、有了驰骋的疆场。操作系统的设计理念得到实现或试验,而不是仅仅停留在白纸上。

  2. 问题的思考层次,编程中出现的问题能尝试从多层次出发进行考虑,如CPU指令/操作系统实现(包括模块和驱动)/系统函数接口/C函数接口/应用系统,理解操作系统在其中能起到的桥梁作用,同时兼顾编译器的帮助。

  3. 这本书打开了无数扇窗,每一扇风景都等着你去发现。这本书只是认识Linux操作系统的开始,这本书理论为主,实战少。但是经过这本书磨练,实际工作中的碰到的操作系统中大部分的概念,你都可以自己在源码中得到证实,而不是“好像觉得","牛人说","书上说"。

  4. 对windows操作系统也会有新的认识,并且尝试重新认识数据库、java虚拟机等。

  本书的重点总结:

  1. 汇编 head.S entry.S 与启动、切换、中断、系统调用等相关

  2. 内存管理(P35,P294)

  3. 程序切换和调度(P102, P290)

  4. ext2文件读(写)过程:结构图(P561) 理解每一层的做什么

  5. 各个层的缓存、各种缓存技术(LRU,cache, hot/cold page…),,以及页面回收算法RFPA

  6. exec过程(P828):

  ext2文件读(写)过程:结构图(P561) 理解每一层的做什么

  read(P508) 【层:User Mode】

  -->sys_read-->vfs_read-->file->f_op->read() 【层:VFS】

  ---->generic_file_read(P632) 【层:Disk File(Block Device File)】

  ------>do_generic_file_read(p635)-->do_generic_mapping_read 【层:Page Cache (inode)】

  -------->ext2_read_page(P638)-->mpage_readpage() 【层:ext2】

  ---------->submit_bio()-->generic_make_request(P570) 【层:Generic Block Layer】

  ------------>__make_request -->q->add_request() 【层:I/O Scheduler】

  相关request在I/O Scheduler队列中的 q->request_fn函数(即do_hd_request)调用:

  do_hd_request(以HD.c为例) 【层:Block Device Driver 取队列,发起读请求】

  -->elv_next_request(),

  -->hd_request()

  read_intr() 【层:Block Device Driver中断,读数据,从队列中删除,再发起请求】

  -->end_request()

  ---->end_that_request_first()

  ---->blkdev_dequeue_request()

  ---->end_that_request_last()

  共享内存(P801)、文件映射(P657)、直接文件读写的区别

  a. 共享内存的缺页:

  do_no_page (预先在mmap()-->shmem_zero_setup设置shmem_nopage )

  -->vma->vm_ops->nopage

  -->shmem_nopage

  ---->shmem_getpage

  ------>find_lock_page

  ------>shmem_alloc_page

  ------>add_to_page_cache_lru

  . 文件映射的缺页:

  do_no_page(预先在mmap-->file->f_op->mmap设置filemap_nopage)

  -->vma->vm_ops->nopage

  -->filemap_nopage

  ---->find_get_page

  ---->mapping->a_ops->readpage(一般为ext2_aops.read)

  ---->ext2_readpage 函数直接读写 ext2文件系统,inode缓存由前面的步骤建立了。

  c. 文件映射和直接读写文件相同点:

  i. 都调用ext2_readpage函数,则ext2层以下完全相同

  ii. 都采用inode的Page Cache,由直接文件读写的do_generic_file_read和文件映射的filemap_nopage分别建立

  iii. 都可能尝试磁盘的预读。

  d. 文件映射和直接文件读写不同点:

  直接读文件,修改后并写入文件:数据需要从内核态-->用户态复制一次,再从用户态-->内核态复制一次,还可能需要两次高端映射。

  相关参考书目:

  lt;深入理解计算机系统>

  lt;Intel Achitecheture Software developer's manual>

  lt;Unix 高级编程>

  lt;Linker & Loader>

  gcc 文档

  附:

  不过就在昨天,我觉得自己是个碎片,在生命的苍穹中毫无节奏地颤动。

  如今我知道自己就是苍穹,一切生命都是节奏分明的碎片,在我内在活动。.....纪伯伦

评价:中立好评差评
【已有2位读者发表了评论】

┃ 《深入理解LINUX内核》读后感锦集的相关文章

┃ 每日推荐