深入理解LINUX内核

出版社:东南大学出版社
出版日期:2006-4-1
ISBN:9787564102760
作者:Daniel P.Bovet,Marco Cesati
页数:923页

内容概要

作者:(意)Daniel P.Bovet (意)Marco Cesati

书籍目录

Preface The Audience for This Book Organization of the Material Level of Description Overview of the Book Background Information Conventions in This Book How to Contact Us Safari? Enabled Acknowledgments Chapter 1.  Introduction Section 1.1.  Linux Versus Other Unix-Like Kernels Section 1.2.  Hardware Dependency Section 1.3.  Linux Versions Section 1.4.  Basic Operating System Concepts Section 1.5.  An Overview of the Unix Filesystem Section 1.6.  An Overview of Unix Kernels Chapter 2.  Memory Addressing Section 2.1.  Memory Addresses Section 2.2.  Segmentation in Hardware Section 2.3.  Segmentation in Linux Section 2.4.  Paging in Hardware Section 2.5.  Paging in Linux Chapter 3.  Processes Section 3.1.  Processes, Lightweight Processes, and Threads Section 3.2.  Process Descriptor Section 3.3.  Process Switch Section 3.4.  Creating Processes Section 3.5.  Destroying Processes Chapter 4.  Interrupts and Exceptions Section 4.1.  The Role of Interrupt Signals Section 4.2.  Interrupts and Exceptions Section 4.3.  Nested Execution of Exception and Interrupt Handlers Section 4.4.  Initializing the Interrupt Descriptor Table Section 4.5.  Exception Handling Section 4.6.  Interrupt Handling Section 4.7.  Softirqs and Tasklets Section 4.8.  Work Queues Section 4.9.  Returning from Interrupts and Exceptions Chapter 5.  Kernel Synchronization Section 5.1.  How the Kernel Services Requests Section 5.2.  Synchronization Primitives Section 5.3.  Synchronizing Accesses to Kernel Data Structures Section 5.4.  Examples of Race Condition Prevention Chapter 6.  Timing Measurements Section 6.1.  Clock and Timer Circuits Section 6.2.  The Linux Timekeeping Architecture Section 6.3.  Updating the Time and Date Section 6.4.  Updating System Statistics Section 6.5.  Software Timers and Delay Functions Section 6.6.  System Calls Related to Timing Measurements Chapter 7.  Process Scheduling Section 7.1.  Scheduling Policy Section 7.2.  The Scheduling Algorithm Section 7.3.  Data Structures Used by the Scheduler Section 7.4.  Functions Used by the Scheduler Section 7.5.  Runqueue Balancing in Multiprocessor Systems Section 7.6.  System Calls Related to Scheduling Chapter 8.  Memory Management Section 8.1.  Page Frame Management Section 8.2.  Memory Area Management Section 8.3.  Noncontiguous Memory Area Management Chapter 9.  Process Address Space Section 9.1.  The Process's Address Space Section 9.2.  The Memory Descriptor Section 9.3.  Memory Regions Section 9.4.  Page Fault Exception Handler Section 9.5.  Creating and Deleting a Process Address Space Section 9.6.  Managing the Heap Chapter 10.  System Calls Section 10.1.  POSIX APIs and System Calls Section 10.2.  System Call Handler and Service Routines Section 10.3.  Entering and Exiting a System Call Section 10.4.  Parameter Passing Section 10.5.  Kernel Wrapper Routines Chapter 11.  Signals Section 11.1.  The Role of Signals Section 11.2.  Generating a Signal Section 11.3.  Delivering a Signal Section 11.4.  System Calls Related to Signal Handling Chapter 12.  The Virtual Filesystem Section 12.1.  The Role of the Virtual Filesystem (VFS) Section 12.2.  VFS Data Structures Section 12.3.  Filesystem Types Section 12.4.  Filesystem Handling Section 12.5.  Pathname Lookup Section 12.6.  Implementations of VFS System Calls Section 12.7.  File Locking Chapter 13.  I/O Architecture and Device Drivers Section 13.1.  I/O Architecture Section 13.2.  The Device Driver Model Section 13.3.  Device Files Section 13.4.  Device Drivers Section 13.5.  Character Device Drivers Chapter 14.  Block Device Drivers Section 14.1.  Block Devices Handling Section 14.2.  The Generic Block Layer Section 14.3.  The I/O Scheduler Section 14.4.  Block Device Drivers Section 14.5.  Opening a Block Device File Chapter 15.  The Page Cache Section 15.1.  The Page Cache Section 15.2.  Storing Blocks in the Page Cache Section 15.3.  Writing Dirty Pages to Disk Section 15.4.  The sync( ), fsync( ), and fdatasync( ) System Calls Chapter 16.  Accessing Files Section 16.1.  Reading and Writing a File Section 16.2.  Memory Mapping Section 16.3.  Direct I/O Transfers Section 16.4.  Asynchronous I/O Chapter 17.  Page Frame Reclaiming Section 17.1.  The Page Frame Reclaiming Algorithm Section 17.2.  Reverse Mapping Section 17.3.  Implementing the PFRA Section 17.4.  Swapping Chapter 18.  The Ext2 and Ext3 Filesystems Section 18.1.  General Characteristics of Ext2 Section 18.2.  Ext2 Disk Data Structures Section 18.3.  Ext2 Memory Data Structures Section 18.4.  Creating the Ext2 Filesystem Section 18.5.  Ext2 Methods Section 18.6.  Managing Ext2 Disk Space Section 18.7.  The Ext3 Filesystem Chapter 19.  Process Communication Section 19.1.  Pipes Section 19.2.  FIFOs Section 19.3.  System V IPC Section 19.4.  POSIX Message Queues Chapter 20.  Program ExZecution Section 20.1.  Executable Files Section 20.2.  Executable Formats Section 20.3.  Execution Domains Section 20.4.  The exec Functions Appendix A.  System Startup Section A.1.  Prehistoric Age: the BIOS Section A.2.  Ancient Age: the Boot Loader Section A.3.  Middle Ages: the setup( ) Function Section A.4.  Renaissance: the startup_32( ) Functions Section A.5.  Modern Age: the start_kernel( ) Function Appendix B.  Modules Section B.1.  To Be (a Module) or Not to Be? Section B.2.  Module Implementation Section B.3.  Linking and Unlinking Modules Section B.4.  Linking Modules on Demand Bibliography Books on Unix Kernels Books on the Linux Kernel Books on PC Architecture and Technical Manuals on Intel Microprocessors Other Online Documentation Sources Research Papers Related to Linux Development About the Authors Colophon Index

编辑推荐

为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理有限的内存,以至成百上千的进程能高效地共享系统。它熟练地统筹数据传输,这样CPU不用为等待速度相对较慢的硬盘而消耗比正常耗时更长的时间。《深入理解Linux内核,第三版》指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了Intel特有的重要性质。相关的代码片段被逐行剖析。然而,本书涵盖的不仅仅是代码的功能,它解释了Linux以自己的方式工作的理论基础。本书将使你了解Linux的所有内部工作,它不仅仅是一个理论上的练习。你将学习到哪些情况下Linux性能最佳,并且你将看到,在大量的不同环境里进行进程调度、文件存取和内存管理时,它如何满足提供良好的系统响应的需要。这本书将帮助你充分利用Linux系统。

作者简介

为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理有限的内存,以至成百上千的进程能高效地共享系统。它熟练地统筹数据传输,这样CPU不用为等待速度相对较慢的硬盘而消耗比正常耗时更长的时间。
《深入理解Linux内核,第三版》指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了Intel特有的重要性质。相关的代码片段被逐行剖析。然而,本书涵盖的不仅仅是代码的功能,它解释了Linux以自己的方式工作的理论基础。
本书将使你了解Linux的所有内部工作,它不仅仅是一个理论上的练习。你将学习到哪些情况下Linux性能最佳,并且你将看到,在大量的不同环境里进行进程调度、文件存取和内存管理时,它如何满足提供良好的系统响应的需要。这本书将帮助你充分利用Linux系统。

图书封面


 深入理解LINUX内核下载 精选章节试读 更多精彩书评



发布书评

 
 


精彩书评 (总计7条)

  •     这本书是好书,我就不重复那些赞美之词了。但提醒一下,新买这本书的战友们要注意了,从2.6.23版本的内核开始,进程调度方式就不再是书中提到的O(1)调度方式,而是改成了完全公平调度(CFS),大家可以看看Robert Love的《Linux内核设计与实现》第三版。还可以参考下面地址:http://www.chinaunix.net/jh/4/1063798.html我把进程调度那一章仔细看完了,后来看到内核代码才知道和书上的不一样了,希望大家不要走我走过的弯路。
  •     首先,我要强烈建议的是:这本书一定要看英文版的(买不到的话可以网上下pdf,然后淘宝上打印)!其次,我还要提醒一下linxu kernel的初学者:读这本书之前,要看一些讲解操作系统原理和概念的书。最后,对于初次看这本书的读者来说:不要指望读一遍就把这本书都搞懂。因为这部书各个章节之间(实际上是kernel的各个部分之间)是有交叉的,综合起来看才能得到一幅完整的图景。最最后,耐心是很重要的;不要追求速度(当然,如果您的理解能力和学习能力很强,就是学得快,请无视我所有话,除了这句),读懂书才是读书的目的。
  •     这里没法插图片,完整版(带图片和一些格式调整)见http://www.manio.org/cn/scheduling-of-linux-view-of-society/注:我看的是影印版,写得很好。Linux内核是一个无比复杂的系统,要想看清大致的脉络也非易事。其实,可以把运行中的Linux想像成一个人类的社会,当中的进程就是社会中的人。人有生老病死,进程有创建、异常、终止。人有各种各样的财产,进程有对应的地址空间、设备等等。人被各种各样的东西限制着,被人管着,进程也是。内核无比巨大,从哪着手?我想,从进程的视角来看是个好办法。并且,在学习Linux内核的同时,类比人类社会来看,会有更深刻的印象,理解得更透彻。本来也应该从进程的创建开始写的,但是最近在看调度的相关论文,就又把Linux调度的东西看了一下。所以,就先写调度相关的东西吧。首先介绍与进程所在环境对应的人类场景:这是一个公司,公司里有很多人(进程),每个人都有其对应的职称(优先级)。这个公司很奇怪,只有一张办公桌(CPU),在任意时刻,只能有一个人在工作(TASK_RUNNING正在运行状态)。其他人呢,要么在休息室时短暂地休息(对应TASK_RUNNING就绪状态),要么就在寝室Sleep(对应TASK_INTERRUPTABLE或TASK_UNINTERRUPTABLE),要么就是死人了,在停尸间(TASK_ZOMBIE)。是的,这是真的,这个公司就是个血汗工厂,干活累死了,就直接丢进停尸间,惨绝人寰!以下是此公司的平面图:(我是没法插进来的图:( )图解:“推门”是单向的:比如连接工作室和太平间的是推门,职员只能从工作室走到太平间,不能从太平间走到工作室(这太吓人了)。“凹槽门”是双向的:比如连接工作室和休息室的门是凹槽门,职员可以走来走去。时间片(time slice):这个公司的工资特别高,按工作的小时数计算。工作者得钱,不工作者不得钱。所以,所有的人都特想去办公桌那里工作,争着抢着要去。为了让大家都有机会去工作(避免有的人没钱拿,饿死,i.e. starve to death),所以公司出了条规定,每个人每次工作的时间不能超过公司分给自己的时间片(time slice)。时间片的大小由此人的职称决定。职称(也就是内核中的priority):职称有两种,一种是静态职称(static priority),一种是动态职称(dynamic priority)。静态职称是先天的,由此人的老爸决定(富二代有先天优势!)。动态优先级是看在公司里的工作表现的。职称是很重要的东西,职称越高,你到办公桌上赚钱的机会越大。默认时间片长点好还是短点好?自然是不长不短好(世界上的事情都是这样)。如果太短了,比如说某职员时间片是1分钟(对应的Linux里的时间片应该差不多是0.1ms吧,可能还得少点),这个人在办公桌前屁股没坐热就要走了,从起身到回到休息室,再到下一个人起身走到办公桌前坐下,这也得要一分钟。如果这样的话,这公司将有一半的时间花在走路上。这样搞是不行的,在资本主义社会,大家都要努力搞高生产率。那是不是时间片长了就好?也不是。比如时间片是一个小时,当两个客户(对应Linux中的两个用户)同时要和此公司展开业务(对应Linux中的启动进程),有两个职员会分别处理这两个业务。A职员一上去就占着办公室一个小时,B职员在这一个小时结束前没法子处理他的客户的业务,所以B职员的客户就得在寒风中等一个小时!资本主义社会里的公司是不能让他们的财神爷不高兴的。所以,还是不长不短的好。回到真实的Linux内核中:很多人认为时间片过长会导致程序的响应(比如字处理程序的I/O响应)变慢,因为要等时间片用完才能处理。其实不然,字处理程序等交互性强的程序,他们的优先级高,可以抢占当前正在运行的进程,从而得到执行。在公司里,就比如B职员的职称高,他可以把A职员从办公桌上踢走。事实上,从后面对动态优先级的讨论我们可以看到,要是A职员一直霸占着办公桌不走,他/她的动态职称会变低的,结果是,在休息室里的其他职员的职称就自然而然地可能比A高了。职员目录(Process list):公司有个目录,在这个目录中,列出了所有公司的职员。这对应Linux里的Process List,里面存有所有进程的信息。下面以Mr. P的经历为例说明Personal History Statement of Mr. Process (Mr. P in short)出生这是世界上最怪异的公司,职员都是单性的,都是男的。并且不要交配,自己调用系统调用fork(),就可以生了。生出来的小孩子也都是男的。在这里为了问题的简化,就只讨论与调度的关系比较紧密的内容。(我是没法插进来的图:( )图:详细的公司平面图如上图所示,在休息室里其实还有两个沙发。一个沙发叫做活动队列(往后我们叫它活动沙发吧),一个沙发叫做过期队列(往后我们叫它过期沙发)。坐在活动沙发上的职员都还有时间片没有用完,坐在过期沙发上的职员的时间片刚刚被用完了(但他们手上都拿着新分配到的时间片,这个是2.5版内核新引入的O(1)调度,后面再讲)。Mr. P的父亲在办公桌旁边工作的时候,突然fork()了一下,就生出了Mr.P。一出生,Mr. P就拥有和父亲一样的静态职称(static priority)。他一出生就坐在了活动沙发上,拿走了父亲一半的时间片。比如生MR. P之前,MR. P的父亲有10ms的时间片,MR.P出生后,他父亲有5ms,Mr. P有5ms。这样的机制是为了防止有人以生子来抢夺时间片:试想,有一人,自己有10ms的时间片,他一直生啊生,生了100个孩子,那么这个程序就有了10+10*100ms的时间片了。然后他的孩子断续生啊生,那么有可能系统中绝大部分的时间片都是他家的了,那他的街坊邻居还要不要活啊,没时间片等于不能做事,等于没工资,等于没食物,等于饿死。另外,不幸的是,即使是在发达的资本主义社会,孩子也是有可能夭折的(由于各种原因,在第一次到办公桌上工作之前就死掉了)。在这种情况下,公司会把孩子没用的时间片还给他父亲。多么人性化的公司…开始工作像其他所有孩子一样,Mr. P一生下来就能工作了,他坐在活动沙发上等着做事。他人事部的同事Miss Schedule (以下简称Miss S)会在每个tick(内核的时间单位,时间很短)结束时检查一下以下两种情况有没有发生:1. 在办公桌前工作的那个职员是不是已经用完自己的时间片了。2. 是不是有更高动态职称(dynamic priority)的职员在活动沙发上等着。其中一种情况成立,这个在办公桌前工作的那个职员就要被赶出来,换在活动沙发上坐着的动态职称最高的职员进去工作。假设经过一段时间后,没有人的动态职称比Mr. P高了。在一个时间tick结束时,Miss S到休息室检查大家当前的职称。他能轻松地找到动态职称最高的职员(sched_find_first),因为职员们都是按动态职称来坐的(在活动沙发上),动态职称相同的职员坐在一起(参考struct prio_array)。Miss S只要按顺序找下去,第一个在沙发上找到的职员就是职称最高的。当Miss S用上面的方法发现Mr. P当前的动态职称是最高的时,在办公桌前工作的是职员C,Miss S把C从办公桌前拉到休息室。如果此时C的时间片已经用完了,他就会被安排坐在过期沙发上(这也就是expired的含义);如果此时C的时间片没有用完,他就会被安排坐在活动沙发上。C被拉到休息室时,他的工作用具,笔啊纸啊什么的,都要从办公桌上拿走(这是关于进程上下文切换的问题)。C走了之后,Mr. P带着他的东西到办公桌前坐下,整理好办工用品(进程上下文切换)。好的,Mr. P可以开始工作了。评定动态职称公司里的两类人:交际花(I/O消耗型进程):这类人常常与外部的客户打交道,而客户的反应总是不怎么快。所以,交际花常常要等客户做出反应。公司为了不让交际花在等客户反应的时候也占用着办公桌,所以,当交际花要等待客户的响应时,他就会被移到寝室去睡觉(Sleep)。工作狂(处理器消耗型):这类人就是传说中的苦干王,很少和外界打交道,就知道在办工桌上做事。这种工作狂给公司造成一些困扰,如果他们老占着办公桌,交际花就没法做事了。要知道,一个公司还是需要人去跑跑业务的。公司有一套机制,这一套机制能很好的区分这两类人,并且给他们评定职称。判断的标准就是他们的平均睡眠时间(average sleep time)。睡眠时间包括在寝室里的时间(TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE)和在休息室时等待的时间。但平均睡眠时间的计算并不是加和再求平均那么简单。在TASK_INT和TASK_UNINT两种状态下,平均睡眠时间的增长情况是不一样的。在运行的时间,平均睡眠时间是在减少的。具体的平均睡眠时间的算法在recalc_task_prio()中。当一个职员常常睡觉,公司就知道这人是交际花了,因为他常常因为等客户的响应而睡觉。当一个职员很少睡觉,公司就知道这人是个工作狂了,因为他很少因为等客户的响应而睡觉。现在我们回来讨论Mr. P,假设Mr. P在工作的时候要等待一个客户给数据给他(比如说键盘数据),他就把自己的加入一个等待队列里,将自己设为TASK_INT,这样他就进入了寝室里。Mr. P在那里苦苦地等待他要的数据到来。终于,客户敲下了键盘,给出了数据。然后键盘事件的管理者调用wake_up()函数,将Mr. P唤醒。如果Mr. P的动态职称高于当前正在工作的职员的动态职称,那么Mr. P就会抢掉这个职员的办公桌。如果不高于的话,Mr. P就只是先到休息室里坐着。我们假设Mr. P的动态职称很高,所以,现在Mr. P又抢到了办公桌。O(1)调度又过了一段时间,Mr. P的时间片用完了,该离开了。这时他该被Miss S带到过期沙发上了,在从办公桌走到过期沙发的路上,Miss S会帮他重新算时间片(依照动态职称来决定时间片的长短)。事实上,每个职员被带到过期沙发上坐着的时候,Miss S都会帮他算好时间片。这样,过期沙发上的所有职员手中都拿着时间片。这样做的好处是,当活动沙发空了的时间,只要把活动沙发和过期沙发上贴着的“活动沙发”和“过期沙发”的标签互换一下,原来的过期沙发就变成了活动沙发,原来的活动沙发就变成了过期沙发。这样,Miss S就又可以从活动沙发上叫人去工作了。而这个“互换标签”的动作的时间复杂度是O(1)。这就是2.5版内核所引入的O(1)调度。试想一下没有这个O(1)调试之前是什么情况:每次所有进程的时间片都用完时,要重新计算所有TASK_RUNNING状态的进程的时间片。当一个系统中只有几个进程的情况还好,但是对于有成千上万个进程的大型系统,这是相关耗时的。对交际花的优惠政策在一个公司来说,交际花是非常重要的,他们的表现直接关系到客户的满意度和公司的形象。所以,Linux公司有一些专门针对交际花的优惠政策。假设Mr. P就是一个十足的交际花:上班打扮得花枝招展(虽然是个男的),见人说人话见鬼说鬼话,关键是,他有一些客户特别爱和他把交道。当Mr. P用完一个时间片的时候,照常理,他是应该被Miss S带到过期沙发上去等待下一次工作的。但这样的等待有可能太久了-要等到所有活动沙发上的职员都用完时间片。所以,Miss S为了客户的满意度(如果等太久,客户是不满意的),就在重新计算Mr. P的时间片之后,让他留在了活动沙发上。这样,Mr. P就能更快地处理客户的IO事件。这看起来是对交际花的特权,其实这是为了公司的长远利益着想。如果客户的需求得不到及时的满足,客户不满意,就不会有人用这公司的产品了,即使工作狂们的工作做得很好。公司里的超级特权阶级-小霸王(real-time process)交际花是有一些特权,但权利再大也大不过小霸王。公司有时会有一些时间很紧的项目要做,这些项目有deadline。为了能完成这些重要的项目,公司里发展了一种特权阶级,就是小霸王。他们的职称高于其他所有普通员工,除非他们完成了自己的工作,否则其他职工不能去工作。这些小霸王的工作方式有两种:FIFO(First In First Out):当一个小霸王完成自己工作的时间,其他小霸王才能去工作。但是当有职称更高的小霸王到来时,职称更高的小霸王能抢占当前的小霸王的办公桌。RR(Route Robin):相同优先级的小霸王转着用办公桌,每人用一段时间。总结:在这篇文章里,以Mr. P的工作经历来说明了Linux调度的一些比较重要的机制。介绍了IO消耗型进程和处理器消耗型的进程,O(1)调度等等。这些是比较大的方面,当大的方面理解了之后,那些世界顶尖高手写的源码也就更容易看懂一些了。

精彩短评 (总计63条)

  •     very good text
  •     好书是自然的,如果有基础的话,通读就没有必要了
  •     太复杂 就看了一章
  •     做个参考书把
  •     从力荐调到推荐,不是因为书,是因我没全读完。。。
  •     好书!读一遍根本不够,可惜现在用不上了啊,真想去干linux。
  •     书里的内核已经有点老了, 我用Debian 6.0系统,是2.6.32的内核,很多东东都变了,API也变了, 希望各位朋友,快点把书看完,对着书,看源码,来来回回, 最后尽量少看书。。看源码。。。 写源码,改源码。。。
  •     这书囫囵吞枣读过一遍,后来编书又读了一些章节,以后肯定是需要在看的
  •     又是一部大部头,曾经还拿着英文版的啃过,那个效率。这是一本偏理论的书籍,基础不好的不太好啃,建议先从一部小部头开始。《linux内核设计与实现》讲的简略一些,可以先考虑
  •     : TP316.81/4052
  •     积灰率蛮高的
  •     为什么总是缺货呢!?
  •     争取开始看英文的吧,看中文的,理解累,看英文的,阅读累。
  •     学习linux内核的不二选择
  •     让我热泪盈眶,相见恨晚的书
  •     要想学好Linux,先买这本书吧
  •     进阶
  •     结合 linux内核源代码情景分析
  •     虽然乏味,但也要认真读下去
  •     介绍内核的书籍,体积庞大
  •     同没看完,只看了内存管理
  •     非常好的一本书,Linux学习者必备
  •     亚马逊老爹,你能不能不要这么坑,我憋了一个月就等您的影印版,最后实在忍不住了买了你的中文版,翻译质量看得我那个疼啊。这下好了,才过几天你就把影印版的放出来了,你让我情何以堪,你知道的,别的书店一直都有影印版啊,我不去买还不是为了你的送货速度嘛。
  •     温故而不知新
  •     浏览完后没留下什么记忆。
  •     这个要重看一遍
  •     后端码农推荐读一下,面面俱到,可以结合着kernel相关代码一起看。
  •     不深差评
  •     整体把握linux,还算一部好书!
  •     翻译的不好,还是找原版看吧
  •     太厚了,读完就是个煎熬
  •     想读linux源码的人可以看一下,不错的参考书
  •     excellent!
  •     一般,对于初学或者精通的人都不太合适,可能是译者的问题。
  •     很好的linux指南
  •     学内核必备
  •     翻译的太烂了,都第六次印刷了,错误还是一大堆。
  •     怪我才学疏浅。。。
  •     版本有点老
  •     大头,总结概括型。 但章法稍显不足。做不到提纲挈领。
  •     这本书是学习Linux驱动的必备书籍,值得收藏,但不知道英文版什么时候有货!!
  •     研习中
  •     很不错的书,就是起点较高,不过还是很适合有一定基础的人读的
  •     十分怀疑翻译的功力和水平,英语能力和专业词汇过硬的前提下一定读原著
  •     以前看得电子版,但是还是要有本纸的。内存管理部分需要我在细细阅读。
  •     如果说一般的书将的都是概念为主,这个版本就讲的细致到代码的方方面面,从代码的角度来理解操作系统,看得话费时,而且容易迷失,不仅要有精力,而且需要时间,有相当得编程基础,最好是linux或者unix比较熟悉之后进行。 看过之后,对很多软件的本质了解得比较清楚。不是白看的;)
  •     经典书籍。
  •     入门必备 部门领导推荐的两本书之一 入职前开始学习这本书 真是几句话就好多知识 比论坛上的分析还要好 遇到linux内核问题后先看看书 帮助很大 工作很久后 有时候还能从书上看到以前没注意到的知识 比如地址空间和进城切换时间片等等
  •     自有
  •     操作系统必读,Linux,x86
  •     书本身很好,配送很快
  •     非常好的linux内核读物,既不是纠结于具体实现,也不是像某些书只是粗浅的介绍,可以说恰到好处。
  •     正在看
  •     linux的书过时太快了。。真正应该买本operating system concepts,然后跟着老师学,其实我觉得LDD似乎更好?
  •     without you L is nothing.magic word.Kernel.
  •     原理性书籍,但是不够深入。
  •     经典的书,翻阅用
  •     很不错的书,就是书边上有些破损,不知是快递的错还是原来就那样。。。整体还可以
  •     影印版的还不错,但有个状况
  •     讲的很详细,适合中高级水平的Linux内核开发者,细读了一遍,对内核有了一个更好的理解,更适合作为参考书
  •     好书,看了大部分章节。值得下次再看一遍
  •     翻过好多次了,学习linux的经典书籍,强烈推荐。
  •     很全的编程手册
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024