|
Java电子书:Linux内核设计的艺术 格式 pdf 电子书 PDF 电子书 Java吧 java8.com
& W5 f- W0 I8 s( S1 D9 M. e
% f6 x, B& k/ U# t4 K/ |" |4 u Q* n+ J" y) M, T" r
编号:mudaima-P0071【Java吧 java8.com】
: a" \% Z4 v4 L6 V! R- O" U1 `" U8 h" w% k7 s' i2 x
9 f% z T. @. O
6 w0 c W P3 w* G( U& x! K5 \Java电子书目录:前言
$ R; Q# m4 O" P& E& e; x
( o' }/ A& N5 N* w5 t* o章 从开机加电到执行main函数之前的过程
# L+ A4 v" H( O2 q$ Z ?! }3 g
) H* D; J5 V9 o6 ?$ ]1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
0 s( q) O2 M, l7 U# U- y. H" T. P7 K( O7 H# C, \! B- m
1.1.1 BIOS的启动原理
. B, ~, S9 W. x9 Y7 J
; s! E/ y) L7 F6 F# J2 z+ h, f+ d1.1.2 BIOS在内存中加载中断向量表和中断服务程序: {2 _; y$ i$ L3 w
K- B6 Q* b9 \* j; y" E, L, J3 e
1.2 加载操作系统内核程序并为保护模式做准备 z7 k& L) b# `* P5 [
/ k# T# o5 F- N+ y1.2.1 加载部分代码—引导程序(bootsect)
3 C: q1 j1 { O
7 L) [" d! h& k z1.2.2 加载第二部分代码—setup7
7 D. H, r" \# R b% m: h& i
/ {3 M# S8 L+ n6 Q; e) ^1.2.3 加载第三部分代码—system模块
0 v5 _4 e1 b6 X" _, W7 @4 s) |: z% A w/ B7 d2 R) t( L, B
1.3 开始向32位模式转变,为main函数的调用做准备! K2 B; Y' l8 q: \
5 v- @7 R' h" F
1.3.1 关中断并将system移动到内存地址起始位置0x00000
: l0 J$ I6 P* \" ?0 { G4 n0 o B! I! V x0 ]! W- M
1.3.2 设置中断描述符表和全局描述符表
" }0 _7 V; ]" F% n- T! N6 e2 G+ ^% e+ Q& x0 o& y- f6 R' H
1.3.3 打开A20,实现32位寻址; g9 k, @) ^# v6 S3 V, l
7 i% p/ H1 f* y; C8 r* j1.3.4 为在保护模式下执行head.s做准备
2 @' p* n% f" ]: F9 V5 J
9 l" o1 i& z5 b! s1.3.5 head.s开始执行
' T6 w, L3 [* ]+ F/ F' ^6 P+ u* {% @9 ?$ E$ |) V6 y7 }4 {9 q4 I
1.4 本章小结
, H9 C+ f' h7 w. k1 {
: _" B, h# m( N. F" e7 R第2章 从main到怠速
+ r" \: d( \6 p9 l3 ~# R, K5 ~5 s5 g0 r4 L
2.1 开中断之前的准备工作, k( [' z7 B+ N- D7 C; t
. ~. u' g& I# Q) M8 v" I/ @
2.1.1 复制根设备号和硬盘参数表
) i# K4 m; N, q" h
& t0 t$ Q- T q$ \9 e8 J5 }9 I2.1.2 物理内存规划格局
/ J( ?3 J- G1 ?8 j4 o1 \* q
3 t/ u4 N P$ H9 ~3 Q* @1 Z. A" C( ` v" I2.1.3 虚拟盘设置与初始化. Q6 ~4 y: \/ w3 [' u! h
0 q# p" A: w: J
2.1.4 内存管理结构mem_map初始化
* d, U) v/ F8 b& j) t8 R
* b B+ m0 _+ M: f! j. q2 b" m2.1.5 异常处理类中断服务程序挂接
$ _- p \0 ~, s* [( A7 A" V: [; x; m/ Z4 C: }2 ?
2.1.6 初始化块设备请求项结构8 S" I% c# ]& D) U9 P: R* Y
0 u5 Q: l8 ^ V) S6 F, T
2.1.7 与建立人机交互界面相关的外设的中断服务程序挂接
) l% f, b9 |$ U* l7 h* R
/ V! A% Y o" v8 q2.1.8 开机启动时间设置
! c9 f& s9 z. S! m9 @1 q/ z7 ?2 w4 j0 o3 ^# V
2.1.9 系统开始激活进程" _( N" u c: a- b- k* ^. s
+ V5 z- N% O, H) l2.1.10 进程相关事务初始化设置. h7 ?% h4 m7 R+ K4 d8 ^$ }* K1 @
; D% o. T! ^5 Z' w9 e2.1.11 时钟中断设置1 B6 ?$ z: ?/ a
8 R9 a6 A2 ~, e/ h0 x
2.1.12 系统调用服务程序挂接
( R: ]& H$ m7 N
; a2 G3 ?5 e' q5 n2.1.13 初始化缓冲区管理结构
4 V" v% k* Y3 X" Q3 l1 |8 R9 i' j* B3 m2 h7 G7 k6 p; J' i! C" ~, [
2.1.14 初始化硬盘
! Q z1 B- H: z! s+ J0 Z* z0 B2 s
. l# @( o8 Z/ w. q( p2 W- j2.1.15 初始化软盘7 h- w4 Q: `3 Y t1 _1 o
7 q+ l3 k4 C: |* H: w9 ^" C
2.1.16 开中断
& k- H9 l1 l, n+ f
/ p6 ~* V" Q% f s8 |2.2 进程创建的最基本动作
. t/ s3 R& ~( E0 [/ i0 G: _7 c* A
. \$ V5 v( {( K. h2.2.1 操作系统为进程0创建进程1做准备
& ?3 K* ^% B+ M+ [4 I" N5 F# j5 I3 C, U+ q, L
2.2.2 在进程槽中为进程1 申请一个空闲位置并获取进程号
+ S, p& K8 i$ A
/ @$ h; B# W" P. Z2.2.3 复制进程信息之前,先将一些数据压栈# X/ C/ k' T) K! w
4 g; j; h/ _% ~9 B2.2.4 初步设置进程1管理结构
6 k, y" k7 t6 O% ]
- L0 ?' U: `9 J" Z0 Q! t2 ]2.2.5 进程0创建进程1的过程中发生时钟中断& D' h. O- F' [' q/ l
0 ~+ i* m2 t5 }- O! ?) q* T6 G! r
2.2.6 从时钟中断返回/ Q7 \$ t+ p8 N
: V. M3 l3 V3 M: ~+ B3 z
2.2.7 调整进程1管理结构
# C6 Z5 l3 ?* m9 ~; P" F3 I7 ?. e# C
2.2.8 设置进程1的线性地址空间及物理页面5 Q: L, n M3 c
) W8 d& {4 p" J# \' Z
2.2.9 继续调整进程1管理结构
, v7 H0 v$ i, d$ p h' a- W1 x$ Z
2.2.10 操作系统如何区分进程0和进程
, V/ r& q) O7 M/ E/ {, B) \+ Q( c6 W+ z4 T/ Y; n
2.2.11 进程0准备切换到进程/ t# p( E, ]4 I1 p
( h% t* w" x W" W5 {
2.2.12 系统切换到进程1执行1 b9 B' n' r' v3 T
3 p& q# E `" H! _7 o# n$ v; G2.3 加载根文件系统2 o. e' e! j5 X& j1 m: E2 S
# Q- _) \* _4 B% y. n8 d
2.3.1 进程1如何开始执行' [( U1 Q: W1 F) ~; T. `: g: Z1 V
# u$ l! [! J" I- i
2.3.2 进程1开始执行
3 D4 D# t7 G0 f* L
/ s) K3 a" Z1 I/ u2.3.3 进程1开始以数据块的形式操作硬盘/ }" r. g# w# ]( |) z& }
2 N8 m9 n5 O+ m$ e# a) Z' x2.3.4 将找到的缓冲块与请求项挂接# M, X) Q, o' U& T2 F1 N
7 Z4 T% b# K" l% ?0 l, [' ]" v
2.3.5 将请求项与硬盘处理函数挂接
H" i# \( p6 E8 A: T
* f. R$ p) `" Q5 Z& p2.3.6 进行硬盘读盘前的准备工作
7 z9 S1 C% K& g8 U
N) w. G( r5 ]8 R2.3.7 给硬盘下达读盘指令9 p' N; e$ @9 s+ [
8 T; R9 e; f4 c+ X2 I' P
2.3.8 进程1由于等待读盘操作挂起+ X, r9 o5 k( K5 F; S% P, s4 D/ E
; @/ G' ]1 j" u! `( ^! a1 g2 W( @2.3.9 系统切换到进程0执行3 m- Z4 |0 ]) q- x- C
( G+ k6 e; l) N2.3.10 进程0的执行过程, I& o6 v; [& G; o" S4 P* e9 a
& K$ e) m; _5 D3 M, a0 ~2.3.11 进程0执行过程中发生硬盘中断
) R* ?7 C+ `5 r+ i% Z7 Y& ^1 G& \* s- A7 K9 ~' U4 z) t
2.3.12 硬盘中断服务程序响应后,进程0继续执行$ X2 ?$ |1 A9 c3 w8 A
# W m' x/ a" ~3 `/ J# ~6 E F2.3.13 再次响应硬盘中断并唤醒进程3 p! P, i3 K- ?" t8 c- K; `
5 N+ n, z7 L) K$ {
2.3.14 读盘操作完成后,进程1继续执行- d( d: N; X! r. z1 W
$ F: }, R: i9 N: g+ s( Q
2.3.15 进程1继续设置硬盘管理结构
; `: ~/ d# S# K% L0 h5 X! E+ z( {- ]; c: y" [
2.3.16 进程1获取软盘超级块,为加载根文件系统做准备
9 w ]8 [; {# M" f5 { `, M/ [/ {$ j2 p# G1 L( o- s3 @, f& V/ `+ Y7 T
2.3.17 进程1备份超级块数据: N4 e& _( b& a$ w+ v
! q4 P2 d8 y# d9 O$ ]+ \
2.3.18 进程1将根文件系统从软盘拷贝到虚拟盘
9 J* ]5 J8 R" l
0 X6 b* g1 X( R& h( u' N0 J2.3.19 进程1开始加载根文件系统0 Q0 c& m2 U/ o8 @! X
+ A0 B) y; q6 f8 O' r' F
2.3.20 进程1准备加载根文件系统超级块
- h, j7 p1 s' o7 R
5 w+ @' b7 c( e0 B2.3.21 进程1加载根文件系统超级块, c6 E* S" P" W4 p/ c9 `5 Y# y, N& q
5 Z0 j8 C/ }+ e, J3 l& i) | ?
2.3.22 进程1继续加载根文件系统
; S, q( \/ U/ }; m! @* T! q$ q2 q9 r* h5 @+ E% Y. e% e! k
2.3.23 进程1准备读取根目录i节点
/ {% p8 ~# P$ [$ s
* H: G6 V3 L V' S2 y& I' A1 w2.3.24 进程1加载根目录i节点 b- R, C! M6 p8 \4 B5 a
% c; u( {6 K# s1 h: F7 d5 _2.3.25 进程1结束加载根文件系统的过程
' p1 M! l& p9 T& L3 s) |$ R d
2 s; b& B7 V( f# k V+ T2.4 打开终端设备文件及复制文件句柄) ] G2 n; T7 s0 c# N* n9 o! e0 `
, |! c# H0 F' s8 g$ d/ q2.4.1 进程1与内核文件表挂接,为打开文件做准备
; p3 b: u9 c8 s2 a9 M2 E, I8 q5 H9 x4 B# O5 G; S) `
2.4.2 确定打开操作的起点
& s) w0 b1 ]$ O
6 e. u; N/ _0 _8 s2.4.3 获得枝梢i节点—dev目录文件的i节点 a: K- ]3 o+ l4 c8 [7 [
* R6 v* |( _6 |1 t! m
2.4.4 确定dev目录文件i节点为枝梢i节点, T5 R2 Y- }! s
/ c- S6 M: T7 D! q1 O5 r; ?
2.4.5 继续返回枝梢i节点
( e, P+ Y0 a: q5 z2 Z8 d$ K' C- W; b" T. C* T
2.4.6 查找tty0文件的i节点
$ R4 W! d7 f3 c& ]7 b& @6 V
1 o: u0 I0 K4 p7 r2.4.7 将tty0设备文件的i节点返回给sys_open系统调用
, l/ m) U9 _% M& B9 J; e% h: \7 i/ ^9 V* r7 T
2.4.8 分析tty0文件i节点
+ r5 J( O1 {8 z5 d0 X& F
! L# A. x! E: b9 O8 W% w2.4.9 设置文件管理结构并返回给用户进程# f- F& t: x O5 c0 Q: i
7 J4 g' B* h# S6 v# |
2.4.10 进程1复制tty0文件句柄
1 C! D1 d ~6 ` J$ q# D: A6 T* k! \+ |4 S
2.4.11 进程1继续复制tty0文件句柄: k9 d4 U( _: H% f
; C, k! ^, S9 {7 {
2.5 创建进程6 A/ C( e/ Q5 H. N
9 i% W+ w0 }; N6 L8 j- Q" w' O
2.5.1 进程1准备创建进程& b; A! a9 c$ ~
+ ?4 B4 X) Y( \7 b+ U2.5.2 复制进程2管理结构并进行调整
$ X/ g# n' L6 F/ p/ R& [8 f! V4 M) l- S$ }
2.5.3 设置进程2的页目录项并复制进程2的页表
* G, y" N1 ]* y8 l5 c7 y4 ]5 |4 c$ Q- ^) q, I9 X ~, x- ~# ^% \
2.5.4 调整进程2管理结构中与文件有关的内容! D" Q( w m" U0 Z. `& }$ @
3 h- r" N+ Q* @/ p. J% T2 e' r$ P- O
2.5.5 进程1执行过程中发生时钟中断
, o. z0 s; r$ L! k* U7 K) N+ Z
6 g3 I9 m; {7 f( o( @' r2.5.6 进程1从时钟中断返回,准备切换到进程' b0 J: ?9 p6 A- Z: |0 G
& J% d1 i5 i7 S a+ @8 L
2.6 进程1等待进程2退出0 S! k" ]. s ^) ^0 c1 w! `: c
5 _. H( o' C) ~3 x. ~
2.6.1 进程1查找它自己的子进程) S/ O9 q" J8 M" s
7 E; V1 D+ I# o% z1 G. M! v2.6.2 对进程2的状态进行处理/ H) {$ C* L% u; f8 @
5 n, l9 S3 P$ V0 s. k
2.6.3 切换到进程2执行
9 }1 D# r3 c8 q) P8 h1 w5 x5 h+ r% G n
2.7 shell程序的加载
( U& M$ d0 } c/ v: {
( ?' ^3 }/ F( H5 h; z2.7.1 进程2开始执行
8 f- R) d, A2 A: d* C _* G+ Y$ j+ V3 ]0 T+ {# |2 F) c
2.7.2 为打开/etc/rc文件做准备
# v- A p( ]9 g3 O5 q2 p! l2 D6 W6 x5 K9 ~% i+ V
2.7.3 进程2打开“/etc/rc”配置文件
. G7 c/ B7 ?* r/ M; r
* r9 Z" U, s4 I! k2.7.4 通过压栈为加载shell文件做准备0 J! P0 k. x2 H; M7 f
. ^2 f3 X3 @6 }* g% m$ w2.7.5 为参数和环境变量设置做准备" Z% e' t/ D+ s3 Y, O
) _. M6 l$ a9 \. P' y+ M2.7.6 得到shell文件的i节点% A8 A$ n+ v' ~1 D* `4 M7 k
; A+ g4 ^ V! Z3 l* q( X }
2.7.7 为加载参数和环境变量做准备
R0 j/ s, j4 \/ i+ q/ v4 V7 m' h0 \/ d/ l+ B. f
2.7.8 根据i节点,对shell文件进行检测
7 o* c2 G* f- ~1 q" N3 T& h, r% H
5 i7 I/ v. S% m- t3 `4 F2.7.9 检测shell文件头: l/ k% d) U: e# u, @) L
$ @2 G/ E9 j7 R! ]" r. M
2.7.10 备份文件头并进行分析" X& L6 I/ M5 K% I. M+ a
$ b" S2 J* }" ]4 H+ \& v2.7.11 对shell文件进行进一步分析) O& K1 D, k! w' @& ^8 z. u; e
0 x: H( v8 O* b' Q2.7.12 拷贝参数和环境变量- ?# y$ I9 T2 K6 w6 a2 W1 ^
! N* c# J$ n' p& J2.7.13 调整进程2的管理结构
. T+ @1 I7 S, e8 \. L3 i- a
4 x$ o" `& Z% [2.7.14 继续调整进程2管理结构% i4 A( g" P3 V' d9 V h0 i
6 j5 W9 H4 E ^2.7.15 释放进程2继承的页面) u) d1 l0 [2 J! o3 n
9 J* E* ?: S7 L5 x9 j% P2.7.16 检测协处理器
1 h4 p5 S3 w1 D6 \& ]/ R
[5 \% b; Z, y9 k9 s2.7.17 调整shell程序所在的线性空间地址
( Z: C7 o. a9 k" V
+ @9 Q1 A4 T& Q- V$ R6 x: V% r4 o2.7.18 为shell程序准备参数和环境变量5 U/ ~. B: b1 G" O; c* I$ P c G
( L: i# e- o; R! |2 S k2.7.19 继续调整进程2管理结构
$ z& Y6 p9 E6 C' j: p9 Q& j7 r% H
1 F5 p* \8 f' O2 [; R2.7.20 调整EIP,使其指向shell程序入口地址
. x2 v& Z! p' E/ h# r& P# e; O- Y. s! j! w- S8 g9 v3 p8 h
2.7.21 shell程序执行引发缺页中断
0 U3 i- J4 H9 o! v4 E+ c
# y0 V7 u, S0 b$ Q7 D2 }1 A2.7.22 缺页中断中shell程序加载前的检测7 e! R7 {) @& |' p& G
4 g" q' w, U# m1 F) _$ K, F
2.7.23 为即将载入的内容申请页面2 b& S3 E) h4 _) o: w
0 N1 g1 l- l3 Q
2.7.24 将shell程序载入新获得的页面
7 }8 |. K; j) ^3 o1 K8 N4 V! D# l. c7 X0 }4 V# k; O
2.7.25 根据shell程序的情况,调整页面的内容
8 t* d4 L- D, b3 G9 ?6 p; B4 @) D7 [& m( a
2.7.26 将线性地址空间与程序所在的物理页面对应/ v, h0 {7 Q+ G8 C
9 h9 x4 e- H% j7 r7 F8 ~# h0 |
2.8 系统实现怠速
+ J# I+ M5 }) J( c4 T5 B! ]$ c$ R& k2 J% L
2.8.1 shell进程准备创建update进程# {# }2 \) B; V H' ^
- a( l2 e% L/ c [2.8.2 进程2开始执行/etc/rc文件: g& [4 }. `; d
# h/ x$ h6 }+ t) h
2.8.3 准备加载update进程
. v& G* t8 \0 ?/ w: v5 L. _; T# d' X8 s# Y% F
2.8.4 update进程的作用- ]1 |/ p d5 Q- l) ]
0 c8 |" S+ q- S2.8.5 shell程序检测“/etc/rc”文件- Z+ r+ E9 r/ w2 e5 I& j
0 ^- M5 q, Q# z0 }3 |4 x( A; P" R
2.8.6 shell进程退出
* A) M) m" s& L5 Z4 h/ b5 O' C! O7 [8 I# ?" l9 i7 O* t
2.8.7 shell进程退出善后处理
% f; @; I7 l; z$ V. K. l; d( Q) Y1 A& V. Z# g1 K
2.8.8 进程1清理shell进程管理结构
! ?. h5 M8 k* D4 o& D3 q
+ Y& Y8 l- b W9 o3 I v2.8.9 系统开始重建shell# E6 i, M" k. U0 M
4 L2 I) E* i C- |2.8.10 shell进程为何不会再次退出: w: K6 \. \; A$ ^) Y. W
9 z G" D) L( K/ a0 N2.9 小结" g" S! J8 A9 R6 |
0 F9 Q! ]' E1 Y7 m1 t3 F" u第3章 安装文件系统
. R5 C5 }( v/ N ?8 e% F5 {+ N+ D" p3 H3 M7 D
第4章 文件操作
5 @0 p+ @ g! _3 V& k5 N6 r. }" Z5 S
第5章 用户进程与内存管理
0 u7 X ^( ]7 u# R$ ]
( t5 i4 |$ J1 U7 P7 d第6章 多个进程“同时”操作一个文件
5 n/ d3 T) [$ ^6 N! `. V$ g1 u# b
第7章 IPC问题
z: c/ b* s6 P# j; u4 w% p
8 t. U; Y; r* f$ U7 r1 n, u4 w第8章 操作系统的设计指导思想
+ P! G! ?3 f* y) n+ m" u9 A: m# @
结束语
3 H8 W# ?% f# h! J7 q% C- _/ v& B5 X' ~3 W0 X4 k2 \3 K
“新设计团队”简介
% z/ f" F' B5 W
* o- B" n; P3 M附录 搭建Linux 0.11系统环境
1 N; i% J% }- F2 T. b/ B百度云盘下载地址(完全免费-绝无套路):& s( X; v! f6 |! y
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|