讀書筆記_windows核心編程基礎_part 2

來源:互聯網
上載者:User

 

在進行編譯驅動程式時,要對使用的平台進行選擇,包括x86, x64, IA64.

X86指的是IA32平台,它是一個intel通用電腦系列的標準編號的縮寫,也標識一套通用的電腦指令集合,X與處理器沒有任何關係它是一個對所有*86系統的簡單的萬用字元定義。採用32位變長指令集,32位寄存器,32位直接定址範圍。

X64,有時會稱為“x86-64”,是64位微處理器架構及其相應指令集的一種,也是Intel x86架構的延伸產品。“x64”最先由AMD設計,推出時被稱為“AMD64”,其後也為英特爾所採用,現時英特爾稱之為“Intel 64”、

IA64:有時會稱為“IPF”,Intel自推出32位微處理器以來,在高效能運算機領域的又一座裡程碑。基於IA64處理器架構的伺服器具有64位的運算能力,64位的資料通路,突破了傳統IA32架構的許多限制。完全不相容32位程式,更適合企業級Server端應用。

核心程式可以被看做是一個PE格式的DLL,它是被Windows整個核心調用的一個DLL(一種比喻,並非是真的DLL),它是被Windows整個核心調用,一旦載入,就會成為核心的組成部分,並非特定處於某個進程中。所有的核心空間都是共用的,所以在一個核心額程式中分配了一個核心指標,然後傳遞給其他的核心程式,這種通訊方法是有效。核心程式一旦崩潰,windows系統也就崩潰了,這時會出現藍屏或自動重啟。

DriverEntry是一個核心程式的入口,在核心程式被載入的時候,這個函數被調用,一般是由system進程載入的,在windows XP下這個進程的PID為4, windows 2000下這個進程的PID為8。

CPU許可權級

Intel 的x86處理器是通過Ring層級來存取控制的,分4層,從Ring0到Ring3,後面簡稱R0,R1,R2,R3。R0擁有最高的許可權,R3的許可權最低。但實際windows只分了兩個層,R0層和R1層,驅動程式在R0層,應用程式在R1層。

保護模式下的分頁記憶體保護

X86處理器的記憶體保護,分為分段保護和分頁保護。

介紹一下CPU的運行模式,目前的x86CPU的運行模式主要有:

實模式:CPU在啟動後馬上處於實模式。DOS就是運行在實模式下的,他的缺點是預設只能訪問1MB記憶體,而且只能執行單任務。優點是所有的程式都能運行在R0層,應用程式和系統程式具有同樣的許可權。

保護模式:建議的CPU運行模式,支援分段,分頁,可以訪問更大的記憶體,可以運行多任務,windows和linux均運行在該模式下。

系統管理模式(SMM):這個模式提供給作業系統或執行環境一個透明的機制來處理電源管理和OEM專屬的特性。

虛擬8086模式:為了能在保護模式中運行原來能在實模式下啟動並執行程式。所特意提供的一種虛擬8086模式,在這種模式允許在保護模式的多任務環境下執行實模式。

64位擴充模式:Intel和AMD均推出了支援64位的CPU,支援64位的線性定址,它又包含64位元模式和相容模式。64位元模式指支援64位線性定址,支援超過64GB的物理地址,所有64位程式均運行在此模式下。相容模式:原有的32位程式運行於此模式下,從而可以使32位程式不用修改就直接運行於64位作業系統下。

分頁式儲存管理系統和分段式儲存管理系統的主要區別: (轉載網路)

一. 分頁儲存管理

1.基本思想

使用者程式的地址空間被劃分成若干固定大小的地區,稱為“頁”,相應地,記憶體空間分成若干個物理塊,頁和塊的大小相等。可將使用者程式的任一頁放在記憶體的任一塊中,實現了離散分配。

2. 分頁儲存管理的地址機構

15          12         11                  0

     頁號P                 頁內位移量W

頁號4位,每個作業最多2的4次方=16頁,表示頁號從0000~1111(24-1),頁內位移量的位元表示頁的大小,若頁內位移量12位,則2的12次方=4k,頁的大小為4k,頁內地址從000000000000~111111111111

若給定一個邏輯地址為A,頁面大小為L,則

頁號P=INT[A/L],頁內地址W=A  MOD  L

3. 頁表

分頁系統中,允許將進程的每一頁離散地儲存在記憶體的任一物理塊中,為了能在記憶體中找到每個頁面對應的物理塊,系統為每個進程建立一張頁面映射表,簡稱頁表。頁表的作用是實現從頁號到物理塊號的地址映射。

頁表:

頁號 物理塊號 存取控制   

  0        2    

  1       15(F)    

  2       14(E)    

  3       1  

4. 地址變換

(1) 程式執行時,從PCB中取出頁表始址和頁表長度(4),裝入頁表寄存器PTR。

(2)由分頁地址變換機構將邏輯地址自動分成頁號和頁內地址。

例:11406D=0010|110010001110B=2C8EH

      頁號為2,位移量為C8EH=3214D

或11406  DIV  4096=2

     11406  MOD  4096=3214

(3) 將頁號與頁表長度進行比較(2<4),若頁號大於或等於頁表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。

(4)將頁表始址與頁號和頁表項長度的乘積相加,便得到該頁表項在頁表中的位置。

(5)取出頁描述子得到該頁的物理塊號。  2       14(E)

(6) 對該頁的存取控制進行檢查。

(7)將物理塊號送入物理地址寄存器中,再將有效地址寄存器中的頁內地址直接送入物理地址寄存器的塊內地址欄位中,拼接得到實際的物理地址。

例:0010|110010001101B

1110|110010001101B=EC8EH=60558D

或 14*4096+3214=60558D

5. 具有快表的地址變換機構

分頁系統中,CPU每次要存取一個資料,都要兩次訪問記憶體(訪問頁表、訪問實際物理地址)。為提高地址變換速度,增設一個具有並行查詢能力的特殊高速緩衝儲存空間,稱為“聯想儲存空間”或“快表”,存放當前訪問的頁表項。

 

二.分段儲存管理

1.基本思想

將使用者程式地址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯資訊。儲存分配時,以段為單位,段與段在記憶體中可以不相鄰接,也實現了離散分配。

2. 分段儲存方式的引入

方便編程

分段共用

分段保護

動態連結

動態增長

3. 分段地址結構

作業的地址空間被劃分為若干個段,每個段定義了一組邏輯資訊。常式序段、資料區段等。每個段都從0開始編址,並採用一段連續的地址空間。

段的長度由相應的邏輯資訊組的長度決定,因而各段長度不等。整個作業的地址空間是二維的。

15           12   11                  0

       段號            段內位移量

段號4位,每個作業最多24=16段,表示段號從0000~1111(24-1);段內位移量12位,212=4k,表示每段的段內地址最大為4K(各段長度不同),從000000000000~111111111111

4. 段表

段號 段長 起始地址 存取控制   

0     1K     4096    

1     4K     17500    

2     2K     8192  

5. 地址變換

(1). 程式執行時,從PCB中取出段表始址和段表長度(3),裝入段表寄存器。

(2). 由分段地址變換機構將邏輯地址自動分成段號和段內地址。

例:7310D=0001|110010001110B=1C8EH

段號為1,位移量為C8EH=3214D

(3). 將段號與段表長度進行比較(1<3),若段號大於或等於段表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。

(4). 將段表始址與段號和段表項長度的乘積相加,便得到該段表項在段表中的位置。

(5). 取出段描述子得到該段的起始物理地址。1         4K             17500

(6). 檢查段內位移量是否超出該段的段長(3214<4K),若超過,產生越界中斷。

(7). 對該段的存取控制進行檢查。

(8). 將該段基址和段內地址相加,得到實際的物理地址。

例:0001|110010001101B

起始地址17500D+段內地址3214D=20714D

三.分頁與分段的主要區別

分頁和分段有許多相似之處,比如兩者都不要求作業連續存放.但在概念上兩者完全不同,主要表現在以下幾個方面:

(1)頁是資訊的物理單位,分頁是為了實現非連續分配,以便解決記憶體片段問題,或者說分頁是由於系統管理的需要.段是資訊的邏輯單位,它含有一組意義相對完整的資訊,分段的目的是為了更好地實現共用,滿足使用者的需要.

(2)頁的大小固定,由系統確定,將邏輯地址劃分為頁號和頁內地址是由機器硬體實現的.而段的長度卻不固定,決定於使用者所編寫的程式,通常由編譯器在對來源程式進行編譯時間根據資訊的性質來劃分.

(3)分頁的作業地址空間是一維的.分段的地址空間是二維的.

四.段頁式儲存管理

1.基本思想:

分頁系統能有效地提高記憶體的利用率,而分段系統能反映程式的邏輯結構,便於段的共用與保護,將分頁與分段兩種儲存方式結合起來,就形成了段頁式儲存管理方式。

在段頁式儲存管理系統中,作業的地址空間首先被分成若干個邏輯分段,每段都有自己的段號,然後再將每段分成若干個大小相等的頁。對於主存空間也分成大小相等的頁,主存的分配以頁為單位。

段頁式系統中,作業的地址結構包含三部分的內容:段號      頁號       頁內位移量

程式員按照分段系統的地址結構將地址分為段號與段內位移量,地址變換機構將段內位移量分解為頁號和頁內位移量。

為實現段頁式儲存管理,系統應為每個進程設定一個段表,包括每段的段號,該段的頁表始址和頁表長度。每個段有自己的頁表,記錄段中的每一頁的頁號和存放在主存中的物理塊號。

2.地址變換的過程:

(1)程式執行時,從PCB中取出段表始址和段表長度,裝入段表寄存器。

(2)由地址變換機構將邏輯地址自動分成段號、頁號和頁內地址。

(3)將段號與段表長度進行比較,若段號大於或等於段表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。

(4)將段表始址與段號和段表項長度的乘積相加,便得到該段表項在段表中的位置。

(5)取出段描述子得到該段的頁表始址和頁表長度。

(6)將頁號與頁表長度進行比較,若頁號大於或等於頁表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。

(7)將頁表始址與頁號和頁表項長度的乘積相加,便得到該頁表項在頁表中的位置。

(8)取出頁描述子得到該頁的物理塊號。

(9)對該頁的存取控制進行檢查。

(10)將物理塊號送入物理地址寄存器中,再將有效地址寄存器中的頁內地址直接送入物理地址寄存器的塊內地址欄位中,拼接得到實際的物理地址。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.