Intel體系結構

2021-08-19 20:21:21 字數 4474 閱讀 8144

計算機兩大體系統結構:馮諾依曼結構和哈佛結構

作業系統作用:1,對使用者提供介面(api介面和終端介面(shell或gui));2,管理計算器各種資源(程序管理,記憶體管理,檔案管理,io裝置管理等)

intel的體系結構:

特權級:目標是實現保護,有0-3四個特權級

規範:低特權級任務不能呼叫高特權程式,也不能訪問高特權級資料

與特權級相關的概念:dpl,cpl,rpl,epl,iopl

dpl是段描述符的域,值是0-3,表示為訪問該段所需的cpl最小優先順序,例如乙個段的dpl是0,那麼只有cpl是0的時才能訪問。

rpl是段選擇子的域(requested privilege level): 請求特權級

,值是0-3,表示cpu的當前特權級。

段描述符:

根據段描述符中的系統標誌(s)位可將段分為系統段和使用者段

系統段根據段描述符的型別標識位分為:ldt,tss,呼叫門,中斷門,陷阱門,任務門

使用者段同樣可分為:**段,資料段,堆疊段

每個段都有對應的段描述符,為了方便段描述符的管理和查詢,intel體系結構要求將這些描述符組織到一起形成描述符表,乙個描述符表最多有8192表記錄,每個描述符8字元,所以最大是64k,intel體系結構將描述符表分為全域性描述符表(gdt)和ldt

gdt: 有且只能有乙個,它不是乙個段,故不需要對應的描述符,它是通過gdtr暫存器存放gdt的基位址來訪問全域性描述表中相應的描述符。

gdt可以存放的描述符有:**段,資料段,tss,ldt,呼叫門,任務門。中斷門和陷阱門不能出現在gdt

ldt: 它是乙個段,它相應的描述符存放在gdt中。ldtr暫存器存放當前任務的ldt表的基址。

段選擇子:

是用來選擇描述符表的索引,它存放在段暫存器中(cs,ds,ss等)。邏輯位址=段選擇子+偏移量,線性位址=段基址+偏移量

段基址是乙個描述符的一部分,而描述符可以通過段選擇子來索引到。

任務狀態段:

任務由執行空間和狀態段兩部分構成。任務執行空間由**段,資料段,堆疊段組成,它們的描述符在gdt或ldt。任務狀態段是描述任務的狀態,裡面存放當前任務的所有暫存器的值,唯一的ldt的描述符及ldt描述符的段選擇子等,這個ldt存放當前任務的**段描述符,資料段描述符,堆疊段描述符。

tss的描述符選擇子有專用的暫存器tr.

任務切換時,先裝入任務選擇子到tr,再將tss中的暫存器資訊裝入各暫存器,開始執行新任務。

中斷分為外中斷和內中斷,由cpu內部產生的中斷為內中斷,由cpu外部產生的中斷為外中斷,

內中斷可分為異常和軟中斷,其中像除數為0,單步中斷,int0指令為異常 ;int指令 為軟中斷

外中斷分為可遮蔽中斷和不可遮蔽中斷。 

當中斷發生時,cpu會收到乙個中斷型別碼(0-255),接下來的中斷過程全由cpu硬體自動完成:儲存當前cs,ip暫存器的值,儲存狀態暫存器的值,通過中斷型別碼到中斷向量表得到中斷向量(中斷處理程式入口位址),將cs,ip設定為中斷處理程式入口位址。自定義中斷處理程式的最後一行指令必須 是iret, 它會從棧上取出中斷前儲存的cs,ip值重新設定到cs,ip的暫存器中。

單步中斷:型別碼為1,處理過程是:當呼叫int 1時,會將狀態暫存器的tf位設定為1,然後轉去執行中斷處理程式,處理程式會將所有暫存器內容顯示出來,然後再等待輸入命令。 note:所以每次中斷來時,cpu都會將tf,if位置0,因為tf為1時,有會產生單步中斷進而引發死循壞。

cpu只能從三個地方讀寫資料:暫存器,記憶體,埠。

記憶體和埠的讀寫一致機制一樣,往位址匯流排傳送位址,再往控制匯流排傳送是要讀還是寫的控制指令,最後從資料匯流排上往目標位址進行讀或寫。埠的讀資料時,先傳送讀指令,如果外設將資料準備好放在資料埠,會傳送外中斷通知cpu來讀埠資料。

磁碟io有兩種方式讀:一種是直接使用in,out指令,out設定要讀的扇區號,然後使用in迴圈檢測狀態埠的資料有沒有準備後,然後再用in指令讀取資料埠。另一種方式是使用bios提供的int 13中斷子程式

中斷和異常:

中斷分為硬中斷和軟中斷,硬中斷來自外圍裝置,軟中斷通過int n指令產生;異常來自處理器執行指令時檢測到錯誤丟擲異常。

當發生中斷或異常,它們都會轉到中斷或異常的處理程式去執行。

處理器給每個中斷和異常乙個標識號(中斷向量),其中0-31的中斷向量固定給了異常和不可遮蔽中斷(nmi)。

idt是中斷描述符表,它一共有256個,描述每個中斷向量的中斷處理程式段的相關資訊,idt不是乙個段,所以沒有idt的描述符,它的基位址存放在idtr中,它也沒有段選擇子,它是通過中斷向量號來索引到相應的idt項。

idt中只能存放中斷門,陷阱門,任務門三種門描述符。

門描述符:

門描述符共有四種:呼叫門,任務門,中斷門,陷阱門。它的作用:設計出段是為了很好的封裝保護,門就是通過封裝的一道門戶。作業系統將自己想公開的程式建成門,應用程式可以通過門來呼叫作業系統的過程。

門描述符描述的是段選擇子和目標**的偏移量及許可權控制,這個段選擇子是想要呼叫的目標**程式的gdt或ldt的索引。

呼叫門是進入**段中某些特殊過程的門戶。通過call/jmp指令呼叫相應的呼叫門選擇子觸發。

中斷門和陷阱門是進入中斷或異常處理程式的入口。

任務門是進入任務的一道門戶。它的描述符主要描述了相應tss的選擇子。通過call/jmp指令呼叫相應的任務門選擇子觸發。

分頁:段可以再進一步劃分為頁,頁的大小是固定的。intel體系結構按頁目錄和頁表兩級結構組織乙個任務的頁。

一頁的大小是4k, 乙個頁目錄項為4位元組,乙個頁目錄是1024個,頁表項同理也是1024個,所以乙個任務的線性址空間是1024 * 

1024 * 4k 即4g.

線性位址=頁目錄索引(10bit)+頁表索引(10bit)+偏移量(12bit)

頁目錄的物理基址存放在cr3中,cr3存放在tss中的某個域中。 頁目錄項存放對應頁表基址的實體地址,頁表項存放對應頁框基址的實體地址。

頁目錄索引找到頁目錄項,通過專案錄項找到項表基址,再通過線性位址的頁表索引找到項表項,通過項表項中的位址找到相應的頁,再通過線性位址中的偏移量索引到該頁的內容即為線性位址對應的實體地址。

暫存器:

通用暫存器:eax,ebx,ecx,edx,esi,edi,esp,ebp

標誌暫存器:eflags

段暫存器:cs,ds,ss,es,fs,gs

管理暫存器:gdtr,idtr 主要存放描述符表的32位線性基位址。

ldtr,tr 主要存放選擇子。

控制暫存器:cr0~cr4, 其中cr3,也叫頁目錄基址暫存器(pdbr),主要存放頁目錄的物理基位址。

指令暫存器:eip

tss是乙個段,用來描述乙個任務,乙個任務包括(**段,資料段,堆疊段)和各暫存器,tss即然為乙個段,也就需要相應的tss段描述符,它是系統段,所以放在gdt中,相應的需要段選擇子tr.

idt(256個)和gdt(1024個)它們的描述符數量都是固定的,所以它們都不是段,它們的基位址分別存在idtr和gdtr中,ldt的描述符數量是動態的,所以是乙個段,它的描述符在gdt中。

tr,ldtr存放選擇子,gdtr,idtr存放基位址。

門描述符是用來描述中斷或異常的過程或任務

cr3的某個域用來儲存頁目錄的物理基位址。

elf編譯規範,要求使用者程式的虛擬起始位址是0x8000000,

linux下gdt從第2個索引開始定義了四個描述符,ks_code,ks_data,us_code,us_data,因為在linux沒有使用intel的段管理機制,但為了支援或者繞過intel的段式管理機制,把所有的描述符的段基址都設定為0,

不同的使用者程式它的選擇子都指向us_code描述符,該描述符有意義的只有型別和訪問許可權資訊,但訪問許可權的檢查在頁式管理也會進行,所以段式管理的許可權檢查也可以不要,這樣的話邏輯位址轉線性位址後沒有任何變化。

每次有程序切換時都會改變cr3,裡面存有頁目錄物理基址,cr3會被mmu使用,它會直接訪問記憶體的實體地址

linux不使用ldt

gdtr存放虛擬位址

對於一致**段:也就是共享的段.

1.特權級高的程式不允許訪問特權級低的資料:核心態不允許呼叫使用者態的資料.

2.特權級低的程式可以訪問到特權級高的資料.但是特權級不會改變:使用者態還是使用者態.

對於普通**段.也就是非一致**段:

0.只允許同級間訪問.

1.絕對禁止不同級訪問:核心態不用使用者態.使用者態也不使用核心態.

但將bios這段程式放在1m記憶體的頂部,如果這段程式大小為1k,那麼應當從0xffc00開始放。如果這段程式的大小為2k,那 麼應當從0xff800開始放,對於cpu而言,到底是應當從0xffc00開始執行還是應當從0xff800開始執行呢?為了解決這個問題,8086規 定,cpu均從0xffff0處開始執行,而在0xffff0處,放一條無條件轉移指令jmp。如果a廠的bios是從0xffc00開始放的,那麼這條 轉移指令就跳轉到0xffc00處開始執行。如果b廠的bios是從0xff800開始放的,那麼這條轉移指令就跳轉到0xff800處開始執行,各個廠 家可以跟據自己所生產的bios程式的大小,來決定此轉移指令具體跳轉到的位置。

mysql 體系結構 了解MySQL體系結構

mysql 資料庫體系結構圖 mysql 由以下幾部分組成 1 connectors 不同語言中與 sql 的互動 show variables like connection variable name value character set connection utf8 collation c...

簡述mysql體系結構 MySQL體系結構

一 mysql登入方式 一 tcp ip方式 遠端 本地 mysql uroot poldboy123 h 10.0.0.51 p3306 二 socket方式 mysql uroot poldboy123 s tmp mysql.sock 二 例項介紹 例項 mysqld後台守護程序 主線程 ma...

軟體體系結構 軟體體系結構概論

開學到現在我已經上了三節軟體體系結構的課程,現在我想把自己學到的整理歸納一下。此篇隨筆對應於教材軟體體系結構概論一章。首先談一談我剛接觸這門課程是的感受。那就是 我靠 軟體也會有體系結構?以前只學過資料結構 演算法 基本的程式語言,覺得程式設計無非就是使用者給我需求,我便按照需求來程式設計序就好,從...