4.1 概述4.1.1 存儲(chǔ)器分類![]() 4.1.2 存儲(chǔ)器的層次結(jié)構(gòu)![]() 4.2 主存儲(chǔ)器4.2.1 概述1. 主存的基本組成![]() 2. 主存和CPU的聯(lián)系![]() 3. 主存中存儲(chǔ)單元地址的分配0x12345678如何在主存儲(chǔ)器中進(jìn)行存儲(chǔ)? 兩種模式:
![]() 這邊建議使用C語(yǔ)言進(jìn)行理解;環(huán)境為:VS2019 擴(kuò)展: 兩種方法判斷機(jī)器存儲(chǔ)是大端還是小端 /*** 返回1為小端*/int check_up(){ int i = 1;//0x00000001 內(nèi)存中表示地址為:0x01000000 char* p = (char*)&i; //01 return *p;}int main(){ int ret = check_up(); if (ret == 1) { printf('小端'); } else { printf('大端'); } return 0;}
一般x86架構(gòu)的計(jì)算機(jī)采用小端方式 假設(shè)一臺(tái)機(jī)器地址線為24根
按字節(jié)尋址,默認(rèn)一個(gè)字為8bit(即字長(zhǎng)為8),所以范圍為:224=16MB(兆字節(jié)) 按字尋址,我個(gè)人理解:把按字轉(zhuǎn)換為按字節(jié);因?yàn)樽珠L(zhǎng)為16,所以-為2個(gè)Byte,所以尋址范圍為:8MW(兆字 Word),也可以寫成:16MB,不過(guò)在這里 1W=2Byte;依此類推 4. 主存的技術(shù)指標(biāo)
4.2.2 半導(dǎo)體存儲(chǔ)芯片簡(jiǎn)介1. 基本結(jié)構(gòu)![]()
2. 計(jì)算芯片的容量芯片容量 = 地址線的尋址能力 * 數(shù)據(jù)線的數(shù)量 = 存儲(chǔ)單元的數(shù)量 * 每一個(gè)存儲(chǔ)單元的容量 如下所示,根據(jù)地址線和數(shù)據(jù)線計(jì)算芯片的容量:2^10*4=1K*4... ![]() 3. 片選線的作用
![]()
![]() 4. 譯碼驅(qū)動(dòng)方式
![]()
![]() 4.2.3 隨機(jī)存取存儲(chǔ)器(RAM)1. 靜態(tài)RAM(SRAM)基本單元電路的構(gòu)成存儲(chǔ)0和1信號(hào)的方式:靜態(tài)RAM保存的0和1的原理就是使用觸發(fā)器。T1~T4為4根管子構(gòu)成的雙穩(wěn)態(tài)觸發(fā)器,不易丟失或者是損耗,它在兩端存儲(chǔ)信息,左端保持輸入信號(hào)的非,右端保存原輸入信號(hào)。 移碼驅(qū)動(dòng)方式:重合法——分別通過(guò)行地址和列地址的聯(lián)合選中才能輸出,每一份存儲(chǔ)單元都對(duì)應(yīng)一個(gè)行列地址坐標(biāo)(行地址X,列地址Y)。 T5和T6是行地址選擇開關(guān):當(dāng)接通的時(shí)候,對(duì)應(yīng)的信號(hào)可以通過(guò)兩端分別經(jīng)過(guò)行選擇開關(guān)輸出到列選擇開關(guān)終止。 T7和T8是列地址選擇開關(guān):當(dāng)開關(guān)接通時(shí),允許數(shù)據(jù)從雙穩(wěn)態(tài)觸發(fā)器兩端輸出,經(jīng)過(guò)行地址選擇器,再通過(guò)列地址選擇器,實(shí)現(xiàn)最終的輸出。只有行、列被選中的某個(gè)單元存儲(chǔ)電路,在其行列通門同時(shí)被打開時(shí),才能進(jìn)行讀出信息和寫入信息的操作。 讀寫開關(guān),通過(guò)輸入對(duì)應(yīng)的讀寫控制信號(hào)選擇是否打開,通過(guò)數(shù)據(jù)。 ![]() 總結(jié):一個(gè)SRAM的基本單元需要由8個(gè)電路基本元件構(gòu)成 靜態(tài)RAM的基本讀操作![]() 靜態(tài)RAM的基本寫操作![]() 靜態(tài)RAM舉例——Intel 2114Intel 2114 外特性![]() 在Intel 2114芯片中,WE為讀寫控制信號(hào),其中低電平為寫,高電平為讀。CS為片選信號(hào),只有CS信號(hào)是低電平的時(shí)候Intel 2114芯片才會(huì)選中,芯片左側(cè)A0-A9是10條地址線,可以看出芯片是1K的存儲(chǔ),右側(cè)是4根數(shù)據(jù)線,可以讀出和寫入4位信號(hào),因此可以看出,芯片的存儲(chǔ)容量為1K X 4位 。 Intel 2114 RAM 矩陣 (64 × 64) 讀以 Intel 2114芯片 組成的 RAM 矩陣 (64 × 64) ,行地址有64個(gè),列地址一共分為4組,每一組一共有16列。如下圖,當(dāng)行地址線為000...0(64個(gè))時(shí),芯片的第一行被全部選中 ![]() 當(dāng)列地址線為000...0(16個(gè))時(shí),每組中的第一列全部被選中,即0,16,32,48被選中 ![]() 當(dāng) WE為讀信號(hào)(高電平),讀電路有效, CS片選信號(hào)為低電平時(shí),芯片被選中,行列交叉點(diǎn)地址的信號(hào)便通過(guò)電路通路被讀出來(lái) ![]() Intel 2114 RAM 矩陣 (64 × 64) 寫Intel 2114 RAM 矩陣的寫跟讀基本上是一致的,只是WE被換成了寫信號(hào)(低電平),從I/O數(shù)據(jù)線寫入數(shù)據(jù) ![]() 2. 動(dòng)態(tài)RAM(DRAM)動(dòng)態(tài)RAM保存0和1的方法是電容,當(dāng)電容保存電荷時(shí)為1,不保存電荷(沒充電)時(shí)為0; 常見的動(dòng)態(tài)RAM基本單元電路有三管式和單管式兩種,他們共同的特點(diǎn)是靠電容存儲(chǔ)電荷的原理來(lái)寄存信息。 三管式動(dòng)態(tài)RAM電源電路![]() 信息讀出如果預(yù)充電信號(hào)有效,T4開關(guān)打開,V(DD)進(jìn)行充電,會(huì)對(duì)讀數(shù)據(jù)線進(jìn)行充電,讀數(shù)據(jù)線有效(變成高電平,表示為1),如果進(jìn)行讀出,讀選擇線有效,T2開關(guān)被打開。 如果C(g)當(dāng)中沒有保存有電容(存儲(chǔ)0),那么T1開關(guān)為低電平(表示為0),T1開關(guān)不會(huì)被打通,讀數(shù)據(jù)線仍然保持高電平,讀出的數(shù)據(jù)為1;如果C(g)電容當(dāng)中保存有電荷(存儲(chǔ)為1),那么T1開關(guān)為高電平(表示為1),此時(shí)T1和T2開關(guān)同時(shí)放電,使得讀數(shù)據(jù)線由高電平變成了低電平(表示為0),由這個(gè)過(guò)程,我們可以看出讀出的信息和原存的信息是相反的。(跟讀放大器有關(guān)) ![]() 信息寫入如果進(jìn)行寫入,寫選擇線有效,T3開關(guān)被打開,寫數(shù)據(jù)線會(huì)通過(guò)T3開關(guān)向C(g)進(jìn)行充電或者放電。如果寫選擇線是高電平,那么寫入的信號(hào)就是高電平,同樣,如果寫選擇線是低電平,寫入的便是低電平。因此寫入與輸入信息相同。 三管DRAM實(shí)例——Intel 1103 讀三管動(dòng)態(tài) RAM 芯片 (Intel 1103) 一共有A0~A9 10個(gè) 地址線,因此芯片的存儲(chǔ)容量為1K; 每次讀出和寫入都為一位信號(hào),因此是1K x 1位容量的芯片。行地址經(jīng)過(guò)譯碼后,每一行都對(duì)應(yīng)了兩個(gè)控制信號(hào),一個(gè)是讀選擇信號(hào)和一個(gè)是寫選擇信號(hào),讀和寫分別使用不同的信號(hào)進(jìn)行控制。如圖,是對(duì)第0行第0列的地址進(jìn)行讀數(shù)據(jù)的電路圖,第0行第0列的數(shù)據(jù)經(jīng)過(guò)讀控制線進(jìn)入到讀寫控制電路進(jìn)行輸出。 刷新放大器:使用電容存儲(chǔ)電荷的原理表示0和1時(shí),電容會(huì)漏電,一段時(shí)間后,電容里邊的信號(hào)會(huì)消失,因此需要定期使用刷新放大器對(duì)電容信號(hào)進(jìn)行重寫。 ![]() 三管DRAM實(shí)例——Intel 1103 寫寫入信號(hào),如果行地址為11111,即行地址為31,那么第31行全部被選中,所有的寫選擇線有效,給出列地址為00001,那么第31行的第一列的原件為我們需要寫入數(shù)據(jù)的操作原元件。數(shù)據(jù)通過(guò)D端進(jìn)行輸入,經(jīng)過(guò)讀寫控制電路,通過(guò)寫數(shù)據(jù)線被寫入到指定原件的位置。 ![]() 單管DRAM電源電路讀出:C(s)當(dāng)中如果保存了電荷(表示1),那么數(shù)據(jù)線讀出就是高電平。 寫入:單管動(dòng)態(tài)RAM中字線是控制線,如果字線充電,T開關(guān)被打開,C(s)可以進(jìn)行充電或者放電。 ![]() 單管DRAM 4116 (16K × 1位)外特性單管動(dòng)態(tài) RAM 4116 (16K × 1位)的7位行地址和列地址分兩次傳送,第一次傳送7位行地址,保存在行地址緩存器當(dāng)中,第二次傳送列地址,保存在列地址緩存器當(dāng)中;行地址和列地址分別經(jīng)過(guò)行譯碼和列譯碼以后,選中給定的存儲(chǔ)單元進(jìn)行輸入和輸出。 ![]()
單管DRAM實(shí)例——Intel 4116(16K x 1位)讀下圖是單管動(dòng)態(tài) RAM 4116 (16K × 1位) 芯片讀圖示,注意:其中橫線電路為列選擇信號(hào),豎線電路為行選擇信號(hào)。 RAM 4116芯片中的讀放大器的工作原理為蹺蹺板電路,其左右兩側(cè)電平相反。 如果行地址給出的是0111111(一個(gè)0,6個(gè)1),那么第63行被選中;然后給出列地址為7個(gè)0,那么第0列將被選中,第0列的列選信號(hào)有效,對(duì)應(yīng)開關(guān)被打開。數(shù)據(jù)就會(huì)經(jīng)過(guò)讀放大器的右側(cè)(0變成1),經(jīng)過(guò)列選開關(guān),送入到讀/寫線上,然后經(jīng)過(guò)I/O緩沖,通過(guò)輸出驅(qū)動(dòng)送出來(lái)。 ![]() 單管DRAM實(shí)例——Intel 4116(16K x 1位)寫下圖是單管動(dòng)態(tài) RAM 4116 (16K × 1位) 芯片寫圖示,跟讀數(shù)據(jù)的邏輯基本一致,數(shù)據(jù)經(jīng)過(guò)讀放大器時(shí)(1變成0),讀出時(shí)(0變成1),經(jīng)過(guò)兩次反向,使得讀寫數(shù)據(jù)保持正確。 ![]() 總結(jié):假如你想往DRAM中寫入1,其實(shí)在DRAM中存的是0 讀出時(shí),你讀到的是1,其實(shí)在DRAM中存的是0 動(dòng)態(tài)RAM的刷新為什么要刷新? 電容存儲(chǔ)電荷的原理表示0和1時(shí),電容會(huì)漏電,一段時(shí)間后,電容里邊的信號(hào)會(huì)消失,因此需要定期進(jìn)行動(dòng)態(tài)RAM刷新完成對(duì)電容信號(hào)的重寫。 動(dòng)態(tài)RAM刷新只跟行地址有關(guān),跟列地址無(wú)關(guān)。每次刷新的都是一行的數(shù)據(jù),而不是某一個(gè)存儲(chǔ)單元的數(shù)據(jù)。 集中刷新所謂集中是刷新就是把刷新時(shí)間集中在一起進(jìn)行操作,如圖,動(dòng)態(tài)RAM在2ms內(nèi)對(duì)128行進(jìn)行集中式刷新,2ms內(nèi)一共是4000個(gè)存儲(chǔ)周期(1個(gè)存取周期為0.5微秒),前3872個(gè)周期可以供CPU或者I/O進(jìn)行讀寫操作,后128個(gè)周期專用于進(jìn)行集中式刷新,這段時(shí)間內(nèi)CPU或者I/O都不可以與動(dòng)態(tài)RAM進(jìn)行數(shù)據(jù)信息交換,因此這段時(shí)間也被稱為死區(qū)。以下便是死區(qū)比重的計(jì)算結(jié)果 ![]() 分散刷新分散式刷新就是把刷新時(shí)間分散放在一個(gè)讀寫周期內(nèi),如圖,T(c)為一個(gè)讀寫周期,t(M)為數(shù)據(jù)的讀寫操作,t(R)為刷新操作。分散刷新實(shí)際上把原來(lái)的讀寫周期時(shí)間進(jìn)行了延長(zhǎng),使得芯片的刷新頻率上升,芯片性能下降。唯一的優(yōu)點(diǎn)是,分散刷新沒有死區(qū)。 ![]() 異步刷新(分散刷新與集中刷新相結(jié)合)在2ms的周期內(nèi),芯片的總刷新行數(shù)為128行,因此,我們把這個(gè)時(shí)間分成128份,芯片每隔15.6us(微秒)就需要刷新一行。在15.6us時(shí)間內(nèi),刷新時(shí)間可以放在任何一個(gè)周期上,因此相當(dāng)于一個(gè)集中式刷新的方式,而相對(duì)于整個(gè)時(shí)間周期2ms來(lái)說(shuō),這種方式又是一種分散式刷新。 ![]() 3. 動(dòng)態(tài)RAM和靜態(tài)RAM的比較![]()
因此,根據(jù)動(dòng)態(tài)RAM和靜態(tài)RAM的特點(diǎn),我們一般選擇動(dòng)態(tài)RAM作為主存,靜態(tài)RAM作為緩存Cache(加快速度)。 4.2.4 只讀存儲(chǔ)器(ROM)1. 概述只讀存儲(chǔ)器(Read-Only Memory,ROM)以非破壞性讀出方式工作,只能讀出無(wú)法寫入信息。信息一旦寫入后就固定下來(lái),即使切斷電源,信息也不會(huì)丟失,所以又稱為固定存儲(chǔ)器。 ROM所存數(shù)據(jù)通常是裝入整機(jī)前寫入的,整機(jī)工作過(guò)程中只能讀出,不像隨機(jī)存儲(chǔ)器能快速方便地改寫存儲(chǔ)內(nèi)容。ROM所存數(shù)據(jù)穩(wěn)定 ,斷電后所存數(shù)據(jù)也不會(huì)改變,并且結(jié)構(gòu)較簡(jiǎn)單,使用方便,因而常用于存儲(chǔ)各種固定程序和數(shù)據(jù)。 只讀存儲(chǔ)器的發(fā)展歷程 ![]() 2. 只讀存器的類型掩模ROM(MROM)——只可讀這種ROM是由制造廠家利用一種掩膜技術(shù)寫入程序的,掩膜ROM制成后,用戶不能修改,根據(jù)制造工藝可以將它們分為MOS型和雙極型兩種。MOS型ROM功耗小、速度慢,適用于一般微機(jī)系統(tǒng);而雙極型則速度快、功耗大,適用于速度較高的計(jì)算機(jī)系統(tǒng)。 ![]() 上圖是掩膜型ROM構(gòu)成的原理圖,圖中是個(gè)簡(jiǎn)單的4x4位MOS(或雙極型)管ROM,采用單譯碼結(jié)構(gòu),A0、A1譯碼后可譯出四種狀態(tài),輸出4條選擇線,可分別選中4個(gè)單元,每個(gè)單元有4位輸出。圖中所示的矩陣中,在行和列的交點(diǎn),有的連有MOS管,有的沒有,這是工廠根據(jù)用戶提供的數(shù)據(jù)對(duì)芯片圖形(掩膜)進(jìn)行二次光刻所決定的,所以稱為掩膜ROM。 MOS型ROM, 行列選擇線交叉處有 MOS 管為“ 1 ” ,行列選擇線交叉處無(wú) MOS 管為“ 0 ” PROM(一次性編程)可編程只讀存儲(chǔ)器 (英語(yǔ):Programmable read-only memory),縮寫為 PROM 或 FPROM,是一種電腦存儲(chǔ)記憶晶片,它允許使用稱為PROM編程器的硬件將數(shù)據(jù)寫入設(shè)備中。在PROM被編程后,它就只能專用那些數(shù)據(jù),并且不能被再編程,這種記憶體用作永久存放程式之用。通常會(huì)用于電子游戲機(jī)、或電子詞典這類可翻譯語(yǔ)言的產(chǎn)品之上。 采用破壞性編程,且只能編程一次,如果編程有錯(cuò)誤,只能重新購(gòu)買芯片。 ![]() EPROM(多次行編程)EPROM采用N型溝道浮動(dòng)?xùn)臡OS電路,需要保存0,D端加正電壓,形成浮動(dòng)?xùn)牛枰4?,D端不加正電壓,不形成浮動(dòng)?xùn)拧?/p> 編程完成后,EPROM只能用強(qiáng)紫外線照射來(lái)擦除。通過(guò)封裝頂部能看見硅片的透明窗口,很容易識(shí)別EPROM,這個(gè)窗口同時(shí)用來(lái)進(jìn)行紫外線擦除。可以將EPROM的玻璃窗對(duì)準(zhǔn)陽(yáng)光直射一段時(shí)間就可以擦除。 ![]() EEPROM(多次性編程)EEPROM (Electrically Erasable Programmable read only memory)是指帶電可擦可編程只讀存儲(chǔ)器。是一種掉電后數(shù)據(jù)不丟失的存儲(chǔ)芯片。 EEPROM 可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。一般用在即插即用。 常用在接口卡中,用來(lái)存放硬件設(shè)置數(shù)據(jù)。 也常用在防止軟件非法拷貝的'硬件鎖'上面。 EEPROM的特點(diǎn)
Flash Memory(閃速型存儲(chǔ)器)快閃存儲(chǔ)器(英語(yǔ):flash memory),是一種電子式可清除程序化只讀存儲(chǔ)器的形式,允許在操作中被多次擦或?qū)懙拇鎯?chǔ)器。這種科技主要用于一般性數(shù)據(jù)存儲(chǔ),以及在計(jì)算機(jī)與其他數(shù)字產(chǎn)品間交換傳輸數(shù)據(jù),如儲(chǔ)存卡與U盤。 閃存是一種非易失性存儲(chǔ)器,即斷電數(shù)據(jù)也不會(huì)丟失。因?yàn)殚W存不像RAM(隨機(jī)存取存儲(chǔ)器)一樣以字節(jié)為單位改寫數(shù)據(jù),因此不能取代RAM。 閃存卡(Flash Card)是利用閃存(Flash Memory)技術(shù)達(dá)到存儲(chǔ)電子信息的存儲(chǔ)器,一般應(yīng)用在數(shù)碼相機(jī),掌上電腦,MP3等小型數(shù)碼產(chǎn)品中作為存儲(chǔ)介質(zhì),所以樣子小巧,有如一張卡片,所以稱之為閃存卡。 3. 幾種只讀存儲(chǔ)器簡(jiǎn)單對(duì)比
4.2.5 存儲(chǔ)器與CPU的連接1. 存儲(chǔ)器容量的擴(kuò)展位擴(kuò)展——增加存儲(chǔ)字長(zhǎng)位擴(kuò)展的目的是為了增加存儲(chǔ)字的字長(zhǎng)。 假設(shè)現(xiàn)在有1K(1024個(gè))*4位的存儲(chǔ)芯片(容量為4096bit)若干,要想構(gòu)成一個(gè)1K*8位的存儲(chǔ)器,我們可以使用兩片1K*4位的存儲(chǔ)芯片來(lái)構(gòu)成,如下圖 ![]() 我們通過(guò)片選信號(hào)CS同時(shí)選中兩片存儲(chǔ)芯片,同時(shí)進(jìn)行8位數(shù)據(jù)的讀出和寫入,例如,每片芯片有10跟地址線,4跟數(shù)據(jù)線,它們的連接方式如下: ![]() 對(duì)于如上例子,位擴(kuò)展的關(guān)鍵就是將兩個(gè)存儲(chǔ)芯片當(dāng)成一個(gè)存儲(chǔ)芯片來(lái)用,讓兩個(gè)存儲(chǔ)芯片同時(shí)工作,同時(shí)被選中,同時(shí)做讀操作,同時(shí)做寫操作,要想保證同時(shí),就是把兩個(gè)芯片的片選CS,用相同的信號(hào)進(jìn)行連接。 字?jǐn)U展——增加存儲(chǔ)字的數(shù)量假設(shè)現(xiàn)在有1K*8位的存儲(chǔ)芯片若干,要想構(gòu)成一個(gè)2K*8位的存儲(chǔ)器,我們可以使用兩片1K*8位的存儲(chǔ)芯片來(lái)構(gòu)成,如下圖 ![]() 每一個(gè)存儲(chǔ)芯片的容量是1K*8位,我們要構(gòu)成一個(gè)2K(11位2進(jìn)制位)*8的存儲(chǔ)器,而存儲(chǔ)芯片的每一片的容量是1K(10位二進(jìn)制位),因此我們需要使用兩片1K*8位的存儲(chǔ)芯片來(lái)構(gòu)成,如圖: ![]() 總共有11條地址線,對(duì)于A10,我們將它當(dāng)成片選信號(hào)線,當(dāng)A10=0時(shí),片選選中左邊的存儲(chǔ)芯片工作,右邊不工作,當(dāng)A10=1時(shí),通過(guò)一個(gè)取反,片選選擇右邊的芯片工作,這從外部看來(lái)就是從 0 0000000000 ~ 1 1111111111 剛好是從0~2047共2K個(gè)存儲(chǔ)單元,每一個(gè)存儲(chǔ)單元存放8位的二進(jìn)制代碼。 字、位擴(kuò)展假設(shè)現(xiàn)在有1K*4位的存儲(chǔ)芯片若干,要組成4K*8位的存儲(chǔ)器,我們可以使用8片1K*4位的存儲(chǔ)芯片來(lái)構(gòu)成。首先拿兩片,來(lái)構(gòu)成1K*8位這樣一組芯片,接著,我們需要4組來(lái)構(gòu)成4K*8位的存儲(chǔ)器。 那么如何進(jìn)行連接呢? 其實(shí)就是將上述兩種方法進(jìn)行綜合,4K*8的存儲(chǔ)器,4K(即12根地址線),8bit,就是8根數(shù)據(jù)線,1K*4bit的芯片有需要10根地址線,也就是說(shuō)系統(tǒng)給出的從A0-A11 12根地址線,其中的10根A0-A9是直接送到芯片當(dāng)中構(gòu)成1K*8的一個(gè)小的存儲(chǔ)器,剩余的2根地址線(4個(gè)地址)A11-A10,我們用來(lái)做片選信號(hào),如下圖 ![]() 4K的空間我們分配到了4個(gè)存儲(chǔ)器當(dāng)中,每個(gè)存儲(chǔ)器包含了兩片1K*4bit的存儲(chǔ)芯片,
由A11和A10來(lái)判斷要訪問(wèn)的地址在哪一個(gè)存儲(chǔ)器當(dāng)中,我們采用譯碼器進(jìn)行譯碼,當(dāng)
2. 和CPU連接
3. 例題![]() 解題步驟: ① 寫出對(duì)應(yīng)的二進(jìn)制地址碼CPU有16根地址線,說(shuō)明芯片的尋址范圍是16 x 16 = 64 K;MREO作為訪存控制信號(hào),低電平時(shí)訪問(wèn)存儲(chǔ)器(頂方的橫線表示),高電平時(shí)訪問(wèn)I/O; 系統(tǒng)緩存區(qū):6000H~67FFH換算成地址范圍 ——> 67FFH - 6000H= (67FFH+1-6000H) = 800H = 8 x 16 x 16 = 2 x 2^10 = 2K; 用戶緩存區(qū):6800H~6BFFH換算成地址范圍 ——> 6BFFH - 6800H= (6BFFH+1-6800H) = 400H = 4 x 16 x 16 = 1 x 2^10 = 1K; 以上為10進(jìn)制的換算,我們換成對(duì)應(yīng)的二進(jìn)制表示為: ![]() ② 確定芯片的數(shù)量及類型根據(jù)地址范圍的容量以及該范圍在計(jì)算機(jī)中的作用,選擇存儲(chǔ)芯片。 根據(jù)6000H~67FFH為系統(tǒng)程序區(qū)的范圍,應(yīng)選擇1片2K x 8 位的ROM,若選擇其他的ROM,都超出了2K x 8 位的系統(tǒng)程序區(qū)范圍。 根據(jù)6800H~6BFFH為用戶程序區(qū)的范圍,選2片 1K x 4位的RAM芯片正好滿足1K x 8位的用戶程序區(qū)要求 ③ 分配地址線將CPU的低11位地址A10~A0與2K x 8 位的ROM地址線相連;將CPU的低10位地址A9~A0與2片 1K x 4位的RAM地址線相連。剩下的高位地址與訪存控制信號(hào)MREQ共同產(chǎn)生存儲(chǔ)芯片的片選信號(hào)。 ![]() ④ 確定片選信號(hào)![]() ![]() 4.2.6 存儲(chǔ)器的校驗(yàn)1. 為什么要進(jìn)行校驗(yàn)?以內(nèi)存為例,內(nèi)存是電子設(shè)備,信息保存在電容當(dāng)中,若采用靜態(tài)RAM,則是保存在四管的觸發(fā)器當(dāng)中。若內(nèi)存所處的電磁環(huán)境比較復(fù)雜,或在空間環(huán)境下受到帶電粒子的打擊,可能造成電容的充放電或觸發(fā)器的翻轉(zhuǎn),存在在存儲(chǔ)器的信息可能會(huì)出錯(cuò)。 2. 編碼的最小距離編碼的檢測(cè)能力和糾錯(cuò)能力與任意兩組合法代碼之間二進(jìn)制位的最少差異數(shù)有關(guān)。 先解釋什么是差異數(shù): 假設(shè)有2個(gè)二進(jìn)制數(shù):0011、0101; 我想把0011改成0101,我只要把0011中的第2位和第3位改成 1 和 0 就行 所以這兩個(gè)數(shù)之間的差異數(shù)為 2 解釋: 合法集合 {000 , 001 , 010 , 011 , 100 , 101 , 110 , 111} ,在此集合中,改變?nèi)我庖粋€(gè)代碼,比如改為001,001在合法集合中,所以不論改哪一個(gè)代碼,總能在集合中找到對(duì)應(yīng)的合法代碼,因此這組合法代碼,最少差異數(shù)為1,不能檢測(cè)出錯(cuò)誤,即 檢0位錯(cuò),糾0位錯(cuò)。 合法集合 {000 , 011 , 101 ,110},在此集合中,改變?nèi)我庖粋€(gè)代碼,比如改為001,001不在合法集合中,那么可以檢測(cè)出錯(cuò)誤,但是不能確定是集合中哪一個(gè)代碼發(fā)生了錯(cuò)誤,因?yàn)樗械暮戏ùa改變一位后,都可以變成001,所有兩組合法代碼之間二進(jìn)制位的最少差異數(shù)為2時(shí), 檢1位錯(cuò),糾0位錯(cuò)。 合法集合 {000 , 111} ,在合法集合中,改變?nèi)我庖粋€(gè)代碼,比如改為001,001不在合法集合中,那么可以檢測(cè)出錯(cuò)誤,而且根據(jù)錯(cuò)誤率錯(cuò)一位的機(jī)率為90%的統(tǒng)計(jì),我們認(rèn)為是代碼000錯(cuò)誤了一位,因此,兩組合法代碼之間二進(jìn)制位的最少差異數(shù)為3時(shí), 檢1位錯(cuò),糾1位錯(cuò) 。 檢錯(cuò)糾錯(cuò)位數(shù)和碼距之間的關(guān)系 L - 1 = D + C (D>=C,檢測(cè)錯(cuò)誤的位數(shù)總是大于等于糾正錯(cuò)誤的位數(shù))
因此,我們可以知道,如果想要檢1位錯(cuò),糾1位錯(cuò),編碼的最小距離為3。 3. 漢明碼校驗(yàn)奇偶校驗(yàn)所謂的奇偶校驗(yàn),就是在原校驗(yàn)數(shù)據(jù)上添加一位1或者0,使數(shù)據(jù)中的1的個(gè)數(shù)為奇數(shù)個(gè)或者偶數(shù)個(gè)。為奇數(shù)個(gè)為奇校驗(yàn),為偶數(shù)為偶校驗(yàn)。 ![]() 以偶校驗(yàn)為例,上圖,添加一位1后,使校驗(yàn)數(shù)據(jù)中的1的個(gè)數(shù)為偶數(shù)個(gè),如果接收的結(jié)果1的位數(shù)不為偶數(shù),那么可以檢驗(yàn)出原數(shù)據(jù)出現(xiàn)了錯(cuò)誤。 另外,為了更進(jìn)一步細(xì)分錯(cuò)誤校驗(yàn),我們可以把原校驗(yàn)數(shù)據(jù)進(jìn)行分組,如上,我們把校驗(yàn)數(shù)據(jù)劃分為2組,分別添加校驗(yàn)位。 漢明碼計(jì)算漢明碼校驗(yàn)是一種非劃分方式(組與組之間是有重疊的) 漢明碼的目的是能夠糾正一位誤碼( 漢明碼默認(rèn)一串?dāng)?shù)據(jù)只錯(cuò)一位)。假設(shè)信息碼共有 n 位,漢明碼共有 r 位,那么總共的碼長(zhǎng)為 n + r 位。為能檢測(cè)出 n + r 位編碼中其中一位的錯(cuò)誤,漢明碼必須能夠表示至少 n + r + 1 種狀態(tài),其中 n + r 種表示 n + r 位編碼中有一位錯(cuò)誤,另外還需要一種來(lái)表示整個(gè)編碼正確無(wú)誤。則漢明碼的長(zhǎng)度需要滿足下列關(guān)系: 2^r >= n + r + 1 信息碼 n 位,漢明碼 r 位,總共碼長(zhǎng) n + r 位 漢明碼位置漢明碼的校驗(yàn)碼的位置必須是在2^n位置(n從0開始,分別代表從右邊數(shù)起的第1,2,4,8,16...),信息碼也就是在非2^n位置。 ![]() 例如:對(duì)1,2,3,4,5,6,7進(jìn)行漢明碼校驗(yàn),按照二進(jìn)制編碼,如果二進(jìn)制碼的第一位為1,分為第一組,二進(jìn)制編碼的第二位為1,分為第二組,以此類推... ![]() 分完組后,校驗(yàn)碼的位置必須是在 2^n的位置,我們知道最大數(shù)7的二進(jìn)制碼為111,因此,根據(jù)漢明碼長(zhǎng)度需要滿足的關(guān)系式:2^r >= 3 + r + 1;可以求得校驗(yàn)碼的最小長(zhǎng)度為3位; 例: 求 0101 按 “偶校驗(yàn)” 配置的漢明碼 ∵ n = 4 根據(jù) 2^r ≥ n + r + 1 得 r = 3;即校驗(yàn)碼有3位 漢明碼排序如下: 我們知道,校驗(yàn)碼有3位,先在1,2,4位占據(jù)校驗(yàn)碼的3個(gè)位置,空余的位置把需要校驗(yàn)的二進(jìn)制碼依次填充上去。先看第一個(gè)校驗(yàn)碼,第一組校驗(yàn)1,3,5,7位,排序中,3,5,7的位置為011,根據(jù)偶校驗(yàn)原則,我們只需在前邊補(bǔ)0就可以,那么0就是第一個(gè)校驗(yàn)碼。根據(jù)此方法,可以得出后兩個(gè)校驗(yàn)碼為10; ![]() 因此,可以求得0101 的漢明碼為 01 0 0 101 漢明碼糾錯(cuò)已知接收到的漢明碼為 0100111 , (按配偶原則配置)試問(wèn)要求傳送的信息是什么 ? 糾錯(cuò)過(guò)程如下: 7位漢明碼,數(shù)據(jù)碼占4個(gè),所以校驗(yàn)碼的個(gè)數(shù)為3,一組一個(gè)校驗(yàn)碼,即分組為3; 根據(jù)偶校驗(yàn)的原則,我們分別對(duì)每一位的信息進(jìn)行異或運(yùn)算: ![]() 這邊就有一個(gè)問(wèn)題:為什么這邊算出來(lái)來(lái)的校驗(yàn)碼是011,但是如果直接看漢明碼的第0、1、4位為:010? 解釋: 校驗(yàn)位也可能出錯(cuò),如果傳送的信息就是錯(cuò)的,那么校驗(yàn)位也會(huì)出錯(cuò); P1:0、0、1、1 符合偶校驗(yàn) = 0 P2:1、0、1、1 不符合偶校驗(yàn) = 1 P3:0、1、1、1 不符合偶校驗(yàn) = 1 (或者將4個(gè)數(shù)字進(jìn)行異或一樣的效果) 校驗(yàn)碼是011,也就是說(shuō),第二組和第三組存在錯(cuò)誤,第二組和第三組共有的數(shù)據(jù)是第6位的數(shù)據(jù), 可糾正為 01001 0 1;也可以將3位校驗(yàn)碼排列成:110,轉(zhuǎn)換為十進(jìn)制為6,所以是第6位出錯(cuò) 故要傳送的信息為 01 0 0 101 ;去除校驗(yàn)位,即為0101 準(zhǔn)確來(lái)說(shuō)應(yīng)該是 01 0 1 101;校驗(yàn)位可不糾錯(cuò) 4.2.7 提高訪存速度的措施1. 單字體系統(tǒng)原假設(shè)存儲(chǔ)字長(zhǎng)等于機(jī)器字長(zhǎng),也就是說(shuō)CPU一次從存儲(chǔ)器當(dāng)中只能取出一條指令(與機(jī)器字長(zhǎng)相等的數(shù)據(jù)) 單體多字系統(tǒng):把存儲(chǔ)器的存儲(chǔ)字長(zhǎng)加長(zhǎng)(增加存儲(chǔ)器的帶寬),比如,CPU為16位,存儲(chǔ)字長(zhǎng)我們可以設(shè)計(jì)成64位,CPU每一次訪問(wèn)存儲(chǔ)器,都可以訪問(wèn)出4個(gè)機(jī)器字(4條指令),下一次再取指令時(shí),就可以從數(shù)據(jù)寄存器當(dāng)中讀取指令。 單體多字系統(tǒng)的缺陷:
![]() 2. 單體改進(jìn)->多體并行系統(tǒng)高位交叉——用于存儲(chǔ)容量拓展順序?qū)Υ鎯?chǔ)體進(jìn)行編碼(編完第一個(gè)存儲(chǔ)體,再編第二個(gè)存儲(chǔ)體),前兩位00為存儲(chǔ)體的編號(hào),后四位為存儲(chǔ)體中的地址的編號(hào),每一個(gè)存儲(chǔ)體都有單獨(dú)的數(shù)據(jù)寄存器和地址寄存器,能獨(dú)立處理讀寫信號(hào),從而達(dá)到4個(gè)存儲(chǔ)體并行工作的效果。 不足:如果按序存儲(chǔ)和按序讀取,那么4個(gè)存儲(chǔ)體中,可能存在有一個(gè)存儲(chǔ)體非常繁忙,而其他幾個(gè)存儲(chǔ)體非常空閑的情況。 高位交叉的原理就是上文中提到的:存儲(chǔ)器容量擴(kuò)展中字、位擴(kuò)展 ![]() 低位交叉——用于帶寬訪問(wèn)速度提高對(duì)高位交叉進(jìn)行改進(jìn),橫向?qū)Υ鎯?chǔ)體進(jìn)行編碼(第一個(gè)存儲(chǔ)體和第二個(gè)存儲(chǔ)體輪流進(jìn)行編碼),前四位為存儲(chǔ)體中的地址的編號(hào),后兩位為存儲(chǔ)體的地址。 ![]() 低位交叉的特點(diǎn): 在不改變存取周期的前提下,增加存儲(chǔ)器的帶寬 ![]() 上圖顯示了,在一個(gè)訪存周期內(nèi),可分為4個(gè)小訪存時(shí)間,每個(gè)小的訪存時(shí)間可以分別控制一個(gè)存儲(chǔ)體進(jìn)行讀寫。 設(shè)四體低位交叉存儲(chǔ)器,存取周期為 T,總線傳輸周期為 τ ,為實(shí)現(xiàn)流水線方式存取,應(yīng)滿足 T = 4 τ 。 ![]() 連續(xù)讀取 4 個(gè)字所需的時(shí)間為 T + (4 - 1) τ 總結(jié):采用單體多字系統(tǒng)提高訪存速度辦法的前提是, 指令和數(shù)據(jù)在主存內(nèi)必須是連續(xù)存放的,一旦遇到轉(zhuǎn)移指令、或者操作數(shù)據(jù)不能連續(xù)存放,這種方法的效果就不明顯。 3. 高性能存儲(chǔ)芯片SDRAM(同步DRAM)在系統(tǒng)時(shí)鐘的控制下進(jìn)行讀出和寫入—— CPU 無(wú)須等待 RDRAM由 Rambus 開發(fā),主要解決 存儲(chǔ)器帶寬 問(wèn)題 帶 Cache 的 DRAM在 DRAM 的芯片內(nèi) 集成 了一個(gè)由 SRAM 組成的 Cache ,有利于 猝發(fā)式讀取 (連續(xù)的存儲(chǔ)單元進(jìn)行讀取) 4.3 高速緩沖存儲(chǔ)器4.3.1 概述為什么要使用高速緩沖存儲(chǔ)器? ![]() 使用高速緩沖存儲(chǔ)器,需要遵循程序訪問(wèn)的局部性原理,即要求CPU使用的指令,大部分都能夠在緩存中找到。 三種不同類型的局部性:
4.3.2 Cache的工作原理主存與緩存按塊存儲(chǔ),塊的大小相同,塊內(nèi)陸址相同。 cache的結(jié)構(gòu)其實(shí)和內(nèi)存的結(jié)構(gòu)類似,也包含地址和內(nèi)容,只是cache的內(nèi)容除了存的數(shù)據(jù)(data)之外,還包含存的數(shù)據(jù)的物理內(nèi)存的地址信息(tag),因?yàn)镃PU發(fā)出的尋址信息都是針對(duì)物理內(nèi)存發(fā)出的,所以cache中除了要保存數(shù)據(jù)信息之外,還要保存數(shù)據(jù)對(duì)應(yīng)的地址,這樣才能在cache中根據(jù)物理內(nèi)存的地址信息查找物理內(nèi)存中對(duì)應(yīng)的數(shù)據(jù)。(當(dāng)然為了加快尋找速度,cache中一般還包含一個(gè)有效位(valid),用來(lái)標(biāo)記這個(gè)cache line是否保存著有效的數(shù)據(jù))。一個(gè)tag和它對(duì)應(yīng)的數(shù)據(jù)組成的一行稱為一個(gè)cache line。如下圖所示,下表中的一行就是一個(gè)cache line。 ![]() 知道了cache的結(jié)構(gòu)之后,如何在cache中去尋找對(duì)應(yīng)的數(shù)據(jù)呢?簡(jiǎn)單起見,我們先選擇直接映射的cache組成方式(參見下文)進(jìn)行下文的分析。 首先對(duì)于一段物理內(nèi)存(block),該物理內(nèi)存上的每個(gè)字節(jié)的地址劃分為以下幾段: ![]() 這樣的話物理內(nèi)存中的數(shù)據(jù)到cache的映射關(guān)系如下圖所示: ![]() 上圖四的映射原則就是:根據(jù)物理地址的中間三位(index字段)來(lái)定位當(dāng)前數(shù)據(jù)應(yīng)該在cache的哪一行,把物理地址的tag字段和該地址對(duì)應(yīng)的內(nèi)容放入對(duì)應(yīng)的cache line的tag字段和data字段,并把相應(yīng)的valid位置置為1。那么在之后進(jìn)行cache尋找的時(shí)候就可以根據(jù)cache line的tag字段來(lái)辨認(rèn)當(dāng)前l(fā)ine中的數(shù)據(jù)是數(shù)據(jù)哪個(gè)block的。 上圖四中的地址00 000 00~11 111 11按照?qǐng)D三的原則進(jìn)行地址劃分:地址的最高兩位為Tag字段;中間三位為index字段;最低兩位為Block Offset 字段。 由于Block Offset是兩位,也就是一個(gè)block的大小是22=4個(gè)字節(jié)的數(shù)據(jù),也就是一個(gè)cache line的data字段包含4個(gè)字節(jié)的數(shù)據(jù);index為3位,說(shuō)明cache共包含23=8個(gè)組(對(duì)于直接映射的cache,也稱為8個(gè)行);很明顯,cache的一個(gè)行中只能存儲(chǔ)1 塊(Block )=4字節(jié)的數(shù)據(jù),但是按照?qǐng)D四的映射方式,會(huì)有2^(tag位數(shù)) = 2^2 = 4塊的數(shù)映射到同一個(gè)行,此時(shí)通過(guò)Tag字段的比較來(lái)辨別是不是我們要取數(shù)據(jù)的地址,如果不是的話,也就是發(fā)生了cache的缺失。 如圖四的Block 0和Block 1的index字段都是000,按照上面的理論它們都應(yīng)該映射到第 000=0行(這兒的行也就是組,因?yàn)閳D四是直接映射的cache),但是現(xiàn)在第0行的內(nèi)容是K、L、M、N,也就是Block 1的內(nèi)容,為什么呢?仔細(xì)看該cache line的tag=01,映射到第0行的塊只有Block 1的tag字段=01,所以可以得知此時(shí)該cache line中存儲(chǔ)的數(shù)據(jù)是Block 1的數(shù)據(jù),此時(shí)如果CPU發(fā)出的訪存請(qǐng)求是訪問(wèn)Block 0 的話,也就是發(fā)生了缺失。此時(shí)進(jìn)一步定量分析的話,共有4個(gè)數(shù)據(jù)塊競(jìng)爭(zhēng)使用cache 第0行的位置,也就是說(shuō)cache的命中率為25%。 上面的過(guò)程總結(jié)起來(lái)就是: 物理內(nèi)存的索引字段(Index)選擇cache 的行,通過(guò)對(duì)比物理內(nèi)存和cache line的Tag來(lái)判斷是否命中。塊偏移字段(Block Offset)可以從cache line的數(shù)據(jù)塊中選擇期望數(shù)據(jù)。注意在這個(gè)過(guò)程中cache的index是不占空間的,它就類似于物理內(nèi)存的地址,對(duì)于物理內(nèi)存來(lái)說(shuō)是通過(guò)地址去尋找數(shù)據(jù),對(duì)于cache來(lái)說(shuō),是通過(guò)index來(lái)找到對(duì)應(yīng)的cache line,或者更通俗的講就是:cache line的地址對(duì)應(yīng)的就是物理內(nèi)存的index字段。 此時(shí)該cache的容量計(jì)算如下:每一個(gè)cache line的數(shù)據(jù)字段占4個(gè)字節(jié),共23=8行,所以數(shù)據(jù)占據(jù)4×8=32個(gè)字節(jié),一個(gè)cache line中tag字段和valid位占2+1=3bit,整個(gè)cache的tag+valid=3bit×8行=24bit=3Byte,通常情況下我們都是以cache中數(shù)據(jù)部分占的空間表示cache的容量,也就是32字節(jié),但是實(shí)際上,它還額外多占用了3字節(jié)的存儲(chǔ)空間。 上面一大段廢話說(shuō)的就幾下幾點(diǎn):
1. Cache的命中率主存和緩存 按塊存儲(chǔ), 塊的大小相同;緩存共有 C 塊,主存共有 M 塊 ,主存 M 塊的數(shù)量>>(遠(yuǎn)遠(yuǎn)大于) 緩存 C塊的數(shù)量 ![]() 命中: 主存塊 調(diào)入 緩存,主存塊與緩存塊 建立 了對(duì)應(yīng)關(guān)系,用 標(biāo)記記錄 與某緩存塊建立了對(duì)應(yīng)關(guān)系的 主存塊號(hào) 未命中: 主存塊與緩存塊 未建立 對(duì)應(yīng)關(guān)系,主存塊 未調(diào)入 緩存 Cache 的命中率 :CPU 欲訪問(wèn)的信息在 Cache 中的 比率 ,命中率 與 Cache 的 容量 與 塊長(zhǎng) 有關(guān) ,一般每塊可取 4 ~ 8 個(gè)字 , 塊長(zhǎng)取一個(gè)存取周期內(nèi)從主存調(diào)出的信息長(zhǎng)度 2. Cache –主存系統(tǒng)的效率效率 e 與 命中率 有關(guān) ![]() 設(shè) Cache 命中率 為 h , 訪問(wèn) Cache 的時(shí)間為 t c , 訪問(wèn) 主存 的時(shí)間為 t m ![]() 4.3.3 Cache的基本結(jié)構(gòu)將主存地址映射到緩存中稱為地址映射,將主存地址變換成緩存地址稱為地址變換,當(dāng)新的主存塊需要調(diào)入緩存中,而它的可用位置又被占用時(shí),需根據(jù)替換算法解決調(diào)入問(wèn)題。 ![]() 4.3.4 Cache的讀寫操作讀操作如果命中緩存,直接從緩存中獲取信息,如果沒命中,從主存中查找信息。如果緩存Cache滿,根據(jù)替換算法,把從主存中讀取的信息放入緩存。 Cache的讀操作流程圖 ![]() 寫操作寫直達(dá)法(Write – through) 寫操作時(shí)數(shù)據(jù)既寫入 Cache又寫入主存, 寫操作時(shí)間就是訪問(wèn)主存的時(shí)間 , Cache塊退出時(shí),不需要對(duì)主存執(zhí)行寫操作,更新策略比較容易實(shí)現(xiàn)。
寫回法(Write – back) 寫操作時(shí)只把數(shù)據(jù)寫入 Cache 而不寫入主存,當(dāng) Cache 數(shù)據(jù)被替換出去時(shí)才寫回主存, 寫操作時(shí)間就是訪問(wèn) Cache 的時(shí)間, Cache塊退出時(shí),被替換的塊需寫回主存,增加了Cache 的復(fù)雜性。
Cache的改進(jìn)
4.3.5 Cache-主存的地址映射直接映射主存中的任意塊映射到緩存中的唯一塊,每個(gè)主存塊只與一個(gè)緩存塊相對(duì)應(yīng),但是實(shí)現(xiàn)簡(jiǎn)單。 特點(diǎn):不靈活,每個(gè)主存塊只能與固定對(duì)應(yīng)某個(gè)緩存塊,即使還空著許多位置也不能使用。這使得直接映射的塊沖突概率最高,空間利用率最低。 ![]() 全相聯(lián)映射直接映射的另一個(gè)極端,可以把主存數(shù)據(jù)塊裝入 Cache 中的任何位置。 全相聯(lián)映射方式的優(yōu)點(diǎn)是比較靈活,Cache 塊的沖突概率低,空間利用率高,命中率也高,缺點(diǎn)是地址變換速度慢,實(shí)現(xiàn)成本高。 ![]() 組相聯(lián)映射組相聯(lián)映射是直接映射和全相聯(lián)映射相結(jié)合的方式,將主存和cache都分成若干段,并且使他們每組所包含的塊數(shù)都相等,組之間采用全相聯(lián)映射,組內(nèi)塊之間采用直接映射。 直接映射和全相連映射的折中。 ![]() 4.3.6 替換算法
4.4 輔助存儲(chǔ)器4.4.1 概述例如:磁盤、光盤、硬盤 特點(diǎn):不直接和CPU交換信息;斷電后能保存信息 4.4.2 硬磁盤存儲(chǔ)器1.硬磁盤存儲(chǔ)器的類型
2. 硬磁盤存儲(chǔ)器結(jié)構(gòu)![]() 磁盤控制器
磁盤控制器是主機(jī)與磁盤驅(qū)動(dòng)器之間的接口:對(duì)主機(jī)(通過(guò)總線) 對(duì)驅(qū)動(dòng)器(設(shè)備接口) 4.4.3 光盤存儲(chǔ)器1. 概述采用光存儲(chǔ)技術(shù);利用激光寫入和讀出
2. 光盤存儲(chǔ)原理
4.5 補(bǔ)充簡(jiǎn)述用戶找一個(gè)數(shù)據(jù),計(jì)算機(jī)內(nèi)部執(zhí)行過(guò)程: CPU寄存器 -> Cache -> RAM的MDR -> RAM -> 輔存 本章完 敬愛與明天 |
|