x86匯編語(yǔ)言:編寫(xiě)64位多處理器多線(xiàn)程操作系統(tǒng)
定 價(jià):128 元
當(dāng)前圖書(shū)已被 27 所學(xué)校薦購(gòu)過(guò)!
查看明細(xì)
- 作者:李忠
- 出版時(shí)間:2024/6/1
- ISBN:9787121479083
- 出 版 社:電子工業(yè)出版社
- 中圖法分類(lèi):TP313
- 頁(yè)碼:536
- 紙張:
- 版次:01
- 開(kāi)本:16開(kāi)
編寫(xiě)一個(gè)簡(jiǎn)單的、簡(jiǎn)易的操作系統(tǒng)雛形,用來(lái)演示64位環(huán)境下的多處理器管理、動(dòng)態(tài)內(nèi)存分配、多處理器多任務(wù)的調(diào)度和切換、多處理器多線(xiàn)程的調(diào)度和切換、數(shù)據(jù)競(jìng)爭(zhēng)和鎖,但它不包括文件管理、設(shè)備管理等內(nèi)容。本書(shū)主要聚焦以下問(wèn)題:1,與IA-32架構(gòu)進(jìn)行對(duì)比,介紹64位處理器的基本架構(gòu),包括寄存器的變化、指令集和工作模式的變化、系統(tǒng)表的變化、內(nèi)存組織和內(nèi)存訪(fǎng)問(wèn)模式的變化;2,IA-32e模式的特點(diǎn)及如何進(jìn)入IA-32e模式,重點(diǎn)介紹其64位子模式;3,IA-32e模式的4級(jí)和5級(jí)分頁(yè);4,IA-32e模式下的中斷和異常處理;5,64位模式下的單處理器多任務(wù)和任務(wù)切換;6,64位模式下的多處理器管理和初始化,包括高級(jí)可編程中斷控制器APIC;7,64位模式下的多處理器多任務(wù)和任務(wù)切換;8,64位模式下的多處理器多線(xiàn)程和線(xiàn)程切換;9,高速緩存及與多線(xiàn)程有關(guān)的原子操作、鎖、線(xiàn)程同步,等等。
李忠,2000年至今,長(zhǎng)春電視臺(tái)。主要出版著作《穿越計(jì)算機(jī)的迷霧》(第1、第2版)《x86匯編語(yǔ)言:從實(shí)模式到保護(hù)模式》(第1、第2版)《C語(yǔ)言非常道》等。
目 錄
第1章 基本要求和相關(guān)說(shuō)明 1
1.1 配書(shū)代碼和工具 1
1.2 NASM的下載和安裝 1
1.3 NASMIDE的下載和使用 3
1.4 下載和安裝VirtualBox 7
1.5 使用FixVhdWr將程序?qū)懭胩摂M硬盤(pán) 8
1.6 本書(shū)的代碼組織 10
第2章 x64架構(gòu)的基本執(zhí)行環(huán)境 37
2.1 x64架構(gòu)的由來(lái) 37
2.2 物理地址、有效地址和線(xiàn)性地址 39
2.3 x64架構(gòu)的工作模式 40
2.3.1 x86處理器的工作模式 40
2.3.2 IA-32e模式及其子模式 41
2.4 x64架構(gòu)的寄存器 43
2.4.1 x64架構(gòu)對(duì)通用寄存器的擴(kuò)展 43
2.4.2 x64架構(gòu)的通用寄存器訪(fǎng)問(wèn)規(guī)則 45
2.5 x86處理器的物理地址空間 46
2.6 傳統(tǒng)模式的內(nèi)存訪(fǎng)問(wèn) 47
2.6.1 傳統(tǒng)模式下的線(xiàn)性地址和物理地址 47
2.6.2 傳統(tǒng)模式下的32位4KB分頁(yè)技術(shù) 48
2.6.3 傳統(tǒng)模式下如何利用超過(guò)4GB的物理內(nèi)存 49
2.6.4 傳統(tǒng)模式下的32位4MB分頁(yè)技術(shù) 50
2.6.5 傳統(tǒng)模式下的32位PAE分頁(yè)技術(shù) 52
2.6.6 傳統(tǒng)模式下的32位PAE-4KB分頁(yè)技術(shù) 52
2.6.7 傳統(tǒng)模式下的32位PAE-2MB分頁(yè)技術(shù) 54
2.7 IA-32e模式的內(nèi)存訪(fǎng)問(wèn) 56
2.7.1 x64架構(gòu)的線(xiàn)性地址空間 56
2.7.2 擴(kuò)高(Canonical)地址 57
2.7.3 擴(kuò)高地址的特點(diǎn)和處理器檢查 58
2.7.4 兼容模式的內(nèi)存訪(fǎng)問(wèn) 59
2.7.5 64位模式的內(nèi)存訪(fǎng)問(wèn) 60
2.7.6 x64架構(gòu)的段寄存器 60
2.7.7 x64架構(gòu)的代碼段描述符 61
2.7.8 x64架構(gòu)的數(shù)據(jù)段描述符 62
2.7.9 x64架構(gòu)的4級(jí)和5級(jí)分頁(yè) 63
2.8 x64架構(gòu)的系統(tǒng)表和系統(tǒng)描述符 65
2.8.1 x64架構(gòu)的GDTR 65
2.8.2 x64架構(gòu)的IDTR 66
2.8.3 x64架構(gòu)的LDT描述符和LDTR 67
2.8.4 x64架構(gòu)的TSS描述符和TR 68
2.9 x64架構(gòu)的標(biāo)志寄存器和指令指針寄存器 69
2.10 x64架構(gòu)的尋址方式 71
2.10.1 x64架構(gòu)下傳統(tǒng)模式的尋址方式 71
2.10.2 x64架構(gòu)下IA-32e模式的尋址方式 72
2.10.3 64位模式的RIP相對(duì)尋址方式 73
2.10.4 64位模式下的指令變化情況 75
2.11 IA-32e模式下的中斷和異常處理概述 77
第3章 進(jìn)入IA-32e模式 79
3.1 如何進(jìn)入IA-32e模式 79
3.2 本章代碼清單 81
3.3 執(zhí)行主引導(dǎo)程序 101
3.3.1 NASM的文件包含 101
3.3.2 主引導(dǎo)程序的說(shuō)明 102
3.3.3 用BIOS硬盤(pán)擴(kuò)展讀加載內(nèi)核加載器 103
3.3.4 通過(guò)數(shù)據(jù)段訪(fǎng)問(wèn)棧中的數(shù)據(jù)結(jié)構(gòu) 106
3.3.5 讀取內(nèi)核加載器程序的剩余部分 107
3.3.6 轉(zhuǎn)入內(nèi)核加載器執(zhí)行 109
3.4 執(zhí)行內(nèi)核加載器 110
3.4.1 檢測(cè)處理器是否支持IA-32e模式 110
3.4.2 位測(cè)試指令BT 111
3.4.3 獲取處理器的商標(biāo)和地址尺寸 111
3.5 進(jìn)入保護(hù)模式 115
3.6 加載內(nèi)核程序 118
3.7 為進(jìn)入IA-32e模式準(zhǔn)備4級(jí)分頁(yè) 121
3.7.1 2MB和1GB頁(yè)面的4級(jí)分頁(yè)方式 122
3.7.2 4級(jí)頭表的格式 123
3.7.3 頁(yè)目錄指針項(xiàng)的格式 125
3.7.4 頁(yè)目錄項(xiàng)和頁(yè)表項(xiàng)的格式 127
3.7.5 4級(jí)頭表的創(chuàng)建和初始化 129
3.7.6 創(chuàng)建指向4級(jí)頭表自身的4級(jí)頭表項(xiàng) 129
3.7.7 準(zhǔn)備映射物理內(nèi)存的低端2MB空間 130
3.7.8 創(chuàng)建與低端2MB物理內(nèi)存對(duì)應(yīng)的分頁(yè)系統(tǒng)表項(xiàng) 132
3.7.9 將物理內(nèi)存低端的2MB映射到線(xiàn)性地址空間的高端 134
3.7.10 為多任務(wù)環(huán)境準(zhǔn)備必要的4級(jí)頭表項(xiàng) 136
3.7.11 為多任務(wù)環(huán)境預(yù)分配254個(gè)頁(yè)目錄指針表 137
3.7.12 進(jìn)程上下文標(biāo)識(shí)PCID 139
3.7.13 控制寄存器CR3的內(nèi)容格式 140
3.7.14 設(shè)置控制寄存器CR3并開(kāi)啟物理地址擴(kuò)展功能 141
3.7.15 型號(hào)專(zhuān)屬寄存器IA32_EFER的設(shè)置和分頁(yè)的開(kāi)啟 142
3.8 進(jìn)入IA-32e的兼容模式執(zhí)行 143
3.9 進(jìn)入64位模式的內(nèi)核執(zhí)行 144
3.10 讓內(nèi)核工作在線(xiàn)性地址空間的高端 145
3.10.1 啟用GDT和棧區(qū)的高端線(xiàn)性地址 146
3.10.2 使用RIP相對(duì)尋址方式計(jì)算內(nèi)核的高端線(xiàn)性地址 147
3.10.3 讓處理器轉(zhuǎn)到內(nèi)核程序?qū)?yīng)的高端位置繼續(xù)執(zhí)行 148
3.11 初始化IA-32e模式下的中斷系統(tǒng) 149
3.11.1 IA-32e模式下的中斷門(mén)和陷阱門(mén) 149
3.11.2 IA-32e模式下的中斷處理過(guò)程 151
3.11.3 通用的中斷和異常處理策略 152
3.11.4 通用異常服務(wù)例程的工作過(guò)程 152
3.11.5 加載有效地址指令LEA 155
3.11.6 創(chuàng)建通用異常處理過(guò)程的中斷門(mén) 156
3.11.7 安裝通用異常處理過(guò)程的中斷門(mén) 157
3.11.8 安裝通用中斷處理過(guò)程的中斷門(mén) 159
3.11.9 初始化8259中斷控制器 159
3.11.10 打印64位模式下的第一條信息 160
3.12 本章代碼的編譯和運(yùn)行 162
第4章 單處理器環(huán)境下的多任務(wù)管理和調(diào)度 164
4.1 本章代碼清單 165
4.2 初始化快速系統(tǒng)調(diào)用環(huán)境 182
4.2.1 快速系統(tǒng)調(diào)用的原理 182
4.2.2 為快速系統(tǒng)調(diào)用安裝段描述符 184
4.2.3 為快速系統(tǒng)調(diào)用準(zhǔn)備段選擇子 186
4.2.4 設(shè)置快速系統(tǒng)調(diào)用的入口點(diǎn) 187
4.2.5 快速系統(tǒng)調(diào)用時(shí)的RFLAGS和棧切換 188
4.3 動(dòng)態(tài)內(nèi)存分配 189
4.3.1 內(nèi)核空間的分配策略 189
4.3.2 內(nèi)核可用線(xiàn)性地址的獲取和更新 190
4.3.3 立即數(shù)在64位模式下的長(zhǎng)度限制 192
4.3.4 計(jì)算本次內(nèi)存分配涉及的線(xiàn)性地址范圍 193
4.3.5 獲取與指定線(xiàn)性地址對(duì)應(yīng)的4級(jí)頭表項(xiàng)的線(xiàn)性地址 193
4.3.6 頁(yè)面分配與頁(yè)映射位串 196
4.3.7 頁(yè)映射位串的定義和空閑頁(yè)的查找 197
4.3.8 獲取與指定線(xiàn)性地址對(duì)應(yīng)的頁(yè)目錄指針項(xiàng)的線(xiàn)性地址 199
4.3.9 檢查與指定線(xiàn)性地址對(duì)應(yīng)的頁(yè)目錄指針項(xiàng)是否存在 201
4.3.10 分配頁(yè)目錄表并安裝與線(xiàn)性地址對(duì)應(yīng)的頁(yè)目錄指針項(xiàng) 201
4.3.11 安裝與指定線(xiàn)性地址對(duì)應(yīng)的頁(yè)目錄項(xiàng)、頁(yè)表項(xiàng)和頁(yè)面 202
4.4 創(chuàng)建并安裝TSS描述符 203
4.4.1 LDT和TSS描述符的格式 204
4.4.2 創(chuàng)建和安裝64位的TSS描述符并加載任務(wù)寄存器TR 205
4.5 初始化實(shí)時(shí)時(shí)鐘中斷 206
4.6 創(chuàng)建外殼任務(wù) 207
4.6.1 準(zhǔn)備創(chuàng)建外殼任務(wù) 207
4.6.2 為新任務(wù)創(chuàng)建任務(wù)控制塊PCB 208
4.6.3 為新任務(wù)創(chuàng)建4級(jí)頭表 209
4.6.4 將指定的線(xiàn)性地址映射到指定的物理頁(yè) 211
4.6.5 復(fù)制當(dāng)前活動(dòng)4級(jí)頭表的內(nèi)容給新任務(wù)的4級(jí)頭表 212
4.6.6 切換到新任務(wù)的地址空間并清空4級(jí)頭表的前半部分 212
4.6.7 為新任務(wù)分配0特權(quán)級(jí)使用的棧空間 213
4.6.8 為新任務(wù)分配3特權(quán)級(jí)使用的?臻g 214
4.6.9 從硬盤(pán)上加載用戶(hù)程序 215
4.6.10 生成任務(wù)標(biāo)識(shí) 216
4.6.11 將新任務(wù)的PCB添加到PCB鏈表 217
4.6.12 設(shè)置外殼任務(wù)的狀態(tài) 220
4.7 設(shè)置任務(wù)狀態(tài)段TSS 220
4.8 轉(zhuǎn)到外殼任務(wù)的局部空間執(zhí)行 221
4.9 快速系統(tǒng)調(diào)用的進(jìn)入和返回 222
4.9.1 為快速系統(tǒng)調(diào)用指定功能號(hào) 223
4.9.2 根據(jù)功能號(hào)計(jì)算內(nèi)核例程的線(xiàn)性地址 223
4.9.3 快速系統(tǒng)調(diào)用的返回和指令前綴REX 225
4.10 利用實(shí)時(shí)時(shí)鐘中斷執(zhí)行任務(wù)切換 226
4.10.1 查找處于就緒狀態(tài)的任務(wù) 226
4.10.2 任務(wù)切換的執(zhí)行過(guò)程 227
4.11 外殼任務(wù)的執(zhí)行過(guò)程 229
4.11.1 通過(guò)系統(tǒng)調(diào)用獲取屏幕上可用的顯示行坐標(biāo) 229
4.11.2 通過(guò)系統(tǒng)調(diào)用獲取當(dāng)前時(shí)間 230
4.11.3 在外殼任務(wù)中顯示當(dāng)前時(shí)間 231
4.12 用戶(hù)任務(wù)的創(chuàng)建和執(zhí)行 232
4.12.1 當(dāng)前任務(wù)標(biāo)識(shí)的獲取 233
4.12.2 用戶(hù)程序例程庫(kù)的介紹 233
4.12.3 將64位二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制字符串 234
4.12.4 在每輪相加中將結(jié)果和加數(shù)轉(zhuǎn)換為字符串 235
4.12.5 字符串的連接和顯示 236
4.12.6 用戶(hù)任務(wù)的終止 236
4.13 本章程序的編譯和執(zhí)行 238
第5章 多處理器和APIC的初始化 240
5.1 多處理器環(huán)境概述 240
5.2 同時(shí)多線(xiàn)程和INTEL超線(xiàn)程技術(shù) 241
5.3 高級(jí)可編程中斷控制器APIC 243
5.3.1 中斷引腳、中斷類(lèi)型和中斷源 245
5.3.2 本地中斷源和本地向量表 246
5.3.3 APIC的工作模式和APIC ID 247
5.3.4 組成Local APIC ID的處理器拓?fù)?248
5.3.5 Local APIC的地址映射 249
5.3.6 I/O APIC的地址映射 250
5.3.7 多處理器的初始化過(guò)程和MP規(guī)范 251
5.3.8 高級(jí)的配置和電源接口(ACPI)規(guī)范 252
5.4 本章代碼清單 252
5.5 獲取ACPI申領(lǐng)的物理內(nèi)存地址范圍 271
5.5.1 ACPI的數(shù)據(jù)結(jié)構(gòu)和表 271
5.5.2 E820功能調(diào)用和內(nèi)存地址范圍結(jié)構(gòu) 272
5.5.3 查詢(xún)和保存物理地址映射數(shù)據(jù) 272
5.5.4 準(zhǔn)備映射ACPI申領(lǐng)的內(nèi)存 274
5.5.5 映射ACPI申領(lǐng)的內(nèi)存 275
5.6 訪(fǎng)問(wèn)ACPI的數(shù)據(jù)結(jié)構(gòu)和表 277
5.6.1 根系統(tǒng)描述指針結(jié)構(gòu) 277
5.6.2 搜索根系統(tǒng)描述指針結(jié)構(gòu) 278
5.6.3 系統(tǒng)描述表的層次結(jié)構(gòu)和表頭格式 278
5.6.4 擴(kuò)展的系統(tǒng)描述表XSDT 280
5.6.5 通過(guò)XSDT搜索多APIC描述表MADT 281
5.6.6 根系統(tǒng)描述表RSDT 282
5.6.7 通過(guò)RSDT搜索多APIC描述表MADT 283
5.6.8 多APIC描述表MADT的格式 284
5.6.9 準(zhǔn)備遍歷中斷控制器結(jié)構(gòu)列表 286
5.6.10 從中斷控制器結(jié)構(gòu)內(nèi)提取處理器和APIC信息 287
5.7 映射APIC地址 288
5.8 測(cè)量Local APIC定時(shí)器 289
5.8.1 Local APIC定時(shí)器 290
5.8.2 Local APIC定時(shí)器的精度 290
5.8.3 APIC定時(shí)器的本地向量表寄存器及其設(shè)置 291
5.8.4 設(shè)置CMOS RTC以測(cè)量Local APIC定時(shí)器 292
5.8.5 測(cè)量Local APIC定時(shí)器在1ms內(nèi)經(jīng)歷的時(shí)鐘周期數(shù) 294
5.9 使用Local APIC定時(shí)器中斷切換任務(wù) 295
5.9.1 多處理器系統(tǒng)的虛擬線(xiàn)模式 295
5.9.2 中斷輸入引腳LINT0的本地向量表寄存器 296
5.9.3 設(shè)置Local APIC定時(shí)器 298
5.10 使用經(jīng)由I/O APIC的中斷執(zhí)行任務(wù)切換 299
5.10.1 I/O APIC概述 300
5.10.2 I/O APIC的I/O重定向表寄存器 302
5.10.3 用I/O APIC投遞的中斷實(shí)施任務(wù)切換 303
5.11 邏輯目標(biāo)模式下的中斷目標(biāo)判別機(jī)制 304
5.12 APIC中斷的優(yōu)先級(jí)及其相關(guān)的寄存器 305
5.13 APIC中斷的接受機(jī)制 306
5.14 最低優(yōu)先級(jí)模式的中斷處理 307
第6章 多處理器環(huán)境下的多任務(wù)管理和調(diào)度 308
6.1 本章代碼清單 309
6.2 高 速 緩 存 338
6.3 數(shù)據(jù)競(jìng)爭(zhēng)和鎖 339
6.3.1 單處理器環(huán)境下的數(shù)據(jù)競(jìng)爭(zhēng) 340
6.3.2 多處理器環(huán)境下的數(shù)據(jù)競(jìng)爭(zhēng) 342
6.3.3 原子操作 343
6.3.4 鎖和自旋鎖 345
6.3.5 分支預(yù)測(cè)和PAUSE指令 347
6.3.6 多行宏定義 348
6.3.7 鎖在內(nèi)核例程中的應(yīng)用 350
6.3.8 互斥鎖的一般原理 352
6.4 內(nèi)核的初始化 353
6.4.1 處理器專(zhuān)屬存儲(chǔ)區(qū)(每CPU數(shù)據(jù)區(qū)) 354
6.4.2 為自舉處理器BSP分配專(zhuān)屬存儲(chǔ)區(qū) 355
6.4.3 處理器專(zhuān)屬存儲(chǔ)區(qū)的訪(fǎng)問(wèn) 356
6.5 多處理器系統(tǒng)的初始化 358
6.5.1 多處理器系統(tǒng)的初始化協(xié)議算法 358
6.5.2 本章的多處理器多任務(wù)調(diào)度方案 360
6.5.3 中斷命令寄存器ICR 362
6.5.4 本章的AP初始化代碼簡(jiǎn)介 363
6.5.5 將AP初始化代碼傳送到指定位置 364
6.5.6 向所有應(yīng)用處理器廣播SIPI消息 365
6.6 應(yīng)用處理器AP的初始化過(guò)程 366
6.6.1 進(jìn)入保護(hù)模式 366
6.6.2 進(jìn)入64位模式 367
6.6.3 為每個(gè)應(yīng)用處理器創(chuàng)建必要的數(shù)據(jù)結(jié)構(gòu) 369
6.6.4 對(duì)稱(chēng)多處理器系統(tǒng)的實(shí)現(xiàn) 370
6.6.5 用SWAPGS指令訪(fǎng)問(wèn)專(zhuān)屬存儲(chǔ)區(qū) 371
6.6.6 開(kāi)啟Local APIC并進(jìn)入停機(jī)待命狀態(tài) 373
6.7 由自舉處理器BSP繼續(xù)完成剩余的內(nèi)核初始化工作 374
6.7.1 等待所有應(yīng)用處理器完成初始化 374
6.7.2 創(chuàng)建系統(tǒng)外殼任務(wù)并為其指定時(shí)間片 375
6.7.3 廣播新任務(wù)認(rèn)領(lǐng)消息并進(jìn)入預(yù)定狀態(tài) 376
6.8 多處理器多任務(wù)的管理和調(diào)度 377
6.8.1 新任務(wù)認(rèn)領(lǐng)中斷的處理過(guò)程 377
6.8.2 在任務(wù)鏈表中查找就緒任務(wù) 379
6.8.3 用CMPXCHG指令以無(wú)鎖方式操作鏈表節(jié)點(diǎn) 381
6.8.4 為新任務(wù)指定時(shí)間片 382
6.8.5 恢復(fù)任務(wù)的狀態(tài)并開(kāi)始執(zhí)行 383
6.8.6 時(shí)間片到期中斷的處理過(guò)程 384
6.8.7 處理器專(zhuān)屬存儲(chǔ)區(qū)的必要性 385
6.8.8 外殼任務(wù)的執(zhí)行流程 387
6.8.9 用戶(hù)任務(wù)的執(zhí)行流程 388
6.8.10 任務(wù)的終止 388
6.9 程序的編譯和執(zhí)行 389
第7章 多處理器環(huán)境下的多線(xiàn)程管理和調(diào)度 391
7.1 任務(wù)(進(jìn)程)和線(xiàn)程 391
7.2 本章代碼清單 392
7.3 本章的任務(wù)控制塊PCB和線(xiàn)程控制塊TCB 426
7.4 任務(wù)及其主線(xiàn)程的創(chuàng)建 429
7.5 線(xiàn)程的調(diào)度和切換 431
7.5.1 新線(xiàn)程認(rèn)領(lǐng)中斷的處理過(guò)程 431
7.5.2 查找處于就緒狀態(tài)的線(xiàn)程 432
7.5.3 恢復(fù)并執(zhí)行指定的線(xiàn)程 434
7.5.4 時(shí)間片到期中斷的處理過(guò)程 435
7.6 系統(tǒng)外殼任務(wù)及其主線(xiàn)程的執(zhí)行 436
7.7 將例程創(chuàng)建為線(xiàn)程 437
7.7.1 將例程創(chuàng)建為線(xiàn)程 437
7.7.2 創(chuàng)建線(xiàn)程控制塊TCB和線(xiàn)程私有的棧 438
7.7.3 例程返回和結(jié)束線(xiàn)程的區(qū)別 439
7.7.4 如何用RET指令結(jié)束線(xiàn)程 440
7.7.5 在棧中構(gòu)造結(jié)束線(xiàn)程的棧幀 441
7.7.6 將TCB添加到當(dāng)前任務(wù)的TCB鏈表 442
7.8 線(xiàn)程的執(zhí)行 443
7.8.1 動(dòng)態(tài)內(nèi)存分配 444
7.8.2 在棧中保存所有緩沖區(qū)的線(xiàn)性地址 444
7.8.3 字符串的生成、連接和打印 446
7.9 線(xiàn)程的結(jié)束和任務(wù)的終止 447
7.10 程序的編譯和執(zhí)行 448
第8章 數(shù)據(jù)競(jìng)爭(zhēng)和互斥鎖 450
8.1 本章代碼清單 450
8.2 線(xiàn)程的休眠和喚醒 510
8.2.1 執(zhí)行線(xiàn)程休眠的系統(tǒng)調(diào)用 510
8.2.2 保存和修改休眠線(xiàn)程的狀態(tài) 512
8.2.3 安裝系統(tǒng)管理中斷 514
8.2.4 系統(tǒng)管理中斷的處理過(guò)程 515
8.2.5 喚醒休眠的線(xiàn)程 516
8.3 數(shù)據(jù)競(jìng)爭(zhēng)的實(shí)例 516
8.3.1 在兩個(gè)同時(shí)執(zhí)行的線(xiàn)程內(nèi)訪(fǎng)問(wèn)共享數(shù)據(jù) 517
8.3.2 線(xiàn)程等待 519
8.3.3 喚醒處于等待狀態(tài)的線(xiàn)程 520
8.3.4 打印兩個(gè)線(xiàn)程操作之后的共享數(shù)據(jù) 520
8.3.5 并發(fā)線(xiàn)程的數(shù)據(jù)競(jìng)爭(zhēng)過(guò)程 522
8.4 使用鎖定的原子操作解決數(shù)據(jù)競(jìng)爭(zhēng) 523
8.5 使用互斥鎖解決數(shù)據(jù)競(jìng)爭(zhēng) 525
8.5.1 互斥鎖的創(chuàng)建和初始化 525
8.5.2 互斥鎖的獲取(加鎖) 525
8.5.3 喚醒等待互斥鎖的線(xiàn)程 526
8.5.4 互斥鎖的釋放 527
8.5.5 使用互斥鎖之后的運(yùn)行效果 527
8.6 互斥鎖的應(yīng)用策略 528