這一篇主要來(lái)介紹存儲(chǔ)區(qū),總線,以及IO設(shè)備等其他幾大組件,來(lái)了解整個(gè)計(jì)算機(jī)是如何工作的。 這些東西都是看得見(jiàn)摸得著的硬件,平時(shí)我們買(mǎi)電腦時(shí)最關(guān)注的就是CPU的速度,內(nèi)存的大小,主板芯片等等的參數(shù)。
1. 存儲(chǔ)器
前面我們以一個(gè)簡(jiǎn)單通用的計(jì)算機(jī)模型來(lái)介紹了CPU的工作方式,CPU執(zhí)行指令,而存儲(chǔ)器為CPU提供指令和數(shù)據(jù)。 在這個(gè)簡(jiǎn)單的模型中,存儲(chǔ)器是一個(gè)線性的字節(jié)數(shù)組。CPU可以在一個(gè)常數(shù)的時(shí)間內(nèi)訪問(wèn)每個(gè)存儲(chǔ)器的位置,雖然這個(gè)模型是有效的,但是并不能完全反應(yīng)現(xiàn)代計(jì)算機(jī)實(shí)際的工作方式。
1.1 存儲(chǔ)器系統(tǒng)層次結(jié)構(gòu)
在前面介紹中,我們一直把存儲(chǔ)器等同于了內(nèi)存,但是實(shí)際上在現(xiàn)代計(jì)算機(jī)中,存儲(chǔ)器系統(tǒng)是一個(gè)具有不同容量,不同訪問(wèn)速度的存儲(chǔ)設(shè)備的層次結(jié)構(gòu)。整個(gè)存儲(chǔ)器系統(tǒng)中包括了寄存器、Cache、內(nèi)部存儲(chǔ)器、外部存儲(chǔ)。下圖展示了一個(gè)計(jì)算機(jī)存儲(chǔ)系統(tǒng)的層次圖。層次越高速度越快,但是價(jià)格越高,而層次越低,速度越慢,價(jià)格越低。
相對(duì)于CPU來(lái)說(shuō),存儲(chǔ)器的速度是相對(duì)比較慢的。無(wú)論CPU如何發(fā)展,速度多塊,對(duì)于計(jì)算機(jī)來(lái)說(shuō)CPU總是一個(gè)稀缺的資源,所以我們應(yīng)該最大程度的去利用CPU。其面我們提到過(guò)CPU周期,一個(gè)CPU周期是取1條指令的最短的時(shí)間。由此可見(jiàn),CPU周期在很大程度上決定了計(jì)算機(jī)的整體性能。你想想如果當(dāng)CPU去取一條指令需要2s,而執(zhí)行一個(gè)指令只需要2ms,對(duì)于計(jì)算機(jī)來(lái)說(shuō)性能是多么大的損失。所以存儲(chǔ)器的速度對(duì)于計(jì)算機(jī)的速度影響是很大的。
對(duì)于我們來(lái)說(shuō),總是希望存儲(chǔ)器的速度能和CPU一樣或盡量的塊,這樣一個(gè)CPU周期需要的時(shí)鐘周期就越少。但是現(xiàn)實(shí)是,這樣的計(jì)算機(jī)可能相當(dāng)?shù)陌嘿F。所以在計(jì)算機(jī)的存儲(chǔ)系統(tǒng)中,采用了一種分層的結(jié)構(gòu)。速度越快的存儲(chǔ)器容量越小,這樣就能做到在性能和價(jià)格之間的一個(gè)很好的平衡。
1.2 存儲(chǔ)技術(shù)
計(jì)算機(jī)的發(fā)展離不開(kāi)存儲(chǔ)器的發(fā)展,早起的計(jì)算機(jī)沒(méi)用硬盤(pán),只有幾千字節(jié)的RAM可用。而我們現(xiàn)在4G,8G的內(nèi)存已經(jīng)隨處可見(jiàn),1T的大硬盤(pán)以及上百G的固態(tài)硬盤(pán),而價(jià)格也比10年,20年前便宜的很多很多。所以我先大概了解下各種存儲(chǔ)技術(shù)。目前存儲(chǔ)技術(shù)大致分為SRAM存儲(chǔ)器、DRAM存儲(chǔ)器、ROM存儲(chǔ)器和磁盤(pán)。
1.2.1 寄存器
在上一篇文章的圖中我們有看得CPU內(nèi)部有很多寄存器,而上一張圖也顯示,寄存器在存儲(chǔ)層次結(jié)構(gòu)的頂端。它也叫觸發(fā)器,它往往和CPU同時(shí)鐘頻率,所以速度非???。但是一個(gè)寄存器需要20多個(gè)晶體管,所以如果大量使用,CPU的體積會(huì)非常大。所以在CPU中只有少量的寄存器。而每個(gè)寄存器的大小都是8-64字節(jié)。
1.2.2 RAM隨機(jī)訪問(wèn)存儲(chǔ)
RAM(Read-Access Memory)分為兩類(lèi),靜態(tài)(SRAM)和動(dòng)態(tài)(DRAM)。SDRAM比DRAM要快的多,但是價(jià)格也要貴的多。
靜態(tài)RAM: SRAM將每個(gè)位存儲(chǔ)在一個(gè)雙穩(wěn)態(tài)的存儲(chǔ)單元中,每個(gè)存儲(chǔ)單元是用一個(gè)六晶體管電路實(shí)現(xiàn)的。它的特點(diǎn)是可以無(wú)限期(只要有電)的保持在兩個(gè)穩(wěn)定狀態(tài)中的一個(gè)(正好可以存放0或1),而其他任何狀態(tài)都是不穩(wěn)定的會(huì)馬上切換到這兩個(gè)狀態(tài)中的一個(gè);
動(dòng)態(tài)RAM: DRAM是利用電容內(nèi)儲(chǔ)存電荷的多寡來(lái)代表一個(gè)二進(jìn)制位元(bit)是1還是0,每一bit由一個(gè)晶體管和電容組成。由于在現(xiàn)實(shí)中電容會(huì)有漏電的現(xiàn)象,導(dǎo)致電位差不足而使記憶消失,因此除非電容經(jīng)常周期性地充電,否則無(wú)法確保記憶長(zhǎng)存。由于這種需要定時(shí)刷新的特性,因此被稱為“動(dòng)態(tài)”記憶體。
SRAM相比DRAM速度更快功耗更低,而由于結(jié)構(gòu)相對(duì)復(fù)雜占用面積較大,所以一般少量在CPU內(nèi)部用作Cache,而不適合大規(guī)模的集成使用,如內(nèi)存。而DRAM主要用來(lái)作為計(jì)算機(jī)的內(nèi)部主存。
Cache: 目前我們CPU中一般集成了2到3級(jí)的Cache,容量從128K到4M。對(duì)于CPU總的Cache來(lái)說(shuō),它們的也是和CPU同頻率的,所以理論上執(zhí)行速度和寄存器應(yīng)該是相同的,但是Cache往往用來(lái)存儲(chǔ)一些指令和數(shù)據(jù),這樣就存在一個(gè)命中的問(wèn)題。當(dāng)沒(méi)有命中的時(shí)候,需要向下一集的存儲(chǔ)器獲取新的數(shù)據(jù),這時(shí)Cache會(huì)被lock,所以導(dǎo)致實(shí)際的執(zhí)行速度要比寄存器慢。同樣對(duì)于L1,L2,L3來(lái)說(shuō),速度也是越來(lái)越慢的;
主存: 也就是我們說(shuō)的內(nèi)存,使用DRAM來(lái)實(shí)現(xiàn)。但是我們目前聽(tīng)的內(nèi)存一般叫DDR SDRAM,還有早期的SDRAM。這是一種同步的DRAM技術(shù),我們不需要了解他的詳情,只需要知道它能有效的提高DRAM的傳輸帶寬。而DDR表示雙倍的速率,而現(xiàn)在又有了DDR2,DDR3,DDR4,他們的帶寬也是越來(lái)越大。
1.2.3 ROM只讀存儲(chǔ)
前面的RAM在斷電后都會(huì)丟失數(shù)據(jù),所以他們是易失的。另一方面非易失的存儲(chǔ)器即便在斷點(diǎn)后也能保存數(shù)據(jù)。一般我們稱之為ROM(Read-Only Memory)。雖然這么說(shuō),但是ROM在特殊的情況下還是可以寫(xiě)入數(shù)據(jù)的,否則就不能叫存儲(chǔ)器了。
PROM: 可編程ROM,只能被編程一次,PROM包含一種熔絲,每個(gè)存儲(chǔ)單元只能用高電流燒斷一次;
EPROM:可擦寫(xiě)可編程ROM,有一個(gè)透明的石英窗口,紫外線通過(guò)窗口照射到存儲(chǔ)單元就被清除為0,而對(duì)它編程是使用一種特殊的設(shè)備來(lái)寫(xiě)入1。寫(xiě)入次數(shù)1K次;
EEPROM:: 電子可擦除可編程ROM,不需要特殊設(shè)備而可以直接在印制的電路板上編程。寫(xiě)入次數(shù)10萬(wàn)次;
Flash Memory: 這是我們見(jiàn)到最多的閃存,有NOR Flash、NAND Flash、V-NAND Flash、SLC、MLC、TLC。雖然是基于EEPROM,但是速度上卻要快很多。其中NOR 、NANA Flash大量的使用在U盤(pán),SD卡、手機(jī)存儲(chǔ)上。
ROM在計(jì)算機(jī)中應(yīng)用也比較多,比如我們的BIOS芯片,最開(kāi)始采用PROM,后來(lái)使用EPROM,如果損壞計(jì)算機(jī)就無(wú)法啟動(dòng)了。而目前手機(jī)中也采用ROM來(lái)燒入系統(tǒng),而RAM作為內(nèi)存,使用Flash Memory作為機(jī)身存儲(chǔ)。
1.2.4 磁盤(pán)存儲(chǔ)
也就是我們最常見(jiàn)的硬盤(pán)。目前硬盤(pán)主流已經(jīng)是500G,1T。轉(zhuǎn)速也在7200轉(zhuǎn)左右。相對(duì)于8G的內(nèi)存,一個(gè)500G的硬盤(pán)可以說(shuō)是相當(dāng)?shù)谋阋?。但是?wèn)題在于他的速度非常的慢,從磁盤(pán)讀取數(shù)據(jù)需要幾個(gè)毫秒,而CPU時(shí)鐘周期是以納秒計(jì)算。磁盤(pán)讀取操作要比DRAM慢10萬(wàn)倍,比SRAM慢百萬(wàn)倍。
相對(duì)于CPU,內(nèi)部存儲(chǔ)的電子結(jié)構(gòu),磁盤(pán)存儲(chǔ)是一種機(jī)械結(jié)構(gòu)。數(shù)據(jù)都通過(guò)電磁流來(lái)改變極性的方式被電磁流寫(xiě)到磁盤(pán)上,而通過(guò)相反的方式讀回。一個(gè)硬盤(pán)由多個(gè)盤(pán)片組成,每個(gè)盤(pán)片被劃分為磁道,扇區(qū)和最小的單位簇。而每個(gè)盤(pán)面都有一個(gè)磁頭用來(lái)讀取和寫(xiě)入數(shù)據(jù)。而硬盤(pán)的馬達(dá)裝置則控制了磁頭的運(yùn)動(dòng)。
1.2.5 虛擬硬盤(pán)(VHD)和固態(tài)硬盤(pán)(SSD)
隨著計(jì)算機(jī)的發(fā)展,緩慢的磁盤(pán)速度已經(jīng)成為計(jì)算機(jī)速度的障礙了。大多數(shù)情況下,你的CPU夠快,內(nèi)存夠大,可是打開(kāi)一個(gè)程序或游戲時(shí),加載的速度總還是很慢。(關(guān)于程序加載的過(guò)程后面的文章會(huì)講到)。原因就是磁盤(pán)讀寫(xiě)速度太慢,所以一度出現(xiàn)了虛擬硬盤(pán)。就是把一部分內(nèi)存虛擬成硬盤(pán),這樣一些緩存文件直接放到內(nèi)存中,這樣就加快了程序訪問(wèn)這些數(shù)據(jù)的速度。但是他的問(wèn)題是易失的。當(dāng)然你可以保存到磁盤(pán),但是加載和回寫(xiě)的速度會(huì)隨著數(shù)據(jù)量加大而加大。所以這個(gè)適用于一些臨時(shí)數(shù)據(jù)的情況,比如瀏覽器緩存文件。
而固態(tài)硬盤(pán)是最近幾年出來(lái)的,而且隨著技術(shù)的發(fā)展,價(jià)格也越來(lái)越便宜,越來(lái)越多的人采用SSD+HHD的方式來(lái)搭建系統(tǒng),提高系統(tǒng)的速度。其實(shí)SSD在上世紀(jì)80年代就有基于DRAM的產(chǎn)品,但是因?yàn)橐资院蛢r(jià)格而無(wú)法推廣開(kāi)來(lái)。而現(xiàn)在的SSD則是使用Flash Memory。目前市面上最常見(jiàn)的是SLC,MLC,TLC存儲(chǔ)介質(zhì)的固態(tài)硬盤(pán)。我們知道Flash都是與寫(xiě)入次數(shù)限制的。而SLC》MLC》TLC。目前主流的SSD都是使用MLC,比如Intel 520,三星830系列。當(dāng)然目前三星也退出了基于TLC的固態(tài)硬盤(pán),價(jià)格相對(duì)要便宜一些。
1.2.6 遠(yuǎn)程存儲(chǔ)
簡(jiǎn)單可以理解為是將數(shù)據(jù)指令存儲(chǔ)在其他機(jī)器上,比如分布式系統(tǒng),WebService Server,HTTP Server以及現(xiàn)在炒的火熱的云端存儲(chǔ)。計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)相互連接。比較起磁盤(pán),遠(yuǎn)程存儲(chǔ)的速度是以秒來(lái)計(jì)算。
1.3 局部性
通過(guò)上面介紹我們對(duì)計(jì)算機(jī)存儲(chǔ)器有了一個(gè)了解,并且知道了存儲(chǔ)器層次越高速度越快。那么為什么我們要對(duì)存儲(chǔ)器分層呢? 分成是為了彌補(bǔ)CPU和存儲(chǔ)器直接速度的差距。這種方式之所有有效,是因?yàn)閼?yīng)用程序的一個(gè)特性:局部性。
我們知道計(jì)算機(jī)的體系是存儲(chǔ)程序,順序執(zhí)行。所以在執(zhí)行一個(gè)程序的指令時(shí),它后面的指令有很大的可能在下一個(gè)指令周期被執(zhí)行。而一個(gè)存儲(chǔ)區(qū)被訪問(wèn)后,也可能在接下來(lái)的操作中再次被訪問(wèn)。這就是局部性的兩種形式:
時(shí)間局部性
空間局部性
對(duì)于現(xiàn)代計(jì)算機(jī)來(lái)說(shuō),無(wú)論是應(yīng)用程序,操作系統(tǒng),硬件的各個(gè)層次我們都是用了局部性。
硬件:通過(guò)引入Cache存儲(chǔ)器來(lái)保存最近訪問(wèn)的指令數(shù)據(jù)來(lái)提高對(duì)主存的訪問(wèn)速度。
操作系統(tǒng): 允許是用主存作為虛擬地址空間被引用塊的高速緩存以及從盤(pán)文件的塊的高速緩存。
應(yīng)用程序:將一些遠(yuǎn)程服務(wù)比如HTTP Server的HTML頁(yè)面緩存在本度的磁盤(pán)中。
以上2段代碼差別只有for循環(huán)的順序,但是局部性卻相差了很多。我們知道數(shù)組在內(nèi)存中是按照行的順序來(lái)存儲(chǔ)的。但是CODE1確實(shí)按列去訪問(wèn),這可能就導(dǎo)致緩存不命中(需要的數(shù)據(jù)并不在Cache中,因?yàn)镃ache存儲(chǔ)的是連續(xù)的內(nèi)存數(shù)據(jù),而CODE1訪問(wèn)的是不聯(lián)系的),也就降低了程序運(yùn)行的速度。
2 存儲(chǔ)器訪問(wèn)和總線
前面介紹了存儲(chǔ)器的存儲(chǔ)技術(shù)和分層,也一直提到CPU從存儲(chǔ)器中獲取數(shù)據(jù)和指令,這一節(jié)就介紹一下CPU和存儲(chǔ)器之間是如何通信的。
2.1 總線
所謂總線是各種功能部件之間傳送信息的公共通信干線,它是由導(dǎo)線組成的傳輸線束。我們知道計(jì)算機(jī)有運(yùn)算器,控制器,存儲(chǔ)器,輸入輸出設(shè)備這五大組件,所以總線就是用來(lái)連接這些組件的導(dǎo)線。
按照計(jì)算機(jī)所傳輸?shù)男畔⒎N類(lèi),計(jì)算機(jī)的總線可以劃分為
數(shù)據(jù)總線: 數(shù)據(jù)總線DB是雙向三態(tài)形式的總線,即它既可以把CPU的數(shù)據(jù)傳送到存儲(chǔ)器或輸入輸出接口等其它部件,也可以將其它部件的數(shù)據(jù)傳送到CPU。數(shù)據(jù)總線的位數(shù)是微型計(jì)算機(jī)的一個(gè)重要指標(biāo),通常與微處理的字長(zhǎng)相一致。我們說(shuō)的32位,64位計(jì)算機(jī)指的就是數(shù)據(jù)總線。
地址總線: 地址總線AB是專(zhuān)門(mén)用來(lái)傳送地址的,由于地址只能從CPU傳向外部存儲(chǔ)器或I/O端口,所以地址總線總是單向三態(tài)的,這與數(shù)據(jù)總線不同。地址總線的位數(shù)決定了CPU可直接尋址的內(nèi)存空間大小。
控制總線:控制總線主要用來(lái)傳送控制信號(hào)和時(shí)序信號(hào)??刂瓶偩€的傳送方向由具體控制信號(hào)而定,一般是雙向的,控制總線的位數(shù)要根據(jù)系統(tǒng)的實(shí)際控制需要而定。其實(shí)數(shù)據(jù)總線和控制總線可以共用。
總線也可以按照CPU內(nèi)外來(lái)分類(lèi):
內(nèi)部總線:在CPU內(nèi)部,寄存器之間和算術(shù)邏輯部件ALU與控制部件之間傳輸數(shù)據(jù)所用的總線稱為片內(nèi)部總線。
外部總線:通常所說(shuō)的總線指片外部總線,是CPU與內(nèi)存RAM、ROM和輸入/輸出設(shè)備接口之間進(jìn)行通訊的通路,也稱系統(tǒng)總線。
2.2 控制芯片
前面我面介紹了總線的分類(lèi),在我們的簡(jiǎn)單模型中。CPU通過(guò)總線和存儲(chǔ)器之間直接進(jìn)行通信。實(shí)際上在現(xiàn)代的計(jì)算機(jī)中,存在一個(gè)控制芯片的模塊。CPU需要和存儲(chǔ)器,I/O設(shè)備等進(jìn)行交互,會(huì)有多種不同功能的控制芯片,我們稱之為控制芯片組(Chipset)。
對(duì)于目前的計(jì)算機(jī)結(jié)構(gòu)來(lái)說(shuō),控制芯片集成在主板上,典型的有南北橋結(jié)構(gòu)和單芯片結(jié)構(gòu)。與芯片相連接的總線可以分為前端總線(FSB)、存儲(chǔ)總線、IQ總線,擴(kuò)展總線等。
南北橋芯片結(jié)構(gòu):
北橋芯片,它控制著CPU的類(lèi)型,主板的總線頻率,內(nèi)存控制器,顯示核心等。它直接與CPU、內(nèi)存、顯卡、南橋相連,所以它數(shù)據(jù)量非常大;
前端總線:是將CPU連接到北橋芯片的總線。FSB的頻率是指CPU和北橋之間的數(shù)據(jù)交換速度。速度越快,數(shù)據(jù)帶寬越高,計(jì)算機(jī)性能越好;
內(nèi)存總線:是將內(nèi)存連接到北橋芯片的總線。用于和北橋之間的通信;
顯卡總線:是將顯卡連接到北橋芯片的總新。目前有AGP,PCI-E等接口。其實(shí)并沒(méi)有顯卡總線一說(shuō),一般認(rèn)為屬于I/O總線;
南橋芯片,它主要負(fù)責(zé)外部接口和內(nèi)部CPU的聯(lián)系;
I/O總線:連接外部I/O設(shè)備連接到南橋的總線, 比如USB設(shè)備,ATA,SATA設(shè)備,以及一些擴(kuò)展接口;
擴(kuò)展總線:主要是主板上提供的一些PCI,ISA等插槽;
單芯片結(jié)構(gòu): 單芯片組主要是是取消了北橋,因?yàn)楝F(xiàn)在CPU中內(nèi)置了內(nèi)存控制器,不需要再通過(guò)北橋來(lái)控制,這樣就能提高內(nèi)存控制器的頻率,減少延遲。而現(xiàn)在一些CPU還集成了顯示單元。也使得顯示芯片的頻率更高,延遲更低。
2.3 運(yùn)行頻率
數(shù)據(jù)帶寬 = (總線頻率*數(shù)據(jù)位寬)/ 8
2.3.1 外頻
外頻是建立在數(shù)字脈沖信號(hào)震動(dòng)速度基礎(chǔ)上的。它是CPU與系統(tǒng)總線以及其他外部設(shè)備共同運(yùn)行的速度。我們知道計(jì)算機(jī)中有一個(gè)時(shí)序發(fā)生器來(lái)保證各個(gè)部件協(xié)同工作,而這里說(shuō)的外頻率就是這個(gè)時(shí)序發(fā)生器的頻率。外頻也是系統(tǒng)總線的工作頻率。
2.3.2 頻率和控制芯片
在計(jì)算機(jī)剛開(kāi)始的時(shí)候,CPU和內(nèi)存還有I/O設(shè)置是直接通過(guò)總線連接的而沒(méi)有控制芯片。所有設(shè)備都同步的工作在同一個(gè)總線頻率下。
但是隨著CPU的發(fā)展,CPU速度越來(lái)越塊。但受限于I/O設(shè)備。于是就出現(xiàn)了芯片。他使得I/O總線不在直接和CPU的系統(tǒng)總線相連。這樣就有了2個(gè)不同頻率的總線,這個(gè)芯片實(shí)際起到了一個(gè)降頻的作用,也就相對(duì)于系統(tǒng)總線的分頻技術(shù)。
但CPU速度發(fā)展相當(dāng)快,CPU的速度已經(jīng)高于內(nèi)存運(yùn)行的速度,于是引入了倍頻的概念。CPU在不改變外頻和系統(tǒng)總線頻率的情況下運(yùn)行在更高的頻率。
發(fā)展到后來(lái),就出現(xiàn)了北橋芯片,而CPU和北橋之前的總線稱為了FSB總線,而內(nèi)存與北橋之前稱為內(nèi)存總線。
2.3.2 分頻和倍頻
分頻:使得I/O設(shè)備可以和較高的外頻協(xié)同工作。比如AGP,PCI總線,運(yùn)行頻率在66MHZ和33MHZ,所以對(duì)于一個(gè)100MHZ的外頻來(lái)說(shuō),采用2/3或1/3分頻的方式就能使得CPU和外設(shè)同步的工作了。否則設(shè)備可能無(wú)法正常工作。
倍頻: 為了提高CPU頻率又正常的和內(nèi)存進(jìn)行工作,所以產(chǎn)生了倍頻。所以對(duì)于CPU來(lái)說(shuō)他實(shí)際的頻率是外頻*倍頻。
2.3.3 FSB頻率
前面我們現(xiàn)在已經(jīng)知道CPU和北橋芯片連接是通過(guò)FSB。而FSB頻率表示CPU和北橋芯片之間的工作速度。但是從前面我們就知道FSB的實(shí)際頻率是和外頻一樣的。但是隨著技術(shù)的發(fā)展,Intel的QDR技術(shù)和AMD的HT技術(shù),使得CPU在一個(gè)時(shí)鐘周期可以傳送4次數(shù)據(jù),所以對(duì)于FSB淶說(shuō)雖然工作早外頻的頻率下,但是等效的頻率是外頻的4倍。所以我們說(shuō)的FSB頻率是等效頻率,而不是實(shí)際的工作頻率。隨著技術(shù)的發(fā)展,Intel芯片的FSB有800MHz,1600HMz等等。但隨著北橋芯片的消失,F(xiàn)SB的概率也慢慢遠(yuǎn)去。
2.3.4 內(nèi)存頻率
對(duì)于內(nèi)存頻率我們可以看到,一般包括了核心頻率,總線頻率和傳輸頻率:
核心頻率和外頻類(lèi)似,是建立在脈沖震蕩信號(hào)上的。
總線頻率就是指內(nèi)存總線的工作頻率。也就是內(nèi)存和北橋芯片之間的工作頻率。
而傳輸頻率類(lèi)似FSB,是指實(shí)際傳輸數(shù)據(jù)的頻率。
對(duì)于SDR來(lái)說(shuō),它的3個(gè)頻率是一致的。而DDR在一個(gè)時(shí)鐘周期可以傳送2次數(shù)據(jù),所以它的傳輸頻率是核心和總線頻率的2倍。DDR2在DDR的基礎(chǔ)上,采用了4bit預(yù)讀,所以總線頻率是核心頻率的2倍,而DDR3采用了8bit預(yù)讀,總線頻率是核心頻率的4倍。
從下表我們就能看出。所以我們常說(shuō)的DDR3 1600,DDR2 800指的是內(nèi)存的傳輸頻率。相同的技術(shù)還有顯卡的AGP4X,8X,PCIE-8X,16X等技術(shù)。
而隨著FSB速度不斷加快,內(nèi)存的總線頻率組建成為了瓶頸,于是出現(xiàn)了DDR雙通道,雙通道是指芯片擁有2個(gè)內(nèi)存控制器,所以可以使得傳輸速率翻倍。
2.3.5 內(nèi)存總線工作方式
因?yàn)閮?nèi)存總線頻率不同,所以內(nèi)存和CPU之間存在同步和異步兩種工作方式。
同步方式:內(nèi)存總線頻率和CPU外頻相同。比如以前的PC133和P3處理器,他們以同步的方式工作在133MHZ下。而當(dāng)你超頻時(shí)就需要擁有更高總線頻率的內(nèi)存。當(dāng)然也需要北橋芯片的支持。
異步方式:內(nèi)存總線頻率和CPU外頻不同。睡著CPU外頻的提高,內(nèi)存也必須更新,所以出現(xiàn)了異步的方式。比如P4 CPU外頻為200MHz,而內(nèi)存卻可以使用DDR333來(lái)運(yùn)行。同時(shí)異步方式也在超頻時(shí)經(jīng)常使用。一般來(lái)說(shuō)會(huì)有一個(gè)內(nèi)存異步比率。在BIOS中會(huì)有相應(yīng)的選項(xiàng)。
從性能上來(lái)講,同步方式的延遲要好于異步方式,這也是為什么以前會(huì)說(shuō)P4 200外頻的CPU要使用DDR400才能發(fā)揮最大功效。但這也不是絕對(duì)的。比如我的I5處理器CPU外頻工作在100MHz,而我使用的DDR3-1600的總線頻率在200MHz,雖然不同步,但是擁有更高的傳輸速率。所以不能一概而論。
從前面我們知道了FSB對(duì)整個(gè)系統(tǒng)的性能影響很大,1600MHZ的FSB能提供的數(shù)據(jù)帶寬也只有12.8GB/s,所以隨著技術(shù)的發(fā)展,現(xiàn)在最新的計(jì)算機(jī)基本都采用了單芯片設(shè)計(jì),北橋的功能被集成到了CPU內(nèi)部。于是我們前面說(shuō)的FSB也就不存在了。對(duì)于Intel和AMD這2大芯片廠商,分別有自己的技術(shù)來(lái)提高CPU和存儲(chǔ)器以及其他設(shè)備之間的傳輸速率,滿足更高的計(jì)算要求。
QPI: Intel的QuickPath Interconnect技術(shù)縮寫(xiě)為QPI,譯為快速通道互聯(lián)。用來(lái)實(shí)現(xiàn)芯片之間的直接互聯(lián),而不是在通過(guò)FSB連接到北橋。早期20位寬的QPI連接其帶寬可達(dá)驚人的每秒25.6GB,遠(yuǎn)非FSB可比。而隨著技術(shù)發(fā)展,在高端安騰處理中峰值可以達(dá)到96GB/s。
HT:HyperTransport本質(zhì)是一種為主板上的集成電路互連而設(shè)計(jì)的端到端總線技術(shù),目的是加快芯片間的數(shù)據(jù)傳輸速度。HyperTransport技術(shù)在AMD平臺(tái)上使用后,是指AMD CPU到主板芯片之間的連接總線(如果主板芯片組是南北橋架構(gòu),則指CPU到北橋)即HT總線。HT3.1理論上可以達(dá)到51.2GB/s。
除此之外,但芯片中的QPI和HT傳輸不需要經(jīng)過(guò)北橋新片,在CPU內(nèi)存除了集成內(nèi)存控制器意外還可以集成PCI-E2.0的圖形核心,使得集成顯卡的核心頻率和數(shù)據(jù)吞吐量大幅提高。
如圖,Core I7處理器外頻只有133MHz, 使用QPI技術(shù)后總線頻率達(dá)到2.4GMhz,而使用DDR3-1600的內(nèi)存,內(nèi)存總線頻率在800MHz。
2.3.7 小結(jié)
這一結(jié)介紹了計(jì)算機(jī)總線系統(tǒng)以及CPU和各個(gè)設(shè)備之間的交互。我們可以看到除了CPU自身的速度之外,總線的速度也影響這計(jì)算機(jī)的整體性能。從發(fā)展的過(guò)程來(lái)看,總線也是一個(gè)分分合合的過(guò)程。從最初的一條總線,到后來(lái)的單獨(dú)出來(lái)的I/O總線,內(nèi)存總線,就是為了提高CPU的效率。而當(dāng)CPU和內(nèi)存速度都發(fā)展到一定階段后,又出現(xiàn)了DDR,雙通道等技術(shù),在不提高核心頻率的情況下提高了傳輸率。于是又出現(xiàn)了CPU和內(nèi)存間直接總線通信降低延遲的情況。 (從2000年開(kāi)始接觸電腦DIY,一直到07年畢業(yè),都對(duì)DIY很有興趣,但是隨著電腦越來(lái)越快,目前以及弄不太清楚了,復(fù)習(xí)這些知識(shí)也費(fèi)了我好多時(shí)間。)
3. I/O設(shè)備
前面主要介紹了系統(tǒng)總線和CPU與內(nèi)存之間的通信,最后一部分簡(jiǎn)單介紹一下CPU和I/O設(shè)備是如何通信的。對(duì)于計(jì)算機(jī)來(lái)說(shuō)輸入輸出設(shè)備也是五大組件。我們知道相對(duì)于CPU,I/O設(shè)備的工作頻率要慢的很多。比如早期的PCI接口工作頻率只有33MHz,硬盤(pán)的IDE-ATA6的傳輸速率也只有133MB/s。而現(xiàn)在的 SATA3接口速率能達(dá)到600MB/s。
3.1 I/O設(shè)備原理
對(duì)于硬件工程師來(lái)說(shuō),I/O設(shè)備是電子芯片、導(dǎo)線、電源、電子控制設(shè)備、電機(jī)等組成的物理設(shè)備。而對(duì)于程序員來(lái)說(shuō),關(guān)注的只是I/O設(shè)備的編程接口。
3.1.1 I/O設(shè)備分類(lèi)
塊設(shè)備: 塊設(shè)備把信息存放在固定大小的塊中,每個(gè)塊都有自己的地址,獨(dú)立于其他塊,可尋址。例如磁盤(pán),USB閃存,CD-ROM等。
符號(hào)設(shè)備:字符設(shè)備以字符為單位接收或發(fā)送一個(gè)字符流,字符設(shè)備不可以尋址。列入打印機(jī)、網(wǎng)卡、鼠標(biāo)鍵盤(pán)等。
3.1.2 設(shè)備控制器
I/O設(shè)備一般由機(jī)械部件和電子部件兩部分組成。電子設(shè)備一般稱為設(shè)備控制器,在計(jì)算機(jī)上一般以芯片的形式出現(xiàn),比如我們前面介紹的南橋芯片。不同的控制器可以控制不同的設(shè)備。所以南橋芯片中包含了多種設(shè)備的控制器,比如硬盤(pán)控制器,USB控制器,網(wǎng)卡、聲卡控制器等等。而通過(guò)總線以及卡槽提供和設(shè)備本身的連接。比如PCI,PCI-E,SATA,USB等。
3.1.3 驅(qū)動(dòng)程序
對(duì)于不同的設(shè)備控制器,進(jìn)行的操作控制也是不同的。所以需要專(zhuān)門(mén)的軟件對(duì)他進(jìn)行控制。這個(gè)軟件的作用就是用來(lái)專(zhuān)門(mén)和設(shè)備控制器對(duì)話,這種軟件稱為驅(qū)動(dòng)程序。一般來(lái)說(shuō)驅(qū)動(dòng)程序由硬件設(shè)別廠商提供。所以我們有時(shí)會(huì)碰到一些設(shè)備因?yàn)闆](méi)有安裝驅(qū)動(dòng)程序而無(wú)法使用的情況。 而目前的OS總都包含了大量的通用驅(qū)動(dòng)程序,使得我們?cè)诎惭b完系統(tǒng)后不需要在額外的安裝驅(qū)動(dòng)。但是通用的驅(qū)動(dòng)只能使用設(shè)備的基本功能。
驅(qū)動(dòng)程序因?yàn)槭欠遣僮飨到y(tǒng)廠商開(kāi)發(fā),并且需要被安裝到操作系統(tǒng)并調(diào)用,所以需要有一個(gè)統(tǒng)一的模型來(lái)開(kāi)發(fā)驅(qū)動(dòng)程序。否則操作系統(tǒng)是無(wú)法操作各式各樣的設(shè)備的。前面我們知道設(shè)備非為兩大類(lèi),所以一般操作系統(tǒng)都定義了這兩類(lèi)設(shè)備的標(biāo)準(zhǔn)接口。
3.1.4 內(nèi)存映射I/O
每個(gè)控制器都有幾個(gè)寄存器和CPU進(jìn)行通信。通過(guò)寫(xiě)入這些寄存器,可以命令設(shè)備發(fā)送或接受數(shù)據(jù),開(kāi)啟或關(guān)閉。而通過(guò)讀這些寄存器就能知道設(shè)備的狀態(tài)。因?yàn)榧拇嫫鲾?shù)量和大小是有限的,所以設(shè)備一般會(huì)有一個(gè)RAM的緩沖區(qū),來(lái)存放一些數(shù)據(jù)。比如硬盤(pán)的讀寫(xiě)緩存,顯卡的顯存等。一方面提供數(shù)據(jù)存放,一方面也是提高I/O操作的速度。
現(xiàn)在的問(wèn)題是CPU如何和這些設(shè)備的寄存器或數(shù)據(jù)緩沖區(qū)進(jìn)行通信呢?存在兩個(gè)可選方案:
為每個(gè)控制器分配一個(gè)I/O端口號(hào),所有的控制器可以形成一個(gè)I/O端口空間。存放在內(nèi)存中。一般程序不能訪問(wèn),而OS通過(guò)特殊的指令和端口號(hào)來(lái)從設(shè)備讀取或是寫(xiě)入數(shù)據(jù)。早期計(jì)算機(jī)基本都是這種方式。
將所有控制器的寄存器映射到內(nèi)存空間,于是每個(gè)設(shè)備的寄存器都有一個(gè)唯一的地址。這種稱為內(nèi)存映射I/O。
另一種方式是兩種的結(jié)合,寄存器擁有I/O端口,而數(shù)據(jù)緩沖區(qū)則映射到內(nèi)存空間。Pentinum就是使用這種方式,所以在IBM-PC兼容機(jī)中,內(nèi)存的0-640K是I/O端口地址,640K-1M的地址是保留給設(shè)備數(shù)據(jù)緩沖區(qū)的。(關(guān)于內(nèi)存分布后面文章會(huì)介紹)
對(duì)于我們程序員來(lái)說(shuō)這兩種方案有所不同
對(duì)于第一種方式需要使用匯編語(yǔ)言來(lái)操作,而第2種方式則可以使用C語(yǔ)言來(lái)編程,因?yàn)樗恍枰厥獾闹噶羁刂?,?duì)待I/O設(shè)備和其他普通數(shù)據(jù)訪問(wèn)方式是相同的。
對(duì)于I/O映射方式,不需要特殊的保護(hù)機(jī)制來(lái)組織對(duì)I/O的訪問(wèn),因?yàn)镺S已經(jīng)完成了這部分工作,不會(huì)把這一段內(nèi)存地址分配給其他程序。
對(duì)于內(nèi)存可用的指令,也能使用在設(shè)備的寄存器上。
任何技術(shù)有有點(diǎn)就會(huì)有缺點(diǎn),I/O內(nèi)存映射也一樣:
前面提到過(guò)Cache可以對(duì)內(nèi)存進(jìn)行緩存,但是如果對(duì)I/O映射的地址空間進(jìn)行緩存就會(huì)有問(wèn)題。所以必須有機(jī)制來(lái)禁用I/O映射空間緩存,這就增大了OS的復(fù)雜性。
另一個(gè)問(wèn)題是,因?yàn)榘l(fā)送指令后需要判斷是內(nèi)存還是I/O操作,所以它們需要能夠檢查全部的內(nèi)存空間。以前CPU,內(nèi)存和I/O設(shè)備在同一個(gè)總線上,所以檢查很方便。但是后來(lái)為了提高CPU和內(nèi)存效率,CPU和內(nèi)存之間有一條高速的總線(比如QPI)。這樣I/O設(shè)備就無(wú)法查看內(nèi)存地址,因?yàn)閮?nèi)存地址總線旁落到了內(nèi)存和CPU的高速總線上,所以需要一個(gè)額外的芯片來(lái)處理(北橋芯片,內(nèi)存控制器的作用),增大了系統(tǒng)的復(fù)雜度。
3.2 CPU和I/O設(shè)備數(shù)據(jù)交換方式
前面已經(jīng)知道CPU通過(guò)內(nèi)存映射的方式和I/O設(shè)備交換數(shù)據(jù),但是對(duì)于CPU來(lái)說(shuō),無(wú)論是從內(nèi)存還是I/O設(shè)備讀取數(shù)據(jù),都需要把地址放到地址總線上,然后在向控制總線傳遞一個(gè)READ信號(hào),還要用一條信號(hào)線來(lái)表示是從內(nèi)存還是I/O讀取數(shù)據(jù)。因?yàn)镮/O映射的內(nèi)存區(qū)域是特定的,所以不存在無(wú)法區(qū)分是內(nèi)存還是I/O操作。目前一共有3種方式進(jìn)行操作:
程序控制I/O: CPU在向I/O設(shè)備發(fā)出指令后,通過(guò)程序查詢方式檢查I/O設(shè)備是否完成工作,如果完成就讀取數(shù)據(jù),這種方式缺點(diǎn)是CPU在I/O設(shè)備工作時(shí)被占用。
中斷驅(qū)動(dòng)I/O: CPU是稀缺資源,所以為了提高利用率,減少I(mǎi)/O等待。在I/O設(shè)備工作時(shí)CPU不再等待,而是進(jìn)行其他的操作,當(dāng)I/O設(shè)備完成后,通過(guò)一個(gè)硬件中斷信號(hào)通知CPU。CPU在來(lái)處理接下來(lái)的工作,比如讀取數(shù)據(jù)存放到內(nèi)存。但是每次只能請(qǐng)求一個(gè)字節(jié),效率很低。
DMA: Direct Memory Access利用一種特性的芯片存在于CPU和I/O設(shè)備之間。CPU需要操作I/O設(shè)備時(shí)只需要發(fā)送消息給DMA芯片,后面的事情全部?jī)?nèi)又DMA來(lái)完成,當(dāng)把所需要數(shù)據(jù)放入內(nèi)存后在通知CPU進(jìn)行操作,整個(gè)過(guò)程DMA直接和內(nèi)存總線打交道,而CPU也只需要和DMA芯片和內(nèi)存交互,大大提高了速度。
總結(jié)
這一篇文章介紹了計(jì)算機(jī)組件中的存儲(chǔ)器的分類(lèi)和工作原理,以及I/O設(shè)別的工作方式。通過(guò)總線將各個(gè)部件連接起來(lái)。我們可以看到計(jì)算機(jī)的發(fā)展不光是CPU,存儲(chǔ)器以及I/O設(shè)備的發(fā)展,總線也是起了非常關(guān)鍵的作用。通過(guò)前2章的介紹,應(yīng)該對(duì)計(jì)算機(jī)硬件的工作原理有了大概的了解。后面開(kāi)始將主要偏向計(jì)算機(jī)操作系統(tǒng)軟件的工作方式。當(dāng)然這些也是和一些硬件的特性分不開(kāi)的。
評(píng)論
查看更多