Java电子书:Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理(第2版) 格式 pdf 电子书 PDF 电子书 Java吧 java8.com3 `5 T3 l( X a+ f" c
6 K3 ^! C2 L1 n1 o- l2 T& E$ K. o {# Y2 b0 a
编号:mudaima-P0194【Java吧 java8.com】- ^5 d5 w; U, i* j6 U
6 ]9 k. k, \1 U" s0 ~- g7 ^- i- O0 X( s& m
/ ~( p2 n1 y" k
Java电子书目录:前言
- I7 k u! y) z% `5 X7 Y为什么写这本书 : h/ o C/ G4 O6 E y8 r
第1版与第2版的区别
0 V0 P: P" G( z本书内容及特色
* x5 f6 g3 k0 b9 i& h为什么本书选用Linux 0.11内核
0 O$ p0 L& V3 X$ X) q. s致谢
; S; i/ S) A/ r6 z/ r第1章 从开机加电到执行main函数之前的过程 % m' b8 q. a5 z. W/ G2 T! c
1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
# Y) p# [- ? { ~6 U/ m) t1.1.1 BIOS的启动原理
+ I) |/ V2 b) |! A9 Q1.1.2 BIOS在内存中加载中断向量表和中断服务程序
* v0 H: m( T+ e1.2 加载操作系统内核程序并为保护模式做准备
; P7 O! z$ i- A$ [* Q G* @1.2.1 加载第一部分内核代码——引导程序(bootsect) 7 |' |+ W* E+ l
1.2.2 加载第二部分内核代码——setup
/ ]! R( x% g7 W3 w; o1 X: Z' t9 H1.2.3 加载第三部分内核代码——system模块 " _; F2 H0 l9 B2 c
1.3 开始向32位模式转变,为main函数的调用做准备 4 e0 q! U9 K6 t0 \( V# u9 X, s
1.3.1 关中断并将system移动到内存地址起始位置0x00000 ! n- P2 E/ ?9 P; \7 z
1.3.2 设置中断描述符表和全局描述符表
$ ?* M! e( r3 ~2 U) ]1.3.3 打开A20,实现32位寻址 / q! y! F6 [& D: w$ \
1.3.4 为保护模式下执行head.s做准备 , N/ Q2 f& k* M" Y. `
1.3.5 head.s开始执行 $ {7 }# G1 W! ]$ E! Y2 W( d
1.4 本章小结 6 }1 [/ ~9 Y+ V
第2章 设备环境初始化及激活进程0
5 o& Q0 p: x( F1 R9 s. {. Y2.1 设置根设备[2]、硬盘 2 K5 g& w- t6 R) t+ A8 c! o; u0 {2 d
2.2 规划物理内存格局,设置缓冲区、虚拟盘、主内存 1 `/ [! g2 Z6 ]/ [; T$ t
2.3 设置虚拟盘空间并初始化 4 M; U N* v& V' T4 d) E3 d
2.4 内存管理结构mem_map初始化
! n- k: a9 G$ Q1 Z; T2.5 异常处理类中断服务程序挂接 ' o$ A3 ~2 V! ~* k. T- a- S) U
2.6 初始化块设备请求项结构 ! c0 e) C- `( g+ n* }$ ^
2.7 与建立人机交互界面相关的外设的中断服务程序挂接
f I! U/ v; @& C2.7.1 对串行口进行设置 ! C$ |+ P% O; `# ^) V
2.7.2 对显示器进行设置 " x# K' p% r; ^) v
2.7.3 对键盘进行设置
3 S2 o0 e) m7 }: `3 E6 ^6 m6 I2.8 开机启动时间设置 3 J# {8 \: Y5 b
2.9 初始化进程0
; g8 k* \/ P( q5 o, L2.9.1 初始化进程0
7 q3 Q$ y2 K& z- z. V2.9.2 设置时钟中断
/ k7 a/ ~# e/ k# V/ v/ c; Y2.9.3 设置系统调用总入口
& e+ O8 s/ ^3 B: U: j) S& X2.10 初始化缓冲区管理结构
; `* ]3 ~8 h* i' w2.11 初始化硬盘
1 u0 S4 m: f9 x- E1 c2.12 初始化软盘 5 F8 K( m6 }- u7 F2 q. t
2.13 开启中断 ; j! N( r4 ~) Y* @' |9 z' r3 H
2.14 进程0由0特权级翻转到3特权级,成为真正的进程
/ U7 F$ R) \! c; `4 j2.15 本章小结 ]3 ~+ e3 H; c9 A( U
第3章 进程1的创建及执行
" v d3 N8 N1 l( m) O$ X3 B3.1 进程1的创建 6 ^( |) M- i5 b6 r6 Q. _- q
3.1.1 进程0创建进程1 ( n+ Q% R; J; r9 X: t
3.1.2 在task[64]中为进程1申请一个空闲位置并获取进程号 ! O6 A' o& y2 T3 S
3.1.3 调用copy_process函数
, y( M- A8 p5 h- z8 y* k3.1.4 设置进程1的分页管理 6 ^- d# {: \7 V; R
3.1.5 进程1共享进程0的文件 ; j/ ?) F, f7 l. V
3.1.6 设置进程1在GDT中的表项 - u$ j. H! b, F
3.1.7 进程1处于就绪态
6 }3 Q" |8 |' J' h1 X3.2 内核第一次做进程调度 Y% |& N' [% F% q1 e1 v2 U& f
3.3 轮转到进程1执行
1 F" G; e# f0 V9 o3.3.1 进程1为安装硬盘文件系统做准备
: V9 X# ]9 o0 B6 ]% P0 j9 v+ Q- g3.3.2 进程1格式化虚拟盘并更换根设备为虚拟盘
8 G' I, A, X* ^/ T& q. K3.3.3 进程1在根设备上加载根文件系统
5 k- M+ m6 G$ k6 d% P0 K3.4 本章小结
0 x* r2 Y/ z7 s6 M; B o第4章 进程2的创建及执行
% }9 J& ^+ Q2 Z6 ?# S6 i2 o% _4.1 打开终端设备文件及复制文件句柄 - }: [! S1 m' A
4.1.1 打开标准输入设备文件 ' R% `. H& ~1 |2 z* @% [
4.1.2 打开标准输出、标准错误输出设备文件 a4 I' D7 q/ H0 v/ F+ M
4.2 进程1创建进程2并切换到进程2执行
4 s4 F2 t0 L3 L9 k: J$ q6 t' P4.3 加载shell程序 * g& i/ `3 B# @" [' _7 j- c- z
4.3.1 关闭标准输入设备文件,打开rc文件 6 z- I# X; ~1 B
4.3.2 检测shell文件
2 X4 u! h* l" A" V. C4.3.3 为shell程序的执行做准备
1 }6 p1 @ z2 {7 @7 p% @4.3.4 执行shell程序 " N3 y9 j# G' [' q4 U+ K. K# d& S
4.4 系统实现怠速
4 |: R* T0 m& i; n5 z4.4.1 创建update进程 1 E3 D. M5 v+ P" y! ?8 {
4.4.2 切换到shell进程执行
5 [# @# m A: o: F4.4.3 重建shell
5 L% @& v, P6 u! C4 |3 t4.5 本章小结
4 H; d8 V$ D4 S1 B& P$ ?第5章 文件操作
- W4 I. B, h& q5.1 安装文件系统 : H5 L5 g, u/ P
5.1.1 获取外设的超级块
: l* j. e* ~4 u2 z5.1.2 确定根文件系统的挂接点
& w$ z4 L, d. I2 b" }5.1.3 将超级块与根文件系统挂接
/ [- n2 j5 b" R' U5.2 打开文件
8 G: {6 O+ F3 _0 a& w& E5.2.1 将进程的*filp[20]与file_table[64]挂接 + w: `$ I# F8 E5 Y9 W
5.2.2 获取文件i节点 # l& Y9 B c2 O+ b% `# F: t4 C
5.2.3 将文件i节点与file_table[64]挂接 - `( F9 o( I. T+ m% I: J$ A
5.3 读文件
- h& G$ g5 s5 K+ E; k% z6 }) e8 U) d5 q+ u5.3.1 确定数据块在外设中的位置
, ?; e/ j1 B0 m: o5.3.2 将数据块读入缓冲块
- t% A) I* d1 j- R! n2 ] N5.3.3 将缓冲块中的数据复制到进程空间
9 M. e7 P, m! {, g7 T1 ]# b! b5.4 新建文件 0 N0 b @+ N6 T. J; o& {
5.4.1 查找文件 # ?! i: b7 j# y: _6 g
5.4.2 新建文件i节点
) `# y, J4 X6 \8 U& b5.4.3 新建文件目录项
4 o1 q7 Q: Z1 E" D2 U4 p% ]4 ?5.5 写文件
% H0 _& ]0 O3 \. b5.5.1 确定文件的写入位置 5 L2 p+ }) M( t9 h1 I2 }3 v
5.5.2 申请缓冲块
" L! i4 A; c7 F- B/ R0 t5.5.3 将指定的数据从进程空间复制到缓冲块 h# b3 I ~) Y, n& M1 ]6 S
5.5.4 数据同步到外设的两种方法
5 l6 u" b2 F$ `6 V7 r: a0 W5.6 修改文件
) t; t( X8 h, ?5.6.1 重定位文件的当前操作指针 Q5 X k9 g" m) u7 r
5.6.2 修改文件
' N4 ~9 f: [1 s% h. y) P4 `1 a5.7 关闭文件 ) N8 @1 O$ c% P I! X* y( M
5.7.1 当前进程的filp与file_table[64]脱钩 + s( j- P _1 b' w) D* y
5.7.2 文件i节点被释放 5 b4 Q( W% t2 l! m) r6 s0 i
5.8 删除文件
$ n- S, S9 o5 x5.8.1 对文件的删除条件进行检查
& x* B, ~- l4 {, p' x) w3 M( [5.8.2 进行具体的删除工作 " O! h3 U6 N# x
5.9 本章小结
! ], m7 U. U9 t) Z% F: | r& [% c第6章 用户进程与内存管理 _- p$ p1 A/ x3 g3 P
6.1 线性地址的保护
k) Y2 O4 ]& S9 U8 j4 r. x6.1.1 进程线性地址空间的格局 ; B( M, a+ {9 I# h3 f9 l; |
6.1.2 段基址、段限长、GDT、LDT、特权级
% `: ]$ J# ~$ F0 d6 E- Z6.2 分页 4 I3 Q7 i7 I2 e4 {% V5 ]9 b
6.2.1 线性地址映射到物理地址 0 w8 | @: y6 j9 f7 [! }5 u) o
6.2.2 进程执行时分页 , S1 G# v( h1 a* i. t
6.2.3 进程共享页面
& s: {: I! v' z% _* B; Z6.2.4 内核分页 |) H* o# p$ v- |4 M# d# w
6.3 一个用户进程从创建到退出的完整过程
; ~7 ~& o0 N& y+ K, t' r6.3.1 创建str1进程 0 K3 [1 F% R% N# Z
6.3.2 str1进程加载的准备工作 % l# S$ F" ]4 g4 q
6.3.3 str1进程的运行、加载
; m$ i+ f% r a6 g6.3.4 str1进程的退出 3 {! }. S; I* E' u
6.4 多个用户进程同时运行
1 T1 C3 h) B- ~( ?6.4.1 进程调度
' }6 H( F$ i3 G- S1 K6 q* k6.4.2 页写保护
# M: m' E7 K3 Z8 C( @6.5 本章小结 # n( E* U6 V% a9 S, _
第7章 缓冲区和多进程操作文件 # V, r& X% s. `/ u2 ]5 l
7.1 缓冲区的作用
6 X3 C0 h$ s- b/ G$ [' {7.2 缓冲区的总体结构 & J# ^0 e' a9 i" ]) _6 ]# {" Q
7.3 b_dev、b_blocknr及request的作用
( q n7 _ k7 ~ N2 F I7.3.1 保证进程与缓冲块数据交互的正确性
$ @( L" C8 U0 U7 [9 w7.3.2 让数据在缓冲区中停留的时间尽可能长
0 M4 m* n _) q, s8 j& P7.4 uptodate和dirt的作用
/ a; @9 z. }$ M6 N7.4.1 b_uptodate的作用
4 {6 G, t; P: u& ^7.4.2 b_dirt的作用
* f& l4 N- |7 N# ]7.4.3 i_uptodate、i_dirt和s_dirt的作用 # k2 p8 i# w. u' [; `8 H
7.5 count、lock、wait、request的作用
w5 u( J9 v# C$ N) r) X9 G7.5.1 b_count的作用
' [6 x; N" i$ V7.5.2 i_count的作用 - X5 P/ }( K8 x+ N! o2 Y# r& [
7.5.3 b_lock、*b_wait的作用 4 G8 F' e. h) F. R5 r( q
7.5.4 i_lock、i_wait、s_lock、*s_wait的作用 6 } a- v( `' w+ O4 A0 N1 j, G7 r6 R
7.5.5 补充request的作用 + ~0 P- |; Z* T' e7 i
7.6 实例1:关于缓冲块的进程等待队列 ) E k( C2 |9 k, `8 F% m
7.7 总体来看缓冲块和请求项
! c- J7 n5 X( J3 `3 J; t! X" i) p" z5 b7.8 实例2:多进程操作文件的综合实例 : ?- @! q' `3 ]: K8 A3 \4 h: w
7.9 本章小结 ' d0 X ~2 A# a* J$ u6 K
第8章 进程间通信
0 p q* z0 {" M4 T! u8.1 管道机制 + C) O% b) k, s+ A- S& U
8.1.1 管道的创建过程
2 _/ b Z7 ~3 {8.1.2 管道的操作 0 N3 F$ {1 S( G
8.2 信号机制
( W; x) Q7 u; \3 X8 y7 C2 N& X6 s9 h$ V8.2.1 信号的使用
. ^: [9 I b5 K: T8.2.2 信号对进程执行状态的影响
; t+ f ?: b# i2 V& C8.3 本章小结
% S- u! R; Z+ y C; B% j4 i; F5 E第9章 操作系统的设计指导思想 ; L1 J6 P2 q9 h! J, P- L2 {# \" n
9.1 运行一个最简单的程序,看操作系统为程序运行做了哪些工作
, O/ W5 Z. T4 Y9.2 操作系统的设计指导思想——主奴机制
% V( q5 Y/ f! H/ O# t5 D; v9.2.1 主奴机制中的进程及进程创建机制 5 Y& [' _0 I- B5 T* d
9.2.2 操作系统的设计如何体现主奴机制
* }3 N: C5 j# Q. I9.3 实现主奴机制的三种关键技术 ( L7 M. @( e: H! [" b
9.3.1 保护和分页 4 I+ F y1 j( a
9.3.2 特权级
1 I( N$ |! c' ?4 t% r7 t! Z9.3.3 中断
3 c3 l' W/ e/ D9 ?% i9.4 建立主奴机制的决定性因素——先机 8 R R) B9 K3 L$ d
9.5 软件和硬件的关系
7 m" }2 @! q! Y: g: O9.5.1 非用户进程——进程0、进程1、shell进程 ! _8 C6 E! x) c& h5 @0 m+ G
9.5.2 文件与数据存储
" v8 d2 Z# Q2 Q9.6 父子进程共享页面
$ @' q+ Q0 R& } ^; [: r2 C9.7 操作系统的全局中断与进程的局部中断——信号
5 L K9 k: m) R+ N8 E1 B3 B9.8 本章小结
/ P N) g7 O& m4 Z结束语 * d3 k u) n5 H1 E5 G2 ~
* R6 N& k: Z9 X1 ~百度云盘下载地址(完全免费-绝无套路):
0 u1 U# O, @) P# A8 I8 p% o- y |