Java电子书:Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com
( E6 V* `# \/ d/ K
) |, I6 |8 X" ~. T# u) h) _# W8 K( _/ Z- z: f( ^
编号:mudaima-P0194【Java吧 java8.com】
7 Z# P! N* Y* P# [& w4 n( L' I4 `9 `4 l+ w! _3 [# {. H7 x! k6 e" w
% a" k7 E4 \- T
' V. V! y% T T5 k6 Q) Z) [3 `
Java电子书目录:前言 ( N. h9 B8 k4 S9 S$ J8 ^
为什么写这本书
: i# o' c, r5 u, r0 Y5 }- m _第1版与第2版的区别
; v3 d0 P% M, n" `+ E2 ?! B; S本书内容及特色 9 |. ^5 n1 ? A5 z2 o: }
为什么本书选用Linux 0.11内核 1 _0 {9 j/ B( p* y4 Y H
致谢
; x& b4 C2 K' A第1章 从开机加电到执行main函数之前的过程
0 w: Q0 g0 {9 w2 t1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
) a3 n8 I& i7 h+ g [$ @. b1.1.1 BIOS的启动原理 0 m9 V6 J# d% P0 h$ l ^6 U
1.1.2 BIOS在内存中加载中断向量表和中断服务程序 " q8 J# M% l, r0 n: {4 T: |( {
1.2 加载操作系统内核程序并为保护模式做准备 , u- Z7 k" T/ i) W/ G5 w2 B
1.2.1 加载第一部分内核代码——引导程序(bootsect) - p# S1 T! c3 k
1.2.2 加载第二部分内核代码——setup
# Y7 K5 O- `5 t( N& a, Q z) Z% B1.2.3 加载第三部分内核代码——system模块 + ^! X: ?4 w' b7 g! u
1.3 开始向32位模式转变,为main函数的调用做准备 0 b3 L1 x) p$ N! e. b6 k7 R2 @
1.3.1 关中断并将system移动到内存地址起始位置0x00000 4 @" Q% S/ j$ r1 b0 ?' N
1.3.2 设置中断描述符表和全局描述符表 9 U: n* }; g2 Q% I
1.3.3 打开A20,实现32位寻址
6 T# l1 L1 g/ P1.3.4 为保护模式下执行head.s做准备 + v2 M1 G' Z0 s: I: n, a; |
1.3.5 head.s开始执行
3 L( Q7 l" u2 h1 v1.4 本章小结 : _, A/ ?6 `* |8 A" c$ I. Z. v
第2章 设备环境初始化及激活进程0 4 W' {" H0 b1 m2 L$ S# q. q4 C: X
2.1 设置根设备[2]、硬盘 1 n( d: i7 D4 Q+ g
2.2 规划物理内存格局,设置缓冲区、虚拟盘、主内存
0 f9 @) q- P. f+ c. H2.3 设置虚拟盘空间并初始化
7 U3 y; x* B" J% t4 T2.4 内存管理结构mem_map初始化 $ q2 z0 @7 z$ V1 Z9 |. i+ R
2.5 异常处理类中断服务程序挂接 7 N% \" \& Z" B7 M/ ^+ B( j
2.6 初始化块设备请求项结构 " K( n* ?: Y$ H/ x% `! C
2.7 与建立人机交互界面相关的外设的中断服务程序挂接
( F/ n+ y, H0 v' r5 c+ L; R4 V! k2.7.1 对串行口进行设置 / t( u. Q3 ^9 e9 w* }' z/ ~
2.7.2 对显示器进行设置 ! B% I( J$ `" I
2.7.3 对键盘进行设置
: S3 ?" d% G( N2.8 开机启动时间设置 ) y6 c% W M/ l5 G
2.9 初始化进程0 : P- w* u0 @6 M) Q5 S
2.9.1 初始化进程0
1 L" R8 Z2 B+ k# F" b( c( M4 a2.9.2 设置时钟中断
' j5 ]! r! e1 D' |6 l2.9.3 设置系统调用总入口
$ {6 O) S; N# m4 E, n$ ^ v2.10 初始化缓冲区管理结构 * X C& j% V4 }( ?# k* A8 X- }
2.11 初始化硬盘
+ z- l9 i) r. ~0 W. b8 a2.12 初始化软盘 2 U" Z6 C5 b. N
2.13 开启中断
/ K) H6 N& ~$ W$ n2.14 进程0由0特权级翻转到3特权级,成为真正的进程 & l" D; X3 C0 T2 K6 u
2.15 本章小结 # b) a3 N, j5 E
第3章 进程1的创建及执行
3 h8 x- x8 g8 S% r/ m2 f3.1 进程1的创建 - G' m; l4 o# T6 C+ A5 {5 E( X
3.1.1 进程0创建进程1
; I; r5 _3 N# A, f5 j( \3.1.2 在task[64]中为进程1申请一个空闲位置并获取进程号
1 Y6 F# `5 c& |. j$ V( C3.1.3 调用copy_process函数
: O- T. a4 a+ t2 s3.1.4 设置进程1的分页管理 5 @. P5 m5 x* Q s- l
3.1.5 进程1共享进程0的文件
. V& K4 z5 H* J5 i3.1.6 设置进程1在GDT中的表项 ' v8 V* O, Z* q
3.1.7 进程1处于就绪态 ! ?: ~8 F2 c. W/ r2 s, |% L
3.2 内核第一次做进程调度 " x# \4 c) C! n4 f( g8 r
3.3 轮转到进程1执行 & t8 y8 X: H) A% r! M2 R
3.3.1 进程1为安装硬盘文件系统做准备
' g, H3 u. h& R3.3.2 进程1格式化虚拟盘并更换根设备为虚拟盘 * x" R0 s' F6 [" [ W) I
3.3.3 进程1在根设备上加载根文件系统 " e9 Z. S" P4 g7 e) ~& E
3.4 本章小结 $ b2 m( i; V) D6 X4 r8 Q
第4章 进程2的创建及执行
' ]! |4 I0 w. \! Q9 G& e5 |4 x4.1 打开终端设备文件及复制文件句柄
" E6 r& `: [* |# B' c4.1.1 打开标准输入设备文件
' G+ _, ?, R( A6 f. ^4.1.2 打开标准输出、标准错误输出设备文件 ! L" @, |/ e ]0 R/ V, P
4.2 进程1创建进程2并切换到进程2执行
) g+ H! y1 g/ O, _/ O) K) G4.3 加载shell程序
, C7 i8 x) f6 t2 E& {4.3.1 关闭标准输入设备文件,打开rc文件 6 q! z+ i0 M: N, ~# m
4.3.2 检测shell文件 0 F% H p- J/ [: M* J& D1 Q$ f
4.3.3 为shell程序的执行做准备
; A% f' l# H# w3 D4.3.4 执行shell程序
5 _2 a$ g9 \2 ~ R' V6 K4.4 系统实现怠速
1 Z- Q1 B( a" p4.4.1 创建update进程 r3 U( a" l! p2 z2 a. e
4.4.2 切换到shell进程执行
2 Q2 l- N9 @& p' X! d% R4.4.3 重建shell ' L) r. S7 |% J7 `3 x( o( g
4.5 本章小结 & d) p q' D6 q0 c0 Y
第5章 文件操作 ) K% C9 r! k* R
5.1 安装文件系统 1 v& g1 _( G( f) Q* D5 T# ]
5.1.1 获取外设的超级块
6 H7 ~5 G5 _' \ [$ x2 B9 j) D5.1.2 确定根文件系统的挂接点 U8 r) _! B" L7 h
5.1.3 将超级块与根文件系统挂接 4 B: T( b" Y0 a" w& @9 v4 ?# [
5.2 打开文件 ) k' m Y% a* s$ |4 [/ x
5.2.1 将进程的*filp[20]与file_table[64]挂接 % Z' R9 R8 }7 C, t* Q
5.2.2 获取文件i节点 5 I( Q8 b7 A" H; K
5.2.3 将文件i节点与file_table[64]挂接 ! d& M# T$ B0 e+ {/ ]6 e. V
5.3 读文件
: ~: }5 u3 e$ [; |0 p$ }5.3.1 确定数据块在外设中的位置
6 X# h, J( o* B; w, z8 b) n5.3.2 将数据块读入缓冲块 & P# `6 U6 k8 P9 ?( z
5.3.3 将缓冲块中的数据复制到进程空间 6 g' }1 z E. }8 e5 {6 D: E1 L: M8 j9 W
5.4 新建文件 3 S' ]! h, E: h, s% _
5.4.1 查找文件 1 C1 A; A( H4 ? `; R# L' m! N
5.4.2 新建文件i节点 1 h. n7 I/ ~" w" c; `, u0 T$ g& K* \8 M
5.4.3 新建文件目录项
6 p; b u2 V0 \0 p: K+ k5.5 写文件
. c9 i* u, Y& h5 o- P5.5.1 确定文件的写入位置 : `5 a( m, X8 K2 r _
5.5.2 申请缓冲块 # \( o- Y# I) H9 V d" E/ j
5.5.3 将指定的数据从进程空间复制到缓冲块
+ o5 y7 o- s8 ^; j5.5.4 数据同步到外设的两种方法 . Q* o* y+ a% n. Q
5.6 修改文件
% H6 h9 b$ g9 U$ V4 f7 x% e5.6.1 重定位文件的当前操作指针
7 j/ M: z( [: @% Q6 V5.6.2 修改文件
, I1 A+ t9 u3 a( z% \) h) g2 L5.7 关闭文件
: T, J7 E5 C# o: l0 K$ |5.7.1 当前进程的filp与file_table[64]脱钩 . X8 D& E" N* q8 |3 \( `) ~
5.7.2 文件i节点被释放 ; s- Q; G" k1 ~
5.8 删除文件
; n- T2 H! x: I' o5.8.1 对文件的删除条件进行检查
( G( | Q% s; s5.8.2 进行具体的删除工作
9 B. Y, f K" q! b1 x6 @( _5.9 本章小结
$ \6 g- v* t* e5 {9 ~' v( m第6章 用户进程与内存管理 3 E4 @, W3 J& B1 x! ^. r, b
6.1 线性地址的保护
' o! i! N0 v/ d6 v# R4 L6.1.1 进程线性地址空间的格局 0 C# L! @& p+ _( c( K
6.1.2 段基址、段限长、GDT、LDT、特权级 % A7 `; {% O U9 N5 ?! c/ V. |
6.2 分页
( s5 b2 a6 B3 W) F. e6.2.1 线性地址映射到物理地址
* `: ^ d: J: K$ Z2 F9 ?( j' ^6.2.2 进程执行时分页
- g- i u, V* f& l1 |: {. m6.2.3 进程共享页面 % Z$ K2 M# ~& S
6.2.4 内核分页
. z& d+ {) Q7 R" e6.3 一个用户进程从创建到退出的完整过程
! w$ _% m& h5 z8 x" e$ R0 `$ e" V" ]6.3.1 创建str1进程
/ C' ?7 |1 [8 s/ b, @8 U7 X) @6.3.2 str1进程加载的准备工作
( p$ Y, P1 |$ S6 v' T* ` @6.3.3 str1进程的运行、加载 ' y( R0 \9 j* ^9 O9 _$ q/ b" R
6.3.4 str1进程的退出
- Z6 ?3 Q! n6 O5 i! `, O( Q3 l% Q `6.4 多个用户进程同时运行 : |" A# _" z* K' Q0 R6 \
6.4.1 进程调度
( X: B0 V8 `* X z' \0 G# ^6.4.2 页写保护 h, k2 b9 M, \5 t1 Q$ [
6.5 本章小结 4 ^2 b) ^! Q: {/ p' _
第7章 缓冲区和多进程操作文件 & `3 U& U) Z: F& P
7.1 缓冲区的作用 " W! P7 ^8 c' R+ {, c' u( W
7.2 缓冲区的总体结构
" \4 u4 u7 J" f& e( k7.3 b_dev、b_blocknr及request的作用
- v0 k+ P0 h/ L7.3.1 保证进程与缓冲块数据交互的正确性 % G( H" Z" Q7 L; \# q. I5 [
7.3.2 让数据在缓冲区中停留的时间尽可能长
/ [7 S* D; E1 q6 r1 d; m% E& R7.4 uptodate和dirt的作用
2 k6 j5 I3 {8 N7.4.1 b_uptodate的作用
" |" Z K$ T% q! A5 }9 o7.4.2 b_dirt的作用
$ h( p1 F1 u( G' }* L7.4.3 i_uptodate、i_dirt和s_dirt的作用 + ~) ], G# r; x5 ~
7.5 count、lock、wait、request的作用 ( m7 x5 [* s- V0 ^% {
7.5.1 b_count的作用
6 O/ b/ Q, X, c/ Q0 V7.5.2 i_count的作用
: a) W- C5 t+ e2 ?: ^( Y- H+ L3 b- k$ @7.5.3 b_lock、*b_wait的作用
3 ^* D( F G; q. R* r7 J+ k7.5.4 i_lock、i_wait、s_lock、*s_wait的作用 " \5 s; i) P% u
7.5.5 补充request的作用
P& C8 ]8 ] v! x% ~. w7.6 实例1:关于缓冲块的进程等待队列 . P s, ] p0 r4 i% ~. {# R
7.7 总体来看缓冲块和请求项 8 W; F* F& s# O6 Z7 W% n& s' W
7.8 实例2:多进程操作文件的综合实例
( [# D* Q5 g) X7.9 本章小结
6 R% G) L& \, V" p+ j8 v* E第8章 进程间通信 0 ]" c. ~& Z) [( i
8.1 管道机制 * c) `7 H! _5 \9 i% E6 A
8.1.1 管道的创建过程
5 e; [% t6 z- _8.1.2 管道的操作 8 N: R8 m5 w p$ C: E' E
8.2 信号机制 - {* o% t* h. B9 @/ u' F6 }
8.2.1 信号的使用
9 x G- Z2 K, D& k! f- ^8.2.2 信号对进程执行状态的影响 8 E7 p" c6 r9 T& L
8.3 本章小结 ( e$ R5 W2 S4 y1 i- s" A5 I
第9章 操作系统的设计指导思想 ( y6 h3 p" j0 `; U
9.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作
0 X8 w i" [9 ?; E. O9.2 操作系统的设计指导思想——主奴机制
6 ]2 X* a" Z# Y3 z) A9.2.1 主奴机制中的进程及进程创建机制
0 z' l' ^- i; i5 X: d4 _9.2.2 操作系统的设计如何体现主奴机制
0 A4 u, K, {- t- p9.3 实现主奴机制的三种关键技术 , E/ J" D# u" w' S3 p0 p
9.3.1 保护和分页 6 @3 s9 T0 \, S0 i$ g
9.3.2 特权级 9 H3 V' r9 _* D8 F7 C/ o' O: X
9.3.3 中断 & f2 V ?0 {; Q* H* l1 j
9.4 建立主奴机制的决定性因素——先机 ! Y6 \! n5 a* W
9.5 软件和硬件的关系
" K& \" v/ B/ ?! t- }: x0 {9.5.1 非用户进程——进程0、进程1、shell进程
) j. I* b Z' m: t4 l% V$ e9.5.2 文件与数据存储 . |% _" B2 j6 s- e! V
9.6 父子进程共享页面
, h2 Z) R# v L- b2 `6 N9.7 操作系统的全局中断与进程的局部中断——信号 ) \9 k: C& N4 x
9.8 本章小结
0 `6 p# [8 B% v0 \ E5 ?$ o结束语
- S7 M3 y. \) ~0 ? M! s% O. C3 e. X9 U3 q
百度云盘下载地址(完全免费-绝无套路):7 H, G! r% ?7 Z( W( T
|