萊昂氏UNIX原始碼分析

萊昂氏UNIX原始碼分析

《萊昂氏UNIX原始碼分析》是2006年8月機械工業出版社出版的圖書,作者是(澳)JohnLions。

書本簡介

該書最早於1976年在作者當時所在的澳大利亞新南威爾斯大學內部流通,但是由於有關公司希望保守在UNIX核心方面的商業機密,該書多年來從未正式出版。但本書一直受到UNIX黑客的關注,私下廣為流傳於世,是一部傑出、經典之作。在各方有識之士的努力下,該書終於於1996年正式出版。全書語言簡潔、透徹;作為一本自學UNIX的教材,二十多年來一直鼓舞和激勵著計算機和高級作業系統方面的專業人員和學生。

本書由上、下兩篇組成。上篇為UNIX版本6的原始碼,下篇是萊昂先生對UNIX作業系統版本6原始碼的詳細分析。本書語言簡潔、透徹,曾作為未公開出版物廣泛流傳了二十多年,是一部傑出經典之作。本書適合UNIX作業系統編程人員、大專院校師生學習參考使用。

目 錄

獻辭

致謝

序(一)

序(二)

歷史註記

上篇unix作業系統版本6原始碼

unix作業系統過程分類索引3

unix作業系統檔案及過程5

unix作業系統定義的符號列表7

unix作業系統原始碼交叉引用列表9

第一部分 初始化、進程初始化25

第二部分 陷入、中斷、系統調用和進程管理75

第三部分 程式交換、基本輸入/輸出、塊設備109

第四部分 檔案和目錄、檔案系統、管道133

第五部分 面向字元的特殊檔案181

下篇 萊昂氏unix原始碼分析

前言207

第1章 緒論209

1.1 unix作業系統209

1.2 公用程式209

1.3 其他文檔210

1.4 unix程式設計師手冊210

1.5 unix文檔211

1.6 unix作業系統原始碼211

1.7 原始碼中各部分212

1.8 原始碼檔案212

1.9 分析的使用212

1.10 對程式設計水平的一條注釋212

第2章 基礎知識214

2.1 處理機214

2.2 處理機狀態字214

2.3 通用暫存器214

2.4 指令集215

2.5 定址方式216

2.5.1 暫存器方式217

2.5.2 暫存器延遲方式217

2.5.3 自動增1方式217

2.5.4 自動減1方式217

2.5.5 變址方式217

2.5.6 立即方式218

2.5.7 相對方式218

2.6 unix彙編程式 219

2.7 存儲管理219

2.8 段暫存器220

2.9 頁說明暫存器220

2.10 存儲分配220

2.11 狀態暫存器221

2.12 “i”和“d”空間221

2.13 啟動條件221

2.14 專用設備暫存器221

第3章 閱讀“c”程式222

3.1 某些選出的例子222

3.2 例1 222

3.3 例2 223

3.4 例3 223

3.5 例4 225

3.6 例5 225

3.7 例6 227

3.8 例7 227

3.9 例8 228

3.10 例9 228

3.11 例10 229

3.12 例11 229

3.13 例12 230

3.14 例13 230

3.15 例14 231

3.16 例15 231

3.17 例16 232

3.18 例17 233

第4章 概述235

4.1 變數分配235

4.2 全局變數235

4.3 “c”預處理程式235

4.4 第一部分236

4.4.1 第1組“.h”檔案236

4.4.2 彙編語言檔案237

4.4.3 在第一部分中的其他檔案237

4.5 第二部分237

4.6 第三部分238

4.7 第四部分238

4.8 第五部分239

第一部分 初始化、進程初始化

第5章 兩個檔案241

5.1 檔案malloc.c 241

5.1.1 列表維護規則241

5.1.2malloc(2528) 242

5.1.3mfree(2556) 243

5.1.4 結論244

5.2 檔案prf.c 244

5.2.1 printf(2340) 244

5.2.2 printn(2369) 245

5.2.3 putchar(2386) 246

5.2.4 panic(2419) 247

5.2.5 prdev(2433)、deverror(2447) 247

5.3 包含的檔案247

第6章 系統初啟249

6.1 操作員的動作249

6.2 start(0612) 249

6.3 main(1550) 251

6.4 進程252

6.5 proc〔0〕的初始化252

6.6 sched(1940) 253

6.7 sleep(2066) 253

6.8 swtch(2178) 253

6.9 再回到main 254

第7章 進程256

7.1 進程映像256

7.2 proc結構(0358) 257

7.3 user結構(0413) 257

7.4 每個進程數據區258

7.5 段258

7.6 映像的執行258

7.7 核心態執行259

7.8 用戶態執行259

7.9 一個實例259

7.10 設定段暫存器260

7.11 estabur(1650) 260

7.12 sureg(1739) 261

7.13 newproc(1826) 261

第8章 進程管理263

8.1 進程切換263

8.2 中斷263

8.3 程式交換263

8.4 作業264

8.5 彙編語言過程264

8.6 savu(0725) 264

8.7 retu(0740) 264

8.8 aretu(0734) 264

8.9 swtch(2178) 265

8.10 setpri(2156) 265

8.11 sleep(2066) 266

8.12 wakeup(2133) 266

8.13 setrun(2134) 266

8.14 expand(2268) 267

8.15 再回到swtch 267

8.16 臨界區268

第二部分 陷入、中斷、系統調用

和進程管理

第9章 硬體中斷和陷入269

9.1 硬體中斷269

9.2 中斷矢量270

9.3 中斷處理程式270

9.4 優先權270

9.5 中斷優先權271

9.6 中斷處理程式的規則271

9.7 陷入272

9.8 彙編語言trap 272

9.9 返回273

第10章 彙編語言“trap”例程274

10.1 陷入和中斷源274

10.2 fuibyte(0814)與fuiword(0844) 274

10.3 中斷275

10.4 call(0776) 275

10.5 用戶程式陷入276

10.6 核心態棧277

第11章 時鐘中斷279

11.1 clock(3725) 279

11.2 timeout(3845) 281

第12章 陷入與系統調用282

12.1 trap(2693) 282

12.2 核心態陷入282

12.3 用戶態陷入283

12.4 系統調用284

12.5 系統調用處理程式285

12.6 檔案sys1.c 285

12.6.1exec(3020) 285

12.6.2fork(3322) 286

12.6.3sbreak(3354) 286

12.7 檔案sys2.c和sys3.c 287

12.8 檔案sys4.c 287

第13章 軟體中斷288

13.1 設定期望動作288

13.2 對進程造成中斷288

13.3 作用289

13.4 跟蹤289

13.5 過程289

13.5.1 期望動作的設定289

13.5.2 造成軟體中斷289

13.5.3 作用289

13.5.4 跟蹤290

13.6 ssig(3614) 290

13.7 kill(3630) 290

13.8 signal(3949) 290

13.9 psignal(3963) 291

13.10 issig(3991) 291

13.11 psig(4043) 291

13.12 core(4094) 292

13.13 grow(4136) 292

13.14 exit(3219) 292

13.15 rexit(3205) 293

13.16 wait(3270) 293

13.17 跟蹤293

13.18 stop(4016) 294

13.19 wait(3270)(繼續) 294

13.20 ptrace(4164) 295

13.21 procxmt(4204) 295

第三部分 程式交換、基本輸入

/輸出、塊設備

第14章 程式交換297

14.1 正文段297

14.2 sched(1940) 298

14.3 xswap(4368) 299

14.4 xalloc(4433) 299

14.5 xfree(4398) 300

第15章 基本輸入/輸出介紹301

15.1 buf.h檔案301

15.2 devtab(4551) 301

15.3 conf.h檔案301

15.4 conf.c檔案302

15.5 系統生成302

15.6 swap(5196) 302

15.7 競態條件303

15.8 可重入304

15.9 繼續分析“u.u_ssav” 304

第16章rk磁碟驅動器305

16.1 控制狀態暫存器rkcs 306

16.2 字計數暫存器rkwc 306

16.3 磁碟地址暫存器rkda 306

16.4 rk.c檔案306

16.5 rkstrategy(5389) 306

16.6 rkaddr(5420) 307

16.7 devstart(5096) 307

16.8 rkintr(5451) 307

16.9 iodone(5018) 308

第17章 快取處理309

17.1 標誌309

17.2 一個類超高速快取存儲309

17.3 clrbuf(5038) 309

17.4 incore(4899) 310

17.5 getblk(4921) 310

17.6 brelse(4869) 310

17.7 binit(5055) 311

17.8 bread(4754) 312

17.9 breada(4773) 312

17.10 bwrite(4809) 312

17.11 bawrite(4856) 313

17.12 bdwrite(4836) 313

17.13 bflush(5229) 313

17.14 physio(5259) 313

第四部分 檔案和目錄、檔案

系統、管道

第18章 檔案存取和控制315

18.1 原始碼第四部分315

18.2 檔案特徵315

18.3 系統調用316

18.4 控制表316

18.4.1file(5507) 316

18.4.2inode(5659) 316

18.5 要求專用的資源317

18.6 打開一個檔案317

18.7 creat(5781) 317

18.8 open1(5804) 317

18.9 open(5763) 318

18.10 再回到open1 318

18.11 close(5846) 318

18.12 closef(6643) 319

18.13 iput(7344) 319

18.14 刪除檔案319

18.15 讀和寫檔案319

18.16 rdwr(5731) 320

18.17 readi(6221) 321

18.18 writei(6276) 322

18.19 iomove(6364) 322

18.20 bmap(6415) 322

18.21 剩餘部分322

第19章 檔案目錄和目錄檔案323

19.1 檔案名稱323

19.2 目錄數據結構323

19.3 目錄檔案323

19.4 namei(7518) 324

19.5 一些注釋325

19.6 link(5909) 326

19.7 wdir(7477) 327

19.8 maknode(7455) 327

19.9 unlink(3510) 327

19.10 mknod(5952) 327

19.11 access(6746) 328

第20章 檔案系統329

20.1 超級塊(5561) 329

20.2 mount表(0272) 329

20.3 iinit(6922) 330

20.4 安裝330

20.5 smount(6086) 330

20.6 注釋331

20.7 iget(7276) 331

20.8 getfs(7167) 332

20.9 update(7201) 332

20.10 sumount(6144) 333

20.11 資源分配333

20.12 alloc(6956) 334

20.13 itrunc(7414) 334

20.14 free(7000) 335

20.15 iput(7344) 335

20.16 ifree(7134) 335

20.17 iupdat(7374) 335

第21章 管道337

21.1 pipe(7723) 337

21.2 readp(7758) 337

21.3 writep(7805) 338

21.4 plock(7862) 338

21.5 prele(7882) 338

第五部分 面向字元的特殊檔案

第22章 面向字元的特殊檔案339

22.1 lp11行式印表機驅動程式339

22.2 lpopen(8850) 340

22.3 注釋340

22.4 lpoutput(8986) 340

22.5 lpstart(8967) 341

22.6 lpint(8976) 341

22.7 lpwrite(8870) 342

22.8 lpclose(8863) 342

22.9 討論342

22.10 lpcanon(8879) 342

22.11 對讀者的建議343

22.12 pc11紙帶閱讀機/穿孔機驅動

程式344

第23章 字元處理345

23.1 cinit(8234) 346

23.2 getc(0930) 346

23.3 putc(0967) 347

23.4 字元集347

23.5 圖形字元348

23.6 unix慣例349

23.7 maptab(8117) 349

23.8 partab(7947) 349

第24章 互動式終端351

24.1 接口351

24.2 tty結構(7926) 351

24.3 注釋352

24.4 初始化352

24.5 stty(8183) 352

24.6 sgtty(8201) 353

24.7 klsgtty(8090) 353

24.8 ttystty(8577) 353

24.9 dl11/kl11終端設備處理程式353

24.10 設備暫存器354

24.11 接收器狀態暫存器354

24.12 接收器數據快取暫存器354

24.13 傳送器狀態暫存器354

24.14 傳送器數據快取暫存器 354

24.15 單匯流排地址354

24.16 軟體方面的考慮355

24.17 中斷矢量地址355

24.18 原始碼355

24.19 klopen(8023) 355

24.20 klclose(8055) 356

24.21 klxint(8070) 356

24.22 klrint(8078) 356

第25章tty.c檔案357

25.1 flushtty(8252) 357

25.2 wflushtty(8217) 357

25.3 字元輸入358

25.3.1 ttread(8535) 358

相關詞條

熱門詞條

聯絡我們