幫助中心 | 我的帳號 | 關於我們

x86彙編語言(編寫64位多處理器多線程操作系統)

  • 作者:李忠//王曉波//李雙圓|責編:繆曉紅
  • 出版社:電子工業
  • ISBN:9787121479083
  • 出版日期:2024/06/01
  • 裝幀:平裝
  • 頁數:520
人民幣:RMB 128 元      售價:
放入購物車
加入收藏夾

內容大鋼
    編寫一個簡單的、簡易的操作系統雛形,用來演示64位環境下的多處理器管理、動態內存分配、多處理器多任務的調度和切換、多處理器多線程的調度和切換、數據競爭和鎖,但它不包括文件管理、設備管理等內容。本書主要聚焦與IA-32架構進行對比,介紹64位處理器的基本架構,包括寄存器的變化、指令集和工作模式的變化、系統表的變化、內存組織和內存訪問模式的變化等等。

作者介紹
李忠//王曉波//李雙圓|責編:繆曉紅

目錄
第1章  基本要求和相關說明
  1.1  配書代碼和工具
  1.2  NASM的下載和安裝
  1.3  NASMIDE的下載和使用
  1.4  下載和安裝VirtualBox
  1.5  使用FixVhdWr將程序寫入虛擬硬碟
  1.6  本書的代碼組織
第2章  x64架構的基本執行環境
  2.1  x64架構的由來
  2.2  物理地址、有效地址和線性地址
  2.3  x64架構的工作模式
    2.3.1  x86處理器的工作模式
    2.3.2  IA-32e模式及其子模式
  2.4  x64架構的寄存器
    2.4.1  x64架構對通用寄存器的擴展
    2.4.2  x64架構的通用寄存器訪問規則
  2.5  x86處理器的物理地址空間
  2.6  傳統模式的內存訪問
    2.6.1  傳統模式下的線性地址和物理地址
    2.6.2  傳統模式下的32位4KB分頁技術
    2.6.3  傳統模式下如何利用超過4GB的物理內存
    2.6.4  傳統模式下的32位4MB分頁技術
    2.6.5  傳統模式下的32位PAE分頁技術
    2.6.6  傳統模式下的32位PAE-4KB分頁技術
    2.6.7  傳統模式下的32位PAE-2MB分頁技術
  2.7  IA-32e模式的內存訪問
    2.7.1  x64架構的線性地址空間
    2.7.2  擴高(Canonical)地址
    2.7.3  擴高地址的特點和處理器檢查
    2.7.4  兼容模式的內存訪問
    2.7.5  64位模式的內存訪問
    2.7.6  x64架構的段寄存器
    2.7.7  x64架構的代碼段描述符
    2.7.8  x64架構的數據段描述符
    2.7.9  x64架構的4級和5級分頁
  2.8  x64架構的系統表和系統描述符
    2.8.1  x64架構的GDTR
    2.8.2  x64架構的IDTR
    2.8.3  x64架構的LDT描述符和LDTR
    2.8.4  x64架構的TSS描述符和TR
  2.9  x64架構的標誌寄存器和指令指針寄存器
  2.10  x64架構的定址方式
    2.10.1  x64架構下傳統模式的定址方式
    2.10.2  x64架構下IA-32e模式的定址方式
    2.10.3  64位模式的RIP相對定址方式
    2.10.4  64位模式下的指令變化情況
  2.11  IA-32e模式下的中斷和異常處理概述
第3章  進入IA-32e模式
  3.1  如何進入IA-32e模式
  3.2  本章代碼清單

  3.3  執行主引導程序
    3.3.1  NASM的文件包含
    3.3.2  主引導程序的說明
    3.3.3  用BIOS硬碟擴展讀載入內核載入器
    3.3.4  通過數據段訪問棧中的數據結構
    3.3.5  讀取內核載入器程序的剩餘部分
    3.3.6  轉入內核載入器執行
  3.4  執行內核載入器
    3.4.1  檢測處理器是否支持IA-32e模式
    3.4.2  位測試指令BT
    3.4.3  獲取處理器的商標和地址尺寸
  3.5  進入保護模式
  3.6  載入內核程序
  3.7  為進入IA-32e模式準備4級分頁
    3.7.1  2MB和1GB頁面的4級分頁方式
    3.7.2  4級頭表的格式
    3.7.3  頁目錄指針項的格式
    3.7.4  頁目錄項和頁表項的格式
    3.7.5  4級頭表的創建和初始化
    3.7.6  創建指向4級頭表自身的4級頭表項
    3.7.7  準備映射物理內存的低端2MB空間
    3.7.8  創建與低端2MB物理內存對應的分頁系統表項
    3.7.9  將物理內存低端的2MB映射到線性地址空間的高端
    3.7.10  為多任務環境準備必要的4級頭表項
    3.7.11  為多任務環境預分配254個頁目錄指針表
    3.7.12  進程上下文標識PCID
    3.7.13  控制寄存器CR3的內容格式
    3.7.14  設置控制寄存器CR3並開啟物理地址擴展功能
    3.7.15  型號專屬寄存器IA32_EFER的設置和分頁的開啟
  3.8  進入IA-32e的兼容模式執行
  3.9  進入64位模式的內核執行
  3.10  讓內核工作在線性地址空間的高端
    3.10.1  啟用GDT和棧區的高端線性地址
    3.10.2  使用RIP相對定址方式計算內核的高端線性地址
    3.10.3  讓處理器轉到內核程序對應的高端位置繼續執行
  3.11  初始化IA-32e模式下的中斷系統
    3.11.1  IA-32e模式下的中斷門和陷阱門
    3.11.2  IA-32e模式下的中斷處理過程
    3.11.3  通用的中斷和異常處理策略
    3.11.4  通用異常服務常式的工作過程
    3.11.5  載入有效地址指令LEA
    3.11.6  創建通用異常處理過程的中斷門
    3.11.7  安裝通用異常處理過程的中斷門
    3.11.8  安裝通用中斷處理過程的中斷門
    3.11.9  初始化8259中斷控制器
    3.11.10  列印64位模式下的第一條信息
  3.12  本章代碼的編譯和運行
第4章  單處理器環境下的多任務管理和調度
  4.1  本章代碼清單
  4.2  初始化快速系統調用環境

    4.2.1  快速系統調用的原理
    4.2.2  為快速系統調用安裝段描述符
    4.2.3  為快速系統調用準備段選擇子
    4.2.4  設置快速系統調用的入口點
    4.2.5  快速系統調用時的RFLAGS和棧切換
  4.3  動態內存分配
    4.3.1  內核空間的分配策略
    4.3.2  內核可用線性地址的獲取和更新
    4.3.3  立即數在64位模式下的長度限制
    4.3.4  計算本次內存分配涉及的線性地址範圍
    4.3.5  獲取與指定線性地址對應的4級頭表項的線性地址
    4.3.6  頁面分配與頁映射位串
    4.3.7  頁映射位串的定義和空閑頁的查找
    4.3.8  獲取與指定線性地址對應的頁目錄指針項的線性地址
    4.3.9  檢查與指定線性地址對應的頁目錄指針項是否存在
    4.3.10  分配頁目錄表並安裝與線性地址對應的頁目錄指針項
    4.3.11  安裝與指定線性地址對應的頁目錄項、頁表項和頁面
  4.4  創建並安裝TSS描述符
    4.4.1  LDT和TSS描述符的格式
    4.4.2  創建和安裝64位的TSS描述符並載入任務寄存器TR
  4.5  初始化實時時鐘中斷
  4.6  創建外殼任務
    4.6.1  準備創建外殼任務
    4.6.2  為新任務創建任務控制塊PCB
    4.6.3  為新任務創建4級頭表
    4.6.4  將指定的線性地址映射到指定的物理頁
    4.6.5  複製當前活動4級頭表的內容給新任務的4級頭表
    4.6.6  切換到新任務的地址空間並清空4級頭表的前半部分
    4.6.7  為新任務分配0特權級使用的棧空間
    4.6.8  為新任務分配3特權級使用的棧空間
    4.6.9  從硬碟上載入用戶程序
    4.6.10  生成任務標識
    4.6.11  將新任務的PCB添加到PCB鏈表
    4.6.12  設置外殼任務的狀態
  4.7  設置任務狀態段TSS
  4.8  轉到外殼任務的局部空間執行
  4.9  快速系統調用的進入和返回
    4.9.1  為快速系統調用指定功能號
    4.9.2  根據功能號計算內核常式的線性地址
    4.9.3  快速系統調用的返回和指令前綴REX
  4.10  利用實時時鐘中斷執行任務切換
    4.10.1  查找處於就緒狀態的任務
    4.10.2  任務切換的執行過程
  4.11  外殼任務的執行過程
    4.11.1  通過系統調用獲取屏幕上可用的顯示行坐標
    4.11.2  通過系統調用獲取當前時間
    4.11.3  在外殼任務中顯示當前時間
  4.12  用戶任務的創建和執行
    4.12.1  當前任務標識的獲取
    4.12.2  用戶程序常式庫的介紹

    4.12.3  將64位二進位數轉換為十進位字元串
    4.12.4  在每輪相加中將結果和加數轉換為字元串
    4.12.5  字元串的連接和顯示
    4.12.6  用戶任務的終止
  4.13  本章程序的編譯和執行
第5章  多處理器和APIC的初始化
  5.1  多處理器環境概述
  5.2  同時多線程和INTEL超線程技術
  5.3  高級可編程中斷控制器APIC
    5.3.1  中斷引腳、中斷類型和中斷源
    5.3.2  本地中斷源和本地向量表
    5.3.3  APIC的工作模式和APIC ID
    5.3.4  組成Local APIC ID的處理器拓撲
    5.3.5  Local APIC的地址映射
    5.3.6  I/O APIC的地址映射
    5.3.7  多處理器的初始化過程和MP規範
    5.3.8  高級的配置和電源介面(ACPI)規範
  5.4  本章代碼清單
  5.5  獲取ACPI申領的物理內存地址範圍
    5.5.1  ACPI的數據結構和表
    5.5.2  E820功能調用和內存地址範圍結構
    5.5.3  查詢和保存物理地址映射數據
    5.5.4  準備映射ACPI申領的內存
    5.5.5  映射ACPI申領的內存
  5.6  訪問ACPI的數據結構和表
    5.6.1  根系統描述指針結構
    5.6.2  搜索根系統描述指針結構
    5.6.3  系統描述表的層次結構和表頭格式
    5.6.4  擴展的系統描述表XSDT
    5.6.5  通過XSDT搜索多APIC描述表MADT
    5.6.6  根系統描述表RSDT
    5.6.7  通過RSDT搜索多APIC描述表MADT
    5.6.8  多APIC描述表MADT的格式
    5.6.9  準備遍歷中斷控制器結構列表
    5.6.10  從中斷控制器結構內提取處理器和APIC信息
  5.7  映射APIC地址
  5.8  測量Local APIC定時器
    5.8.1  Local APIC定時器
    5.8.2  Local APIC定時器的精度
    5.8.3  APIC定時器的本地向量表寄存器及其設置
    5.8.4  設置CMOS RTC以測量Local APIC定時器
    5.8.5  測量Local APIC定時器在1ms內經歷的時鐘周期數
  5.9  使用Local APIC定時器中斷切換任務
    5.9.1  多處理器系統的虛擬線模式
    5.9.2  中斷輸入引腳LINT0的本地向量表寄存器
    5.9.3  設置Local APIC定時器
  5.10  使用經由I/O APIC的中斷執行任務切換
    5.10.1  I/O APIC概述
    5.10.2  I/O APIC的I/O重定向表寄存器
    5.10.3  用I/O APIC投遞的中斷實施任務切換

  5.11  邏輯目標模式下的中斷目標判別機制
  5.12  APIC中斷的優先順序及其相關的寄存器
  5.13  APIC中斷的接受機制
  5.14  最低優先順序模式的中斷處理
第6章  多處理器環境下的多任務管理和調度
  6.1  本章代碼清單
  6.2  高速緩存
  6.3  數據競爭和鎖
    6.3.1  單處理器環境下的數據競爭
    6.3.2  多處理器環境下的數據競爭
    6.3.3  原子操作
    6.3.4  鎖和自旋鎖
    6.3.5  分支預測和PAUSE指令
    6.3.6  多行宏定義
    6.3.7  鎖在內核常式中的應用
    6.3.8  互斥鎖的一般原理
  6.4  內核的初始化
    6.4.1  處理器專屬存儲區(每CPU數據區)
    6.4.2  為自舉處理器BSP分配專屬存儲區
    6.4.3  處理器專屬存儲區的訪問
  6.5  多處理器系統的初始化
    6.5.1  多處理器系統的初始化協議演算法
    6.5.2  本章的多處理器多任務調度方案
    6.5.3  中斷命令寄存器ICR
    6.5.4  本章的AP初始化代碼簡介
    6.5.5  將AP初始化代碼傳送到指定位置
    6.5.6  向所有應用處理器廣播SIPI消息
  6.6  應用處理器AP的初始化過程
    6.6.1  進入保護模式
    6.6.2  進入64位模式
    6.6.3  為每個應用處理器創建必要的數據結構
    6.6.4  對稱多處理器系統的實現
    6.6.5  用SWAPGS指令訪問專屬存儲區
    6.6.6  開啟Local APIC並進入停機待命狀態
  6.7  由自舉處理器BSP繼續完成剩餘的內核初始化工作
    6.7.1  等待所有應用處理器完成初始化
    6.7.2  創建系統外殼任務併為其指定時間片
    6.7.3  廣播新任務認領消息並進入預定狀態
  6.8  多處理器多任務的管理和調度
    6.8.1  新任務認領中斷的處理過程
    6.8.2  在任務鏈表中查找就緒任務
    6.8.3  用CMPXCHG指令以無鎖方式操作鏈表節點
    6.8.4  為新任務指定時間片
    6.8.5  恢復任務的狀態並開始執行
    6.8.6  時間片到期中斷的處理過程
    6.8.7  處理器專屬存儲區的必要性
    6.8.8  外殼任務的執行流程
    6.8.9  用戶任務的執行流程
    6.8.10  任務的終止
  6.9  程序的編譯和執行

第7章  多處理器環境下的多線程管理和調度
  7.1  任務(進程)和線程
  7.2  本章代碼清單
  7.3  本章的任務控制塊PCB和線程式控制制塊TCB
  7.4  任務及其主線程的創建
  7.5  線程的調度和切換
    7.5.1  新線程認領中斷的處理過程
    7.5.2  查找處於就緒狀態的線程
    7.5.3  恢復並執行指定的線程
    7.5.4  時間片到期中斷的處理過程
  7.6  系統外殼任務及其主線程的執行
  7.7  將常式創建為線程
    7.7.1  將常式創建為線程
    7.7.2  創建線程式控制制塊TCB和線程私有的棧
    7.7.3  常式返回和結束線程的區別
    7.7.4  如何用RET指令結束線程
    7.7.5  在棧中構造結束線程的棧幀
    7.7.6  將TCB添加到當前任務的TCB鏈表
  7.8  線程的執行
    7.8.1  動態內存分配
    7.8.2  在棧中保存所有緩衝區的線性地址
    7.8.3  字元串的生成、連接和列印
  7.9  線程的結束和任務的終止
  7.10  程序的編譯和執行
第8章  數據競爭和互斥鎖
  8.1  本章代碼清單
  8.2  線程的休眠和喚醒
    8.2.1  執行線程休眠的系統調用
    8.2.2  保存和修改休眠線程的狀態
    8.2.3  安裝系統管理中斷
    8.2.4  系統管理中斷的處理過程
    8.2.5  喚醒休眠的線程
  8.3  數據競爭的實例
    8.3.1  在兩個同時執行的線程內訪問共享數據
    8.3.2  線程等待
    8.3.3  喚醒處於等待狀態的線程
    8.3.4  列印兩個線程操作之後的共享數據
    8.3.5  併發線程的數據競爭過程
  8.4  使用鎖定的原子操作解決數據競爭
  8.5  使用互斥鎖解決數據競爭
    8.5.1  互斥鎖的創建和初始化
    8.5.2  互斥鎖的獲取(加鎖)
    8.5.3  喚醒等待互斥鎖的線程
    8.5.4  互斥鎖的釋放
    8.5.5  使用互斥鎖之後的運行效果
  8.6  互斥鎖的應用策略
代碼索引

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032