基本信息
- 作者: 老男孩(美)Robert Love
- 译者: 陈莉君 康华
- 丛书名: Linux/Unix技术丛书
- 出版社:机械工业出版社
- ISBN:9782001061618
- 上架时间:2020-1-6
- 出版日期:2019 年11月
- 开本:16开
- 页码:792
- 版次:1-1
- 所属分类:计算机 > 操作系统 > Linux

编辑推荐
---------------------------Linux内核设计与实现(原书第3版)---------------------------
畅销图书新版,翻译版、影印版同步上市
详细描述Linux内核的主要子系统和特点
涵盖Linux内核从理论到实践的方方面面
内容简介
计算机书籍
---------------------------跟老男孩学Linux运维:高性能Web集群实践(上)---------------------------
全书共分为12个章节(0-11章)第0章,讲解CentOS7.6操作系统的安装。第1章,主要讲解Web集群架构基础概念知识、架构模型、架构搭建规划、架构优化等。第2章,主要的数据备份工具。第3章,讲解NFS网络文件共享服务。第4章,讲解网站数据实时复制应用与实践。第5章,主要讲解SSHD远程连接工具企业应用实践。第6章,主要讲解Ansiable批量管理工具应用与实践。第7章,主要讲解HTTP及Web服务核心基础知识。第8章,主要讲解Nginx静态Web服务应用实践。第9章,主要讲解企业级LNMP环境部署实践。第10章,主要讲解Nginx反向代理与动静分离架构实战。第11章,主要讲解Keepalived高可用集群实战。
---------------------------Linux内核设计与实现(原书第3版)---------------------------
《Linux内核设计与实现(原书第3版)》基于Linux 2.6.34内核详细介绍了Linux内核系统,覆盖了从核心内核系统的应用到内核设计与实现等各方面内容。主要内容包括:进程管理、进程调度、时间管理和定时器、系统调用接口、内存寻址、内存管理和页缓存、VFS、内核同步以及调试技术等。同时本书也涵盖了Linux 2.6内核中颇具特色的内容,包括CFS调度程序、抢占式内核、块I/O层以及I/O调度程序等。《Linux内核设计与实现(原书第3版)》采用理论与实践相结合的路线,能够带领读者快速走进Linux内核世界,真正开发内核代码。
《Linux内核设计与实现(原书第3版)》适合作为高等院校操作系统课程的教材或参考书,也可供相关技术人员参考。
作译者
---------------------------Linux内核设计与实现(原书第3版)---------------------------
Robert Love是一位资深的开源社区达人,很早就开始使用Linux。目前他是Google公司高级软件工程师,是开发Android移动平台内核的团队成员;他曾在Novell公司任职Linux桌面系统的首席架构师;他之前也曾是MontaVista和Ximain公司的内核开发工程师。他参与的内核项目包括抢占式内核、进程调度器、内核事件层、通知机制、VM改进,以及设备驱动程序。他是《Linux journal》杂志的编辑。另外他还著有《Linux System Programming》和《Linux in a Nutshell》。
陈莉君,西安邮电学院教授,十多年来一直致力于推动Linux在中国的发展,多年从事Linux内核的教学和研究,并积极跟踪Linux内核的发展动向,对Linux内核版本的不断演化有着深刻的理解。著译作品有《Linux操作系统原理与应用》、《Linux操作系统内核分析》、《深入分析Linux内核源代码》、《深入理解Linux内核》和《Linux内核编程》等。
目录
---------------------------跟老男孩学Linux运维:高性能Web集群实践(上)---------------------------
前言
第1章 企业级CentOS7.6操作系统安装 / 1
1.1 下载CentOS系统ISO镜像 / 1
1.2 CentOS7.6操作系统的安装准备 / 4
1.3 开始安装CentOS7.6操作系统 / 5
1.4 系统安装后的基本配置 / 21
1.5 本章相关问题 / 32
第2章 中小规模Web集群规划与环境准备 / 33
2.1 网站集群架构介绍 / 33
2.2 网站集群架构组成 / 34
2.3 网站集群架构搭建规划 / 40
2.4 网站集群架构系统优化 / 42
第3章 Rsync数据复制软件应用实践 / 51
3.1 Rsync介绍 / 51
译者序
---------------------------Linux内核设计与实现(原书第3版)---------------------------
不知不觉涉足Linux内核已经十多个年头了,与其他有志(兴趣)于此的朋友一样,我们也经历了学习—实用—追踪—再学习的过程。也就是说,我们也是从漫无边际到茫然无措,再到初窥门径,转而觉得心有戚戚焉这一路走下来的。其中甘苦,犹然在心。
Linux最为人称道的莫过于它的自由精神,所有源代码唾手可得。侯捷先生云:“源码在前,了无秘密。”是的,但是我们在面对它的时候,为什么却总是因为这种规模和层面所造就的陡峭学习曲线陷入困顿呢?很多朋友就此倒下,纵然Linux世界繁花似锦,纵然内核天空无边广阔,但是,眼前的迷雾重重,心中的阴霾又怎能被阳光驱散呢?纵有雄心壮志,拔剑四顾心茫然,脚下路在何方?
Linux内核入门是不容易,它之所以难学,在于庞大的规模和复杂的层面。规模一大,就不易现出本来面目,浑然一体,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?
“如果有这样一本书,既能提纲挈领,为我理顺思绪,指引方向,同时又能照顾小节,阐述细微,帮助我们更好更快地理解STL源码,那该有多好。”孟岩先生如此说,虽然针对的是C++,但道出的是研习源码的人们共同的心声。然而,Linux源码研究的方法却不大相同。这还是由于规模和层面决定的。比如说,在语言学习中,我们可以采取小步快跑的方法,通过一个个小程序和小尝试,就可以取得渐进的成果,就能从新技术中有所收获。而掌握Linux呢?如果没有对整体的把握,即使你对某个局部的算法、技术或是代码再熟悉,也无法将其融入实用。其实,像内核这样的大规模的软件,正是编程技术施展身手的舞台(当然,目前的内核虽然包含了一些面向对象思想,但还不能让C++一展身手)。
那么,我们能不能做点什么,让Linux的内核学习过程更符合程序员的习惯呢?
Robert Love回答了这个问题。Robert Love是一个狂热的内核爱好者,所以他的想法自然贴近程序员。是的,我们注定要在对所有核心的子系统有了全面认识之后,才能开始自己的实践,但却完全可以舍弃细枝末节,将行李压缩到最小,自然可以轻装快走,迅速进入动手阶段。
因此,相对于Daniel P. Bovet和Marco Cesati的内核巨著《Understanding the Linux Kernel》,《Linux内核设计与实现(原书第3版)》少了五分细节;相对于实践经典《Linux Device Drivers》,它多了五分说理。可以说,《Linux内核设计与实现(原书第3版)》填补了Linux内核理论和实践之间的鸿沟,真可谓“一桥飞架南北,天堑变通途”。
就我们的经验,内核初学者(不是编程初学者)可以从本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的。而且,本书还包含了Linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等。在消化本书的基础上,如果你侧重于了解内核,可以进一步研究《Understanding the Linux Kernel》和源代码本身;如果你侧重于实际编程,可以研读《Linux Device Drivers》,直接开始动手工作;如果你想有一个轻松的内核学习和实践环节,请访问我们的网站www.kerneltravel.net。
Linux内核是一艘永不停息的轮船,它将驶向何方我们并不知晓,但在这些变化的背后,总有一些原理是恒定不变的,总有一些变化是我们想知晓的,比如调度程序的大幅度改进,内核性能的不断提升,本书第3版虽然针对的是较新的2.6.34 Linux内核版本,但在旧版本上积累的知识和经验依然有效,而新增内容将使读者在应对变化了的内核代码时更加从容。
感谢牛涛和武特,他们在第2版和第3版差异的校对中花费了大量精力。感谢素不相识的网友Cheng Renquan,他主动承担了其中一章的修订。还要感谢苏锦绣、黄伟、王泽宇、赵格娟、刘周平、周永飞、曹江峰、陈白虎和孟阿龙,他们参与了后期的校对和查错补漏。
最后,特别感谢我的合作者康华,从十年前一块分析Linux内核代码到今天,他对技术孜孜不倦的追求不但在业界赢得声誉,也使我们在翻译过程中所遇到的技术难点和晦涩句子被一一迎刃而解。感谢合作者张波,他流畅有趣的文笔让本书少了份枯燥,多了份趣味。
陈莉君
2010年10月
前言
---------------------------跟老男孩学Linux运维:高性能Web集群实践(上)---------------------------
为什么要写这本书
不知不觉接触Linux(之前用的是Solaris)已经有18个年头了,在这18年的运维职业生涯中,我走过了相当多的弯路,特别是头两年相当迷茫、彷徨,最要命的是无论怎么努力学习和坚持,就是感觉自己没有入门。那时,好的Linux学习书籍寥寥无几,工作中也无人指导,更没有什么像样的培训机构,所以服务器一出故障,我就会无所适从,好多次都是在痛苦的挣扎中度过的,好多次都想要放弃学习Linux。
后来我慢慢地积累了一些经验,有了自己的运维心得。在运维技术有了质的飞跃之后,我开始酝酿一套Linux培训体系课程,最初的目的就是希望大家不要走我走过的弯路,因为这条路充满了荆棘,一不小心就可能走不出来。
经过一段时间的酝酿,我把我的想法写成一份项目策划书,发给了公司老板,希望公司能够开展IT培训相关的业务,并由我负责这块业务。老板首肯了我的策划书,给了我鼓励,但是接下来没有任何实际行动,可能是觉得时机不够成熟。
老板无动于衷,但是我的心却被策划书给拽走了,于是我就开始了我的兼职IT培训生涯,这就是“老男孩IT教育”的前身。在多年的培训教学过程中我发现,很多小伙伴因为条件的限制无法来北京现场学习,虽然我录制了大量的网络视频,但还是有非常多的朋友希望老男孩能够把课堂内容整理成书,方便他们深入学习。看到小伙伴们的热切期盼,我心动了,觉得真的该为大家做些什么,于是我开始计划把课堂内容整理成书,让全国的小伙伴都能够从中受益。
但是由于培训课程的排期很紧,平时我还要在企业里工作,而且写书和讲课也是不同的路数,因此写书计划一直被搁浅,直至遇到了机械工业出版社的杨绣国编辑,因为她的执着、包容和鼓励,使得我有足够的信心和动力完成写作,并且还在策划Linux运维实战相关的更多图书,它们后续会一一和大家见面。
现今,全球进入了互联网+时代,越来越多的传统企业都在考虑通过网络提供产品和服务,包括互联网+教育、互联网+金融、互联网+出租车、互联网+保险等。而互联网(包括移动互联网在内)几乎都是由Linux技术支撑的,掌握Linux运维技术已经成为每一个IT技术人员的必经之路,本书涉及的中小规模网站集群架构就是构建在Linux系统上的高性能高并发企业级网站集群架构的解决方案!
读者对象
Linux系统管理员和运维工程师
互联网网站开发及数据库管理人员
网络管理员和项目实施工程师
Linux相关售前售后技术工程师
开设Linux相关课程的大中专院校
对Linux感兴趣的人群
序言
---------------------------Linux内核设计与实现(原书第3版)---------------------------
随着Linux内核和Linux应用程序越来越成熟,越来越多的系统软件工程师涉足Linux开发和维护领域。他们中有些人纯粹是出于个人爱好,有些人是为Linux公司工作,有些人是为硬件厂商做开发,还有一些是为内部项目工作的。
但是所有人都必须直面一个问题:内核的学习曲线变得越来越长,也越来越陡峭。系统规模不断扩大,复杂程度不断提高。虽然现在的内核开发者对内核的掌握越发炉火纯青,但新手却无法跟上内核发展的步伐,长此以往将出现青黄不接的断层。
我认为这种新老鸿沟已经成为内核质量的一个隐患,而且问题将继续恶化。所以那些真正关心内核的人已经开始致力于扩大内核开发群体。
解决上述问题的一个方法是尽量保证代码简洁:接口定义合理,代码风格一致,“一次做一件事,做到完美”等。这也就是Linus Torvalds倡导的解决办法。
我提倡的解决办法是对代码慷慨地加上注释,即能够让读者立刻了解代码开发者意图的文字(识别意图和实现之间差异的工作称为调试。如果意图不明确显然调试就难以进行)。
可是,即使有注解,也没办法清楚地展现内核的各个主要子系统的全景,说明它们到底要做什么。那么,这些开发者又该从何下手呢?
由文字材料来说明这些在起步阶段就该理解的材料,其实是最合适的。
Robert Love的贡献就在于此,有经验的开发者可以通过本书全面了解内核子系统提供的服务,同时还可以了解这些服务是怎么实现的。对不少人来说,这些知识就已经足够了:那些好奇的人,那些应用程序开发者,那些想对内核的设计品头论足一番的人,都有足够的谈资了。
但是学习本书同样可以作为那些有抱负的内核开发者更上一层楼的契机,可以帮他们更改内核代码以达到预定的目标。我建议有抱负的开发者能够亲身实践:理解内核某部分的捷径就是对它做些修改,这样能为开发者揭示仅仅通过看内核代码无法看到的深层机理。
严肃认真的内核开发者应该加入开发邮件列表,不断和其他开发者交流。这是内核开发者相互切磋和并肩前进的最好方法。而Robert在书中对内核生活中至关重要的文化和技巧都做了精彩介绍。
请学习和欣赏Robert的书吧。想必你也希望能精益求精,继续探索,成为内核开发社区中的一员,那么首先你要清楚的是:社区欢迎你。我们评价和衡量一个人是根据他所作的贡献,当你投身于Linux时,你要明白:虽然你仅仅贡献了一小份力,但马上就会有数千万或上亿人受益。这是我们的欢乐之源,也是我们的责任之本。
Andrew Morton
媒体评论
---------------------------跟老男孩学Linux运维:高性能Web集群实践(上)---------------------------
互联网运维涉及的知识面非常广,本书涵盖了构架一个Web网站集群所需要的基础知识,以及常用的Web集群开源软件使用实践。通过本书的实战指导,能够帮助新人很快上手搭建一个完整的Web集群架构网站,并掌握相关的知识点,从而胜任企业的运维工作。
——井源 小米运维总监
认识老男孩老师已已有多年,这些年来我们一直保持着沟通,他不仅仅在技术上不断地给予我指导,更是我的人生导师。如今,老师的学员越来越多,事业也越来越好,唯独不变的是他的教学根本,这也是该书的核心体现。
这本书是老男孩老师十几年运维生涯的一个缩影,由浅入深,很适合一个愿意从事运维工作的新手,而对于有经验的读者,阅读本书则会如虎添翼。本书基于CentOS7.6针对中小规模集群架构的搭建和部署进行了全新的详细讲解。如果你能认真阅读这本书,再去听听他讲的课,相信你会受益匪浅。
——吕飞 阿里巴巴资深运维工程师
---------------------------Linux内核设计与实现(原书第3版)---------------------------
《Linux内核设计与实现》相对于Daniel P. Bovet和Marco Cesati的内核巨著《Understanding the Linux Kernel》,少了五分细节;相对于实践经典《Linux Device Drivers》,又多了五分说理。可以说,本书填补了Linux内核理论和实践之间的鸿沟,真可谓“一桥飞架南北,天堑变通途”。—译者
能够把linux内核的内容在300多页内叙述一遍,本身就是一件高难度的事情。但这本《Linux内核设计与实现》确实做到了。全书很少涉及具体实现,而是把握思想,讲解算法,读者可以学习到linux内核的知识,而不用纠缠于具体细节。—豆瓣读者Googol
书摘
---------------------------Linux内核设计与实现(原书第3版)---------------------------
16.4.1 膝上型计算机模式
膝上型计算机模式是一种特殊的页回写策略,该策略主要意图是将硬盘转动的机械行为最小化,允许硬盘尽可能长时间地停滞,以此延长电池供电时间。该模式可通过/proc/sys/vm/laptop_mode文件进行配置。通常,上述配置文件内容为0,也就是说膝上型计算机模式关闭,如果需要启用膝上型计算机模式,则向配置文件中写入1。
膝上型计算机模式的页回写行为与传统方式相比只有一处变化。除了当缓存中的页面太旧时要执行回写脏页以外,flusher还会找准磁盘运转的时机,把所有其他的物理磁盘I/O、刷新脏缓冲等通通写回到磁盘,以便保证不会专门为了写磁盘而去主动激活磁盘运行。
上述回写行为变化要求dirty_expire_interval和dirty_writeback_interval两阈值必须设置得更大,比如10分钟。因为磁盘运转并不很频繁,所以用这样长的回写延迟就能保证膝上型计算机模式可以等到磁盘运转机会写入数据。因为关闭磁盘驱动器是节电的重要手段,膝上模式可以延长膝上计算机依靠电池的续航能力。其坏处则是系统崩溃或者其他错误会使得数据丢失。
多数Linux发布版会在计算机接上电池或拔掉电池时,自动开启或禁止膝上型计算机模式以及其他需要的回写可调节开关。因此机器可在使用电池电源时自动进入膝上型计算机模式,而在插上交流电源时恢复到常规的页回写模式。
16.4.2历史上的bdflush、kupdated和pdflush
在2.6版本前,flusher线程的工作是分别由bdflush和kupdated两个线程共同完成。
当可用内存过低时,bdflush内核线程在后台执行脏页回写操作。类似flusher,它也有一组阈值参数,当系统中空闲内存消耗到特定阈值以下时,bdflush线wakeup_bdflush()函数唤醒。
bdflush和当前的flusher线程之间存在两个主要区别。第一个区别是系统中只有一个bdfiush后台线程,而fiusher线程的数目却是根据磁盘数量变化的(这在16.5节中会谈到);第二个区别是bdflush线程基于缓冲,它将脏缓冲写回磁盘。相反,flusher线程基于页面,它将整个脏页写回磁盘。当然,页面可能包含缓冲,但是实际I/O操作对象是整页,而不是块。因为页在内存中是更普遍和普通的概念,所以管理页相比管理块要简单。
因为只有在内存过低和缓冲数虽过大时,bdflush例程才刷新缓冲,所以kupdated例程被引入,以便周期地写回脏页。它和pdflush线程的wb_writeback()函数提供同样的服务。
在2.6内核中,buflush和kupdated已让路给了pdflush线程——page dirty flush(比以前两个更容易令人混淆的名字)的缩写。Pdflush线程的执行和今天的flusher线程类似。其主要区别在于,pdflush线程数目是动态的,默认是2个到8个,具体多少取决于系统I/O的负载。Pdflush线程与任何任务都无关,它们是面向系统所有磁盘的全局任务。这样做的好处是实现简单,可带来的问题是,pdflush线程很容易在拥塞的磁盘上绊住,而现代硬件发生拥塞更是家常便饭。采用每个磁盘一个刷新线程可以使得I/O操作同步执行,简化了拥塞逻辑,也提升了性能。
……