脚本之家( K8 [; E/ k$ B- u( z2 [# A5 Z, H, I
1 {) e3 g# i) ?' x; B
你与百万开发者在一起3 V1 ?8 T6 ^" A5 D
. a. O. J m5 s3 l
9 G1 I# l4 y( E1 d4 s/ @/ g9 |3 q
来源 | 异步 | 文末赠书: N8 n& ~0 O, D/ V8 H& o& I8 I
- `7 q. O1 y' ~
# O) k2 F( V+ N6 @3 G4 S: r
- h8 v% @, d! R o8 J& w! z: E% V+ h% @7 V! a- G! ]
, w: h; f/ x' b; I! U1 a+ b2 t. ]9 K$ \2019 年微软 Build 开发者大会在雷德蒙德召开。继将 Bash shell、原生 OpenSSH、WSL 引入 Windows,以及在微软商店提供 Ubuntu、SUSE Linux 和 Fedora 等发行版,微软又宣布了一个重大的决定 —— 将完整的 Linux 内核引入 Windows 10。8 w* l1 ~( Q# e* u1 p
" N4 r$ l4 H5 W( F6 i$ t7 \, r9 D
! a/ n) M3 ^& A按照微软的说法,到时 Windows 10 将包含内置的完整定制版 Linux 内核,为最新的 WSL 提供更好的支持。Linux 内核版本为 4.19,是一个长期稳定版。随着 WSL2 正式发布,WSL2 用的 Linux 内核也将完全开源。近些年,微软公司来雇佣了很多 Linux contributor,给微软带来了很多业界领先的 Linux 技术,所以才会有去年的 WSL,这样的举动也必将吸引更多的人才加入。
3 j R* D! K9 D; U! N7 w$ k1 z3 y( w2 d. `; _$ \
5 y+ X' c% u& ^9 c
Linux内核是使用最广泛的开源内核,在服务器和智能手机领域处于统治地位,物联网、大数据、云计算和人工智能等热点技术也离不开Linux内核。对于商业公司而言,采用开源的Linux内核可以享受很多好处,比如节约成本,可以利用行业先进的技术,还可以根据自己的需求定制、修改内核。对于个人而言,从Linux内核中可以学习先进的设计方法和编程技术,为内核贡献代码可以证明自己的技术实力。" k4 j! c% A: P+ u' [% j
可是,当我们准备学习Linux内核时,会发现Linux内核的代码庞大而复杂,在没有专业书籍指导的情况下,读懂代码是一件非常困难的事情。如何学Linux内核?小编推荐这本《Linux内核深度解析》,书中剖析的代码基于Linux 4.12版本,同时,它基于ARM64硬件平台,将两者结合。$ ]: g! H* S0 j8 W7 m1 m5 K: K
 [img=236px,311px]https://mmbiz.qpic.cn/mmbiz_jpg/iaibvmyz4605OgibqwlLBTjlHDt3VfbicR3Lg3DXbkgt1ibOp6R6IcvFKdiaLQLibhdeINe7YkmxjLZbx8ERplLmpvkNQ/640?wx_fmt=jpeg[/img] 4 ^/ w7 \% f F6 ]: c# o
4 ?) b9 \# m* [6 q) T/ e4 t作为一个优秀的开源系统,Linux在业界有很广泛的应用。从1994年发布1.0正式版本开始,Linux内核一直在发展,代码越来越庞大,参伍以变,错综其数,要想深入掌握它,并不是一件轻松的事情。
9 |; |7 U( {- x. k% e4 y本书作者余华兵从事Linux内核开发工作十余年,有着丰富的实践经验,使用过不同的版本和硬件平台,从2.x到4.x,从MIPS、x86到ARM。伴随着研发大楼的华灯,当年初出校门的学子,如今萧萧两鬓生华,成为一个在Linux领域有深厚积累的专家。相信这本书会让你收获满满。
& _, w# `5 U5 e+ y# n& G. d 对于从事应用程序开发的软件工程师,# O1 c5 Z8 L5 U# Z5 W
是否有必要学习内核呢?
, z# `- c7 O1 x9 |$ B" }应用程序通常使用封装好的库,看起来似乎和内核没有关系,但是库是在内核提供的系统调用的基础上做了一层封装。读者如果研究了库函数和内核配合实现库函数提供的功能,那么对软件运行过程的理解将会更深刻,个人的技术水平也将会提升到新的高度—能够设计开发出高质量的应用程序,在软件运行过程中出现问题时可以快速地分析定位。另外,内核代表了软件行业的最高编程技术,这些编程技术也适用于应用程序。是否有必要学习内核呢?答案是肯定的。
5 T u% K2 x6 y" h8 m5 R. N5 j# I+ c- h1 l
为什么要学Linux4.X? ! W! H! ?5 s( O3 I2 J {
% a7 e, U3 @8 }$ W/ }, k; b3 i
* r' N/ K* r# S9 e# O早些年数通领域各厂商(包括思科和华为)的操作系统,都是基于传统的嵌入式操作系统(如典型的VxWorks操作系统)开发的。2010年以后,Linux内核在数通厂商中快速生长,迅速成为数通设备网络操作系统的内核。就像基于Linux内核的安卓系统已经成为智能手机领域的领头羊一样,在数通设备领域,Linux内核也大有一统江湖之势。) i7 l" b) G; }/ m
我们在基于Linux内核开发网络操作系统的过程中遇到的某些技术问题,在Linux内核的演进过程中已经提供了解决方案。Linux 3.11版本ARM架构支持巨型页机制,解决了ARM架构的进程访问大内存的性能问题。Linux 3.14版本引入ZRAM内存压缩技术,用于节省内存空间,这项技术适合在内存容量小的设备上使用。Linux 2.6.29版本引入的squash文件系统和Linux 3.18版本引入的overlay文件系统,在闪存容量小的设备上解决了存储空间不足的问题。squash文件系统可以压缩数据,但是它是一个只读的文件系统,而设备需要一个可写的文件系统,我们在Linux内核找到了解决方案—使用overlay文件系统在squash文件系统上面叠加一个可写的文件系统。这些拿来即用的Linux内核技术,在这本书中都有提及。
. l$ d- T1 r" |6 K4 j, p近年来Linux发展迅速,公司最早使用的Linux内核是2.6版本,从2011年发布3.0版本开始到2018年年底发布4.20版本,Linux一共发布了41个版本,技术发展日新月异。很多技术虽然有众多的工程师在使用和总结,但仍相对零散,基于Linux 4.x的图书更是少之又少。. ?+ X' l4 M/ v* v* C2 U
本书特点是什么吗?
* i7 E+ }: D( o. d/ f0 B+ k! l% X1 {/ b
" e( q- H' C* w$ s& N. ]
本书剖析的代码基于Linux 4.12版本,发布于2017年,是Linux内核史上变动较大的版本之一。基于这个版本进行内核代码解析并出版成书,是比较新颖的,既不失通用性,又兼顾4.x版本中引入的不少新技术点。同时,它基于ARM64硬件平台,将两者结合的书,目前还是比较少的。
/ \# H$ E3 m8 A/ p另外,本书没有过多地介绍操作系统的基础原理,而更多地是以实际代码来解读在Linux内核中是如何实现操作系统的各个子系统的。对于熟悉操作系统基础的读者来说,可以快速地切入到具体代码的理解与实现中。从内核引导和初始化开始,到进程管理、内存管理、中断/异常/系统调用、内核互斥技术和文件系统,本书比较系统地对内核代码进行了深度解析。
+ h* Z* W' E2 x- q5 \ CLinux内核的知识点相当繁多,很难在一本书中面面俱到,也没有必要。所以,在这本书中,看似不经意间逐层展开的知识点,都是比较基础和常用的。作者以他的实践经历尽量通俗地进行解读,并抓住了其中的重点,可以让读者在实际的开发、调试和维护工作中学以致用。1 W$ \4 G% u3 z% O5 z- v: z
“行是知之始,知是行之成”,学习Linux内核技术尤其如此。要真正消化理解Linux内核,离不开大量的工程实践。希望本书可以成为你前进路上的好帮手!) b; u7 l! P# V( H5 R0 ?8 u! ~
如何读这本书?% `" T; d6 L/ C6 e( W6 M/ p
本书介绍4.12版本的Linux内核,建议你在阅读本书时到Linux内核的官方网站中下载一份代码,对照代码学习。推荐使用“Source Insight”软件阅读代码。8 x1 w* g& z) V) N4 P
! q. C- R3 e5 _5 P) C5 w- _! X) p
9 b7 v: ]2 x4 G; k0 F( q, U% H! n8 `
; V7 e6 i, T( F( W
Linux内核支持多种处理器架构,处理器架构特定的代码放在“arch”目录下。ARM处理器在手机和平板电脑等移动设备上处于统治地位。ARM处理器从ARMv7演进到支持64位的ARMv8,ARM公司重新设计了处理器架构,ARMv8定义了AArch64和AArch32两种执行状态,AArch64是64位架构;AArch32是32位架构,兼容ARMv7。因为ARMv8和ARMv7的差别很大,所以Linux内核把ARMv8和ARMv7当作两种不同的处理器架构,ARMv7架构的代码放在“arch/arm”目录下,ARMv8架构的代码放在“arch/arm64”目录下。人们通常把ARMv8架构的AArch64执行状态称为ARM64架构。本书在介绍Linux内核时选择ARM64处理器架构。
: [* d/ @ h+ d: `$ Z/ h学习本书,需要具备ARM64处理器的基础知识,推荐以下两篇文档,读者可以从ARM公司的网站下载。9 i% Z* }9 Z: C! H
(1)“ARM Cortex-A Series Programmer’s Guide for ARMv8-A”:这篇文档接近300页,适合入门学习。1 e5 b2 L2 k7 d0 z' A/ L, U* {
(2)“ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile”:这篇文档有6000多页,写得很详细,适合当作工具书来查询。
' c6 f; C) q6 O1 q学习内核,关键是要理解数据结构之间的关系和函数调用关系。内核中数据结构之间的关系错综复杂,函数调用层次深,有些函数中的分支非常多,一个函数就可能涉及很多技术,这些都是初学者学习中的障碍。作者建议读者在学习时抓住主要线索,弄清楚执行流程,刚开始不要过多关注函数的细节。为了方便学习,作者绘制了很多图来描述数据结构之间的关系和函数的执行流程。另外,作者在介绍每种技术时会先介绍使用方法,从使用方法开始学习技术,相信会对读者理解技术有很大的帮助。6 |/ ]6 s% m" Q1 `+ l1 v
全书内容共分为6章。
8 C+ r2 A+ |3 H" B3 l6 f( N4 l; n第1章介绍内核的引导过程,本书选择常用的引导程序U-Boot,读者可以从德国DENX软件工程中心的网站下载U-Boot的代码,对照学习。, M8 A3 ^) [% y4 s# J
第2章介绍内核管理和调度进程的技术原理。
3 a: b( S* ]4 j Z/ `# A l第3章介绍内核管理虚拟内存和物理内存的技术原理。: h6 b6 M/ z0 q# [- K* i7 K" Z3 V5 l" [
第4章介绍内核处理异常和中断的技术原理,以及系统调用的实现方式。
) G; M# o$ Z* n* X: V第5章介绍内核实现的各种保护临界区的互斥技术。4 G; e" B) A9 z. ]6 E5 h/ }/ }- `
第6章介绍内核的虚拟文件系统,内核使用虚拟文件系统支持各种不同的文件系统。
! f0 \9 V4 F) E8 u( t' |: u[img=187px,246px]https://mmbiz.qpic.cn/mmbiz_jpg/iaibvmyz4605OgibqwlLBTjlHDt3VfbicR3Lg3DXbkgt1ibOp6R6IcvFKdiaLQLibhdeINe7YkmxjLZbx8ERplLmpvkNQ/640?wx_fmt=jpeg[/img]书名:《Linux内核深度解析》
9 q9 b7 M6 d$ e( R5 b5 V, }- o9 `作者:余华兵
6 e2 U6 }! J$ V. F+ \$ ?# N, J' t% ^# \
编辑推荐:
( G o' F' P* T( Z3 G5 t2 A+ _( _0 E$ h9 w/ a' h& K
9 d8 f$ [* k7 ~( H6 O
- 基于ARM64架构的Linux 4.x内核;! A, P& ^) D/ h( P, N5 y$ M
- 大量图例描述数据结构之间的关系和函数的执行流程;; V, X1 u9 K% r$ c0 q" l' x$ k
- 结合代码分析,以通俗化语言全面剖析Linux内核。
. T1 t+ H0 ^4 N% l3 l 本书基于4.x版本的Linux内核,介绍了Linux内核的若干关键子系统的技术原理。本书主要内容包括内核的引导过程、内核管理和调度进程的技术原理、内核管理虚拟内存和物理内存的技术原理、内核处理异常和中断的技术原理,以及系统调用的实现方式等。此外,本书还详细讲解了内核实现的各种保护临界区的互斥技术,以及内核的文件系统。本书内容丰富,深入浅出,通过大量的图例来描述数据结构之间的关系和函数的执行流程,并结合代码分析,引导读者阅读和理解内核源代码。
6 J `! d; |! R& L6 i5 E. ]# D/ J! f-END-
! e: N3 ] k0 V/ E6 M" _
( r6 z8 E" ?' E/ v9 @+ P2 w2 D
, `# y9 K* M3 z! K U# i: R9 L; o) u$ }* z4 v
* O- Q% Y! W }8 L3 b0 ^, t! ]/ ]
踩楼送书活动参与方法:
; ^; F. [. q3 P8 K6 E) S/ t8 s- ^$ ?) ^" ?
6 _* C. k7 a1 Z, n+ m% J3 U3 Q! i/ x
在本文下方留言,发表您对Linux的经验感想,机会总是靠自己去争取来的!小编将对留言进行精选,被精选的留言将会显示在页面中(由于微信留言功能限制,最多只能显示100条)。
! C% G; y. ^. M# d7 d踩楼送书活动获奖须知: % z% b# q0 r- i- |/ W
1、活动结束时踩中指定楼层的精选留言将获得《Linux内核深度解析》一本,共5名中奖者+ E5 ^" P$ g4 P- w" H: Q. {7 M
2、活动结束我们会在本公众号公布中奖楼层的解压密码,并在3个工作日内收集到获奖用户信息后发出(收到奖品的小伙伴欢迎来留言区晒晒。)3 j; O& a8 E. G& s+ U3 _4 q
3、获奖楼层下载地址(文件解压密码2019年5月21日公布)
2 T- r7 O0 ^. L, H! b/ B. Q百度云链接:% L8 Q5 I6 B& d, Z
https://pan.baidu.com/s/17Uc4uXsFrFgQqpQAUtZmfQ
+ g* L+ a7 B7 ?/ }- m提取码: 8fu9; ^8 A: e* C C, \, H4 m
) o& T* W! X8 s( a. |4 U
( K! i; z- V. F- r ' V( B$ K/ [. @8 W# k- r
8 c* L% O" U, q
3 k" l" _7 B9 w! S; Q7 ^8 d
9 L; h2 ], n" }& U" j
4 q" |* c( D* H) |9 \, x: x0 q
l3 p* O( O! J8 _( a) g* J5 r/ P# H 活动时间. A5 e3 r* [( z- q
活动时间:即日起至2019年5月21日下午4点整
: p$ k+ R6 T; N, {9 Z. {
, q$ M. c6 I$ ^- B( |4 ~8 L: s精选书单 点蓝字即可
5 G% g) x! |4 |' I- b) d4 D- i♡ 我放弃Python转Go语言的9大理由 | 优秀书籍推荐
' J# c- E, P4 u6 ]7 Z
0 k- k$ c8 v6 e" W♡ 99%的程序员都会收藏的书单,你读过几本?6 E- @' h* P) ~3 O6 q2 w: j9 M2 b
♡ 你眼中的Linux高手,都应该读过这几本书!
# b7 b& Y8 t. F2 v! v$ i♡ 薪资那么高的Web前端,该看些什么书?/ q# ?0 a9 {. x" F
♡ 顶级程序员必备书籍,雷军都点赞的书单!" ?" K! H' f0 [& d! _, a
♡ 推荐 | 怎样才能自学好Java?(内附攻略&书单)
' T R0 s/ O1 A. V9 C7 S0 U& w♡ 吐血推荐 | Android开发从入门到进阶的十本好书
, f. T; `& }8 x1 u; b♡ 安全类书籍天团配置,给你最好的安全指导!
1 {/ B: a/ i" h4 @+ ^) m♡ 微信小程序 + 公众号开发运营看这一篇就够了!!!
' F* h1 Z" S4 A2 ]0 z♡ 荐书 | 您有一份JavaScript书单待签收
* d% @: j q1 \3 O更多好书请关注脚本之家微店1 P+ \8 ?8 Q6 n) a9 }* {( L

1 a* b8 z# O; X+ A1 X0 E4 d" e7 k来源:http://mp.weixin.qq.com/s?src=11×tamp=1558213204&ver=1614&signature=-JrJ3Ehk6-AgIUqXq0vIuKoRAO7VY*2Gq4WTxRvXLEJmFQS9QAGAOxv6OOKCF8pP8DMzXftTLRDOliJWcg3cLP6GVP--UAHEQfOLHFdIIi7LJIJKSMS51MuR0XVXd-1H&new=15 A; j, N8 R+ R: n2 g
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |