Java电子书:Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com
' @& O4 j) {4 t. \
2 X4 Z6 r9 Y: H$ z4 S$ H/ `
2 E! V4 g1 L7 ~: q" {+ o编号:mudaima-P0194【Java吧 java8.com】5 r" o. @4 s5 {/ d) P6 j
' A0 u, B) K& q4 V! G& }8 \
0 Y# |' ~: @* W& Q& F
9 E* d1 J+ o" ]" c, `Java电子书目录:前言
# u; [. l: p9 F% U7 t q% h为什么写这本书 ) k. y# y. d! C7 W& f) M/ x
第1版与第2版的区别
- n7 d6 k/ m3 X! { I本书内容及特色
* X1 K6 p# g# U; z H8 M" R) a( B为什么本书选用Linux 0.11内核
; \( j3 R. l* y8 i/ K! ?致谢
- ^, W* K$ k0 j第1章 从开机加电到执行main函数之前的过程 % k2 L/ z2 z. r/ K' V
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序 : B# u6 C% Z9 ^! K9 w* V
1.1.1 BIOS的启动原理 ! _0 R S$ F9 m' y1 A& [
1.1.2 BIOS在内存中加载中断向量表和中断服务程序
; R- F' O; b ^8 Q1.2 加载操作系统内核程序并为保护模式做准备
7 n" V4 P/ W% {, B u$ L+ J1.2.1 加载第一部分内核代码——引导程序(bootsect) $ W" J) J9 {* T ]/ a {* R2 [
1.2.2 加载第二部分内核代码——setup , M" T/ O) @: J* S2 X
1.2.3 加载第三部分内核代码——system模块 / l! w4 A6 P7 Y+ M
1.3 开始向32位模式转变,为main函数的调用做准备 # U0 G# {. r4 H& h3 H
1.3.1 关中断并将system移动到内存地址起始位置0x00000 |3 m& X: B! r& s' |
1.3.2 设置中断描述符表和全局描述符表
& }3 C, x7 s# S/ A) ]1.3.3 打开A20,实现32位寻址
7 @, ~( _8 i. S \$ F0 }1.3.4 为保护模式下执行head.s做准备 ! V2 ?. l8 O* c
1.3.5 head.s开始执行
. G1 G* e9 _ k# i$ V$ J, q1.4 本章小结 1 b" m( C; r- a1 B3 K
第2章 设备环境初始化及激活进程0
7 o+ H4 k2 M3 S( `2.1 设置根设备[2]、硬盘
0 T8 }/ t3 z! I+ j& y5 s2.2 规划物理内存格局,设置缓冲区、虚拟盘、主内存
9 X$ t5 L b0 _* T( p2.3 设置虚拟盘空间并初始化
+ m* p) i& Y9 }: w5 m- L* _- e2.4 内存管理结构mem_map初始化 7 P# }3 g+ D0 L% R6 D. T
2.5 异常处理类中断服务程序挂接 $ K0 B7 n: d7 ]3 {% v
2.6 初始化块设备请求项结构
' T" n5 M- b4 B V# k# d9 b5 M7 }2.7 与建立人机交互界面相关的外设的中断服务程序挂接
& W8 ~/ e% L/ ]2 B2.7.1 对串行口进行设置 $ _. t' R' g! w- O; `4 M2 s
2.7.2 对显示器进行设置
! U+ g, T7 e+ Q& c7 c b2.7.3 对键盘进行设置 Y+ m1 i) l' q9 R( S
2.8 开机启动时间设置
& {+ k3 J2 S( h; q" U6 s) ?$ D# p F+ z2.9 初始化进程0 9 a" k% `0 w( K8 ^7 W' Z \ p: Z
2.9.1 初始化进程0
5 v) X3 ?3 D% z9 P! s5 g) R2.9.2 设置时钟中断
' x7 \" M- y# _5 ^9 T0 B3 B0 b2 @) @2.9.3 设置系统调用总入口
1 n" c! k" X9 N2 c2 _% t; C2.10 初始化缓冲区管理结构 0 u# ?1 x- a. }
2.11 初始化硬盘 $ j) N. c' l2 d. h
2.12 初始化软盘
7 N: } g! ?6 J/ I0 k, o {, H2.13 开启中断 ! H# T1 N4 f+ y$ g2 f+ W! @
2.14 进程0由0特权级翻转到3特权级,成为真正的进程
3 U3 Y+ f# ~$ {1 W/ ]' t& m2.15 本章小结
2 T' g* U) V. q5 o z第3章 进程1的创建及执行
/ L! J# {+ h7 j& E+ M, O; a3.1 进程1的创建 % z" ~8 T8 @+ f, d& r' e
3.1.1 进程0创建进程1
; s$ A8 L! M6 u" `6 K3.1.2 在task[64]中为进程1申请一个空闲位置并获取进程号 ; k4 |9 N) T" p" Q! f2 ^0 l; p
3.1.3 调用copy_process函数 ) t$ y( T9 P" k2 H8 Z; B
3.1.4 设置进程1的分页管理
( h; U6 W4 l, I* `% T$ K( {3.1.5 进程1共享进程0的文件 ) D7 ]4 W& O% G2 h
3.1.6 设置进程1在GDT中的表项 7 k v/ n' E% _7 J- l% g% C
3.1.7 进程1处于就绪态 8 x! F5 S# D! A5 Z9 N3 z. f
3.2 内核第一次做进程调度 / n2 x$ n. s! g# W+ g1 N/ {* B) r
3.3 轮转到进程1执行 * z5 S8 G( O$ K
3.3.1 进程1为安装硬盘文件系统做准备 & g1 ~4 O6 W F: H! i, X
3.3.2 进程1格式化虚拟盘并更换根设备为虚拟盘
6 @) ]+ p9 f) P& @! [% z3.3.3 进程1在根设备上加载根文件系统 : Q- ]$ _# G- F) v& G
3.4 本章小结
2 D' N4 }( d2 t9 R2 J; Q# z& @第4章 进程2的创建及执行 8 @# d6 V- I' W& R- p
4.1 打开终端设备文件及复制文件句柄 * M+ o5 l4 S+ p* W* Z# I) k8 T
4.1.1 打开标准输入设备文件 0 ]* }, w- p( N, I, h9 W% h
4.1.2 打开标准输出、标准错误输出设备文件
) M2 x9 S, v7 N9 N' I- D4.2 进程1创建进程2并切换到进程2执行
8 d* K. }3 q$ l4 v1 u4.3 加载shell程序
. `( {: M! s; Y9 Q! r1 I# F1 k8 h4.3.1 关闭标准输入设备文件,打开rc文件
" C9 T, ?6 d; L4.3.2 检测shell文件 ; X. H% ^& B2 s% T
4.3.3 为shell程序的执行做准备
5 o( q7 t$ A! u6 ]0 {3 Y) a1 W4.3.4 执行shell程序 ; W: n- K1 \+ z
4.4 系统实现怠速
- W1 R9 f4 N( t% |7 X% H# \1 ?0 F4.4.1 创建update进程
( ? I( J8 k7 P$ s4.4.2 切换到shell进程执行 1 o: m/ R1 ?( p8 \ ?- d
4.4.3 重建shell
3 O2 K0 \3 J0 A4.5 本章小结
5 X* C2 O" F' E8 C5 j. h第5章 文件操作 # T" [4 c, @8 P4 ~$ ?; n
5.1 安装文件系统
# `7 z; [) h& C e5.1.1 获取外设的超级块
" i. ]! r' e! k( ^- K3 z/ O5.1.2 确定根文件系统的挂接点 2 {0 T& ^. r7 p( f, M1 B
5.1.3 将超级块与根文件系统挂接
7 N+ N( {( y2 d% J3 R: Q1 m5.2 打开文件 # y( f7 n) _, I( A! r3 o
5.2.1 将进程的*filp[20]与file_table[64]挂接 ) i" _2 h9 J- y! ]. V
5.2.2 获取文件i节点 6 M/ r: [$ m' W( b) i
5.2.3 将文件i节点与file_table[64]挂接 ' m# ~% D6 [' N2 ?7 s! j& M
5.3 读文件
1 X) o' U( O$ V; M) L5.3.1 确定数据块在外设中的位置 ( r* w7 c; \) d- [. e, m1 x1 S
5.3.2 将数据块读入缓冲块
3 z. i8 ]0 M, Z' E D9 ~3 y" H( P+ H$ K5.3.3 将缓冲块中的数据复制到进程空间 & Z6 Z y* U- I% q
5.4 新建文件 ' s2 \+ V6 n8 W+ N" v1 x
5.4.1 查找文件 - `7 O: W( C$ n" J4 V% M" M
5.4.2 新建文件i节点
& p% P: H+ l5 D D, ~) d5.4.3 新建文件目录项 * B/ s8 @$ T& W* b; H
5.5 写文件
" J6 `- C3 R( u- V( I$ U& a5.5.1 确定文件的写入位置 ( O$ a* `% S: u% `# }$ v
5.5.2 申请缓冲块 5 Y# A2 T1 {8 V5 d _
5.5.3 将指定的数据从进程空间复制到缓冲块
/ K4 @# X1 i% n& P, q9 q, I5.5.4 数据同步到外设的两种方法
$ J6 o6 T4 e1 F% p2 I6 [+ G! m5.6 修改文件
- A: _% y# r# z6 d7 i0 U5.6.1 重定位文件的当前操作指针 ( ~" l$ |' G& ^8 }( w" v" u0 `
5.6.2 修改文件
* ~ ]% Z+ Y$ x) ]4 x3 o5.7 关闭文件
6 b9 u, r0 X: D3 j+ k9 ^" @- T5.7.1 当前进程的filp与file_table[64]脱钩
- F; E' Y# Y! Z0 w; J5.7.2 文件i节点被释放 + |+ r: H! Z/ q+ s( O% ?2 b
5.8 删除文件
) B6 j4 m5 U$ Y5.8.1 对文件的删除条件进行检查 $ Z e4 A" U: ]/ }; H2 `1 ~
5.8.2 进行具体的删除工作
* _1 K. K6 O- f6 n3 o) [5.9 本章小结
) d# B, L' P2 L) r8 _& z3 R第6章 用户进程与内存管理 ' K: n( Q$ V- b" E- R1 t4 B
6.1 线性地址的保护
. n% b# X" d' G0 q6.1.1 进程线性地址空间的格局
2 u: R: G! v5 Z# w2 z7 K6.1.2 段基址、段限长、GDT、LDT、特权级
* A; u, w5 j# }: v0 v' g6.2 分页 ; c A; z8 B# H# q- O5 o
6.2.1 线性地址映射到物理地址 t7 Q, c9 n# _/ p( c+ U
6.2.2 进程执行时分页 9 r) s$ z! a4 W9 r$ \% U; a/ f7 M
6.2.3 进程共享页面
3 _$ H. u( L; s7 [# U* W6.2.4 内核分页 : w4 e' ]3 u. E5 W2 h: R
6.3 一个用户进程从创建到退出的完整过程 ( E# `/ ?: J: P8 Y
6.3.1 创建str1进程
4 G0 u6 L# ~: z j4 B! `/ i6.3.2 str1进程加载的准备工作 # M1 A9 y! c7 p) n$ o
6.3.3 str1进程的运行、加载
H' ~* y w: W) i0 D6.3.4 str1进程的退出 , p T( p% i) x9 \" \( z) i
6.4 多个用户进程同时运行
+ K X- O! s6 E/ `, p6.4.1 进程调度 ' [, \1 W u6 c7 u0 U/ J; ^
6.4.2 页写保护
, X4 U, s9 F" o" M6.5 本章小结 3 _2 C8 T& s3 Y
第7章 缓冲区和多进程操作文件 9 b' v! c! E w. z5 q' m0 f5 X
7.1 缓冲区的作用 2 u9 e u! N. [
7.2 缓冲区的总体结构
1 X) j, R- d( p! ]7.3 b_dev、b_blocknr及request的作用 8 }$ g. I. A; G% O! S9 _3 X7 p: J3 h/ Z
7.3.1 保证进程与缓冲块数据交互的正确性 3 s: i- t/ u/ S. C! R$ _5 I$ I# {
7.3.2 让数据在缓冲区中停留的时间尽可能长
% w; E) u# S q' [# Z/ H7.4 uptodate和dirt的作用 " O( z+ O. j5 G$ G3 H! f% F
7.4.1 b_uptodate的作用 5 {" q) B! R9 p3 t# s5 e
7.4.2 b_dirt的作用
8 k' d T4 H! [& }9 ?9 f+ C5 ~, c6 e7.4.3 i_uptodate、i_dirt和s_dirt的作用 , E6 S2 f( w; ~- A
7.5 count、lock、wait、request的作用 - E, d. A2 ~. E( |
7.5.1 b_count的作用 0 u1 k4 g* n7 u a- ^( y! D E- b
7.5.2 i_count的作用 1 V; n3 m4 J' U7 `3 A/ Y6 Y) T$ l
7.5.3 b_lock、*b_wait的作用
, n) ^, i1 s6 @% F7.5.4 i_lock、i_wait、s_lock、*s_wait的作用 ' P+ K: w, P D0 n
7.5.5 补充request的作用
3 R; t* f4 G5 e* H8 {5 ^7.6 实例1:关于缓冲块的进程等待队列
) |8 P- ~ u' y, ^7.7 总体来看缓冲块和请求项 5 _4 S0 ?. G' \6 \( y0 i, A5 K* F
7.8 实例2:多进程操作文件的综合实例 + S* C/ P, {) ?9 Y- i- Y
7.9 本章小结
m; s5 N' ]6 w; N% \第8章 进程间通信
# o& V4 s& y" V9 k' ]) K8.1 管道机制 & A) m- }2 H8 ~9 [! c( W9 h; i8 J
8.1.1 管道的创建过程
: ^3 T0 y6 l( E2 g' i8.1.2 管道的操作 5 R9 R% Q0 V+ b( ^9 u9 s
8.2 信号机制 5 J4 N8 k* Z3 D
8.2.1 信号的使用 8 P& m4 y* O. X- m1 p" E, c( {
8.2.2 信号对进程执行状态的影响 " \9 A9 u: l$ R
8.3 本章小结 ) x8 Z$ T! C5 G& a9 ]9 l1 d: D
第9章 操作系统的设计指导思想 0 Q# f! ^1 T8 @
9.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作 & X+ }+ a, o6 u- u7 G! g
9.2 操作系统的设计指导思想——主奴机制
* u5 I9 E( x: G# K9.2.1 主奴机制中的进程及进程创建机制
3 B3 R# w) ?8 I5 X5 T1 O' s9.2.2 操作系统的设计如何体现主奴机制
+ q8 P% m& ? y' _" a- ~9.3 实现主奴机制的三种关键技术
- R+ o% k2 K) ?9 }% ?4 e& i9.3.1 保护和分页 " ?6 d% y, K' e7 M5 g( X1 s+ W+ I
9.3.2 特权级 1 E7 Z' H' `2 p, W1 L! _
9.3.3 中断
$ X9 A" e6 P0 Z. T9.4 建立主奴机制的决定性因素——先机
0 V0 j5 C5 |% L6 Z; w0 d# d3 m9.5 软件和硬件的关系 / v8 ?$ _& {0 X8 p' Y: r1 @
9.5.1 非用户进程——进程0、进程1、shell进程
* Z+ ~# M y4 ?; x" r3 b9.5.2 文件与数据存储 : F+ F r% ?9 F5 _' }4 X
9.6 父子进程共享页面
1 a3 L5 h1 J: F& o6 _* |1 Q9.7 操作系统的全局中断与进程的局部中断——信号
8 \' p, _0 R) ~* K9.8 本章小结 & G4 F; v% _: v# }1 B
结束语
) F4 @/ T) |- @' \$ `8 t7 p
0 {" Z8 o N# G7 O) F/ Y. V% Q百度云盘下载地址(完全免费-绝无套路):) c6 a" t/ K/ |# d. B
|