阿里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内核架构与底层原理》的文档,小编都为大家准备好了,如果大家伙需要的话,可以转发此文关注小编后,私信小编“学习”来得到获取方式吧!