關(guān)于我們
書單推薦
新書推薦
|
操作系統(tǒng)真象還原
本書共分16章,講解了開發(fā)一個(gè)操作系統(tǒng)需要的技術(shù)和知識(shí),主要內(nèi)容有:操作系統(tǒng)基礎(chǔ)、部署工作環(huán)境、編寫MBR主引導(dǎo)記錄、完善MBR錯(cuò)誤、保護(hù)模式入門、保護(hù)模式進(jìn)階和向內(nèi)核邁進(jìn)、中斷、內(nèi)存管理系統(tǒng)、線程、輸入輸出系統(tǒng)、用戶進(jìn)程、完善內(nèi)核、編寫硬盤驅(qū)動(dòng)程序、文件系統(tǒng)、系統(tǒng)交互等核心技術(shù)。
前百度高級(jí)工程師精心寫作。操作系統(tǒng)并不深?yuàn)W,本書給予解讀。
歷時(shí)19個(gè)月,行文60余萬(wàn)字,用6000多行代碼實(shí)現(xiàn)了一個(gè)完整的操作系統(tǒng)。 徹底剖析操作系統(tǒng)的原理,實(shí)現(xiàn)內(nèi)核線程、特權(quán)級(jí)變換、用戶進(jìn)程、任務(wù)調(diào)度、文件系統(tǒng)等操作系統(tǒng)基本的組成單元。 用實(shí)際代碼解釋了鎖、信號(hào)量、生產(chǎn)者消費(fèi)者問(wèn)題。 實(shí)現(xiàn)了shell,幫助大家理解內(nèi)部命令、外部命令、管道等操作。 本書用詼諧幽默的語(yǔ)言,把深?yuàn)W的操作系統(tǒng)盡量講解清楚,讀者在輕松閱讀中就學(xué)通了深?yuàn)W的知識(shí),學(xué)完后不但明白了操作系統(tǒng),讀者可以輕松自制一個(gè)操作系統(tǒng),是一本難得的好書。 本書適合操作系統(tǒng)快速入門并希望快速提高的讀者、具備一定基礎(chǔ)、但不能靈活運(yùn)用的讀者、也適用于那些已經(jīng)在操作系統(tǒng)領(lǐng)域有一定造詣、但依然存在誤用的讀者 絕大多數(shù)技術(shù)人都對(duì)操作系統(tǒng)懷著好奇的心,他們渴望一本告訴操作系統(tǒng)到底是什么的書,里面不要摻雜太多無(wú)關(guān)的管理性的東西,代碼量不大且是現(xiàn)代操作系統(tǒng)雛形,渴望很快看到操作系統(tǒng)的本質(zhì)而不花費(fèi)大量的時(shí)間成本。操作系統(tǒng)并不深?yuàn)W,本書給予解讀。 鄭鋼,畢業(yè)于北京大學(xué),前百度運(yùn)維高級(jí)工程師,對(duì)操作系統(tǒng)有深入的研究。好運(yùn)動(dòng),喜鉆研,熱衷于嘗試前沿技術(shù),樂(lè)于分享學(xué)習(xí)成果。
第0章 一些你可能正感到迷惑的問(wèn)題 1
0.1 操作系統(tǒng)是什么 1 0.2 你想研究到什么程度 2 0.3 寫操作系統(tǒng),哪些需要我來(lái)做 2 0.4 軟件是如何訪問(wèn)硬件的 2 0.5 應(yīng)用程序是什么,和操作系統(tǒng)是如何 配合到一起的 3 0.6 為什么稱為“陷入”內(nèi)核 4 0.7 內(nèi)存訪問(wèn)為什么要分段 4 0.8 代碼中為什么分為代碼段、數(shù)據(jù)段? 這和內(nèi)存訪問(wèn)機(jī)制中的段是一回事嗎 6 0.9 物理地址、邏輯地址、有效地址、線性 地址、虛擬地址的區(qū)別 11 0.10 什么是段重疊 12 0.11 什么是平坦模型 12 0.12 cs、ds這類sreg段寄存器,位寬是 多少 12 0.13 什么是工程,什么是協(xié)議 13 0.14 為什么Linux系統(tǒng)下的應(yīng)用程序不能在 Windows系統(tǒng)下運(yùn)行 14 0.15 局部變量和函數(shù)參數(shù)為什么要放在 棧中 14 0.16 為什么說(shuō)匯編語(yǔ)言比C語(yǔ)言快 15 0.17 先有的語(yǔ)言,還是先有的編譯器,第1個(gè) 編譯器是怎么產(chǎn)生的 16 0.18 編譯型程序與解釋型程序的區(qū)別 19 0.19 什么是大端字節(jié)序、小端字節(jié)序 19 0.20 BIOS中斷、DOS中斷、Linux中斷的 區(qū)別 21 0.21 Section和Segment的區(qū)別 25 0.22 什么是魔數(shù) 29 0.23 操作系統(tǒng)是如何識(shí)別文件系統(tǒng)的 30 0.24 如何控制CPU的下一條指令 30 0.25 指令集、體系結(jié)構(gòu)、微架構(gòu)、編程 語(yǔ)言 30 0.26 庫(kù)函數(shù)是用戶進(jìn)程與內(nèi)核的橋梁 33 0.27 轉(zhuǎn)義字符與ASCII碼 37 0.28 MBR、EBR、DBR和OBR各是 什么 39 第1章 部署工作環(huán)境 42 1.1 工欲善其事,必先利其器 42 1.2 我們需要哪些編譯器 42 1.2.1 世界頂級(jí)編譯器GCC 42 1.2.2 匯編語(yǔ)言編譯器新貴NASM 43 1.3 操作系統(tǒng)的宿主環(huán)境 43 1.3.1 什么是虛擬機(jī) 44 1.3.2 盜夢(mèng)空間般的開發(fā)環(huán)境,虛擬機(jī) 中再裝一個(gè)虛擬機(jī) 45 1.3.3 virtualBox下載,安裝 46 1.3.4 Linux發(fā)行版下載 46 1.3.5 Bochs下載安裝 46 1.4 配置bochs 48 1.5 運(yùn)行bochs 49 第2章 編寫MBR主引導(dǎo)記錄,讓我們開始 掌權(quán) 52 2.1 計(jì)算機(jī)的啟動(dòng)過(guò)程 52 2.2 軟件接力第一棒,BIOS 52 2.2.1 實(shí)模式下的1MB內(nèi)存布局 52 2.2.2 BIOS是如何蘇醒的 54 2.2.3 為什么是0x7c00 56 2.3 讓MBR先飛一會(huì)兒 58 2.3.1 神奇好用的$和$$,令人迷惑的 section 58 2.3.2 NASM簡(jiǎn)單用法 60 2.3.3 請(qǐng)下一位選手MBR同學(xué)做 準(zhǔn)備 60 第3章 完善MBR 65 3.1 地址、section、vstart淺嘗輒止 65 3.1.1 什么是地址 65 3.1.2 什么是section 67 3.1.3 什么是vstart 68 3.2 CPU的實(shí)模式 70 3.2.1 CPU的工作原理 71 3.2.2 實(shí)模式下的寄存器 72 3.2.3 實(shí)模式下內(nèi)存分段由來(lái) 76 3.2.4 實(shí)模式下CPU內(nèi)存尋址方式 78 3.2.5 棧到底是什么玩意兒 81 3.2.6 實(shí)模式下的ret 84 3.2.7 實(shí)模式下的call 85 3.2.8 實(shí)模式下的jmp 92 3.2.9 標(biāo)志寄存器flags 97 3.2.10 有條件轉(zhuǎn)移 99 3.2.11 實(shí)模式小結(jié) 101 3.3 讓我們直接對(duì)顯示器說(shuō)點(diǎn)什么吧 101 3.3.1 CPU如何與外設(shè)通信—IO 接口 101 3.3.2 顯卡概述 105 3.3.3 顯存、顯卡、顯示器 106 3.3.4 改進(jìn)MBR,直接操作顯卡 110 3.4 bochs調(diào)試方法 112 3.4.1 bochs一般用法 113 3.4.2 bochs調(diào)試實(shí)例 118 3.5 硬盤介紹 122 3.5.1 硬盤發(fā)展簡(jiǎn)史 122 3.5.2 硬盤工作原理 123 3.5.3 硬盤控制器端口 126 3.5.4 常用的硬盤操作方法 128 3.6 讓MBR使用硬盤 129 3.6.1 改造MBR 130 3.6.2 實(shí)現(xiàn)內(nèi)核加載器 134 第4章 保護(hù)模式入門 136 4.1 保護(hù)模式概述 136 4.1.1 為什么要有保護(hù)模式 136 4.1.2 實(shí)模式不是32位CPU,變成了 16位 137 4.2 初見(jiàn)保護(hù)模式 137 4.2.1 保護(hù)模式之寄存器擴(kuò)展 137 4.2.2 保護(hù)模式之尋址擴(kuò)展 140 4.2.3 保護(hù)模式之運(yùn)行模式反轉(zhuǎn) 141 4.2.4 保護(hù)模式之指令擴(kuò)展 145 4.3 全局描述符表 150 4.3.1 段描述符 150 4.3.2 全局描述符表GDT、局部描述 符表LDT及選擇子 155 4.3.3 打開A20地址線 157 4.3.4 保護(hù)模式的開關(guān),CR0寄存器的 PE位 158 4.3.5 讓我們進(jìn)入保護(hù)模式 158 4.4 處理器微架構(gòu)簡(jiǎn)介 165 4.4.1 流水線 166 4.4.2 亂序執(zhí)行 168 4.4.3 緩存 168 4.4.4 分支預(yù)測(cè) 169 4.5 使用遠(yuǎn)跳轉(zhuǎn)指令清空流水線,更新段描述 符緩沖寄存器 172 4.6 保護(hù)模式之內(nèi)存段的保護(hù) 173 4.6.1 向段寄存器加載選擇子時(shí)的 保護(hù) 173 4.6.2 代碼段和數(shù)據(jù)段的保護(hù) 174 4.6.3 棧段的保護(hù) 175 第5章 保護(hù)模式進(jìn)階,向內(nèi)核邁進(jìn) 177 5.1 獲取物理內(nèi)存容量 177 5.1.1 學(xué)習(xí)Linux獲取內(nèi)存的方法 177 5.1.2 利用BIOS中斷0x15子功能 0xe820獲取內(nèi)存 177 5.1.3 利用BIOS中斷0x15子功能 0xe801獲取內(nèi)存 179 5.1.4 利用BIOS中斷0x15子功能 0x88獲取內(nèi)存 180 5.1.5 實(shí)戰(zhàn)內(nèi)存容量檢測(cè) 181 5.2 啟用內(nèi)存分頁(yè)機(jī)制,暢游虛擬空間 186 5.2.1 內(nèi)存為什么要分頁(yè) 186 5.2.2 一級(jí)頁(yè)表 188 5.2.3 二級(jí)頁(yè)表 192 5.2.4 規(guī)劃頁(yè)表之操作系統(tǒng)與用戶 進(jìn)程的關(guān)系 197 5.2.5 啟用分頁(yè)機(jī)制 198 5.2.6 用虛擬地址訪問(wèn)頁(yè)表 204 5.2.7 快表TLB(Translation Lookaside Buffer)簡(jiǎn)介 206 5.3 加載內(nèi)核 207 5.3.1 用C語(yǔ)言寫內(nèi)核 207 5.3.2 二進(jìn)制程序的運(yùn)行方法 211 5.3.3 elf格式的二進(jìn)制文件 213 5.3.4 elf文件實(shí)例分析 218 5.3.5 將內(nèi)核載入內(nèi)存 222 5.4 特權(quán)級(jí)深入淺出 229 5.4.1 特權(quán)級(jí)那點(diǎn)事 229 5.4.2 TSS簡(jiǎn)介 230 5.4.3 CPL和DPL入門 232 5.4.4 門、調(diào)用門與RPL序 235 5.4.5 調(diào)用門的過(guò)程保護(hù) 240 5.4.6 RPL的前世今生 243 5.4.7 IO特權(quán)級(jí) 248 第6章 完善內(nèi)核 252 6.1 函數(shù)調(diào)用約定簡(jiǎn)介 252 6.2 匯編語(yǔ)言和C語(yǔ)言混合編程 256 6.2.1 淺析C庫(kù)函數(shù)與系統(tǒng)調(diào)用 256 6.2.2 匯編語(yǔ)言和C語(yǔ)言共同協(xié)作 259 6.3 實(shí)現(xiàn)自己的打印函數(shù) 261 6.3.1 顯卡的端口控制 261 6.3.2 實(shí)現(xiàn)單個(gè)字符打印 265 6.3.3 實(shí)現(xiàn)字符串打印 275 6.3.4 實(shí)現(xiàn)整數(shù)打印 277 6.4 內(nèi)聯(lián)匯編 281 6.4.1 什么是內(nèi)聯(lián)匯編 281 6.4.2 匯編語(yǔ)言AT&T語(yǔ)法簡(jiǎn)介 281 6.4.3 基本內(nèi)聯(lián)匯編 283 6.4.4 擴(kuò)展內(nèi)聯(lián)匯編 284 6.4.5 擴(kuò)展內(nèi)聯(lián)匯編之機(jī)器模式簡(jiǎn)介 294 第7章 中斷 298 7.1 中斷是什么,為什么要有中斷 298 7.2 操作系統(tǒng)是中斷驅(qū)動(dòng)的 299 7.3 中斷分類 299 7.3.1 外部中斷 299 7.3.2 內(nèi)部中斷 301 7.4 中斷描述符表 304 7.4.1 中斷處理過(guò)程及保護(hù) 306 7.4.2 中斷發(fā)生時(shí)的壓棧 308 7.4.3 中斷錯(cuò)誤碼 310 7.5 可編程中斷控制器8259A 311 7.5.1 8259A介紹 311 7.5.2 8259A的編程 314 7.6 編寫中斷處理程序 319 7.6.1 從最簡(jiǎn)單的中斷處理程序 開始 319 7.6.2 改進(jìn)中斷處理程序 335 7.6.3 調(diào)試實(shí)戰(zhàn):處理器進(jìn)入中斷時(shí) 壓棧出棧完整過(guò)程 339 7.7 可編程計(jì)數(shù)器/定時(shí)器8253簡(jiǎn)介 346 7.7.1 時(shí)鐘—給設(shè)備打拍子 346 7.7.2 8253入門 348 7.7.3 8253控制字 349 7.7.4 8253工作方式 350 7.7.5 8253初始化步驟 353 7.8 提高時(shí)鐘中斷的頻率,讓中斷來(lái)得更 猛烈一些 354 第8章 內(nèi)存管理系統(tǒng) 357 8.1 makefile簡(jiǎn)介 357 8.1.1 makefile是什么 357 8.1.2 makefile基本語(yǔ)法 358 8.1.3 跳到目標(biāo)處執(zhí)行 360 8.1.4 偽目標(biāo) 361 8.1.5 make:遞歸式推導(dǎo)目標(biāo) 362 8.1.6 自定義變量與系統(tǒng)變量 363 8.1.7 隱含規(guī)則 365 8.1.8 自動(dòng)化變量 366 8.1.9 模式規(guī)則 367 8.2 實(shí)現(xiàn)assert斷言 367 8.2.1 實(shí)現(xiàn)開、關(guān)中斷的函數(shù) 367 8.2.2 實(shí)現(xiàn)ASSERT 370 8.2.3 通過(guò)makefile來(lái)編譯 372 8.3 實(shí)現(xiàn)字符串操作函數(shù) 374 8.4 位圖bitmap及其函數(shù)的實(shí)現(xiàn) 377 8.4.1 位圖簡(jiǎn)介 377 8.4.2 位圖的定義與實(shí)現(xiàn) 378 8.5 內(nèi)存管理系統(tǒng) 381 8.5.1 內(nèi)存池規(guī)劃 381 8.5.2 內(nèi)存管理系統(tǒng)第一步,分配頁(yè) 內(nèi)存 388 第9章 線程 398 9.1 實(shí)現(xiàn)內(nèi)核線程 398 9.1.1 執(zhí)行流 398 9.1.2 線程到底是什么 399 9.1.3 進(jìn)程與線程的關(guān)系、區(qū)別簡(jiǎn)述 402 9.1.4 進(jìn)程、線程的狀態(tài) 405 9.1.5 進(jìn)程的身份證—PCB 405 9.1.6 實(shí)現(xiàn)線程的兩種方式—內(nèi)核或 用戶進(jìn)程 406 9.2 在內(nèi)核空間實(shí)現(xiàn)線程 409 9.2.1 簡(jiǎn)單的PCB及線程棧的實(shí)現(xiàn) 409 9.2.2 線程的實(shí)現(xiàn) 413 9.3 核心數(shù)據(jù)結(jié)構(gòu),雙向鏈表 417 9.4 多線程調(diào)度 421 9.4.1 簡(jiǎn)單優(yōu)先級(jí)調(diào)度的基礎(chǔ) 421 9.4.2 任務(wù)調(diào)度器和任務(wù)切換 425 第10章 輸入輸出系統(tǒng) 439 10.1 同步機(jī)制——鎖 439 10.1.1 排查GP異常,理解原子操作 439 10.1.2 找出代碼中的臨界區(qū)、互斥、 競(jìng)爭(zhēng)條件 444 10.1.3 信號(hào)量 445 10.1.4 線程的阻塞與喚醒 447 10.1.5 鎖的實(shí)現(xiàn) 449 10.2 用鎖實(shí)現(xiàn)終端輸出 452 10.3 從鍵盤獲取輸入 456 10.3.1 鍵盤輸入原理簡(jiǎn)介 456 10.3.2 鍵盤掃描碼 457 10.3.3 8042簡(jiǎn)介 463 10.3.4 測(cè)試鍵盤中斷處理程序 465 10.4 編寫鍵盤驅(qū)動(dòng) 468 10.4.1 轉(zhuǎn)義字符介紹 468 10.4.2 處理掃描碼 469 10.5 環(huán)形輸入緩沖區(qū) 476 10.5.1 生產(chǎn)者與消費(fèi)者問(wèn)題簡(jiǎn)述 476 10.5.2 環(huán)形緩沖區(qū)的實(shí)現(xiàn) 478 10.5.3 添加鍵盤輸入緩沖區(qū) 481 10.5.4 生產(chǎn)者與消費(fèi)者實(shí)例測(cè)試 482 第11章 用戶進(jìn)程 485 11.1 為什么要有任務(wù)狀態(tài)段TSS 485 11.1.1 多任務(wù)的起源,很久很久 以前…… 485 11.1.2 LDT簡(jiǎn)介 486 11.1.3 TSS的作用 488 11.1.4 CPU原生支持的任務(wù)切換 方式 492 11.1.5 現(xiàn)代操作系統(tǒng)采用的任務(wù) 切換方式 495 11.2 定義并初始化TSS 497 11.3 實(shí)現(xiàn)用戶進(jìn)程 501 11.3.1 實(shí)現(xiàn)用戶進(jìn)程的原理 501 11.3.2 用戶進(jìn)程的虛擬地址空間 501 11.3.3 為進(jìn)程創(chuàng)建頁(yè)表和3特權(quán) 級(jí)棧 502 11.3.4 進(jìn)入特權(quán)級(jí)3 505 11.3.5 用戶進(jìn)程創(chuàng)建的流程 506 11.3.6 實(shí)現(xiàn)用戶進(jìn)程—上 507 11.3.7 bss簡(jiǎn)介 513 11.3.8 實(shí)現(xiàn)用戶進(jìn)程—下 515 11.3.9 讓進(jìn)程跑起來(lái)—用戶進(jìn)程的 調(diào)度 519 11.3.10 測(cè)試用戶進(jìn)程 520 第12章 進(jìn)一步完善內(nèi)核 523 12.1 Linux系統(tǒng)調(diào)用淺析 523 12.2 系統(tǒng)調(diào)用的實(shí)現(xiàn) 527 12.2.1 系統(tǒng)調(diào)用實(shí)現(xiàn)框架 527 12.2.2 增加0x80號(hào)中斷描述符 527 12.2.3 實(shí)現(xiàn)系統(tǒng)調(diào)用接口 528 12.2.4 增加0x80號(hào)中斷處理例程 528 12.2.5 初始化系統(tǒng)調(diào)用和實(shí)現(xiàn) sys_getpid 530 12.2.6 添加系統(tǒng)調(diào)用getpid 531 12.2.7 在用戶進(jìn)程中的系統(tǒng)調(diào)用 532 12.2.8 系統(tǒng)調(diào)用之棧傳遞參數(shù) 534 12.3 讓用戶進(jìn)程“說(shuō)話” 536 12.3.1 可變參數(shù)的原理 536 12.3.2 實(shí)現(xiàn)系統(tǒng)調(diào)用write 538 12.3.3 實(shí)現(xiàn)printf 539 12.3.4 完善printf 542 12.4 完善堆內(nèi)存管理 545 12.4.1 malloc底層原理 545 12.4.2 底層初始化 548 12.4.3 實(shí)現(xiàn)sys_malloc 550 12.4.4 內(nèi)存的釋放 555 12.4.5 實(shí)現(xiàn)sys_free 558 12.4.6 實(shí)現(xiàn)系統(tǒng)調(diào)用malloc和free 562 第13章 編寫硬盤驅(qū)動(dòng)程序 566 13.1 硬盤及分區(qū)表 566 13.1.1 創(chuàng)建從盤及獲取安裝的 磁盤數(shù) 566 13.1.2 創(chuàng)建磁盤分區(qū)表 567 13.1.3 磁盤分區(qū)表淺析 571 13.2 編寫硬盤驅(qū)動(dòng)程序 578 13.2.1 硬盤初始化 578 13.2.2 實(shí)現(xiàn)thread_yield和idle線程 582 13.2.3 實(shí)現(xiàn)簡(jiǎn)單的休眠函數(shù) 584 13.2.4 完善硬盤驅(qū)動(dòng)程序 585 13.2.5 獲取硬盤信息,掃描分區(qū)表 590 第14章 文件系統(tǒng) 595 14.1 文件系統(tǒng)概念簡(jiǎn)介 595 14.1.1 inode、間接塊索引表、文件 控制塊FCB簡(jiǎn)介 595 14.1.2 項(xiàng)與簡(jiǎn)介 597 14.1.3 超級(jí)塊與文件系統(tǒng)布局 599 14.2 創(chuàng)建文件系統(tǒng) 601 14.2.1 創(chuàng)建超級(jí)塊、i結(jié)點(diǎn)、項(xiàng) 601 14.2.2 創(chuàng)建文件系統(tǒng) 603 14.2.3 掛載分區(qū) 609 14.3 文件描述符簡(jiǎn)介 612 14.3.1 文件描述符原理 612 14.3.2 文件描述符的實(shí)現(xiàn) 614 14.4 文件操作相關(guān)的基礎(chǔ)函數(shù) 615 14.4.1 inode操作有關(guān)的函數(shù) 616 14.4.2 文件相關(guān)的函數(shù) 620 14.4.3 相關(guān)的函數(shù) 623 14.4.4 路徑解析相關(guān)的函數(shù) 628 14.4.5 實(shí)現(xiàn)文件檢索功能 630 14.5 創(chuàng)建文件 633 14.5.1 實(shí)現(xiàn)file_create 633 14.5.2 實(shí)現(xiàn)sys_open 636 14.5.3 在文件系統(tǒng)上創(chuàng)建第1個(gè) 文件 639 14.6 文件的打開與關(guān)閉 640 14.6.1 文件的打開 640 14.6.2 文件的關(guān)閉 642 14.7 實(shí)現(xiàn)文件寫入 643 14.7.1 實(shí)現(xiàn)file_write 643 14.7.2 改進(jìn)sys_write及write系統(tǒng) 調(diào)用 648 14.7.3 把數(shù)據(jù)寫入文件 650 14.8 讀取文件 651 14.8.1 實(shí)現(xiàn)file_read 651 14.8.2 實(shí)現(xiàn)sys_read與功能驗(yàn)證 653 14.9 實(shí)現(xiàn)文件讀寫指針定位功能 655 14.10 實(shí)現(xiàn)文件刪除功能 657 14.10.1 回收inode 657 14.10.2 刪除項(xiàng) 660 14.10.3 實(shí)現(xiàn)sys_unlink與功能驗(yàn)證 663 14.11 創(chuàng)建 665 14.11.1 實(shí)現(xiàn)sys_mkdir創(chuàng)建 666 14.11.2 創(chuàng)建功能驗(yàn)證 669 14.12 遍歷 671 14.12.1 打開和關(guān)閉 671 14.12.2 讀取1個(gè)項(xiàng) 673 14.12.3 實(shí)現(xiàn)sys_readdir及sys_ rewinddir 674 14.13 刪除 676 14.13.1 刪除與判斷空 676 14.13.2 實(shí)現(xiàn)sys_rmdir及功能驗(yàn)證 677 14.14 任務(wù)的工作 679 14.14.1 顯示當(dāng)前工作的原理及 基礎(chǔ)代碼 679 14.14.2 實(shí)現(xiàn)sys_getcwd 681 14.14.3 實(shí)現(xiàn)sys_chdir改變工作 683 14.15 獲得文件屬性 684 14.15.1 ls命令的幕后功臣 684 14.15.2 實(shí)現(xiàn)sys_stat 685 第15章 系統(tǒng)交互 687 15.1 fork的原理與實(shí)現(xiàn) 687 15.1.1 什么是fork 687 15.1.2 fork的實(shí)現(xiàn) 689 15.1.3 添加fork系統(tǒng)調(diào)用與實(shí)現(xiàn)init 進(jìn)程 695 15.2 添加read系統(tǒng)調(diào)用,獲取鍵盤輸入 696 15.3 添加putchar、clear系統(tǒng)調(diào)用 697 15.4 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的shell 699 15.4.1 shell雛形 699 15.4.2 添加Ctrl+u和Ctrl+l快捷鍵 701 15.4.3 解析鍵入的字符 703 15.4.4 添加系統(tǒng)調(diào)用 705 15.4.5 路徑解析轉(zhuǎn)換 708 15.4.6 實(shí)現(xiàn)ls、cd、mkdir、ps、rm等 命令 712 15.5 加載用戶進(jìn)程 717 15.5.1 實(shí)現(xiàn)exec 717 15.5.2 讓shell支持外部命令 723 15.5.3 加載硬盤上的用戶程序執(zhí)行 724 15.5.4 使用戶進(jìn)程支持參數(shù) 727 15.6 實(shí)現(xiàn)系統(tǒng)調(diào)用wait和exit 731 15.6.1 wait和exit的作用 731 15.6.2 孤兒進(jìn)程和僵尸進(jìn)程 732 15.6.3 一些基礎(chǔ)代碼 733 15.6.4 實(shí)現(xiàn)wait和exit 737 15.6.5 實(shí)現(xiàn)cat命令 741 15.7 管道 745 15.7.1 管道的原理 745 15.7.2 管道的設(shè)計(jì) 747 15.7.3 管道的實(shí)現(xiàn) 748 15.7.4 利用管道實(shí)現(xiàn)進(jìn)程間通信 752 15.7.5 在shell中支持管道 754 參考文獻(xiàn) 760
你還可能感興趣
我要評(píng)論
|