80x86儲存器組織結構

2021-05-26 17:01:38 字數 3598 閱讀 2093

概括:

本文介紹80x86儲存器組成的基本原理,會隱藏一些硬體細節。

一、基本組成

1.1、計算機系統由cpu,memory,i/o組成,如下圖,時鐘驅動cpu處理(讀、寫、運算)memory裡的程式或者資料,以及控制i/o。

1.2、當然現的計算機系統不會如此簡單,因為memory有很多種,i/o裝置的種類更是繁多,由於cpu,memory,i/o的時鐘頻率不匹配,以及memory的成本等因素,現代計算機系統的基本組成如下(以pentium為例):

二、儲存器的層次結構

比較圖2和圖1,主要的區別在於系統對於儲存器的組織,首先對於各種儲存器進行說明。

1、暫存器

1個32bit的暫存器需要32個鎖存器或者觸發器構成,

訪問速度和cpu的時鐘頻率相匹配

。2、sram (static ram)

乙個儲存位需要

六個電晶體

,可以穩定在兩種狀態,所以不需要對sram進行重新整理,所以叫靜態ram,由於是電晶體的結構而且

不需要重新整理

,所以其

訪問速度極快

,幾乎可以和cpu的時鐘頻率相匹配。

3、dram(dynamic ram)

1個儲存位由

乙個電容和乙個訪問晶體

管組成,因為電容的不穩定性,需要定期對其進行重新整理(可以理解為衝電),由於是

電容的結構而且需要重新整理

,所以其訪問速度稍慢

,一次訪問需要幾十至幾百到cpu週期。

4、硬碟

由磁介質

組成,容量巨大

,但是訪問速度比較慢

。5、磁帶等更慢的儲存裝置

容量更巨大,訪問速度巨慢。

典型的sram,dram,磁碟的造價以及訪問時間如下(僅供參考)

sram

dram         磁碟

造價           100$/mb     1$/mb        0.01$/mb

訪問時間     3ns             60ns          8000ns

以上可以看出訪問速度越快的儲存器或者造價很高或者占用空間較大,所以我們需要通過特定的儲存器組織方式來實現時間(訪問速度)和空間(儲存器大小)的平衡,這個特定的組織方式就是層次結構,見下圖。

三、程式的區域性性與快取機制

現在說明計算機系統如何利用圖3的的層次結構實現時間和空間的平衡的。

3.1、

程式的區域性性體現為時間區域性性和空間區域性性。

3.2、

快取機制

快取機制就是利用程式的區域性性特徵實現儲存器訪問的時空平衡,通俗的說就是既要大儲存空間,又要快速訪問。

那麼如何對大容量的儲存器進行快速訪問呢?答案只可能是把底層的大容量儲存器的最近很有可能被頻繁訪問的記憶體(程式的區域性性)

快取到它的上一級的具有較高訪問速度的儲存器當中去。

四、不同的快取機制詳述

不同層次儲存器之間的快取機制是不同的,有的是由硬體完成,有的是由軟體完成,有的是有軟硬體共同完成,所以說硬體的發展和軟體的發展是相輔相成的,即將出現的虛擬記憶體的概念就有力的說明了這一點。下面以例項說明pentium的快取機制。

4.1、主存與l2快取記憶體(以下簡稱l2)快取機制

▲為了便於描述假設位址空間為4g(32根位址線),主存大小為16mb。

▲pentium的l2大小為512kb

主存的大小是l2大小的32倍,也就是說在某一時刻,主存最多有1/32被快取到l2中,因為l2和主存在儲存器結構中是訪問速度較快的,為了提公升效率,系統採用硬體快取的機制,就是由硬體來決定主存的某個特定的記憶體單元快取到l2的什麼位置。

4.1.1、l2的組織見下圖

由上圖可知,l2除了512kb的快取空間外,還另外附加了32kb的有效位和標誌位,這個位的作用是輔助實現快取機制。

4.1.2、快取規則

當定址16mb的位址空間(l2本身支援的最大位址空間為4g)被分解成了524288個(512k,2的15次方)block,每個block32位元組,我們利用如下規則把這512k個block和l2的16k個block進行對映,見下圖。

如上圖所示,當定址乙個32bit的位址時,組索引決定此位址所在的block會被快取到l2的哪一組,標記位決定此位址所在的block會被對映到哪一行(取餘規則),最低的5位決定位址在l2某一行的block內的偏移。

4.1.3、快取步驟

當訪問主存的乙個位址時,首先會按照位址的組索引找到l2中相應的組(組匹配),然後在組中根據標記位查詢到相應的行(行匹配),然後根據偏移找到對應的位址。如果上述步驟出現未找到匹配的情況,就是未命中,則從主存中讀取相應位址所在的block到l2中,並按照此規則快取到l2當中。

4.1.4、關於組索引的補充

把組索引放到位址的中間也是由於程式的區域性性,組索引放到中間可以把較大的連續的位址空間對映到l2的不同block內,這樣不至於導致快取的未命中很高。

4.2、l2與l1之間的快取

由於l1具有更高的訪問速度,為了更好的匹配cpu讀取,把l1快取分為l1-i chache(指令快取記憶體)和l1-d chache(資料快取記憶體),l1-i chache和l1-d chache的結構相同,都是16kb,128組,每組4行,每行32位元組。

快取規則也主存與l2的快取規則相同。

結構如下圖所示:

4.3、硬碟與記憶體之間的快取(虛擬記憶體來了)

現在的作業系統提供多程序,多執行緒支援,對於32位的cpu來說,每乙個程序都4gb的虛擬空間,各程序之間的虛擬空間互不影響,cpu為此機制提供了硬體支援,cpu和作業系統密切合作實現了硬碟到記憶體的快取機制。

4.3.1、虛擬位址的概念

4.3.2、虛擬位址的主要作用

●使各程序的位址空間隔離,互不影響。

●為作業系統和使用者程式分配不同的虛擬位址空間,並設定相應的訪問許可權也就是所謂的保護模式。

●實現記憶體對映等其他功能。

4.3.3、快取規則

和上述的快取記憶體規則類似,也需要把虛擬位址空間分成block,把記憶體也分成block,然後按照一定的規則進行塊對映,程式的虛擬位址空間是儲存在硬碟上的,所以虛擬位址和主存的快取也就是硬碟和主存的快取。

作業系統採用段表和頁表來實現虛擬記憶體對物理記憶體的對映。

段表結構如下圖:

虛擬定址規則如下圖:

4.3.4、快取步驟

因為頁表和頁面的物理機制都是4kb對齊的,所以低12bit就可以設定一些段或者頁面的屬性。

段表當中的每一項指向乙個頁表,頁表中的每一項指向乙個4kb的物理記憶體區域。

當定址乙個虛擬位址時,mmu根據虛擬位址的高10位段表中的頁表起始位址,然後根據接下來的10位確定頁表中的那一項,讀出頁面實體地址的高20位,和虛擬位址的低12位結合獲得虛擬位址對應的實體地址,之所以使用二級頁表提高了查詢效率,80386以上的提供了硬體級的支援。

4.3.5、tlb

通過以上可知,查詢虛擬對應的實體地址需要查表,而查表是比較費時的操作,如果把每次查表的結果快取到乙個快取記憶體中,tlb出現了,tlb也分為指令tlb和資料tlb,讓mmu首先會查詢tlb,能大大提高系統效率。

指令tlb(32個字,8組,4行)結構圖如下:

資料tlb類似,64個字,16組,4行,圖略。

4.4、l1與暫存器之間的快取機制由編譯器決定。

總結:至此,計算機系統儲存器層次訪問的任督二脈已經打通,程式的區域性性和儲存的快取機制是核心內容。

80X86計算機組織

2 實體地址 16 段位址 偏移位址 3 處理器 cpu組成 算術邏輯部件alu 控制器 暫存器 8086 8088暫存器組 資料暫存器 ax,bx,cx,dx 指標及變址暫存器 sp,bp,si,di 段暫存器 cs,ds,ss,es 控制暫存器 ip,flags 標誌暫存器 flags,又稱程式...

80X86學習筆記 源程式組織

cpu在順序執行程式片時,按照指令先後次序執行指令,因此在順序程式中,指令先後次序至關重要。例 將一位元組壓縮bcd轉換為兩個ascii碼 data segment bc buf db 96h asc buf db 2 dup data ends code segement assume cs co...

80X86定址方式

1 與定址相關的暫存器 8086 暫存器 段暫存器cs ds es ss 基址暫存器bx bp 變址暫存器di si 專用暫存器ip sp 具體每個暫存器的作用就不仔細介紹了。80386 及其以上的暫存器 段暫存器cs ds es ss fs,gs 基址暫存器eax ebx ecx edx ebp ...