Linux内核应用及分析

内容简介

本书由架构师亲力打造,分享了他十多年后端开发经验,特别是围绕 Linux 系统进行的服务开发经验。

本书共8章,主要内容包括:

第1章介绍 Linux 对进程和线程的实现原理,并分析了 Memcached 和 Nginx 工作进程池模型的实现;
第2章介绍并发的概念以及 Linux 中的并发相关工具,然后分析常见开源软件的并发问题;
第3章介绍 Linux 是如何进行内存管理的,分析了 Memcached 和 Redis 的内存管理机制;
第4章介绍 Linux 系统对中断进行的封装和实现;
第5章介绍 I/O 的全过程,以及某些开源系统中 I/O 相关调用的实现等;
第6章介绍 Linux 文件系统的整体架构及核心概念,然后介绍 ext4 文件系统的特点,以及 TFS 小文件系统的设计思路;
第7章介绍 Linux 进程隔离技术,以及 Docker 容器的部分实现;
第8章介绍 Linux 网络层数据的流转过程,以及 lvs 如何在 netfilter 上定制,后分析了 Nginx 服务器 socket 监听初始化的过程。
作者简介

目录如下图所示:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

陈科,曾在阿里巴巴等多家互联网公司担任架构师、技术总监等职位,参与设计和开发了多个应对高并发、高可用的互联网系统,对 Linux 系统以及围绕 Linux 生态体系的开源软件有深入研究,热爱分享,在 UPYUN、DBA+、高可用架构群等组织的会议或者讨论组中做过专题分享。

本书内容

对本书的赞誉

本书在分析 Linux 进程、并发、内存、中断、IO、网络的同时,还分析了目前大家熟知的 Nginx、Memcached、Redis、LVS 等知名开源软件,理论结合实践,让人受益匪浅。特别是结合了容器化技术的分析,让读者从底层了解容器化(Docker)的基本原理,在容器化火热的今天,不得不说作者特别贴心。这是一本开发人员、架构师都值得一看的增强内功的书。

——许泽彬,淘宝技术专家
经过20多年的发展,Linux已经成为互联网技术的基石之一。虽然关于Linux的书籍众多,但几乎是现代操作系统理念的介绍,或者在此之上结合Linux源码加以分析,从而使读者了解操作系统的演变和实现。本书的内容更贴合互联网时代,让读者重温Linux之外,作者更希望引发大家思考操作系统的魅力。每一章不仅介绍核心理念和实现,而且还带领大家拓展技术的延展性,重新思考Nginx、Redis、LVS等产品的技术发展脉络。饮水思源,思考技术的延展性的书籍少之又,本书是难得佳品。
——杨翔,广东三维家信息科技有限公司CTO、前蚂蚁金服高级技术专家
本书的作者是我多年的老友,其对技术的兴趣与钻研精神令我非常敬佩。本书很好地将Linux内核与现今流行的重要技术相结合,阐述了很多技巧,然而最令我欣赏的是作者对“知其然,知其所以然”的实践与布道。技巧可以让人即刻受益,然而在“思想”就显得渺小了,领悟了技术思想将使人终身受益!我们也看到很多老鸟们在会耍十八般武艺后,遇到了发展和晋升的瓶颈,归根到底是缺乏这种思想和实践。本书以实战的方式演绎了如何去“知其然”,更示范了如何去“知其所以然”,就如同名家教你如何临摹名画,引人入胜,发人深省。
——胡志强,前马云公益基金会平台总经理,阿里巴巴技术总监
IT大时代,技术浪潮席卷整个人类社会。作为一名程序员或者架构师,每天会面对纷繁的技术领域与挑战,掌握扎实的操作系统、数据结构与算法、编译原理、数学知识,是最基础、最重要的,直接决定个人职业生涯的未来。我与本书作者认识多年且有机会一同共事,一直以来对其深厚的技术底蕴、孜孜不倦的技术钻研,甚为佩服!本书对Linux内核源代码的分析深入浅出,娓娓道来,涵盖了Linux内核的各个重要方面,并且涉及目前业界热门的容器与虚拟化技术,如果读者能够沿着本书的脉络,结合Linux源代码阅读,一定能够开卷有益,收获良多!
——冯黎,前华为软件开放平台架构师
对于从事Linux平台的开发者来说,了解Linux内核尤为重要,它不仅可以使我们对Linux更加了解,而且使我们分析问题会更加深入本质。本书从Linux内核分析到实际应用,结合Nginx、Redis、Memcached等常用应用的实际问题进行详尽的分析,特别是对于一些关键技术点,作者都给予了深入的剖析和评价,对于从事Linux平台的开发者来说本书无疑是一次知识盛宴。
——刘晓飞,前58同城首席架构师,技术总监
设计和实现一款优秀的操作系统内核或者应用程序充满了挑战,也正因为如此,深入理解Linux内核以及运行在Linux内核之上的具有代表性的应用程序就显得非常有意义。我与本书作者陈科相识已久,见证了他多年战斗在一线,有着丰富的企业级系统架构经验。本书分模块介绍了Linux操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解;并结合诸多经典应用程序解析了如何利用操作系统提供的底层支持进行合理的设计和实现。Linux是一个庞大且伟大的工程,如果你不满足于站在巨人的肩膀上,想要知其所以然,提升自己面对未知问题时的“迁移学习”能力,那么本书将是一个很好的起点。
——郁佳杰,贝贝网CTO
现在是一个IOT正在兴起的时代,我们的编程视角不断地放大,从普通的PC机到人手一部的智能机,再到各式各样的终端设备,这样的高速成长离不开底层的操作系统升级。以毫不夸张地说,Linux系统占据了绝对的重要地位,我们任何的系统设计和架构最后都可以追溯到系统内核中。
阿里巴巴最近10年在技术上突飞猛进,某种程度上正是得益于对Linux系统底层的深度定制和使用,这才能研发出一系列的中间件和云产品,支撑着N个双11。
我和本书作者陈科认识好多年,每一次的交流我都能吸收到更多的技术灵感,我认为这正是本书能够带来的价值。掌握内核之后,理解和认识任何其他技术简直是不费吹灰之力。很多人会觉得研究内核没有用处,其实我们经常讲的高并发、多线程等,正是Linux赋予我们的能力。
我已经要沉浸在这本书的乐趣中了,相信这本书可以让大家能够更快地掌握和理解Linux精髓,这是一件非常伟大的贡献!
——焦英俊,未达科技创始人,前阿里巴巴中文站首席架构师,技术总监
本书作者拥有丰富的架构工作经验,是以架构师身份在学习、实践Linux的过程中总结出来的产物。本书内容涵盖了Linux重要概念的分析过程,引导读者一步步进入到Linux源码的世界,对刚接触Linux的工程师很有指导价值。
——金立,河狸家技术VP
在工程化领域,已有足够多的开源产品和组件,让我们快速搭建产品应用,然而产品质量、架构和运维的好坏,取决于我们开发人员对更多细节和实现原理的掌握,这又关乎自身的成长和发展。本书每个章节基本上是从问什么、什么是,开始介绍基本概念和实现机制,然后以常见开源产品的场景和案例进行问题分析,既适合于初级开发人员,又适合架构师和多年经验的老鸟。我与本书作者相识多年,他对技术的热情和“知其所以然”的钻研精神一直令我敬佩,本书结合了作者自身多年的实战经验,带着大家进行“知其然”的实践和思考,非常值得一读。
——张晓科,顶象科技风控技术负责人,前阿里巴巴风控技术专家
编程如同写诗,程序员用一种精巧设计的“符号”输送给计算机,从而构建着这个信息世界;计算机是对空间和时间的形式化描述,是对描述性知识的精确表达;更形象地说计算机通过“符号”形式化的表述指令的计算过程。对计算机系统的本质进行挖掘,是我们提高技艺和兴趣所在,本书最大的特点就是以应用层和Linux内核的运行机制相结合的方式,站在程序应用的视角深入内核这个奇妙的世界,读来有一种醍醐灌顶的畅快感。
——徐兆朋,爱财科技集团技术负责人
在互联网飞速发展的20年,新兴技术层出不穷,但是大道之间,以不变应万变。作为技术人员,大部分编写的软件都是运行在操作系统之上的,尤其是运行在Linux操作系统上。不管你是业务程序员还是底层中间件程序员,掌握好Linux内核都大有裨益。本书从实战角度出发,对Linux的实现进行剖析,推荐所有有志于成为系统架构师的技术人员阅读。
——郭秀军,吉利集团曹操专车CTO
Linux诞生二十多年,已经成为开源运动的代名词,吸收了全世界优秀程序员的精华。我印象中的本书作者陈科是Linux的狂热分子,十年前我刚认识陈科,他就在钻研Linux源码,在阿里期间经常搞一些内部分享,攒了不少粉丝。本书沉淀了陈科这些年对Linux系统的从全局纵览到局部设计的深入理解,不同于市面上常见的Linux源码介绍书籍,本书不仅仅是讲解代码实现,更是对一些精妙的设计理念做了剖析,相信一定能让读者受益匪浅。
——大少,阿里巴巴集团研究员,天猫首席架构师

前言
随着计算机技术的发展,开发人员想要根据业务需求写出相关实现代码还是比较容易的,因为已经有了很多工具、组件、库等可帮助我们实现功能。开发人员很少会自己裸写代码,不会从底层到上层全部由自己来实现。于是,很多开发人员一旦遇到程序出现问题就会茫然失措,不知道该如何处理,甚至故障诊断和分析都成了一门高深的技术难题。
我们做任何一件事情都应该知其然,并知其所以然。操作系统是计算机的基础,所有的应用程序都是运行在操作系统之上的,所以,不管开发人员使用什么语言,开发什么行业的应用,都应该了解操作系统的原理与实现细节。
本人因为长期从事系统架构相关的工作,在涉及一些中间件或者基础组件的研发工作过程中,经常会与操作系统打交道,特别是Linux内核。我个人认为,所有应用开发人员都应该了解操作系统的实现原理和思路。Linux是人类工程史上的一个奇迹(那么大的工程,那么多人在网络上维护,能保持那么高的可用性),Linux内核作为一个开放源码的工程,在很多方面值得我们学习和借鉴。其实在工程领域,很多问题的解题思路是类似的,掌握内核的实现,对于我们更好地编写高性能、高可靠性的程序有很大帮助,也更加利于千里定位故障,秒杀Bug。

Linux体系结构
操作系统是所有应用程序生长的河床,它帮我们屏蔽各种硬件的细节,并且抽象出各种系统调用供应用开发人员来使用。
下面来介绍一下本书将要介绍的Linux内核的体系结构(图1),以便于后续章节展开分析。
在这里插入图片描述
图1 Linux内核的体系结构
整个Linux内核可以分为4层:
·驱动管理层,驱动并管理外部一些硬件设备,例如磁盘、网卡等。
·工具层,内核抽象出一些通用组件便于自己使用,例如并发管理中的一些锁、per-cpu变量等工具,另外还有中断机制,也给进程管理、信号处理等提供了基础功能。
·系统能力层,操作系统的功能包括进程管理、内存管理、文件系统、I/O管理、网络等,这些功能都是基于工具层和驱动管理层提供的能力来构建的。
·系统调用接口层(syscall),给应用程序开发人员提供相关接口。因为系统调用的使用成本较高,参数也比较多,需要对内核有较多了解,所以,又抽象出一些libc等库函数来封装系统调用,应用开发人员一般都是通过libc等库来与内核打交道的。

下载地址:https://www.xiaocifang.com/i/SNbec16975iYV

猜你喜欢

转载自blog.csdn.net/weixin_40209911/article/details/95918592