《80X86微機(jī)原理與接口技術(shù)》課件第3章_第1頁
《80X86微機(jī)原理與接口技術(shù)》課件第3章_第2頁
《80X86微機(jī)原理與接口技術(shù)》課件第3章_第3頁
《80X86微機(jī)原理與接口技術(shù)》課件第3章_第4頁
《80X86微機(jī)原理與接口技術(shù)》課件第3章_第5頁
已閱讀5頁,還剩297頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第3章80386/80486微機(jī)系統(tǒng)

3.1當(dāng)代微機(jī)系統(tǒng)新技術(shù)3.280386/80486CPU3.380386/80486存儲(chǔ)器的結(jié)構(gòu)3.480386/80486CPU對存儲(chǔ)器的管理3.5特權(quán)保護(hù)和任務(wù)切換3.680386/80486微機(jī)系統(tǒng)3.7Pentium系列微處理器及微機(jī)系統(tǒng)3.8小結(jié)3.1當(dāng)代微機(jī)系統(tǒng)新技術(shù)3.1.1流水線作業(yè)技術(shù)

1.80386/80486中的指令流水線和地址流水線圖3-18位微處理器和8086/8088執(zhí)行指令次序(a)8位微處理器串行次序;(b)8086/8088并行次序

要想使流水線作業(yè)成為現(xiàn)實(shí),有一個(gè)十分重要的工作要做,那就是搞清一條指令究竟包括多少微操作。最簡單的微處理器執(zhí)行一條指令的全過程需要做的基本動(dòng)作通常有:(1)在指令的指揮下,把存儲(chǔ)單元的地址送入地址總線;(2)從存儲(chǔ)器中取出指令操作碼,把指令代碼放入數(shù)據(jù)總線;(3)從數(shù)據(jù)總線上讀取指令代碼并對指令譯碼;(4)按照譯碼的結(jié)果把操作數(shù)的地址送入地址總線;(5)從存儲(chǔ)器中取出操作數(shù);(6)執(zhí)行指令操作碼規(guī)定的操作;(7)把操作結(jié)果送至指令指出的目的操作數(shù);(8)送出與運(yùn)算結(jié)果有關(guān)的標(biāo)志信號(hào)、控制信號(hào);

(9)在執(zhí)行下一條指令前,檢查有無中斷申請信號(hào)等,并做出相應(yīng)反應(yīng)。80386微處理器使用了由3個(gè)邏輯部件(總線接口部件、代碼預(yù)取部件、指令譯碼部件)組成的指令流水線,使得在1個(gè)時(shí)鐘周期同時(shí)有3條指令的微操作在處理,每條指令執(zhí)行時(shí)間雖然不同,但平均3個(gè)時(shí)鐘周期就可以執(zhí)行1條指令。80486微處理器有更多獨(dú)立工作的功能邏輯部件,在1個(gè)時(shí)鐘周期內(nèi)可同時(shí)執(zhí)行5條指令的微操作,這樣一來,平均1個(gè)時(shí)鐘周期就可以執(zhí)行1條指令。80386/80486指令流水線如圖3-2所示。圖3-280386/80486指令流水線(a)80386;(b)80486

地址流水線技術(shù)用于解決地址信號(hào)的產(chǎn)生、發(fā)送以及對存儲(chǔ)器的管理。在80386/80486微處理器內(nèi),首先要計(jì)算出有效地址,隨后通過分段部件再定位形成線性地址,最后經(jīng)過分頁部件形成存儲(chǔ)器的物理地址,這一過程稱為該芯片的地址流水線作業(yè),如圖3-3所示。從邏輯地址向物理地址的轉(zhuǎn)換,通常只在芯片內(nèi)完成,和指令流水線作業(yè)同時(shí)進(jìn)行且需時(shí)相同。80486內(nèi)還集成有1個(gè)8KB的高速緩沖存儲(chǔ)器Cache,使得地址流水線轉(zhuǎn)換的速度更快。因此,在確定微處理器運(yùn)行速度時(shí),只要考慮相對較慢的指令流水線作業(yè)需時(shí)就夠了。指令流水線和地址流水線分別是針對指令信息流和地址信息流而提出的。從計(jì)算單位時(shí)間內(nèi)能執(zhí)行多少條指令的角度出發(fā),80386/80486微處理器只有一條流水作業(yè)線。圖3-380386/80486地址流水線

2.Pentium系列微處理器流水線作業(yè)

1)整數(shù)運(yùn)算流水線作業(yè)

Pentium系列微處理器將80386/80486的設(shè)計(jì)思想往前推進(jìn)了一大步,從兩個(gè)方面做出了重大的改進(jìn)。第一個(gè)改進(jìn)是將80386/80486內(nèi)的一條流水線擴(kuò)展成能夠并列運(yùn)行的兩條指令流水線,分別命名為“U流水線”和“V流水線”。兩條流水線的共同點(diǎn)是都能執(zhí)行整數(shù)運(yùn)算指令;不同點(diǎn)是U流水線能夠執(zhí)行浮點(diǎn)運(yùn)算指令,V流水線中僅能執(zhí)行1條異常FXCH浮點(diǎn)指令。因此,Pentium微處理器在1個(gè)時(shí)鐘周期內(nèi)可以執(zhí)行2條整數(shù)運(yùn)算指令;或者執(zhí)行兩條浮點(diǎn)運(yùn)算指令,但其中必有一條是異常FXCH浮點(diǎn)指令;或者只能執(zhí)行1條浮點(diǎn)指令。第二個(gè)改進(jìn)是指令執(zhí)行過程更加細(xì)化,根據(jù)處理對象的不同,把先后順序執(zhí)行的動(dòng)作階段劃分成5~8個(gè)。比如整數(shù)運(yùn)算流水作業(yè)就被劃分為5個(gè)動(dòng)作階段,俗稱流水線深度為5級,由相應(yīng)的5個(gè)彼此獨(dú)立運(yùn)行的邏輯功能部件承擔(dān)。表3-1Pentium微處理器3種流水線分級對比圖3-4Pentium整數(shù)運(yùn)算流水作業(yè)線2)浮點(diǎn)運(yùn)算流水線作業(yè)和整數(shù)運(yùn)算流水線作業(yè)比較,浮點(diǎn)運(yùn)算流水線必然要多出對齊階碼、分開階碼和尾數(shù)的運(yùn)算、檢查最后結(jié)果等基本動(dòng)作。因此它被劃分成8個(gè)動(dòng)作階段,相應(yīng)彼此獨(dú)立運(yùn)行的邏輯功能部件也有8個(gè)。整數(shù)流水線作業(yè)和浮點(diǎn)流水線作業(yè)共用了微處理器的部分功能邏輯部件,結(jié)構(gòu)示意圖如圖3-5所示。圖3-5整數(shù)流水線和浮點(diǎn)流水線結(jié)構(gòu)3)MMX流水線作業(yè)部分Pentium微處理器芯片采用了MMX技術(shù),這是一種使用單指令多數(shù)據(jù)(SingleInstructionMulti-Data)執(zhí)行方式在整型數(shù)據(jù)上執(zhí)行的并行運(yùn)算技術(shù),這些數(shù)據(jù)包裝在64位MMX寄存器中。于是,MMX執(zhí)行過程也有自己的流水線作業(yè),并且被劃分成9個(gè)級別,比浮點(diǎn)處理流水線還要多一個(gè)。MMX技術(shù)在Pentium中引進(jìn)了8個(gè)64位的MMX寄存器和57條MMX指令,這些指令分為3級,包括以下功能:

加、減、乘算術(shù)移位和累加等基本算術(shù)運(yùn)算;比較運(yùn)算;轉(zhuǎn)換數(shù)據(jù)類型,可將小的數(shù)據(jù)類型拆成大的數(shù)據(jù)類型,或者將數(shù)據(jù)壓縮;與、或、與非、異或等邏輯運(yùn)算;算術(shù)和邏輯移位;使用MOV指令實(shí)現(xiàn)MMX寄存器之間、寄存器與存儲(chǔ)器之間的32/64位數(shù)據(jù)傳送。如此眾多的功能,在流水線上使用一級明顯不夠,與整數(shù)處理流水線相比,MMX流水線在預(yù)取指令部件IP之后,緊跟的是指令譯碼部件ID,確定指令長度和指令前綴,之后才選擇用U流水線還是用V流水線。MMX流水線結(jié)構(gòu)如圖3-6所示。圖3-6MMX流水線結(jié)構(gòu)

同一種型號(hào)的微處理器,由于操作不同,必然存在不同類型的流水線作業(yè),比如80386/80486的指令流水線和地址流水線就是其中的兩種;而不同型號(hào)的微處理器,因?yàn)榇嬖诠δ懿町惡徒Y(jié)構(gòu)區(qū)別,雖然有相同類型的流水線作業(yè),卻有不同的深度,并且有若干相同的流水線級,另有若干不同的流水線級。流水線深度在5級或5級以上的微處理器結(jié)構(gòu),稱為超流水線(Superpipline)結(jié)構(gòu)。微處理器內(nèi)擁有兩條或者兩條以上流水線的設(shè)計(jì)技術(shù),稱為超標(biāo)量(Superscalar)設(shè)計(jì)技術(shù)。這種結(jié)構(gòu)和這種技術(shù)被Pentium系列微處理器廣為采用。顯然,流水線深度越深,超標(biāo)量越多,微處理器的工作速度越快。PentiumⅡ微處理器內(nèi)設(shè)置了12級深度和3條超標(biāo)量流水線,使得在平均1個(gè)時(shí)鐘周期內(nèi)能夠執(zhí)行3條指令。圖3-78個(gè)時(shí)鐘周期內(nèi)執(zhí)行8條指令的示意圖3.1.2預(yù)測執(zhí)行、亂序執(zhí)行技術(shù)和精簡指令集計(jì)算技術(shù)圖3-8由轉(zhuǎn)移指令引起的流水線失誤

預(yù)測執(zhí)行技術(shù)分為取指階段預(yù)測和譯碼階段預(yù)測兩種。在取指階段的預(yù)測存在著成功和失敗兩種可能,無論成功與否,都可以設(shè)置一個(gè)目標(biāo)緩沖器TB(TargetBuffer)記錄預(yù)測的結(jié)果。顯然,如果在取指階段判斷出程序走向,就能夠及早發(fā)現(xiàn)并及時(shí)清除流水線上的無用信息,就越能發(fā)揮流水線作業(yè)的優(yōu)點(diǎn)。譯碼階段同樣也可能成功或失敗,預(yù)測一旦失敗,必然需要更多的時(shí)鐘周期恢復(fù)流水線的正常作業(yè)。為了充分發(fā)揮流水線作業(yè)的長處,Pentium系列微處理器還開發(fā)了亂序執(zhí)行技術(shù)。它的實(shí)質(zhì)是按數(shù)據(jù)流方式驅(qū)動(dòng),不同于傳統(tǒng)的按指令流方式驅(qū)動(dòng)。它的特征是允許指令突破程序中的指令順序,把需要執(zhí)行的指令送給執(zhí)行單元。要想做到這一點(diǎn),微處理器必須突破傳統(tǒng)結(jié)構(gòu),增添一些硬件電路支持上述功能。

精簡指令集計(jì)算(ReducedInstructionSetComputing)技術(shù)簡稱RISC技術(shù),其核心是減少CPU芯片中指令的條數(shù),讓1條指令具備多條指令的功能,驅(qū)動(dòng)更多的邏輯電路。1條指令的幾個(gè)微操作既然能夠并行處理,那么,能夠合成1條指令的多條指令也一樣能并行執(zhí)行。與傳統(tǒng)的復(fù)雜指令集計(jì)算(ComplexedInstructionSetComputing,簡稱CISC)CPU相比,RISC需要依靠更多的組合邏輯電路、內(nèi)部通用寄存器、高性能浮點(diǎn)運(yùn)算單元作硬件支撐,也需要依靠流水線、預(yù)測和亂序作軟件支撐。3.1.3主存和高速緩沖存儲(chǔ)技術(shù)

1.什么是高速緩沖存儲(chǔ)技術(shù)不論哪一種微機(jī),存儲(chǔ)器中的指令代碼和數(shù)據(jù)代碼的存取速度,都不會(huì)隨著微處理器的升級換代發(fā)生明顯變化。這是因?yàn)?,存?chǔ)內(nèi)容的讀/寫過程是一個(gè)必須先尋找存儲(chǔ)單元的地址,再從位于這個(gè)地址的單元中讀/寫其內(nèi)容的串行運(yùn)行過程。另一方面,隨著計(jì)算機(jī)的廣泛運(yùn)用,要求存儲(chǔ)容量越來越大,想提高存儲(chǔ)器工作速度就更加困難。僅以容量為128MB的內(nèi)存條為例,它就有134217728個(gè)存儲(chǔ)單元,如果微處理器進(jìn)行關(guān)鍵字搜索操作,每處理一個(gè)關(guān)鍵字要把1.3億多個(gè)存儲(chǔ)單元訪問一遍,運(yùn)行速度之慢可想而知。存儲(chǔ)器工作速度慢的兩個(gè)原因是:存儲(chǔ)器地址和內(nèi)容的不一致性;存儲(chǔ)容量大。

由于這兩個(gè)因素的存在,使得當(dāng)代微機(jī)中主存儲(chǔ)器的工作速度已經(jīng)比微處理器的工作速度低了一個(gè)數(shù)量級,并且速度之差有增大的趨勢。由此也引出了提高存儲(chǔ)器工作速度的方法。改變第一個(gè)因素是不可能的,除非放棄存儲(chǔ)器的設(shè)計(jì)原理,放棄馮·諾依曼型計(jì)算機(jī),事實(shí)上現(xiàn)在正在研制的神經(jīng)計(jì)算機(jī)已經(jīng)充分考慮了這一因素。改變第二個(gè)因素是可行的,那就是在內(nèi)部存儲(chǔ)器和微處理器之間增加一個(gè)小容量(例如8KB)的存儲(chǔ)器,這個(gè)小容量的存儲(chǔ)器使用同步突發(fā)靜態(tài)隨機(jī)存儲(chǔ)器SBSRAM組成。它被稱為高速緩沖存儲(chǔ)器Cache。

在現(xiàn)實(shí)生活中不乏這樣的例子。例如我們所知道的漢字,少說也有4萬多個(gè),為了使用方便,人們將它們匯集在《漢語大字典》、《康熙字典》(共收錄47035個(gè)漢字,分為214個(gè)部首,12集,每集再分上、中、下三卷)等工具書內(nèi),這些工具書無疑就是存儲(chǔ)器。學(xué)習(xí)中遇到一個(gè)生字時(shí),就去訪問它們,從字典中查出該字的讀音、筆劃、含義等相關(guān)的信息。但是從這4萬多字的字典中查找1個(gè)字的速度太慢,因?yàn)槠渲杏?萬多個(gè)字不常用,絕大多數(shù)人一輩子也不會(huì)遇到它們。所以提高查閱速度的最好方法是將其中可能用到的1.1萬個(gè)漢字匯集編成一本《新華字典》,訪問速度大為提高。對于一些特殊人群來講,還可以將其中的兩級漢字6763個(gè)(一級漢字3755個(gè),二級漢字3008個(gè))編在一起供小學(xué)生或掃盲班使用。更有甚者,將漢字中三、五十個(gè)字配上圖畫做成識(shí)字卡片供幼兒習(xí)字用。

高速緩沖存儲(chǔ)器Cache的功能就相當(dāng)于《新華字典》或《小學(xué)生字典》,它的位置就位于微處理器和內(nèi)存條之間。它的容量比內(nèi)存條小得多,僅8KB(8196個(gè)存儲(chǔ)單元)~64KB。它存放的內(nèi)容是微處理器用得最多的、急需執(zhí)行的指令和數(shù)據(jù)。增添Cache能提高存取速度是顯而易見的,微處理器搜索8196個(gè)單元比搜索1.3億多個(gè)單元不知要快多少倍。

Cache的個(gè)數(shù)可以是一個(gè),叫1級Cache(簡記為L1);也可以是兩個(gè):第1級Cache和第2級Cache(簡記為L1和L2)。如果微機(jī)內(nèi)有2級Cache,第1級Cache的容量小,存取速度快,所處的位置甚至于就可以集成到微處理芯片內(nèi),存取速度與微處理器同速;第2級Cache的容量比L1大一些,相應(yīng)的存取速度比L1慢,比主內(nèi)存快,當(dāng)然也可以集成到微處理芯片內(nèi),做到與微處理器基本同速。微機(jī)系統(tǒng)中各種存儲(chǔ)器及寄存器對信息的存取速度和相應(yīng)的存儲(chǔ)容量之間的對比關(guān)系如表3-2所示。表3-2Cache位置和寄存器存儲(chǔ)器存取速度和存儲(chǔ)容量比較

2.Cache1)Cache的操作規(guī)程

Cache的引入應(yīng)當(dāng)遵循如下的操作規(guī)程:微處理器要訪問存儲(chǔ)器的時(shí)候,首先檢查要讀取的指令或數(shù)據(jù)是否在Cache中。若在,就近從Cache中讀??;如果不在,則訪問主存儲(chǔ)器,從主存儲(chǔ)器中去讀取。這一過程同我們使用《新華字典》和《漢語大字典》查閱字詞信息的過程完全一樣。從《新華字典》和《漢語大字典》的發(fā)行量對比可以看出,這種快速查閱信息的方法獲得了巨大的成功。Cache能夠獲得成功嗎?答案是可能成功,也可能失敗,關(guān)鍵是Cache中存放的內(nèi)容是不是微處理器所需要的。如果是,則可加快存儲(chǔ)器的工作速度;如果不是,則只能延長存儲(chǔ)器的存取時(shí)間,還不如去掉Cache。Cache的有效性源于局部區(qū)域性原則,該原則又源于程序在存儲(chǔ)器中的依次存放規(guī)則。原則的主要內(nèi)容是:程序?qū)Υ鎯?chǔ)器的訪問在時(shí)間和空間上都局限在某一段區(qū)域內(nèi)。考查微處理器執(zhí)行一段程序的全過程,不難發(fā)現(xiàn)當(dāng)微處理器需要訪問指令代碼和數(shù)據(jù)代碼時(shí),它所訪問的只是存儲(chǔ)器的一小部分或是幾段固定區(qū)域,如果某存儲(chǔ)單元被訪問,那么近期內(nèi)該單元的臨近單元可能被訪問,該單元自身在短期內(nèi)也可能還會(huì)再次被訪問。只要事先將該程序或該段區(qū)域的代碼調(diào)入Cache,使得微處理器只需訪問Cache就能滿足程序執(zhí)行的要求,而不必去訪問主存儲(chǔ)器,取指令和數(shù)據(jù)的工作速度就能跟上微處理器的工作速度。Cache的無效性源于轉(zhuǎn)移類指令的存在,如果轉(zhuǎn)移類指令的目標(biāo)地址偏移量超出Cache的容量,目標(biāo)代碼和轉(zhuǎn)移類指令代碼不能同處于8KB的Cache內(nèi),微處理器就不得不去訪問128MB的內(nèi)存條。好在轉(zhuǎn)移類指令在程序中出現(xiàn)的概率約為1/7(由統(tǒng)計(jì)規(guī)律得到),使得Cache的有效性大約為85%左右。為降低Cache的無效性,在遇到轉(zhuǎn)移類指令情況下,微處理器訪問內(nèi)存的同時(shí),把目標(biāo)代碼局部區(qū)域的內(nèi)容填入到Cache中,這些新內(nèi)容恰恰是微處理器即將需要的指令代碼,下一次的取指操作必然有效,Cache才可能完全獲得成功。2)Cache的常用術(shù)語

(1)Cache命中:Cache控制器要檢查微處理器發(fā)出的地址信號(hào),判斷微處理器所要訪問的地址單元是否在Cache中,如果在,則稱為Cache命中。Cache如果命中,則表明微處理器要讀取的指令代碼和數(shù)據(jù)代碼位于Cache中,微處理器就能高速對Cache完成讀/寫操作。只有命中,才能使Cache有效,達(dá)到引進(jìn)Cache、提高存儲(chǔ)器工作速度的目的。

(2)Cache未命中:Cache控制器檢查微處理器發(fā)出的地址信號(hào)時(shí),判斷地址單元不在Cache中,稱為Cache未命中。這時(shí)指令代碼和數(shù)據(jù)代碼不在Cache中,Cache無效,微處理器就要去訪問主存儲(chǔ)器。如果主存儲(chǔ)器訪問成功,就應(yīng)當(dāng)把本次訪問相鄰近的存儲(chǔ)區(qū)域內(nèi)容復(fù)制到Cache中,保證下一次不再訪問主存,直接訪問Cache命中。(3)映射:把內(nèi)存一段區(qū)域的內(nèi)容復(fù)制到Cache中,通常以頁為單位進(jìn)行。高速緩沖存儲(chǔ)器中各頁存放的位置與主存儲(chǔ)器中相應(yīng)的存放位置有一一對應(yīng)的關(guān)系,這種對應(yīng)關(guān)系稱為映射。高速緩沖存儲(chǔ)器Cache的管理辦法由映射關(guān)系決定。目前在微機(jī)系統(tǒng)中使用的映射關(guān)系有三種:全關(guān)聯(lián)方式、直接映射方式和分組關(guān)聯(lián)方式。例如80486采用的就是分組關(guān)聯(lián)方式(4組)。無論哪一種映射關(guān)系,都要確保內(nèi)存一段區(qū)域內(nèi)容正確復(fù)制到Cache中,便于在未命中后的下一次訪問一定命中。

(4)命中率:若干次訪問中Cache命中次數(shù)與訪問次數(shù)之比,用百分?jǐn)?shù)表示,又稱命中概率。一般情況下命中率超過95%(含二次命中)才算正常,否則就失去了添加Cache的意義。(5)內(nèi)容一致性:Cache的內(nèi)容從主存儲(chǔ)器一段區(qū)域的內(nèi)容復(fù)制而來,說明Cache保存的是主存儲(chǔ)器某部分的一個(gè)副本。這樣,同一指令代碼或數(shù)據(jù)代碼在微機(jī)系統(tǒng)內(nèi)存在兩個(gè)拷貝,一個(gè)在主存儲(chǔ)器中,一個(gè)在Cache中。如果其中有一個(gè)被改寫,另一個(gè)還原封不動(dòng),就會(huì)出現(xiàn)同一地址有兩個(gè)不同的副本,微處理器執(zhí)行讀/寫時(shí)就容易出錯(cuò)。因此保證兩個(gè)完全相同的副本就顯得至關(guān)重要。在微處理器“讀”的時(shí)候,Cache要事先接收主存儲(chǔ)器一段區(qū)域的內(nèi)容;在微處理器“寫”的時(shí)候,Cache首先被改寫,要及時(shí)把改寫后的Cache內(nèi)容回寫到主存儲(chǔ)器的某段區(qū)域內(nèi)。3)Cache的結(jié)構(gòu)

Cache的結(jié)構(gòu)服從于它的工作機(jī)制——局部區(qū)域性原則。這一原則由兩個(gè)因素決定:第一,程序自身具有順序、分支、循環(huán)等三種不同結(jié)構(gòu);第二,程序數(shù)據(jù)塊在存儲(chǔ)器中按指令代碼的順序依次存放。如果在程序中因轉(zhuǎn)移指令、中斷指令或調(diào)用子程序指令而發(fā)生了長距離轉(zhuǎn)移,CPU也會(huì)遵循局部區(qū)域性原則。這是因?yàn)榈谝淮蜟ache必然未命中,接著就會(huì)對內(nèi)存進(jìn)行訪問,在訪問同時(shí)要把相關(guān)內(nèi)容復(fù)制到Cache中,第二次Cache必然命中。Cache在結(jié)構(gòu)上劃分成三大功能塊:高速緩沖、地址索引、置換控制。高速緩沖功能塊是Cache的主要組成部分,用于存放從內(nèi)存拷貝過來的內(nèi)容。地址索引功能塊完成地址比較,把微處理器送出的地址信號(hào)高位部分與存放在自身內(nèi)部的地址標(biāo)記進(jìn)行比較,判斷Cache是否命中。為使其比較快速地進(jìn)行,地址索引功能塊由按內(nèi)容存取的存儲(chǔ)器構(gòu)成,而不是用按地址存取的常規(guī)存儲(chǔ)器構(gòu)成。置換控制功能塊承擔(dān)調(diào)頁換頁的任務(wù),用于Cache和內(nèi)存之間的代碼傳送,保證同一代碼兩個(gè)副本的一致。

Cache的結(jié)構(gòu)因讀/寫的需要可以分成兩種不同的工作狀態(tài),讀狀態(tài)和寫狀態(tài)。每種狀態(tài)可以分別用兩種方案實(shí)現(xiàn)。無論哪種方案,它們都服從局部區(qū)域性原則。(1)處于讀狀態(tài)時(shí)的Cache:讀結(jié)構(gòu)可以分成“旁觀”(LookAside)和“綜觀”(LookThrough)兩種。第一種,旁觀。

Cache使用“旁觀”方案的結(jié)構(gòu)圖如圖3-9所示。Cache的作用是一個(gè)旁觀者,它和內(nèi)存共同觀看到一個(gè)總線周期。當(dāng)微處理器開始一次“讀”總線周期時(shí),Cache和內(nèi)存同時(shí)接受訪問。Cache的地址索引功能塊開始比較地址,目的為了確定Cache是否命中。如果命中,微處理器所要的指令代碼就在高速緩存中,Cache不會(huì)繼續(xù)旁觀而是響應(yīng)“讀”總線周期并終止該總線周期,對內(nèi)存的訪問也同時(shí)被終止。微處理器轉(zhuǎn)入下一個(gè)總線周期讓高速緩存中相關(guān)內(nèi)容放入數(shù)據(jù)總線。如果未命中,Cache始終就是一個(gè)旁觀者,就由內(nèi)存響應(yīng)“讀”總線周期并終止該總線周期,微處理器轉(zhuǎn)入下一個(gè)總線周期,內(nèi)存中相關(guān)內(nèi)容一方面進(jìn)入數(shù)據(jù)總線,另一方面,同時(shí)進(jìn)入Cache的高速緩存功能塊,以便下一次啟動(dòng)“讀”周期時(shí)保證Cache命中。使用“旁觀”方案構(gòu)成的Cache,由內(nèi)存和Cache共同對總線周期予以監(jiān)視。如果屬于Cache未命中,則微處理器從內(nèi)存中讀數(shù)就如同沒有Cache一樣進(jìn)行,故而不會(huì)因?yàn)镃ache未命中影響“讀”速度。這種結(jié)構(gòu)的缺陷是:當(dāng)總線正在對內(nèi)存訪問時(shí),其它任何芯片,包括微處理器在內(nèi)都不能訪問Cache,因?yàn)榇丝炭偩€已經(jīng)被占用。圖3-9Cache旁觀結(jié)構(gòu)圖3-10Cache綜觀結(jié)構(gòu)

第二種,綜觀。

Cache使用“綜觀”方案的結(jié)構(gòu)圖如圖3-10所示。Cache的作用是通觀總線周期的全過程,無論Cache是否命中,從微處理器產(chǎn)生的總線周期只有在Cache的“觀察”下才能到達(dá)系統(tǒng)總線。當(dāng)微處理器開始一次“讀”總線周期時(shí),只有Cache接受訪問。Cache的地址索引功能塊開始比較地址,目的是為了確定Cache是否命中。如果命中,則微處理器就從Cache的高速緩存中讀數(shù),讀數(shù)過程和內(nèi)存無關(guān)。如果Cache未命中,則由Cache將總線周期送至系統(tǒng)總線,從頭開始對內(nèi)存尋址。一旦內(nèi)存尋址成功,內(nèi)存將要讀的數(shù)據(jù)送入系統(tǒng)總線。送達(dá)微處理器,并拷貝給Cache,確保微處理器下一個(gè)總線周期請求該數(shù)據(jù)信息臨近的數(shù)據(jù)項(xiàng)時(shí)實(shí)現(xiàn)Cache命中。(2)處于寫狀態(tài)的Cache:“寫”操作是指把數(shù)據(jù)信息從微處理器送到存儲(chǔ)器存放。由于Cache容量小,能跟得上微處理器的工作速度,而內(nèi)存工作容量大、速度慢。因此當(dāng)“寫”操作一旦發(fā)生,往往是Cache首先被改寫。Cache一旦改寫,必然要求內(nèi)存隨著改寫,否則只會(huì)出現(xiàn)同一地址的兩個(gè)不同副本,導(dǎo)致總線運(yùn)行錯(cuò)誤。Cache改寫以后,從Cache拷貝到內(nèi)存就有通寫(WriteThrough)和回寫(WriteBack)兩種不同的寫法。

第一種,通寫。當(dāng)微處理器啟動(dòng)一次“寫”總線周期時(shí),數(shù)據(jù)從微處理器首先寫入Cache,隨后立即繼續(xù)寫到內(nèi)存的對應(yīng)位置上,這種寫數(shù)據(jù)的方法稱為“通寫”。其特點(diǎn)是數(shù)據(jù)寫到內(nèi)存之前,寫總線周期不會(huì)被終止。通寫的優(yōu)點(diǎn)是顯而易見的,由于Cache的內(nèi)容只要一更新,立即就傳送給內(nèi)存,因此內(nèi)存隨時(shí)能跟蹤C(jī)ache的變化,保持兩個(gè)副本的一致,用不著擔(dān)心Cache更新后的內(nèi)容會(huì)發(fā)生丟失。通寫的缺點(diǎn)是:每次Cache一更新,內(nèi)存就緊跟著寫入,它們都占著總線操作時(shí)間,必然使總線操作過于頻繁,在多處理器系統(tǒng)中占用總線時(shí)間過長必然影響操作速度,而且內(nèi)存并沒有必要每次都隨時(shí)緊跟Cache。為此有一種緩沖通寫的改進(jìn)方法,就是每次內(nèi)存隨時(shí)緊跟的數(shù)據(jù)暫時(shí)先在緩沖器中保存。在“寫”總線周期結(jié)束之前,微處理器可以啟動(dòng)下一個(gè)周期,若下一個(gè)周期是“讀”周期,并且Cache命中,則從Cache的“讀”操作和上一個(gè)周期未完成的從Cache寫向內(nèi)存的動(dòng)作就可以并行進(jìn)行;若Cache未命中或下一個(gè)周期繼續(xù)是“寫”周期,微處理器只能等待,緩沖通寫的方法也不會(huì)有效果。

第二種,回寫。當(dāng)微處理器啟動(dòng)一次“寫”總線周期時(shí),數(shù)據(jù)從微處理器寫入Cache,Cache接收數(shù)據(jù)并終止總線周期。隨后微處理器將繼續(xù)執(zhí)行別的工作。Cache接收的數(shù)據(jù)在系統(tǒng)總線有效的時(shí)候拷貝到內(nèi)存。由于不是在“寫”總線周期內(nèi)完成的,而是在“寫”總線周期結(jié)束以后的其它總線周期內(nèi)完成的,因此稱之為“回寫”?;貙懩芘c其它總線周期的動(dòng)作并行進(jìn)行。這種寫法,節(jié)省了系統(tǒng)總線的操作,但顯然總有一段短的時(shí)間內(nèi),同一地址的Cache和內(nèi)存上有兩個(gè)不同的副本。為了避免存在兩個(gè)不同副本操作上的失誤,在Cache的地址索引功能模塊的地址標(biāo)記TAG字段上設(shè)置了一個(gè)更新位(TAG是一個(gè)標(biāo)記,用于指定當(dāng)前微處理器發(fā)送的地址信號(hào)與Cache中的一個(gè)數(shù)據(jù)塊相聯(lián))。Cache和內(nèi)存的兩個(gè)副本不同時(shí),更新位為“1”;Cache和內(nèi)存的兩個(gè)副本相同時(shí),更新位為“0”。于是,在微處理器啟動(dòng)“寫”總線周期要將Cache的內(nèi)容更新時(shí),置換控制功能塊就會(huì)首先查看TAG更新位。當(dāng)查知TAG更新位為“0”時(shí),Cache就會(huì)首先被改寫;當(dāng)查知TAG更新位為“1”時(shí),置換控制功能塊就會(huì)先將Cache現(xiàn)有的內(nèi)容拷貝到內(nèi)存,待TAG更新位變?yōu)椤?”后,才允許Cache被微處理器更新。TAG更新位的設(shè)置和控制,可靠地保證了回寫成功。3.1.4虛擬存儲(chǔ)技術(shù)隨著微機(jī)的應(yīng)用領(lǐng)域越來越廣泛,程序和數(shù)據(jù)日漸增大,要求新型的微機(jī)存儲(chǔ)器容量也要增大。但是,存儲(chǔ)容量的增加要受到地址總線寬度的限制,如Pentium4的地址總線就已經(jīng)增至36根,最大能尋址空間236B=64GB。如果該機(jī)固定配置一個(gè)64GB的存儲(chǔ)器,就會(huì)使得一些用戶用不完,造成浪費(fèi),另一些用戶不夠用。對前一種用戶,可以采取實(shí)際配置的物理存儲(chǔ)器容量小于存儲(chǔ)空間的辦法。但對后一種用戶,面對系統(tǒng)程序、大型應(yīng)用程序以及多道程序日漸增大且要正常運(yùn)行,不能采用“增加微處理器的地址總線根數(shù)和集成超大容量的內(nèi)部存儲(chǔ)器”這種方法,之所以不能從根本上解決,是因?yàn)椋浩湟?,微處理器對外有三組總線,都需要分配引腳,地址總線寬度不能無限增加;其二,微機(jī)內(nèi)部存儲(chǔ)器由半導(dǎo)體存儲(chǔ)器構(gòu)成,受制造工藝、體積和成本的限制,存儲(chǔ)容量也不能無限增加。

在敘述什么是虛擬存儲(chǔ)技術(shù)之前,先解釋下列專業(yè)名詞。虛擬:假想,實(shí)際不存在的東西。地址空間:CPU地址總線能夠?qū)ぶ返姆秶N锢泶鎯?chǔ)器:是微機(jī)內(nèi)的主存儲(chǔ)器,一個(gè)由存儲(chǔ)芯片構(gòu)成的硬件電路,實(shí)際存在的微機(jī)5大組成部分之一。物理存儲(chǔ)器實(shí)際配置的容量往往不大于地址總線最大尋址空間。虛擬存儲(chǔ)器:是一個(gè)假想的、虛構(gòu)的、沒有物理介質(zhì)實(shí)現(xiàn)的存儲(chǔ)器,是存在于人們頭腦中的一個(gè)概念,微機(jī)中沒有相應(yīng)的虛擬存儲(chǔ)器硬件電路。和物理存儲(chǔ)器一樣,虛擬存儲(chǔ)器的每一個(gè)存儲(chǔ)單元相應(yīng)地也有自己的存儲(chǔ)內(nèi)容和單元地址。

物理地址:又名實(shí)際地址或?qū)嵉刂?,是物理存?chǔ)器每一存儲(chǔ)單元的地址。邏輯地址:又名虛擬地址或虛地址,是虛擬存儲(chǔ)器每一存儲(chǔ)單元的地址。進(jìn)程:每個(gè)程序的執(zhí)行過程。任務(wù):程序指定微處理器和存儲(chǔ)器承擔(dān)的工作和責(zé)任。

MMU:MemoryManagementUnit,又稱為虛擬存儲(chǔ)器管理部件,是80X86微處理器內(nèi)的一組硬件電路,能把程序的邏輯地址(虛擬地址)轉(zhuǎn)換成主存的物理地址(實(shí)際地址)。按地址轉(zhuǎn)換關(guān)系把外存(硬盤、光盤等)的程序指令代碼和數(shù)據(jù)代碼逐步地、及時(shí)地調(diào)入到內(nèi)存(物理存儲(chǔ)器)中。

多道程序并發(fā)系統(tǒng):微機(jī)中有多個(gè)程序要運(yùn)行的系統(tǒng)。假設(shè)有一個(gè)應(yīng)用程序,字節(jié)數(shù)長達(dá)9GB,按照傳統(tǒng)的觀點(diǎn),這個(gè)應(yīng)用程序是沒有辦法在80386/80486微機(jī)上運(yùn)行的,因?yàn)樵摍C(jī)配備的物理存儲(chǔ)器最大存儲(chǔ)容量僅為232B=4GB。為了在該機(jī)上運(yùn)行地址空間超過物理存儲(chǔ)器容量的程序,不妨在我們的頭腦里像做夢一樣想象有一個(gè)容量大到64TB的虛擬存儲(chǔ)器,這樣,這個(gè)9GB的應(yīng)用程序就可以存放在那個(gè)64TB的存儲(chǔ)器中了。圖3-11畫出了有虛擬存儲(chǔ)器的微機(jī)系統(tǒng)執(zhí)行程序時(shí)的運(yùn)行示意圖。在需要運(yùn)行大程序的時(shí)候,由位于微處理器內(nèi)的MMU電路及時(shí)分批地把9GB的大程序送入4GB的物理存儲(chǔ)器,每次送入的程序段容量都必須小于物理存儲(chǔ)器的存儲(chǔ)容量,這樣,送入物理存儲(chǔ)器的一段在運(yùn)行之后予以清除,及時(shí)把這一段后面的程序塊調(diào)入繼續(xù)運(yùn)行,直到把大程序全部運(yùn)行完畢為止。圖3-11有虛擬存儲(chǔ)器的微機(jī)系統(tǒng)運(yùn)行9GB的大程序不可能放在人們腦海里,需要具體物理介質(zhì)組成的存儲(chǔ)電路存放,那么它到底放在哪里?答案是放在外存(硬盤、磁盤、光盤等)中?;蛘哒f,在微機(jī)系統(tǒng)中,外存不是以一個(gè)獨(dú)立組成電路的身份出現(xiàn),而是以虛擬存儲(chǔ)器的形式起作用。只有內(nèi)存(俗稱內(nèi)存條)才是微機(jī)系統(tǒng)的一個(gè)獨(dú)立組成電路,虛擬存儲(chǔ)技術(shù)一旦切實(shí)可行,作為物理存儲(chǔ)器的內(nèi)存也沒必要配置4GB(配的越多,用戶掏錢越多),例如只配128~512MB就可以分批接收來自虛擬存儲(chǔ)器的信息?!凹皶r(shí)分批地”從虛擬存儲(chǔ)器向物理存儲(chǔ)器傳送代碼,實(shí)質(zhì)上是正確地將虛擬地址轉(zhuǎn)換為物理地址。地址轉(zhuǎn)換由MMU中的地址映射方式完成,地址映射方式通常有頁式、段式和段頁式3種,無論哪一種,都是在程序執(zhí)行過程中動(dòng)態(tài)實(shí)施的,只不過不同的映射方式有不同的轉(zhuǎn)換表格駐留在內(nèi)存中,它們的轉(zhuǎn)換函數(shù)也不相同。完成一個(gè)進(jìn)程通常需要代碼段、數(shù)據(jù)段、堆棧段和附加段。由于匯編語言程序設(shè)計(jì)采用了分段結(jié)構(gòu),使得一個(gè)進(jìn)程的各段邏輯地址空間彼此相互聯(lián)系、又相對獨(dú)立,因此在進(jìn)程運(yùn)行時(shí),MMU必須把這些相對獨(dú)立的邏輯段組織到一起,才能正確地進(jìn)行地址轉(zhuǎn)換。

虛擬存儲(chǔ)器的存儲(chǔ)容量能不能無限制增大?答復(fù)是不能。這是因?yàn)槲⑻幚砥魈峁┑牡刂房偩€寬度不能無限大,導(dǎo)致MMU對虛擬存儲(chǔ)空間尋址不能無限大;其次,實(shí)際存放多道大型程序的外存也不能無限大。多個(gè)程序在虛擬存儲(chǔ)器中存放、訪問和傳送,應(yīng)當(dāng)由MMU賦予不同的特權(quán)、受到不同程度的保護(hù)。在多個(gè)任務(wù)都要涌向物理存儲(chǔ)器時(shí),MMU理應(yīng)正確地進(jìn)行任務(wù)切換。綜上所述,可知虛擬存儲(chǔ)技術(shù)是在存儲(chǔ)體系層次結(jié)構(gòu)基礎(chǔ)上,通過硬件和軟件的配合,在實(shí)際存儲(chǔ)器容量沒有增加的情況下,擴(kuò)大用戶可用存儲(chǔ)空間的一門計(jì)算機(jī)存儲(chǔ)新技術(shù)。這門技術(shù),不是伴隨微機(jī)對存儲(chǔ)容量不斷增加的要求而發(fā)展的,而是微機(jī)系統(tǒng)借鑒大中型計(jì)算機(jī)的成功經(jīng)驗(yàn)而引進(jìn)的。把這門技術(shù)應(yīng)用到微機(jī)系統(tǒng)上,是否能獲得成功的關(guān)鍵問題是:MMU如何去管理好一虛一實(shí)這兩個(gè)性質(zhì)不同的存儲(chǔ)器。3.280386/80486CPU3.2.1

80386CPU1.內(nèi)部功能結(jié)構(gòu)

80386CPU內(nèi)部功能結(jié)構(gòu)如圖3-12所示,內(nèi)部由能夠并列運(yùn)行的總線接口單元、代碼預(yù)取單元、指令譯碼單元、存儲(chǔ)器管理單元、指令執(zhí)行單元和控制單元等邏輯單元組成,這些單元的運(yùn)作構(gòu)成了一條指令流水線作業(yè)。圖3-1280386CPU的內(nèi)部功能結(jié)構(gòu)1)總線接口單元BIU

總線接口單元BIU是CPU與外部電路交換信息的窗口,它的主要功能是驅(qū)動(dòng)地址總線、數(shù)據(jù)總線和控制總線,在取指令,取數(shù)據(jù),接收分段請求、分頁請求等一系列基本操作中實(shí)現(xiàn)CPU對3組總線的控制。由于80386CPU的地址總線和數(shù)據(jù)總線分開使用,避免了分時(shí)合用,因此最快能在兩個(gè)時(shí)鐘周期內(nèi)從內(nèi)存中存取32位數(shù)據(jù)。在BIU內(nèi)還設(shè)計(jì)有流水線/總線寬度控制電路,使得流水線作業(yè)過程中,能夠在完成當(dāng)前總線操作前,形成下一個(gè)新總線周期的地址。此外,總線采用動(dòng)態(tài)結(jié)構(gòu),能夠按照需要改變地址和數(shù)據(jù)寬度,既支持16位操作也支持32位操作。2)代碼預(yù)取單元代碼預(yù)取單元的功能是預(yù)先從存儲(chǔ)器中取出指令代碼并送到一個(gè)16字節(jié)的預(yù)取隊(duì)列中,便于指令譯碼單元將其譯碼。該單元中的預(yù)取器/界限校驗(yàn)器電路用作預(yù)取指令的指針以及檢驗(yàn)是否違反分段界限,它們的內(nèi)容來自分段部件。代碼預(yù)取單元通過分頁部件向總線接口單元發(fā)送預(yù)取總線周期請求信號(hào),這個(gè)信號(hào)的作用就是從存儲(chǔ)器取出代碼并保證指令隊(duì)列裝滿,它的優(yōu)先級別比較低,既低于存取操作總線周期請求信號(hào),又低于頁面未命中時(shí)的處理周期請求信號(hào)。3)指令譯碼單元指令譯碼單元的功能是從16字節(jié)指令隊(duì)列中取出字節(jié)進(jìn)行譯碼,以確定是什么操作,譯好的碼暫時(shí)放在“已譯好碼的指令隊(duì)列”中,隨時(shí)供給指令執(zhí)行單元使用。該隊(duì)列能容納3條指令的操作碼。指令譯碼單元對操作碼譯碼需時(shí)一個(gè)時(shí)鐘周期。

4)指令執(zhí)行單元指令執(zhí)行單元的功能是執(zhí)行指令,它由桶型移位器、ALU、乘除硬件隊(duì)列、寄存器組組成。對于每一條指令,并不是所有的功能隊(duì)列都需要啟動(dòng),不同的指令只啟動(dòng)與該指令相關(guān)的操作電路。存放在指令譯碼單元“已譯好碼的指令隊(duì)列”中的指令微代碼,已經(jīng)含有諸如操作數(shù)的起始地址、數(shù)據(jù)類型、算術(shù)或邏輯運(yùn)算的運(yùn)算符、所需要用到的寄存器或存儲(chǔ)單元地址等微信息。5)控制單元控制單元由譯碼時(shí)序和控制ROM電路組成,它實(shí)際上是一個(gè)微代碼的驅(qū)動(dòng)機(jī)構(gòu),實(shí)現(xiàn)對ALU的操作控制。

6)存儲(chǔ)器管理單元MMUMMU由分段部件、分頁部件和特權(quán)保護(hù)部件組成。分段部件的任務(wù)是實(shí)現(xiàn)虛擬地址向線性地址的轉(zhuǎn)換。分頁部件的職責(zé)是完成線性地址向物理地址的轉(zhuǎn)換。特權(quán)保護(hù)部件用于程序段的特權(quán)級別保護(hù)和任務(wù)之間的隔離與切換。MMU有3個(gè)管理目標(biāo):完成虛擬地址轉(zhuǎn)換為物理地址;給每一個(gè)任務(wù)段以一定級別的特權(quán)保護(hù);正確地實(shí)現(xiàn)任務(wù)切換。2.內(nèi)部寄存器表3-380386CPU內(nèi)部寄存器一覽表1)通用寄存器通用寄存器有8個(gè),如圖3-13所示,分別是累加器EAX、基址寄存器EBX、計(jì)數(shù)寄存器ECX、數(shù)據(jù)寄存器EDX、堆棧指針ESP、基址指針EBP、源變址寄存器ESI、目的變址寄存器EDI。它們的作用有通用和專用(隱含使用)兩種。所謂“通用”是用于存放參加運(yùn)算的數(shù)或存儲(chǔ)單元的地址,支持8、16和32位操作數(shù),1~32位字段以及16位、32位地址操作數(shù)。它們的低16位可作16位寄存器使用,分別命名為AX、BX、CX、DX、SP、BP、SI和DI,共8個(gè)。此外還使用8個(gè)8位寄存器AH、AL、BH、BL、CH、CL、DH和DL存放字節(jié)數(shù)據(jù)。所謂“專用”限于操作數(shù)所用到的特定用途,如表3-4所示。圖3-1380386通用寄存器、段寄存器和專用寄存器表3-4通用寄存器的專用用法2)段寄存器代碼段寄存器CS定義了存儲(chǔ)器代碼段的起始地址。在實(shí)地址方式下CS給出了一個(gè)64KB代碼存儲(chǔ)段的基址;在保護(hù)虛擬地址方式下,CS的內(nèi)容是一個(gè)16位的選擇子,該選擇子用于選擇一個(gè)描述符,描述符中含有描述一個(gè)代碼段的相關(guān)參數(shù),包括代碼段的基址、段界限和段的屬性。DS、SS和ES的功能與CS類似,僅DS定義的是數(shù)據(jù)段,SS定義的是堆棧段,ES定義的是附加段。FS、GS是80386及80386以上的CPU中新增加的兩個(gè)附加數(shù)據(jù)段,其用法和功能同于ES。3)專用寄存器專用寄存器有指令指針EIP和標(biāo)志寄存器EFLAGS,每個(gè)32位。

32位指令指針EIP用于指向下一條要執(zhí)行指針的偏移地址,與偏移地址配對使用的是存放于CS中的代碼段基址或CS選擇子所選中描述符給出的段基址。實(shí)地址方式使用低16位的IP,保護(hù)虛擬地址方式使用32位偏移量。編程人員不能對EIP進(jìn)行直接存取操作,EIP或IP不能成為任何指令格式中的目的操作數(shù)或源操作數(shù),但轉(zhuǎn)移指令、返回指令、中斷指令等能使EIP得到新的值。在程序執(zhí)行過程中,EIP或IP的值具有自動(dòng)加1的功能。32位標(biāo)志寄存器EFLAGS用于指示指令操作后的狀態(tài)和控制CPU的一些特定操作,如圖3-14所示。標(biāo)志寄存器只定義了14位,其中狀態(tài)標(biāo)志位6位(C、P、A、Z、S、O),控制標(biāo)志位8位(T、I、D、IOPL、NT、RF、VM)。與8086/8088CPU的FLAGS相比較,80386CPU增加了5個(gè)標(biāo)志位,這些標(biāo)志位僅適用于保護(hù)虛擬地址方式。圖3-1480386EFLAGS

第12、13位IOPL(Input/OutputPrivilegeLevel):I/O特權(quán)級標(biāo)志位,用于指示I/O設(shè)備的特權(quán)等級,兩位代碼確定0~3共4級特權(quán),其中00的特權(quán)級最高,11的特權(quán)級最低。如果當(dāng)前特權(quán)級CPL(CurrentPrivilegeLevel)高于IOPL,則I/O指令能順利執(zhí)行,否則產(chǎn)生異常13,將需要執(zhí)行的任務(wù)掛起。第14位NT(NestedTask):嵌套任務(wù)標(biāo)志,用于指示位于嵌套中的任務(wù)狀態(tài)。使用中的返回指令I(lǐng)RET可以檢測出此標(biāo)志,確定任務(wù)內(nèi)返回還是任務(wù)間返回。

第16位RF(ResumeFlag):恢復(fù)標(biāo)志,與調(diào)試寄存器一起使用。調(diào)試中處理斷點(diǎn)前在指令邊界上檢測該位,若置位則忽略下一條指令的調(diào)試故障,并在指令執(zhí)行完畢后使RF自動(dòng)復(fù)位,但JMP、CALL、INT、IRET、POPF等指令除外。第17位VM(VirtualInterrupt):虛擬8086方式標(biāo)志,為1時(shí)表示CPU正工作于虛擬8086工作方式。當(dāng)CPU工作在保護(hù)虛擬地址方式下,且現(xiàn)行特權(quán)級為0時(shí),執(zhí)行IRET指令可使VM置1,CPU進(jìn)入虛擬8086方式。4)段描述符寄存器段描述符寄存器又稱為描述符高速緩存器Cache,共有6個(gè),每個(gè)64位,與6個(gè)段寄存器對應(yīng),如圖3-15所示,提供段的基址、段界限(長度)和段屬性。當(dāng)段寄存器的選擇子用送數(shù)類或轉(zhuǎn)移類指令時(shí),段描述符寄存器中的段基址、段界限和段屬性都將按照選擇子所尋找的描述符進(jìn)行修改,直到修改成一個(gè)合適的值,參加存儲(chǔ)器的存取訪問。3個(gè)相關(guān)參數(shù)中,32位段基址提供的是線性空間的基址,20位段界限指出了當(dāng)前所用段的長度,12位段屬性反映了段的訪問特征。圖3-15段選擇子和段描述符寄存器5)狀態(tài)控制寄存器

4個(gè)狀態(tài)控制寄存器的名稱是CR0~CR3,每個(gè)32位,用于實(shí)施對80386CPU的多種功能選擇,相應(yīng)各位如圖3-16所示。圖3-1680386狀態(tài)控制寄存器表3-5CR0中6位預(yù)定義標(biāo)志一覽表CR1未定義,留作備用。

CR2名為頁故障線性地址寄存器,用來存放頁故障中斷發(fā)生前最后一個(gè)頁面(32位)的線性頁地址,該故障屬異常14。

CR3名為頁目錄基址寄存器,存放頁目錄表的物理基地址20位,鑒于頁目錄表按頁對齊(1頁=4KB),因此只使用高20位,低12位未用。6)系統(tǒng)地址寄存器

80386CPU的4個(gè)系統(tǒng)地址寄存器如圖3-17所示,用于存放操作系統(tǒng)所需的保護(hù)信息和地址轉(zhuǎn)換信息。GDTR名為全局描述符表寄存器,48位,保存全局描述符表GDT的32位線性基地址和GDT的16位界限。IDTR名為中斷描述符表寄存器,48位,保存中斷描述符表IDT的32位線性基地址和IDT的16位界限。在保護(hù)方式下,CPU使用稱為“描述符”的數(shù)據(jù)結(jié)構(gòu)描述存儲(chǔ)器操作數(shù)所在段的性質(zhì)?!懊枋龇怼本褪窍到y(tǒng)中所有描述符的集中存儲(chǔ),對于存放在存儲(chǔ)器中的“描述符表”,其地址需要尋址和定義,GDTR和IDTR就是存放其基地址和屬性的寄存器。TR名為任務(wù)狀態(tài)寄存器,16位,存放任務(wù)狀態(tài)段TSS的16位選擇子。任務(wù)狀態(tài)段TSS是物理存儲(chǔ)器中有別于代碼段、數(shù)據(jù)段、堆棧段、附加段的一個(gè)存儲(chǔ)段,容量固定為104B,存放用于任務(wù)切換的環(huán)境,該段的選擇子就在TR之中。LDTR名為局部描述符表寄存器,16位,存放局部描述符表LDT段的16位選擇子。LDT段是物理存儲(chǔ)器中不同于代碼段、數(shù)據(jù)段、堆棧段、附加段、任務(wù)狀態(tài)段的一個(gè)數(shù)據(jù)存儲(chǔ)段,這個(gè)段的選擇子就在LDTR中。圖3-1780386的系統(tǒng)地址寄存器7)調(diào)試寄存器和測試寄存器圖3-18調(diào)試寄存器和測試寄存器3.80386的引腳功能圖3-1980386CPU引腳信號(hào)功能1)數(shù)據(jù)總線D0~D31

數(shù)據(jù)總線D0~D31上傳送的是三態(tài)雙向數(shù)據(jù)信號(hào),它是CPU與其它芯片交換數(shù)據(jù)的通道。數(shù)據(jù)總線的寬度可由控制線BS16調(diào)整,使得數(shù)據(jù)可在32位或低16位的總線上傳送。讀數(shù)據(jù)時(shí)要滿足所讀數(shù)據(jù)的建立和保持時(shí)間,才能避免誤讀。在寫數(shù)據(jù)、暫停和停機(jī)周期內(nèi),80386總是驅(qū)動(dòng)32位數(shù)據(jù)總線信號(hào),不管當(dāng)前總線的寬度是32位還是16位。2)地址總線A2~A31,地址總線上的信號(hào)是三態(tài)輸出信號(hào),30條地址線A2~A31和4條字節(jié)允許線共34條(目的是為了向上兼容),對外提供32位地址總線,用于尋址4?GB物理存儲(chǔ)空間(00000000H~FFFFFFFFH);使用16條地址線尋址64KBI/O端口(0000H~FFFFH)。數(shù)值協(xié)處理器的尋址使用I/O空間,地址范圍為800000F8H~800000FFH,即A31=1且M/IO=0。I/O端口采用獨(dú)立尋址方式,由控制線M/IO選擇。字節(jié)允許線 用于選通數(shù)據(jù)總線上哪些數(shù)據(jù)線參與數(shù)據(jù)傳送。BE0選通D0~D7,選通D8~D15,選通D16~D23,BE3選通D24~D31。3)控制總線表3-680386CPU控制總線一覽表表3-680386CPU控制總線一覽表表3-7表3-6的附表4)電源線

VCC,+5V電源;GND,地;CLK,時(shí)鐘輸入,由時(shí)鐘發(fā)生器82384產(chǎn)生并經(jīng)二分頻后產(chǎn)生執(zhí)行指令所需的內(nèi)部處理器時(shí)鐘。內(nèi)部時(shí)鐘包括φ1、φ2兩相,每一相內(nèi)部時(shí)鐘都是一個(gè)CLK周期。3.2.280486CPU1.內(nèi)部功能結(jié)構(gòu)圖3-2080486CPU內(nèi)部功能結(jié)構(gòu)80486CPU內(nèi)部由8個(gè)功能部件組成,除了80386CPU的6個(gè)單元外,還集成了一個(gè)浮點(diǎn)運(yùn)算單元FPU和一個(gè)8KB高速緩沖存儲(chǔ)器。而且,80386CPU與FPU之間數(shù)據(jù)總線寬度為64位,與Cache之間數(shù)據(jù)總線寬度為128位,允許BIU從外部總線一次將16個(gè)字節(jié)數(shù)據(jù)讀至高速緩沖部件。80486CPU與80386CPU相比,相類似的6個(gè)單元(總線接口、代碼預(yù)取、指令譯碼、存儲(chǔ)器管理、指令執(zhí)行和控制)相應(yīng)都作了一些改進(jìn),增強(qiáng)了一些功能,這樣,80486具有80386的所有功能,而且能在流水線作業(yè)中處于更佳的工作狀態(tài)。

2.浮點(diǎn)運(yùn)算單元FPU

浮點(diǎn)運(yùn)算單元FPU與協(xié)處理器80387完全兼容,但由于FPU擴(kuò)充了功能,又處于80486內(nèi),內(nèi)部總線加寬,引線縮短,因此處理速度比80387還要快3~5倍。

1)80387支持的數(shù)據(jù)類型

80486支持無符號(hào)二進(jìn)制數(shù)、有符號(hào)二進(jìn)制定點(diǎn)整數(shù)、浮點(diǎn)數(shù)、BCD數(shù)、數(shù)據(jù)串、ASCII碼數(shù)據(jù)和指針數(shù)據(jù)共7種數(shù)據(jù),其中數(shù)學(xué)協(xié)處理器80387支持有符號(hào)二進(jìn)制定點(diǎn)整數(shù)、浮點(diǎn)數(shù)和壓縮BCD數(shù)共3種數(shù)據(jù)類型,如表3-8所示。表3-880387支持的數(shù)據(jù)類型圖3-2180387支持的整數(shù)格式

實(shí)數(shù)是實(shí)型數(shù)的簡稱,所謂實(shí)型數(shù)是指小數(shù)點(diǎn)浮動(dòng)的浮點(diǎn)數(shù)。80387所支持的3種實(shí)型數(shù)格式如圖3-22所示,每種實(shí)型數(shù)浮點(diǎn)表示分為階碼和尾數(shù)。短實(shí)型數(shù)32位分配為:階碼8位(符號(hào)位1位、數(shù)值位7位)、尾數(shù)24位(符號(hào)位1位、數(shù)值位23位),因此它所能表示數(shù)的范圍就是-1.11…1B×2-1111111B~+1.11…1B×21111111B,或近似為-2×2-127~+2×2127或-3.39×10-38~+3.39×1038

圖3-2280387浮點(diǎn)數(shù)的格式

上面尾數(shù)表示1.11…1B中,小數(shù)點(diǎn)后有23個(gè)1,是23位尾數(shù)數(shù)值位的最大值,小數(shù)點(diǎn)前面的“1”是隱含值,不在短實(shí)型數(shù)和長實(shí)型數(shù)中占1個(gè)二進(jìn)制位。長實(shí)型數(shù)64位分配為:階碼11位、尾數(shù)53位。臨時(shí)實(shí)型數(shù)80位分配為:階碼15位、尾數(shù)65位,但與短實(shí)型數(shù)、長實(shí)型數(shù)稍有不同的是,第63位固定為1,尾數(shù)沒有隱含值。

80387支持的BCD碼為80位的壓縮BCD數(shù),在內(nèi)存中占10個(gè)字節(jié),其中最高1個(gè)字節(jié)作符號(hào)字節(jié)規(guī)定該字節(jié)的最高位作符號(hào)位,且該位為0表示正數(shù),為1表示負(fù)數(shù)。余下還有9個(gè)字節(jié)可以表示18位壓縮BCD數(shù)。2)?FPU的運(yùn)行機(jī)理

80387兼容IEEE-754標(biāo)準(zhǔn),內(nèi)含8個(gè)80位數(shù)據(jù)寄存器R0~R7、3個(gè)16位寄存器和2個(gè)48位指針(FPU指令指針和FPU操作數(shù)指針),如圖3-23所示。R0~R7在浮點(diǎn)運(yùn)算時(shí)用于存放參加運(yùn)算的浮點(diǎn)數(shù)。允許使用兩種方法訪問這些數(shù)據(jù)寄存器,一種是堆棧方式,一種是寄存組固定方式隨時(shí)進(jìn)行。不同的訪問方式由不同的指令實(shí)施。圖3-2380387的內(nèi)部寄存器3個(gè)寄存器分別為控制寄存器、狀態(tài)寄存器和標(biāo)記字寄存器??刂萍拇嫫鞔娣泡斎氲目刂谱郑指袷綖椋籂顟B(tài)寄存器存放80387的狀態(tài),供80386/80486讀取,字格式為:

標(biāo)記字寄存器用于標(biāo)記R0~R7是否有空,每2位標(biāo)記一個(gè)數(shù)據(jù)寄存器是否處于空閑狀態(tài),16位標(biāo)記依次為TAG(7)~TAG(0)。當(dāng)80387識(shí)別標(biāo)記字寄存器的16位狀態(tài)時(shí),就可以知道R0~R7誰是空的,從而控制堆棧方式操作。

2個(gè)指針分別是指令指針和操作數(shù)指針,它們存放的是發(fā)生故障的指令地址和操作數(shù)地址,48位長度內(nèi)含16位CS選擇子和32位偏移地址。3.內(nèi)部寄存器

80486CPU內(nèi)部寄存器除FPU浮點(diǎn)寄存器組外,還將80386內(nèi)部寄存器進(jìn)行了擴(kuò)充。

(1)增加了3個(gè)用于調(diào)試Cache的測試寄存器TR3、TR4和TR5,其中TR3為Cache數(shù)據(jù)寄存器,TR4為Cache狀態(tài)檢測寄存器,TR5為Cache控制檢測寄存器。

(2)將80386CR0的6位控制位作了如下修改:第4位ET(處理器擴(kuò)充類型)不再使用,作置1處理。原有5位控制位PE、MP、EM、TS、PG繼續(xù)使用。另外擴(kuò)充了5位:

第5位NE(NumericsException),數(shù)字異常控制位,置1時(shí)若執(zhí)行FPU指令則將產(chǎn)生異常16;第16位WP(WriteProtect),寫保護(hù)控制位,置1時(shí)對管理程序讀取的頁寫保護(hù);第18位AM(AlignmentMask),對準(zhǔn)屏蔽控制位,置1時(shí)EFLAGS中的AC位有效,否則無效;第29位NW(NetWrite-through),非通寫控制位,置1時(shí)片內(nèi)Cache為通寫方式;第30位CD(CacheDisable),禁止Cache位,置1時(shí)若Cache未命中則禁止回填Cache,置0時(shí)若未命中則允許填充Cache。(3)對標(biāo)志寄存器EFLAGS,80386使用了13個(gè)標(biāo)志,80486除繼續(xù)使用之,還增加定義了1個(gè)標(biāo)志:第18位A(AlignmentCheck),對準(zhǔn)檢查標(biāo)志,在訪問字或雙字時(shí),查看地址是否處于邊界。置1時(shí)表示地址不在邊界。4.80486CPU引腳功能

80486CPU有168條引腳,提供101條功能信號(hào),如圖3-24所示。按功能可分為4組:雙向數(shù)據(jù)線32條、地址線34條(提供32位地址線)、控制線32條、電源線3條。

34條地址線由30位地址線A2~A31和4位字節(jié)允許信號(hào) 引出,對外提供32位地址總線。80486的數(shù)據(jù)線和地址線都與80386相同,控制線從17條增加至32條,除80386外接協(xié)處理器的控制線不再引出外,其它總線周期定義、總線控制、總線仲裁、中斷等信號(hào)線依然具備,且功能相同。

5.小結(jié)與8086/8088相比,80386/80486CPU有了質(zhì)的飛躍,主要表現(xiàn)在以下方面:

(1)地址總線寬度為32位,使物理存儲(chǔ)器可尋址空間達(dá)4GB。

(2)數(shù)據(jù)總線寬度為32位,寄存器也以32位為主,80386/80486微機(jī)成為32位微機(jī)。

(3)發(fā)展了虛擬存儲(chǔ)概念,不僅使虛擬存儲(chǔ)器可尋址空間達(dá)64TB,而且使編程人員建立起一個(gè)全新的觀念:在按虛擬地址編程過程中,物理存儲(chǔ)器僅僅只是暫時(shí)存放代碼的一個(gè)存儲(chǔ)空間。

(4)8086/8088存儲(chǔ)器只常用4個(gè)段,而80386/80486物理存儲(chǔ)器使用了8個(gè)段,如表3-9所示。表3-980386/80387物理存儲(chǔ)器的段(5)80386/80486有3種不同的工作方式。一是實(shí)地址方式,這種方式下的80386/80486等同于一個(gè)高速的8086/8088。二是保護(hù)虛擬地址方式,這種方式下的80386/80486認(rèn)可4GB物理存儲(chǔ)器和64TB虛擬存儲(chǔ)器,存儲(chǔ)器按段和按頁面組織。每段的長度不固定,當(dāng)粒度位G=0時(shí),1段=1B~1MB;當(dāng)粒度位G=1時(shí),1段=1頁~1M頁=4KB~4GB。每頁長度固定為4KB。64TB虛擬空間允許每個(gè)任務(wù)最多可使用16K個(gè)段。三是虛擬8086方式,認(rèn)可虛擬空間的高速8086工作方式。

(6)增加了由分段部件、分頁部件組成的存儲(chǔ)器管理系統(tǒng),建立了虛擬地址、線性地址和物理地址之間的映射關(guān)系。(7)使用4級特權(quán)保護(hù)機(jī)制,引用調(diào)用門、中斷門和陷阱門完成不同特權(quán)級之間的切換。

(8)建立了多用戶、多任務(wù)之間的關(guān)系,使用訪問任務(wù)段和訪問任務(wù)門完成不同任務(wù)之間的切換。

(9)芯片內(nèi)部結(jié)構(gòu)通過采用RISC(ReducedInstructionSetComputer,縮減指令系統(tǒng)計(jì)算機(jī))技術(shù),使芯片上非規(guī)則控制布局減少,提高了指令執(zhí)行速度。3.380386/80486存儲(chǔ)器的結(jié)構(gòu)3.3.1物理存儲(chǔ)器尋址

80386/80486物理存儲(chǔ)器的基本存儲(chǔ)單元為一個(gè)字節(jié),內(nèi)容為8位二進(jìn)制數(shù),最大物理空間為232?B=4?GB,允許指令代碼和數(shù)據(jù)代碼以字節(jié)、字、雙字或4字的格式存放。多字節(jié)數(shù)據(jù)的存放規(guī)則是低字節(jié)進(jìn)入低地址,高字節(jié)進(jìn)入高地址,且低字節(jié)的地址是多字節(jié)數(shù)據(jù)的訪問地址。CPU有三種不同的工作方式:實(shí)地址方式、保護(hù)虛地址方式和虛擬8086方式。不同的工作方式有不同的物理存儲(chǔ)器尋址方法,下面分別敘述。

實(shí)地址方式的操作原理和尋址與8086/8088CPU完全相同,每一存儲(chǔ)單元的地址,既可以使用20位物理地址表達(dá),又可以用“段基址:偏移量”表示:20位物理地址=16位段基址×10H+16位偏移量

32位地址線中只有20位地址線A19~A0起作用,A31~A20無效,最大物理空間也只有220B=1MB,地址編號(hào)×××00000H~×××FFFFFH,4GB的其它空間沒有作用。實(shí)地址方式僅僅使用了1?MB地址空間,并不等于物理存儲(chǔ)器只有1MB。為了兼顧其它兩種工作方式的需要,系統(tǒng)實(shí)際配置的存儲(chǔ)容量通常會(huì)遠(yuǎn)遠(yuǎn)多于1MB,這樣一來,將出現(xiàn)很大的地址重疊區(qū)。尋址超過1MB時(shí)將產(chǎn)生異常13。編程時(shí)需要避開4GB的最高、最低兩個(gè)存儲(chǔ)空間,它們有專門用途。低地址00000000H至000003FFH的1KB區(qū)域?yàn)橹袛嘞蛄繀^(qū),存放著256個(gè)向量的中斷向量表。每一個(gè)向量號(hào)占用4個(gè)字節(jié),里面是中斷服務(wù)程序的入口地址——16位的偏移量和段基址。高地址FFFFFFF0H至FFFFFFFFH共16B區(qū)域是初始化預(yù)留區(qū),CPU上電或復(fù)位后,地址總線A31~A16為FFFFH,CS的值為F000H,IP的值為FFF0H。所以上電或復(fù)位后微機(jī)總是從FFFFFFF0H單元開始執(zhí)行,必須在該單元內(nèi)設(shè)置1條段間跳轉(zhuǎn)指令,轉(zhuǎn)至執(zhí)行程序入口。此外,由于實(shí)地址方式下每個(gè)段的最大地址空間為64KB,因此存放偏移量的32位寄存器值必須小于0000FFFFH,否則將發(fā)生差錯(cuò)。

保護(hù)虛擬地址方式下,物理存儲(chǔ)器的最大尋址空間為232B=4GB,地址編號(hào)00000000H~FFFFFFFFH。尋址方式有2個(gè)特征:先生成線性地址,再生成物理地址;兩個(gè)地址都采用基址加偏移量的方法,只不過生成線性地址由MMU的分段部件完成?;酚置位贰6位泛推屏慷际?2位,計(jì)算公式如下:32位線性地址=32位段基址+32位偏移量

生成物理地址由MMU的分頁部件完成,基址有頁基址20位,偏移量12位,計(jì)算公式如下:32位物理地址=20位頁基址×1000H+12位偏移量由于段寄存器只有16位,因此在生成線性地址時(shí),32位段基址只能放在存儲(chǔ)器中,為此引入描述符(Descriptor)的概念。描述符是一種存放在內(nèi)存條中的數(shù)據(jù)結(jié)構(gòu),一個(gè)描述符由64位二進(jìn)制數(shù)組成(其中含有32位段基址),占內(nèi)存8?B。按多字節(jié)數(shù)據(jù)存放規(guī)則,只需訪問最低字節(jié)就能訪問此描述符。8K(=213=8192)個(gè)描述符集合成了一個(gè)描述符表,占內(nèi)存64KB(表內(nèi)地址編號(hào)0000H~FFFFH)。從描述符表中尋址一個(gè)描述符需13位地址,通常16位選擇子(即段寄存器)的D15~D3專用于存放此13位地址信號(hào),又稱為“段號(hào)索引DI”。表3-1016位選擇子的D15~D3和描述符首址對應(yīng)關(guān)系表

每個(gè)描述符尋址地址的低3位為000,高13位與13位段號(hào)索引完全相同。在需要尋址的時(shí)候,把16位選擇子裝入段寄存器段(在代碼段中用轉(zhuǎn)移指令和調(diào)用指令裝入,在數(shù)據(jù)段中用數(shù)據(jù)傳送指令裝入),相應(yīng)電路根據(jù)13位段號(hào)索引確定出8192個(gè)描述符中的一個(gè),并把描述符的64位內(nèi)容裝入段描述符寄存器,隨后從段描述符寄存器中取出32位段基址,與32位偏移量相加,生成32位線性地址。所謂線性地址是一個(gè)中間地址空間的地址,是一個(gè)不分段的連續(xù)地址,是介于邏輯地址和物理地址之間的過渡地址。80386/80486CPU對存儲(chǔ)器的管理采用了分段機(jī)制和分頁機(jī)制。分段機(jī)制是必須采用的,分頁機(jī)制可用可不用。當(dāng)禁止使用分頁機(jī)制時(shí),32位線性地址就是32位物理地址。

當(dāng)允許使用分頁機(jī)制時(shí),32位線性地址必須經(jīng)過“分頁管理機(jī)制”的處理。處理過程為將20位段基址與12位偏移量相加,生成32位物理地址,詳見3.4.3節(jié)。圖3-25畫出了保護(hù)虛擬地址方式下的尋址過程。虛擬8086方式是一種模擬仿真8086的工作方式,尋址過程和實(shí)地址方式完全相同,即在1MB地址空間內(nèi)有:20位物理地址=16位段基址×10H+16位偏移量。與實(shí)地址方式一樣,虛擬8086方式尋址超過1MB時(shí)將產(chǎn)生異常13。圖3-25保護(hù)虛擬地址方式下的32位物理地址形成3.3.2虛擬存儲(chǔ)器尋址圖3-2664TB虛擬存儲(chǔ)器“尋址”示意圖3.480386/80486CPU對存儲(chǔ)器的管理3.4.1物理存儲(chǔ)器管理

1.直接映射方式直接映射方式的地址對應(yīng)關(guān)系如圖3-27所示。主存使用16MBDRAM,地址編號(hào)為000000H~FFFFFFH。Cache使用16KB×40SRAM,地址編號(hào)為0000H~3FFFH。由于Cache的操作是由CPU按照一定的規(guī)則自行決定完成的,不需要編程人員的干涉,因此主存和Cache的地址編號(hào)可以各編各的,用不著統(tǒng)一編址。Cache的主體有16K個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元有40位,分別為地址字段8位、數(shù)據(jù)字段32位(1個(gè)雙字,或2個(gè)16位字?jǐn)?shù)據(jù),或4個(gè)8位字節(jié)數(shù)據(jù)),除掉8位地址字段,Cache存放數(shù)據(jù)的存儲(chǔ)容量恰好為16KB×32。

在實(shí)際使用的時(shí)候,要將16MB主存儲(chǔ)器劃分為若干頁,劃分的方式是使每一頁的存儲(chǔ)容量和Cache存放數(shù)據(jù)的存儲(chǔ)容量相同,便于未命中后回寫時(shí)可將一整頁的內(nèi)容送入Cache。這樣一來,16MB內(nèi)部存儲(chǔ)器就劃分成了16MB/(16KB×32)=256頁,256頁的編號(hào)為00H~FFH(0~255)。每一個(gè)編號(hào)頁又稱為頁面,頁面號(hào)由8位二進(jìn)制數(shù)組成。每一頁的存儲(chǔ)容量為64KB,或者說能存放16K個(gè)雙字。高速緩沖存儲(chǔ)器的地址寄存器CAR有32位,分配如下:D0~D15為索引INDEX,其中D2~D15用于尋址高速緩沖16K個(gè)單元、32K個(gè)字節(jié)或16K個(gè)雙字;D0、D1為選擇位,用于選擇高速緩沖每個(gè)單元的4個(gè)字節(jié)中的一個(gè)。D16~D23為頁面地址,用TAG表示,或稱為標(biāo)記符,用于指示CPU需要尋找的頁面號(hào)。CAR的D24~D31為Cache/DRAM選擇位,用作選擇Cache和主存儲(chǔ)器可能有的28=256種不同的情況。圖3-27直接映射方式80386/80486CPU通過地址總線AB發(fā)出32位地址信號(hào),在地址信號(hào)到達(dá)CAR后,其中的D2~D15用來選擇Cache中16K個(gè)單元中的一個(gè)。取出該單元的40位二進(jìn)制數(shù)信息,其中8位就是頁面地址TAG。隨后,由Cache控制器將CAR中的D16~D23標(biāo)記符與取出的頁面地址進(jìn)行比較。如果兩個(gè)TAG相等,則Cache命中,這時(shí)根據(jù)CAR中的D0D1位決定取4個(gè)字節(jié)中的哪一個(gè)字節(jié)。與此同時(shí),“命中”信號(hào)開啟Cache數(shù)據(jù)存儲(chǔ)器CDR,讓選中的字節(jié)進(jìn)入CPU的數(shù)據(jù)總線,完成從Cache中讀字節(jié)的過程。命中時(shí)從Cache讀數(shù)的操作過程與主存無關(guān)。如果兩個(gè)TAG不等,則Cache未命中,“未命中”信號(hào)將開啟相關(guān)的控制門電路,讓標(biāo)記符8位地址信號(hào)經(jīng)譯碼器后選中16MB內(nèi)存256頁中的1個(gè)。選中該頁面后,Cache控制器將繼續(xù)兩個(gè)操作,一個(gè)是按CPU提供的地址選擇已選中頁面的1個(gè)存儲(chǔ)單元,并通過數(shù)據(jù)寄存器送至數(shù)據(jù)總線,完成從主存中的讀數(shù)操作,另一個(gè)是啟動(dòng)Cache置換控制邏輯,清除緩存中舊頁面的內(nèi)容,將所訪問字節(jié)的頁面調(diào)入Cache,實(shí)現(xiàn)頁面更新。如果對字節(jié)選擇位的控制電路稍加改變,使每次能選中的是1個(gè)字或1個(gè)雙字,那么同樣也能實(shí)現(xiàn)命中時(shí)從Cache中讀字或讀雙字、未命中時(shí)從主存中讀字或讀雙字的過程。CPU對Cache和主存進(jìn)行寫的過程與讀操作相類似,依舊是首先比較TAG,在Cache命中時(shí)把數(shù)據(jù)寫入Cache和主存;或只寫入Cache,不寫入主存。兩種寫法由TAG的標(biāo)志位予以確認(rèn)。在只寫入Cache不寫入主存的方案中,“不寫入主存”是指暫時(shí)不寫,最終主內(nèi)存被選中頁的內(nèi)容還是會(huì)更新,只不過要等到清除含有該字節(jié)頁面的時(shí)候。如果Cache未命中,則直接寫入主存并更新Cache。直接映射方式的優(yōu)點(diǎn)是CPU發(fā)出的標(biāo)記符地址與Cache中的頁面地址只需要比較一次,便可以進(jìn)行以后的讀寫操作,相應(yīng)管理電路也較為簡單。缺點(diǎn)是主存的不同頁頻繁使用時(shí),Cache控制電路將要多次轉(zhuǎn)換,直接影響了命中率。對于4字節(jié)選擇的Cache直接映射電路,Cache容量為1KB時(shí),命中率為41%,容量為128KB的Cache,命中率可達(dá)到89%。由此可見,加大Cache的容量有利于提高讀寫速度。

2.全關(guān)聯(lián)映射方式和直接映射方式不同的是,全關(guān)聯(lián)映射方式中主存不再分頁,只分為若干數(shù)據(jù)塊;Cache也分為若干個(gè)數(shù)據(jù)塊,并且主內(nèi)存每一數(shù)據(jù)塊的容量和Cache每一數(shù)據(jù)塊的容量完全相同。在進(jìn)行數(shù)據(jù)傳送的時(shí)候,以數(shù)據(jù)塊為單位進(jìn)行,如圖3-28所示。Cache中某一數(shù)據(jù)塊的數(shù)據(jù)可以傳送到主存的任一數(shù)據(jù)塊的位置;反之,主存中某一數(shù)據(jù)塊的數(shù)據(jù)也可以傳送到Cache的任何一個(gè)位置。數(shù)據(jù)塊的大小不是固定不變的,只是Cache和主存的數(shù)據(jù)塊包含的字節(jié)數(shù)相同。因此,大容量主存的數(shù)據(jù)塊的個(gè)數(shù)必然比小容量Cache的數(shù)據(jù)塊個(gè)數(shù)多得多。圖3-28Cache和主內(nèi)存全關(guān)聯(lián)傳送數(shù)據(jù)塊圖3-29全關(guān)聯(lián)映射方式

設(shè)Cache容量為128×54位,分為128個(gè)數(shù)據(jù)塊,每塊各占1個(gè)位置,由地址標(biāo)記符TAG(22位)、數(shù)據(jù)字段(32位

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論