《Unix核心源碼剖析》於2014年3月人民郵電出版社出版的圖書,作者是青柳隆宏。
基本介紹
- 中文名:Unix核心源碼剖析
- 作者:青柳隆宏
- 出版時間:2014年3月
- 出版社:人民郵電出版社
- 頁數:342 頁
- ISBN:978-7-115-34521-9
內容簡介,作者簡介,圖書目錄,
內容簡介
為什麼要閱讀核心原始碼
● 對計算機系統的全貌有更深入的了解
● 對學到的算法和思路舉一反三
● 加深對作業系統的理解
● 提升自身的技術水平
為什麼選擇UNIX V6?
● 代碼行數約為1 萬行
● 有充實的資料可參考
● 網羅了作業系統的基本功能
● 簡化的設計
● 便於讀者對系統有完整的了解
● 有模擬器可供參考
本書是一本Unix核心原始碼的閱讀指南。作者結合UNIX V6已公開的相關文檔,對其核心源碼進行詳細剖析,旨在讓讀者更深入地理解進程、中斷、塊I/O系統、檔案系統、字元I/O系統、啟動系統等作業系統的基本原理。
本書適合作業系統的國中級學習者閱讀,特別適合通過大學課程和其他入門書對作業系統有所了解,但是對具體細節缺乏深入理解的讀者,以及那些對作業系統的具體實現有興趣的讀者。
作者簡介
作者簡介:
青柳隆宏
日本資深程式設計師,現在矽谷從事計算機處理晶片的設計工作。曾設計了超級計算機“京”的L1快取,該計算機在2011年排名世界Top 500超級計算機的第1位,也是人類歷史上第一台計算能力跨越1億億次每秒的計算系統。
譯者簡介:
殷中翔
日本國立九州大學系統信息專業碩士學位。具有十餘年軟體開發經驗,現主要從事企業Web系統伺服器端的開發及維護工作。
黃炎
同濟大學本科畢業,現供職於上海愛可生,從事資料庫高可用軟體開發。大學有幸師從陳閎中教授,一窺UNIX V6代碼的門徑。
周金傑
同濟大學碩士,法國國立高等電信學院(TELECOM PARIS)碩士。曾通讀並研究UNIX V6原始碼,同時參與了面向對象作業系統的移植以及作業系統調試器的開發工作,熟悉系統底層相關的技術知識。崇尚設計,享受編程給生活帶來的樂趣。
圖書目錄
第I部分
什麼是UNIX V6 1
第1章 UNIX V6的全貌 2
1.1 什麼是UNIX V6 2
1.2 UNIX的歷史2
1.3 UNIX V6核心 4
1.4 構成UNIX V6運行環境的硬體 4
PDP-11 5
1.5 代碼 9
1.6 手冊 9
1.7 小結 10
第II部分
進程 11
第2章 進程 12
2.1 進程的概要 12
什麼是進程 12
進程的並行執行 12
進程的執行狀態 14
用戶模式和核心模式 14
交換處理15
2.2 proc結構體和user結構體 15
proc結構體 16
user結構體 17
2.3 為進程分配的記憶體 21
代碼段 21
數據段 21
虛擬地址空間 22
變換地址 24
2.4 小結 26
第3章 進程的管理I 27
3.1 進程的生命周期 27
3.2 創建進程 28
進程的複製 28
父進程和子進程 29
系統調用fork 29
newproc() 32
panic() 36
3.3 切換執行進程 37
中斷執行進程 37
進程的執行狀態 37
選擇執行進程的算法 38
上下文切換 39
系統調用wait 39
sleep() 39
swtch() 41
swtch() 的返回位置 44
setpri() 51
wakeup() 51
setrun() 52
3.4 執行程式 53
程式執行檔案的格式 53
系統調用exec 54
estabur() 62
sureg() 65
expand() 66
3.5 進程的終止 68
系統調用exit 69
系統調用wait 71
3.6 數據區域的擴展 73
系統調用break 73
3.7 管理記憶體和交換空間 76
map結構體 76
獲取未使用區域 77
釋放區域 79
3.8 小結 81
第4章 交換處理 82
4.1 什麼是交換處理 82
代碼段和數據段 82
sched() 83
xswap() 87
4.2 共享代碼段的處理 88
xalloc() 90
xfree() 93
xccdec() 93
4.3 小結 94
第III 部分
中斷 95
第5章 中斷與陷入 96
5.1 什麼是中斷與陷入 96
什麼是中斷 96
什麼是陷入 97
5.2 優先權與向量(Vector) 98
中斷優先權和處理器優先權 98
中斷和陷入向量 100
5.3 中斷和陷入的處理流程 100
發生中斷或陷入 101
執行call和trap 104
5.4 時鐘中斷處理函式 107
時鐘設備的規格 107
時鐘中斷處理函式的內容 108
clock() 113
5.5 陷入處理函式 117
trap() 117
grow() 122
5.6 系統調用的處理流程 123
傳遞參數的方法 123
sysent結構體 124
trap() 126
5.7 小結 128
第6章 信號 129
6.1 什麼是信號 129
信號的傳送方法 129
確認接收信號 129
信號的種類 130
ssig() 131
kill() 132
signal() 133
psignal() 133
issig() 134
psig() 134
core() 136
在系統調用處理中處理信號 136
6.2 跟蹤功能 137
什麼是跟蹤 137
ipc結構體 138
跟蹤的處理流程 138
stop() 139
ptrace() 140
procxmt() 142
wait() 143
6.3 小結 144
第IV 部分
塊I/O 系統 145
第7章 塊設備子系統 146
7.1 設備的基礎 146
設備的種類 146
設備驅動 146
類別和設備編號 147
特殊檔案 147
7.2 塊設備子系統 148
緩衝區 148
b-list和av-list 150
RAW 輸入輸出 151
7.3 緩衝區的初始化 152
binit() 152
clrbuf() 153
7.4 緩衝區的獲取和釋放 154
getblk() 154
notavail() 156
brelse() 157
7.5 讀取 158
讀取的種類 158
bread() 159
iowait() 160
iodone() 160
geterror() 161
breada() 161
incore() 162
7.6 寫入 163
寫入的種類 163
bwrite() 164
bawrite() 165
bdwrite() 165
bflush() 166
7.7 RAW輸入輸出 167
physio() 167
swap() 169
7.8 小結 171
第8章 塊設備驅動 172
8.1 什麼是塊設備驅動 172
塊設備驅動表 172
設備處理佇列 173
處理流程 173
8.2 RK-11磁碟驅動 174
RK11-D 175
特殊檔案 175
設定bdevsw[] 176
中斷處理函式 176
RK11-D 的暫存器 177
rkstrategy() 179
rkstart() 180
rkaddr() 180
devstart() 181
rkintr() 182
RAW 輸入輸出 184
8.3 小結 184
第V 部分
檔案系統 185
第9章 檔案系統 186
9.1 什麼是檔案系統 186
inode 186
樹狀結構的命名空間 187
掛載 187
訪問許可權 188
根磁碟 189
9.2 塊設備的區域 189
用於啟動的區域 190
超級塊 190
inode區域 191
存儲區域 193
9.3 掛載 193
mount結構體 193
系統調用mount 194
getmdev() 196
系統調用umount 197
9.4 inode的獲取和釋放 198
inode[] 198
iget() 201
iput() 203
iupdat() 204
9.5 inode與存儲區域的對應關係 205
bmap() 208
itrunc() 211
9.6 分配塊設備中的塊 213
ialloc() 213
ifree() 216
alloc() 217
free() 220
getfs() 222
badblock() 222
9.7 將路徑變為inode 223
目錄的內容 223
namei() 224
access() 230
9.8 初始化與同步 232
iinit() 232
update() 232
9.9 小結 234
第10章 檔案處理 235
10.1 用戶程式對檔案的處理 235
10.2 3 個結構體 235
標準輸入輸出 237
10.3 檔案的生成和打開處理 237
系統調用creat 238
maknode() 238
wdir() 239
系統調用open 240
open1() 241
falloc() 242
ufalloc() 243
openi() 243
10.4 檔案的讀取和寫入 244
系統調用read、write 244
rdwr() 245
readi() 246
writei() 248
iomove() 250
getf() 252
10.5 指定檔案的讀寫位置 252
系統調用seek 252
10.6 關閉檔案 254
系統調用close 254
closef() 254
closei() 255
10.7 目錄的生成 255
系統調用mknod 255
10.8 檔案的連結 256
系統調用link 257
suser() 258
10.9 刪除檔案 258
系統調用unlink 258
10.10 小結 260
第11章 管道 261
11.1 什麼是管道 261
使用管道的優點 262
11.2 開始管道通信 262
系統調用pipe 262
11.3 收發數據 264
writep() 264
readp() 266
plock() 267
prele() 267
11.4 結束管道通信 268
closef() 268
11.5 建立管道通信的流程 268
建立父子進程間的通信 268
系統調用dup 272
11.6 小結 273
第VI 部分
字元I/O 系統 275
第12章 字元設備 276
12.1 字元設備驅動 276
字元設備緩衝區 277
對緩衝區的操作 278
初始化緩衝區池 280
12.2 LP11設備驅動 281
什麼是LP11 281
LP11設備驅動的功能 282
lpopen() 284
lpwrite() 285
lpcanon() 285
lpoutput() 287
lpstart() 288
lpint() 288
lpclose() 289
12.3 小結 289
第13章 電傳終端 290
13.1 什麼是電傳終端 290
電傳終端的接口 290
特殊檔案 291
tty 結構體 292
maptab[] 295
partab[] 295
KL11/DL11 296
KL11/DL11設備驅動的規格 297
KL11/DL11設備驅動函式 298
13.2 終端的開啟和關閉 298
klopen() 298
klclose() 300
wflushtty() 300
flushtty() 301
13.3 終端的設定 302
gtty() 302
stty() 302
sgtty() 303
klsgtty() 304
ttystty() 304
13.4 從終端輸入文字 305
klrint() 306
ttyinput() 306
13.5 讀取輸入的數據 308
klread() 309
ttread() 309
canon() 310
13.6 向終端輸出數據 313
klwrite() 314
ttwrite() 315
ttyoutput() 316
ttstart() 318
ttrstrt() 319
klxint() 320
13.7 小結 320
第VII 部分
啟動系統 321
第14章 啟動系統 322
14.1 啟動的流程 322
start 323
main() 326
/etc/init 329
14.2 小結 330
附 錄 參考資料等 331
A.1 參考文獻、網站 331
A.2 pre K&R C 335
後記 337
索引 338