Java电子书:Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com
7 B: |1 `: b: G$ l2 ?/ I' E
7 h* T8 @, c4 M' Z% v' l
7 n$ @4 Z# a+ p编号:mudaima-P0194【Java吧 java8.com】
* e: l6 ]8 X+ d: `% Q; Z O& y) d+ B& b% s
+ t6 M0 n% u4 M& {6 u3 Q" V
0 j" }/ V/ R" ~& g, s+ q& B* t" b! Y
Java电子书目录:前言
+ P! l9 ]! t! N) ]为什么写这本书 $ `' V1 O+ x+ V8 D* u& ]* j2 G
第1版与第2版的区别
1 q# o' f7 m8 j* |0 F( i本书内容及特色
t! n' a5 l: a6 R4 l) m为什么本书选用Linux 0.11内核
8 P. r0 G/ M$ X& V$ V0 z; R致谢
1 A; d9 J& Y+ V& _& y* j) h2 Y1 p第1章 从开机加电到执行main函数之前的过程
8 M3 Q& h* }* U; }; ]6 o1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
& r" c2 o. w+ a' O1.1.1 BIOS的启动原理
+ R9 h3 w7 Y* V* I x1.1.2 BIOS在内存中加载中断向量表和中断服务程序
" ?( j3 T/ J* @3 j) w. k& k1.2 加载操作系统内核程序并为保护模式做准备
& F# p- Z+ K9 P) \ T1.2.1 加载第一部分内核代码——引导程序(bootsect) 5 y+ d# t/ L, h2 n8 f2 k+ ?( W
1.2.2 加载第二部分内核代码——setup
+ r- _; v3 \ n- G- K" Q5 E1.2.3 加载第三部分内核代码——system模块 3 [; d7 S) @) T$ S5 `
1.3 开始向32位模式转变,为main函数的调用做准备
+ w% ?- N5 T, b) B8 T- }$ j- o$ ]6 b1.3.1 关中断并将system移动到内存地址起始位置0x00000 - P4 y+ s. d; y: B8 W, w' e9 y8 f
1.3.2 设置中断描述符表和全局描述符表 9 g z8 x- F1 l, z4 B) M
1.3.3 打开A20,实现32位寻址 ; y" e, @& B. s. e+ z( `: H* L
1.3.4 为保护模式下执行head.s做准备
; X5 _% O) a! |& ~1.3.5 head.s开始执行 F1 p, J: O' ]8 c) v. {
1.4 本章小结 : N0 a$ h- m5 |* n, H' `! l: o
第2章 设备环境初始化及激活进程0 ; t: W0 P5 r0 E4 A! e% h. p
2.1 设置根设备[2]、硬盘
+ g) c3 ^* Q! N! n2.2 规划物理内存格局,设置缓冲区、虚拟盘、主内存
$ u/ K$ T# {6 f- I* G2.3 设置虚拟盘空间并初始化 1 q% Q" E( I4 f
2.4 内存管理结构mem_map初始化 ( R% r) g. M& s* S
2.5 异常处理类中断服务程序挂接 8 B. N) ~2 Z' n5 f
2.6 初始化块设备请求项结构
( l- f8 a6 K4 g" P9 }2.7 与建立人机交互界面相关的外设的中断服务程序挂接 ( I `3 u' ?" e- ]4 e/ c( W
2.7.1 对串行口进行设置
! P* D+ J6 o* S" Y* H2.7.2 对显示器进行设置 & y. H/ u: M v7 c9 N, a. C$ R
2.7.3 对键盘进行设置 5 J& d* X7 R9 l; |; i
2.8 开机启动时间设置
$ l: T0 O0 ]2 b+ d' a2.9 初始化进程0 1 [9 E+ F! q4 ]7 k c/ v
2.9.1 初始化进程0
& g# L* e; y6 h- |* ]: H2 l+ [% A2.9.2 设置时钟中断 " u0 {2 Z# D+ t+ S4 V1 J
2.9.3 设置系统调用总入口 , J0 Q) X, ~6 w- A5 N, y
2.10 初始化缓冲区管理结构
; M. M2 @5 k, M6 g2.11 初始化硬盘
( t8 N+ k* f" `: C2.12 初始化软盘
% [6 Q$ P) U. q1 z2.13 开启中断 x1 c$ }! T5 x: `- ^/ l# ]7 ^* O
2.14 进程0由0特权级翻转到3特权级,成为真正的进程 , w. s4 T! d4 e% K
2.15 本章小结
* m, o( ?) G9 _' v& k, W8 O+ Z( e第3章 进程1的创建及执行 ( e I% @) m {
3.1 进程1的创建 0 G, q6 ?5 h/ s7 j3 u
3.1.1 进程0创建进程1
' ]$ B6 i3 L$ H" x& C3.1.2 在task[64]中为进程1申请一个空闲位置并获取进程号
9 s- {5 a$ ~" G4 C1 e- X5 T3.1.3 调用copy_process函数
9 ]8 Q, F. j }4 z+ Y3.1.4 设置进程1的分页管理
# S2 N6 c- @, {" t4 _) G3.1.5 进程1共享进程0的文件
( W# I x' ~% m3 c3.1.6 设置进程1在GDT中的表项
3 u9 N7 u! x0 h6 q6 |1 V+ H3.1.7 进程1处于就绪态
% x3 I) G: y4 Z3.2 内核第一次做进程调度 5 J/ @( i- }- P. T* U0 Q
3.3 轮转到进程1执行
- b. ]4 U0 H: X- x2 G3.3.1 进程1为安装硬盘文件系统做准备
* h# o' X% H; e6 i# V8 X1 w3.3.2 进程1格式化虚拟盘并更换根设备为虚拟盘
8 a9 f+ a% @) @ t1 }3.3.3 进程1在根设备上加载根文件系统
, a2 t+ ]- \) h& n3.4 本章小结
1 w7 c7 Y! @( I& F$ g& q$ `第4章 进程2的创建及执行 % V: d; @( y# s- ~2 j8 h
4.1 打开终端设备文件及复制文件句柄
" j3 ^9 J7 H) Z ^+ R+ p, R- x4.1.1 打开标准输入设备文件
7 _7 M. f8 Z- D( \; n4.1.2 打开标准输出、标准错误输出设备文件 ( m# S6 M. c: j0 t. m. v# D5 s
4.2 进程1创建进程2并切换到进程2执行 1 j. f5 a( G' Z# p2 h# _1 t+ b! x6 |3 e
4.3 加载shell程序 & E/ b, X2 b2 a
4.3.1 关闭标准输入设备文件,打开rc文件 9 f3 U) R/ U2 m! E( D! |
4.3.2 检测shell文件
; [- ^4 ]. L: [2 P) ?' l0 ?+ k4.3.3 为shell程序的执行做准备
6 `) ?8 b+ O/ S+ O4.3.4 执行shell程序
' X6 A) a+ K4 ^2 \3 g) L7 b* s4 m; ^4.4 系统实现怠速
, c9 u1 m: p( v M4 _2 i5 a, L& O4.4.1 创建update进程 - G1 R( V0 N/ a* U
4.4.2 切换到shell进程执行
9 z1 x: i# B" T0 X; K5 O+ D4.4.3 重建shell
g( E- u4 e4 ?# E# W5 Q; N7 G4.5 本章小结
4 [# D/ h. S. M; j6 }: i3 t0 Y$ U第5章 文件操作 / g g% i0 ]- t4 k2 l
5.1 安装文件系统 # k, x! U& |* J1 N4 l5 W3 s
5.1.1 获取外设的超级块 + e% Y. `) I1 Q7 e
5.1.2 确定根文件系统的挂接点 8 Q# a& O: T/ ~' x5 J2 r
5.1.3 将超级块与根文件系统挂接
0 s3 x+ o7 j( W! T2 V5.2 打开文件
% G3 N h$ m, z+ j/ A5.2.1 将进程的*filp[20]与file_table[64]挂接 0 N' L* Y6 L" u ~: N# }9 ^+ ], s8 f
5.2.2 获取文件i节点
' F7 @4 M4 `8 }# |4 A5.2.3 将文件i节点与file_table[64]挂接 1 C; d; N* ?5 w$ W7 V+ ^) G6 d
5.3 读文件
; K. o# Y) A- |2 m5.3.1 确定数据块在外设中的位置 v0 ^! r+ U9 V1 E. j5 F' ~5 a4 m
5.3.2 将数据块读入缓冲块 % i% ]! n8 b( g
5.3.3 将缓冲块中的数据复制到进程空间
, G) m* m! i2 P4 Z; Q j. |5.4 新建文件 3 F8 E7 u. Z7 L$ @: h
5.4.1 查找文件
4 V2 R1 H: ~6 y0 ?5.4.2 新建文件i节点
0 T% T; L3 W% d B) V5.4.3 新建文件目录项
: p7 b8 ?$ V/ k/ S" P$ X8 t4 B5.5 写文件
& f* I0 ]2 {; [ o5 v3 ~- u. m5.5.1 确定文件的写入位置
1 I; E( T/ _- `) Q5.5.2 申请缓冲块
" b0 {. k a! }, E5.5.3 将指定的数据从进程空间复制到缓冲块 2 m* s- e& p( r% B
5.5.4 数据同步到外设的两种方法 & F! e7 `$ C/ M$ X. V) p" j6 M
5.6 修改文件 3 E1 l1 a f3 c; a7 k. {
5.6.1 重定位文件的当前操作指针
6 o$ Y% N8 R& y+ {5.6.2 修改文件
9 K& J6 I& \5 ~$ `+ [5 e5.7 关闭文件
9 Y/ C/ p8 u: J$ f" @' h5.7.1 当前进程的filp与file_table[64]脱钩
/ z5 N0 u8 q0 Z6 }) Z I5.7.2 文件i节点被释放 6 J) _+ `% N: U. r! U* G5 B) N0 h5 w
5.8 删除文件 % z/ K: Y1 u9 H: U2 ]9 z
5.8.1 对文件的删除条件进行检查 5 Q9 l; z% I8 ?+ C) X
5.8.2 进行具体的删除工作 ' @2 P3 o( ^/ h$ w
5.9 本章小结
, Y/ `' O" l' E, G# e$ d: e第6章 用户进程与内存管理 . w# o) G# V0 A3 w( u! Q: g. g
6.1 线性地址的保护
) G+ C% h' K4 ^6.1.1 进程线性地址空间的格局
7 {' u$ R* \4 v6.1.2 段基址、段限长、GDT、LDT、特权级
: ~9 w. E {- E2 Q5 H1 d/ k( s( \6.2 分页 $ L4 q8 S& S* ^8 i! N
6.2.1 线性地址映射到物理地址 " I8 H$ n* v/ W! ~) u8 h# [2 I
6.2.2 进程执行时分页
( S+ g0 S/ Z: S! X6.2.3 进程共享页面 2 e' ^0 \9 H9 e6 g
6.2.4 内核分页
) R$ b: S: E) y: o, Z% l6 P6.3 一个用户进程从创建到退出的完整过程
! F5 r! d/ L0 n) _% W! P0 d6.3.1 创建str1进程
% Z: w- w2 l) d$ U6.3.2 str1进程加载的准备工作 + j9 @/ Q0 w% q/ a
6.3.3 str1进程的运行、加载 & f$ D' Q! Z3 M6 p/ l2 L
6.3.4 str1进程的退出 1 p4 Z& [- o7 F0 ]
6.4 多个用户进程同时运行 ! c- \4 D, R) R
6.4.1 进程调度
) u9 F2 y1 K+ R0 `6.4.2 页写保护 # u/ R- d& J* ^4 L3 H. p$ T
6.5 本章小结 ! r7 G; f0 w! o4 @4 r
第7章 缓冲区和多进程操作文件 9 s# x3 W5 k3 ?, I$ A5 @
7.1 缓冲区的作用
( j# r F/ ?' @+ c7 b1 w) L7.2 缓冲区的总体结构
! R4 y8 \) O. m4 ?7.3 b_dev、b_blocknr及request的作用
2 x' z9 M' c1 N% f7.3.1 保证进程与缓冲块数据交互的正确性
. }" r, s) f- ], T7.3.2 让数据在缓冲区中停留的时间尽可能长
1 }8 h1 Q: i' k4 o7 q; i9 D# J7.4 uptodate和dirt的作用
+ A, H( c+ M8 [. }$ Y7.4.1 b_uptodate的作用 ' @6 \3 ~0 Z4 v* G
7.4.2 b_dirt的作用 ) ?( [ U& L1 N
7.4.3 i_uptodate、i_dirt和s_dirt的作用
U4 g& N6 z/ J2 X* I7.5 count、lock、wait、request的作用 * a1 ?) y3 `; `
7.5.1 b_count的作用
* t5 |0 y/ ^9 w- `. }7.5.2 i_count的作用
. m% _( z6 U7 y4 V7.5.3 b_lock、*b_wait的作用 . E7 [: @1 d3 s' ~6 Z% Q
7.5.4 i_lock、i_wait、s_lock、*s_wait的作用
6 B" f) M; j0 p% I Y7.5.5 补充request的作用 4 f, z) s* Y$ E4 H. I2 e
7.6 实例1:关于缓冲块的进程等待队列
+ ?6 u% v2 e# e+ g/ a2 U7.7 总体来看缓冲块和请求项 * a: ~# J9 E5 @* \' Y& C3 e" B
7.8 实例2:多进程操作文件的综合实例
+ I! Q: v2 B* u9 ?7.9 本章小结
, Q t2 Z8 S3 ?- |5 H( P) r3 E7 k, x2 q第8章 进程间通信 ; h8 f8 E+ I/ L' p$ [. m
8.1 管道机制
! c, Q1 I' J, N5 V8 P$ P! M' G8.1.1 管道的创建过程 0 x2 P! ]% R7 Y/ L; B" y- V
8.1.2 管道的操作 : M( r/ \, `5 Z" |
8.2 信号机制 - G/ S- P& L' f- i8 _' h6 ]
8.2.1 信号的使用
$ U4 K0 s7 C7 Z/ _8.2.2 信号对进程执行状态的影响
! x+ [- _4 s. X0 E; P9 `8.3 本章小结
$ s9 R. `1 X9 T' @# C第9章 操作系统的设计指导思想
4 @0 ?4 W8 i. D+ I" ?2 m% k9.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作
$ E2 e" B _9 s6 ]- l6 e, z9.2 操作系统的设计指导思想——主奴机制 2 S; u8 K( s+ [1 ]
9.2.1 主奴机制中的进程及进程创建机制 5 {2 f9 C2 r+ b O, ?3 E R
9.2.2 操作系统的设计如何体现主奴机制 6 O Z% P8 t+ {
9.3 实现主奴机制的三种关键技术 8 D$ g: H5 F/ o4 \9 m
9.3.1 保护和分页
) p% B+ t# R$ ]9 [1 W9.3.2 特权级 7 Z# f8 J/ F% G' x
9.3.3 中断 1 U9 W* d% J& g, o9 W7 t& }
9.4 建立主奴机制的决定性因素——先机
& q; e$ B0 T! O- U* H3 L: ~9.5 软件和硬件的关系 $ J, h" W7 r$ O$ [/ z7 Z7 l% h' \
9.5.1 非用户进程——进程0、进程1、shell进程
5 G! v2 ]8 M3 o2 O! l$ X9.5.2 文件与数据存储
- K5 t1 |; w1 k& T, |3 y9.6 父子进程共享页面 * Z6 x( S/ U+ U; f+ i% O; P
9.7 操作系统的全局中断与进程的局部中断——信号 / n* i+ n% n% W) ] d6 Z
9.8 本章小结
R' [( K. } x% {结束语 `7 [1 J1 u% e7 G0 T% O6 Z+ P. I
! Z* S% g4 W& K3 a百度云盘下载地址(完全免费-绝无套路):
. D3 U/ F9 `5 a' ?" ~ |