阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

Linux是什么?

它和Windows XP、Windows 2003、2008什么的一样就是一个操作系统而已!

Linux能干什么?

它能当服务器,服务器上安装着各种企业应用、服务。

比如:Web服务(apache,就是能架设网站的)、数据库(MySQL,存储网站信息数据的)、博客系统(wordpress) 等……

Linux系统用在哪些领域?

比如某网站的服务器,他们肯定用Linux。再比如某网站的数据库,他们差不多也基于Linux。

再比如机关部门、学校、东莞夜总会、某中介公司,总之他们都用的到Linux。 因为他们的部分业务需要在网络上处理,需要存储,需要管理数据。那么恰恰Linux就是很好的服务端操作系统。

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

 

前言

本文主要描述Linux系统的总体框架和设计思想,包含很多可以直接操作的实例,目的是希望读者对Linux系统背后的逻辑有一个全面的了解。本文力求贴近实际的工作使用,在比较核心且常用的技术点有更加深入的解释,对实际使用Linux系统工作大有神益。

推荐序

Linux操作系统在超级计算机、互联网服务、桌面系统、移动和嵌入式设备等领域使用广泛,相关的从业人员和兴趣爱好者一直对Linux的理论和实践有较大需求。以下部分是本人阅读后,希望与读者分享的一些感受。

第一个特点是解释透彻。Linux 发展至今已经超过25年,源代码融合了不同时期的演进和变化,因此回顾当时的背景,有助于更清晰地了解代码作者的意图和目标。

第二个特点是实践性强。在技术领域,实践往往能加快加深对相关概念的理解,本书有不少例子适合当作实验,感兴趣的读者可在单机环境或者虚拟机环境完成。例如initrd 文件系统的例子,书中比较完整地介绍了几种可行的制作方法。

第三个特点是指路明灯。Linux 内核的子系统和模块非常多,覆盖的应用范围也很广阔,面面俱到显然是不现实的。作者希望更多地展示代码背后的思想,阅读后形成线索,可搜索出更多相关的资料。

第四个特点是与时俱进。近几年,业界利用Linux构建很多热点应用,本书在很多方面覆盖了Linux 较新的功能,对从业者有较大帮助。

面向对象

本书解释了Linux内核提供了什么,以及Linux系统底层是如何使用内核的。

本书的读者对象是有一定Linux基础的程序员,或者是有一定经验的嵌入式开发人员和运维人员。阅读本书像喝水一样,可轻松获得知识内容。

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

Linux从业者薪资图

如何阅读

本书共13章,其中第1~3章是总览,第4-13 章是分领域阐述。

第1~3章总体介绍Linux的基本知识;

第4章以Linux系统的启动开始深入叙述:第5章是Linux系统运行中使用者最常接触到的进程概念,重点介绍进程的原理:第6章是Linux内核的内存管理方法与用户端使用内存的底层方法,即重点介绍glibe底层到内核之间的内存管理过程;第7~13章分别是关于安全、网络、总线与设备变动、二进制、存储、虚拟化与云、硬件专用子系统的内容。这些子系统都是Linux系统运行中非常重要的领域,是深入理解Linux系统原理不可或缺的知识补充。

第一部分:总览篇

总览篇分为1~3章

目录

第1章总览

  • 1.1 简介
  • 1.2 Linux 学习曲线和职业曲线.
  • 1.3 如何形成-一个内核

第2章内核架构

  • 2.1常 见架构范式与核心系统
  • 2.2基础功能元素
  • 2.3特殊硬件框架
  • 2.4特殊软件机制

第3章内核数据结构.

  • 3.1链表 与哈希表
  • 3.2其他数据结构

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

 

hlist

双向链表的缺点是如果有很多特别短的链表时(很可能只有一个节点),双向链表的next和prev的头部就非常占用空间。典型的是哈希表,我们知道哈希表使用哈希函数计算得到一个地址,然后直接访问该地址的机制实现快速访问,但是哈希算法不可避免地会有哈希冲突(多个输入产生了同一个地址输出),此时解决哈希冲突的方法就是使用哈希桶,一般在同一个计算地址的位置实现一个链表, 该链表链出所有哈希结果为本地址的值。

通常情况下,哈希表大部分的域都是空白的,而哈希表所需要的大小却要提前分配,只有每个哈希桶的链表才可以动态分配。一个双向链表的头部有两个指针的大小,如果这两个指针全部放入哈希表要提前分配空间,就会比单链表消耗多--倍的内存空间。所以内核专门设计了hlist, 拥有只有一个指针大小的头部的双向链表。

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

双向链表

第二部分:分领域概述

分领域概述篇分为4~13章

目录:

第4章Linux 系统的启动

  • 4.1启动的硬件支持
  • 4.2 Bootloader和内核二进制
  • 4.3 Linux的启动原理

第5章进程

5.1进程原理.

5.2进程调度

5.3资源

5.4多进程与进程通信

第6章Linux内核内存管理

6.1内存模型

6.2申请和释放内存

6.3内存组件

第7章安全

7.1概览

7.2密码学

7.3Linux 用户和权限系统

7.4网络安全

7.5函数调用的调试

7.6内核调试

7.7 PAM和Apparmor

7.8内核安全

7.9 常用安全工具和项目

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

 

用户空间使用iptables、table、 chain 和rule

chain和rule是iptables自创的概念,我们知道在钩子函数的地方可以执行指定的函数调用。iptables系统就默认实现了几个调用,并且用统--的数据结构来组织这个调用的形式,这个组织结构就是table、 chain和rule。在任何一个hook点都可以定义多个table,一个table有多个chain,每个chain中可以定义多个rule。要记住的是table和chain只是容器,里面的rule才是真正发挥作用的规则。理论上我们可以在任何一个hook点进行过滤、nat、 修改数据包等操作,但是iptables为了统一架构起见, 在各个hook点定义了顺序的几个table,每个table用来完成一类的工作。预定义的table包括filter、nat和mangle。每一个table表示的是功能,并不是表示位置,一个table内部有多个chain,其中每个chain位于特定的位置。

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

table、chain 关系图表

第8章网络

8.1网络架构

8.2socket

8.3 IP

8.4 TCP

8.5网络服务质量与安全性

第9章总线与设备变动

9.1PCI

9.2 USB.

9.3用户 空间的设备管理

第10章二进制

10.1函数调用

10.2 Linux 的二进制兼容性问题

10.3 ELF 文件执行原理.

10.4 ELF 的安全性

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

TCP连接建立的六次握手

第11章存储

  • 11.1 磁盘管理.
  • 11.2 存储协议
  • 11.3 通用块层抽象
  • 11.4 缓存层
  • 11.5 文件系统
  • 11.6存储系统

第12章虚拟化与云

  • 12.1常见的虚拟化方案
  • 12.2虚拟文件系统
  • 12.3cgroup
  • 12.4 Docker

第13章硬件专用子系统

  • 13.1无线子系统.
  • 13.2 音频子系统

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

 

section 和header

而section就是segment里面具体组织数据的格式了。每个section都有名字,这个名字是编译器给起的,你也可以自定义名字。链接器和加载器共同识别- -些section,所以可以进行约定好的操作。例如加载器看到text段就知道是代码段,而这个text段的创作者则是链接器。

阿里P8架构师失眠7天构思深入Linux内核架构与底层原理

连接器

从上面可以很清晰的看到《深入Linux内核架构与底层原理》的文档,小编都为大家准备好了,如果大家伙需要的话,可以转发此文关注小编后,私信小编“学习”来得到获取方式吧!