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

Linux是什么?

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

Linux能干什么?

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

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

Linux系统用在哪些领域?

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

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

前言

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

推荐序

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

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

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

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

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

面向对象

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

本书的读者对象是有一定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其他数据结构

hlist

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

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

双向链表

第二部分:分领域概述

分领域概述篇分为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 常用安全工具和项目

用户空间使用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位于特定的位置。

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 的安全性

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 音频子系统

section 和header

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

连接器

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

猜你喜欢

转载自blog.csdn.net/python8989/article/details/106503465