Java电子书:Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com
! S% k' V2 W2 q# P/ |' \9 t: l7 a. S2 @: Q& s4 K
; t' o( ~+ f# v# m
编号:mudaima-P0194【Java吧 java8.com】& U4 j2 z7 D' J
+ Q; s1 `. F9 e* {+ R, V% N
( F; ?0 ] W- U1 S
k3 a1 s+ w6 j7 L; I0 \& YJava电子书目录:前言 ; y3 w2 E3 }( ^0 W$ s' b) Q$ d# Z
为什么写这本书
* i2 B* o; `1 D0 ^第1版与第2版的区别
$ O% D" z. ] V0 ]" u本书内容及特色 8 n" v* T3 d) [" m2 O
为什么本书选用Linux 0.11内核
* U% I/ K1 u, E8 Q致谢 & J- ~! y$ A, R4 _
第1章 从开机加电到执行main函数之前的过程 ; A$ m8 d P, Y* c3 G
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
9 Z, x% A, h) i" _( e1.1.1 BIOS的启动原理
/ {7 e: H1 y7 a4 q! Q' f1.1.2 BIOS在内存中加载中断向量表和中断服务程序
J9 s2 r4 g, `! R1.2 加载操作系统内核程序并为保护模式做准备
7 ?1 l2 q5 K; G( i* K1.2.1 加载第一部分内核代码——引导程序(bootsect) ; Z1 L) N4 c# j% o* A
1.2.2 加载第二部分内核代码——setup
& C$ T2 V5 y9 ?7 k7 S. v1.2.3 加载第三部分内核代码——system模块 3 V$ H* h3 w' @* Q' ^
1.3 开始向32位模式转变,为main函数的调用做准备 + E0 a$ {$ Z' I& V4 E
1.3.1 关中断并将system移动到内存地址起始位置0x00000 # b+ ~% U6 j7 `5 g) y
1.3.2 设置中断描述符表和全局描述符表 ' \/ I1 n4 ^; l+ m; N
1.3.3 打开A20,实现32位寻址 $ l- n) R1 c9 ~& Q9 Q; f
1.3.4 为保护模式下执行head.s做准备
6 n6 T7 e0 G7 D# s( T. ~1.3.5 head.s开始执行
' M9 Z1 H7 ]; s% p$ Q1.4 本章小结
8 h# W* m' ^( j( M9 _* ]# Z第2章 设备环境初始化及激活进程0
E+ r" p. L/ p2.1 设置根设备[2]、硬盘 . [( e1 k3 s) v- P$ J/ M
2.2 规划物理内存格局,设置缓冲区、虚拟盘、主内存
( v9 q8 }4 Z. i6 _8 M5 M) }2.3 设置虚拟盘空间并初始化 # {; v; r4 `6 Z& q
2.4 内存管理结构mem_map初始化 * B U1 ~+ Y' t7 c4 h
2.5 异常处理类中断服务程序挂接
3 d, L( a0 m O; w( |( }0 t2.6 初始化块设备请求项结构
2 B, x3 D3 Z1 J1 K+ N' N& u2.7 与建立人机交互界面相关的外设的中断服务程序挂接
: e+ S M9 w4 O7 d: S4 q' \1 v. N3 F2.7.1 对串行口进行设置 # r# K' a$ d% U- q& t: ^
2.7.2 对显示器进行设置
2 H! ]7 r- e( Z8 e J2.7.3 对键盘进行设置 5 w0 p1 y }! g: i6 s( ^
2.8 开机启动时间设置 ' z- K1 D5 b+ p! d' g" ^- c- Y
2.9 初始化进程0
* A) x. b7 D: v8 Z( B2.9.1 初始化进程0
7 j# {" T( m6 V1 v, j9 @2.9.2 设置时钟中断
% w s3 U( ]5 }. ~/ o* r. R2.9.3 设置系统调用总入口
9 A% ]) J' \9 G& |1 ?/ i% U* d3 S2.10 初始化缓冲区管理结构 $ ?7 i1 g' x) ^; t1 o
2.11 初始化硬盘 & m" ~" ], L0 n9 ~! ^
2.12 初始化软盘 # h9 r1 N# u. N
2.13 开启中断
$ S/ X; f) ^: v, a6 r2.14 进程0由0特权级翻转到3特权级,成为真正的进程 0 K$ A0 {' T9 ~( o% u' W0 `9 C
2.15 本章小结 4 F$ M* T! D3 d+ g# Y' ]6 u) X; S0 N
第3章 进程1的创建及执行
3 B! a8 Q9 c; ?4 {8 J1 M$ x3.1 进程1的创建 / u8 s$ W3 U2 l7 i2 e* S
3.1.1 进程0创建进程1 * c5 |. s" ^& y2 X) L
3.1.2 在task[64]中为进程1申请一个空闲位置并获取进程号 8 T# A* Z( P- h- k! c
3.1.3 调用copy_process函数
( L7 R; C) K1 g: C% z! A3.1.4 设置进程1的分页管理 z- o- Y9 }2 K- i% b S
3.1.5 进程1共享进程0的文件 9 \" V5 i# L/ E9 P# j
3.1.6 设置进程1在GDT中的表项 ) L# c& C2 c, e2 t% @7 R1 @) ~
3.1.7 进程1处于就绪态 p! ~0 C0 q. `2 \
3.2 内核第一次做进程调度 , [" g* M* k1 m6 c
3.3 轮转到进程1执行
. y' a# W5 e t& E* d3 ~3.3.1 进程1为安装硬盘文件系统做准备 / S1 ^' v8 e1 N. y: @0 y; r6 Q2 V
3.3.2 进程1格式化虚拟盘并更换根设备为虚拟盘
* {. i% \; M2 q+ w" e3.3.3 进程1在根设备上加载根文件系统
$ p* Y, O* _- `5 d# M3.4 本章小结
0 m) r; i) `+ Q, e, C( b% I第4章 进程2的创建及执行 ; n9 v. \9 T2 t% n {, x0 Y
4.1 打开终端设备文件及复制文件句柄
* q H7 g6 d: V) K [4 R4.1.1 打开标准输入设备文件
9 [6 r( Y! x5 o0 P. I/ g4.1.2 打开标准输出、标准错误输出设备文件 5 J* w. w& J! a; O* |2 m
4.2 进程1创建进程2并切换到进程2执行
5 h* {3 O, l" ~) j# r4.3 加载shell程序 ! m- \4 E5 p; |
4.3.1 关闭标准输入设备文件,打开rc文件
! G3 q1 ?; ?& N8 q8 C# S4.3.2 检测shell文件
0 ~* B) {* P# q. e+ S6 \4.3.3 为shell程序的执行做准备 ; u) X) D* O- q7 ^8 s
4.3.4 执行shell程序
/ e8 ]$ t4 g7 X: y8 ~! _* b. f4.4 系统实现怠速
& m2 K n f3 H3 m$ q4.4.1 创建update进程
% B- f) O) `2 D0 u0 ~4.4.2 切换到shell进程执行 ' c( [( z. x, |" d$ g
4.4.3 重建shell . P: m7 Q8 f2 ^3 l
4.5 本章小结 / ~5 ^. A2 q/ F
第5章 文件操作
+ _' z: I2 ~$ a9 d9 C2 n# P6 r5.1 安装文件系统 , w9 M% }0 v. Q: {* @
5.1.1 获取外设的超级块 ! F3 V0 J7 T, f s
5.1.2 确定根文件系统的挂接点
6 o8 B' @8 e* F$ L* q9 N( l* P5.1.3 将超级块与根文件系统挂接
7 @' c3 T2 G; d+ P! e5.2 打开文件
! w5 b4 ]! L G" U7 ?5 _2 U5.2.1 将进程的*filp[20]与file_table[64]挂接
0 V9 o$ F: }+ A m. u$ K5.2.2 获取文件i节点
$ K( ^( ]8 H; c4 q0 q0 `* p- f5.2.3 将文件i节点与file_table[64]挂接 $ J- r1 q a( T& r4 q) J# z: Z2 Y
5.3 读文件 : ~& v: o5 ~7 _
5.3.1 确定数据块在外设中的位置
0 k- s& j. q! D3 m' E5 D/ ~5.3.2 将数据块读入缓冲块
$ w! L7 ^5 E1 o0 v( Q ]" a# K5.3.3 将缓冲块中的数据复制到进程空间
. b0 H; z4 m: t. l! R9 z5.4 新建文件 9 F* }0 _7 s1 [+ B' s3 r
5.4.1 查找文件 ' p0 d8 d/ n+ J. O8 j# I
5.4.2 新建文件i节点 6 k2 s# f; j U: Y+ U
5.4.3 新建文件目录项 " ^8 X' c% |: m
5.5 写文件
& b7 M& r1 x6 ]0 B$ Z3 x3 ?5.5.1 确定文件的写入位置
* u$ D( q' i9 X# p! L( S5.5.2 申请缓冲块
4 c8 | r& ~) x/ c' b" B$ a9 @5.5.3 将指定的数据从进程空间复制到缓冲块 * w0 c3 P W! d' ^8 D) c4 w9 D
5.5.4 数据同步到外设的两种方法 / R2 {8 _# C* ^% e) p$ K
5.6 修改文件
# z4 k9 ] {+ K* S1 }, w6 H9 I3 K5.6.1 重定位文件的当前操作指针
4 [" n+ M: n( k0 A6 N5.6.2 修改文件 0 N+ R* T0 w* n
5.7 关闭文件
7 F5 U5 i( m" g1 y' o) y5 c: l5.7.1 当前进程的filp与file_table[64]脱钩
, [) Q9 r$ }8 ?7 \: }/ ~5.7.2 文件i节点被释放
?( m2 r0 F/ G+ d, f* T! ^5.8 删除文件
4 S; [2 t5 R# a+ ?6 \) b5.8.1 对文件的删除条件进行检查 ' G8 X% n3 f2 H8 C
5.8.2 进行具体的删除工作
2 ^ `4 C9 m I4 ~. y5.9 本章小结
/ @2 v" d# i. A1 s/ I, k第6章 用户进程与内存管理 . b5 h: E$ {0 ^) X7 j8 g
6.1 线性地址的保护
3 T6 z0 |4 V5 W* O1 E; ^6.1.1 进程线性地址空间的格局 2 H( D3 k4 V( G6 ?8 ]3 ?1 L) i
6.1.2 段基址、段限长、GDT、LDT、特权级 * P* L4 }/ r1 E9 X8 h
6.2 分页 8 V- F& Q. i) }. u& o
6.2.1 线性地址映射到物理地址
% m& U7 S( ~3 e6.2.2 进程执行时分页
: u: S6 v1 E3 I' R! c6.2.3 进程共享页面 2 E# X/ d7 T! W! V) {
6.2.4 内核分页 + J" z0 v. v& Z8 l# U
6.3 一个用户进程从创建到退出的完整过程 ' k( l, p# b! a' D+ C7 s7 c
6.3.1 创建str1进程 : z2 ]8 x& @" \0 e/ y m
6.3.2 str1进程加载的准备工作
) \& A) y4 |% ^) k6.3.3 str1进程的运行、加载
8 a1 r5 u. K' c6.3.4 str1进程的退出 % F: c$ h, z# ?: y4 m9 B' X
6.4 多个用户进程同时运行
$ g9 ~* x, A, j. U. h3 S+ _6.4.1 进程调度 4 B% [8 T, a# r) S- p- Z7 a" A
6.4.2 页写保护
) u. s1 Y/ {% ]$ {% u, Q. d6.5 本章小结 ( ~1 p D6 A2 ^8 X4 v0 m
第7章 缓冲区和多进程操作文件
) ]/ n+ {* Q# S' y7.1 缓冲区的作用 $ M u6 z0 { s
7.2 缓冲区的总体结构 5 n" o$ R; z0 b6 Z# L3 s
7.3 b_dev、b_blocknr及request的作用 " \( I, V9 [7 r" l& H! [0 ~" P% T
7.3.1 保证进程与缓冲块数据交互的正确性
9 n$ m& z; e% n g# c& L, a& g7 v7.3.2 让数据在缓冲区中停留的时间尽可能长
! n! d# C) k! i8 R) U G( T9 K7.4 uptodate和dirt的作用 # J' V9 j' z+ F C0 P* P
7.4.1 b_uptodate的作用 " J; J( ?" Z4 d3 _: L0 J0 E
7.4.2 b_dirt的作用
4 y* R3 `$ [% [7.4.3 i_uptodate、i_dirt和s_dirt的作用
+ M/ t z# \: a' u7.5 count、lock、wait、request的作用 + y4 Y& b' L. u% N; ?, t
7.5.1 b_count的作用
* S/ f) }8 O( M- P) j7.5.2 i_count的作用 ' N* ~( F2 b3 N" N8 H1 U
7.5.3 b_lock、*b_wait的作用
* d! r: z' I) [7.5.4 i_lock、i_wait、s_lock、*s_wait的作用 # S% R( @. n' r9 Y
7.5.5 补充request的作用 j6 y$ b% W" u7 I2 d
7.6 实例1:关于缓冲块的进程等待队列 % k- y' r( a. |2 g7 O, C3 E
7.7 总体来看缓冲块和请求项 0 X6 n2 [% x7 j! X+ ^
7.8 实例2:多进程操作文件的综合实例 2 H. F8 j. w, X% c3 i
7.9 本章小结 5 O6 }" m0 R* a
第8章 进程间通信
$ D1 l3 O% b0 ?' R. R0 K( B8.1 管道机制 5 q f3 y l1 G
8.1.1 管道的创建过程 0 H% b, Y9 ^' {% C$ }0 e" ?
8.1.2 管道的操作 / ~: @5 r; D1 {/ s7 j
8.2 信号机制 ! @7 D! g$ f3 Z0 V* Q! R/ R5 X3 F/ g
8.2.1 信号的使用 7 K7 ]( c9 u; ^" I) u6 c
8.2.2 信号对进程执行状态的影响 , G7 D/ @6 h! Y! z7 O5 F
8.3 本章小结 0 L5 e" i' e1 o+ ~- Q+ \* ?
第9章 操作系统的设计指导思想
. F4 r" F1 k2 }% \; F, ^9.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作 " e7 U$ A7 w' J( U* a3 s4 m
9.2 操作系统的设计指导思想——主奴机制 " B6 C% \* e3 l( _
9.2.1 主奴机制中的进程及进程创建机制 3 J U4 a# a. L- g2 C+ |
9.2.2 操作系统的设计如何体现主奴机制
( @2 E( d2 {' }, d! c. T9.3 实现主奴机制的三种关键技术 8 \; i5 F# y2 Z( f' ~
9.3.1 保护和分页
8 O! I- n9 i& A' k2 f9.3.2 特权级 " S$ c. j* ~, k
9.3.3 中断
% c! }; K c' ~& H3 g9.4 建立主奴机制的决定性因素——先机
0 x: n' L; u! \+ ?/ U6 t9.5 软件和硬件的关系 1 j; O/ k- |3 m$ _# t' @# x
9.5.1 非用户进程——进程0、进程1、shell进程 3 D0 S* I; J4 v8 S
9.5.2 文件与数据存储 ) q$ S0 m4 }( u7 v3 I: L
9.6 父子进程共享页面
0 k: Z/ J: Y% p' s# p; r& ^; `9.7 操作系统的全局中断与进程的局部中断——信号 ( w' Q5 i- c" p0 X5 j
9.8 本章小结 1 U8 y2 P. W# |4 P) A
结束语 ( n4 u& r# ^# k, x
3 ], L4 t: G$ r3 u0 |4 p1 ] V百度云盘下载地址(完全免费-绝无套路):
: q3 ^0 A2 u7 z2 m" `9 W |