《LINUX教程:計(jì)算機(jī)基礎(chǔ)系列教程一:計(jì)算機(jī)硬件》要點(diǎn):
本文介紹了LINUX教程:計(jì)算機(jī)基礎(chǔ)系列教程一:計(jì)算機(jī)硬件,希望對您有用。如果有疑問,可以聯(lián)系我們。
計(jì)算機(jī)(Computer),俗稱電腦,是一種能夠依照事先存儲的程序,自動(dòng)、高速地進(jìn)行大量數(shù)值運(yùn)算和各種信息處理的現(xiàn)代化智能電子設(shè)備.計(jì)算機(jī)硬件發(fā)展史(From Egon)
計(jì)算機(jī)體系
一臺完整的計(jì)算機(jī)硬件系統(tǒng)由以下5部門構(gòu)成:運(yùn)算器、存儲器、控制器、輸入設(shè)備、輸出設(shè)備.
CPU(Center?Processing?Unit,集運(yùn)算及控制)
整個(gè)計(jì)算機(jī)硬件系統(tǒng)中,最重要的當(dāng)屬CPU了,它在整個(gè)計(jì)算機(jī)系統(tǒng)中的作用就相當(dāng)于我們的大腦.它從內(nèi)存中取指令->解碼->執(zhí)行,然后再取指令->解碼->執(zhí)行下一條指令,周而復(fù)始,直至整個(gè)程序被執(zhí)行完成.因?yàn)榘菰L內(nèi)存以得到指令或數(shù)據(jù)的時(shí)間比cpu執(zhí)行指令花費(fèi)的時(shí)間要長得多,所以,CPU內(nèi)部都有一些用來保存關(guān)鍵變量和臨時(shí)數(shù)據(jù)的寄存器,這樣通常在cpu的指令集中專門提供一些指令,用來將一個(gè)字(可以理解為數(shù)據(jù))從內(nèi)存調(diào)入寄存器,以及將一個(gè)字從寄存器存入內(nèi)存.cpu其他的指令集可以把來自寄存器、內(nèi)存的操作數(shù)據(jù)組合,或者用兩者產(chǎn)生一個(gè)結(jié)果,比如將兩個(gè)字相加并把結(jié)果存在寄存器或內(nèi)存中.這樣再次調(diào)用寄存器中的指令就會使等待時(shí)間大大縮短.
存放器的分類:
1.保留變量和臨時(shí)結(jié)果的通用寄存器.
2.多數(shù)計(jì)算機(jī)還有一些對程序員設(shè)計(jì)的專門寄存器,其中之一便是程序計(jì)數(shù)器(或稱為指令指針),它保留了將要取出的下一條指令的內(nèi)存地址.在指令取出后,程序計(jì)算器就被更新以便執(zhí)行后期的指令.
3.另外一個(gè)寄存器便是堆棧指針,它指向內(nèi)存中當(dāng)前棧的頂端.該棧包括已經(jīng)進(jìn)入但是還沒有退出的每個(gè)過程中的一個(gè)框架.在一個(gè)過程的堆??蚣苤斜4媪擞嘘P(guān)的輸入?yún)?shù)、局部變量以及那些沒有保存在寄存器中的臨時(shí)變量.
4.最后一個(gè)非常重要的寄存器就是程序狀態(tài)字寄存器(Program Status Word,PSW),這個(gè)寄存器包括了條碼位(由比較指令設(shè)置)、CPU優(yōu)先級、模式(用戶態(tài)或內(nèi)核態(tài)),以及各種其他控制位.用戶通常讀入整個(gè)PSW,但是只對其中少量的字段寫入.在系統(tǒng)調(diào)用和I/O中,PSW非常非常非常非常非常非常重要.
除了在嵌入式系統(tǒng)中的非常簡單的CPU之外,多半CPU都有兩種模式,即內(nèi)核態(tài)與用戶態(tài).通常,PSW中有一個(gè)二進(jìn)制位控制這兩種模式.
內(nèi)核態(tài):當(dāng)cpu在內(nèi)核態(tài)運(yùn)行時(shí),cpu可以執(zhí)行指令集中所有的指令,很明顯,所有的指令中包含了使用硬件的所有功能.(操作系統(tǒng)在內(nèi)核態(tài)下運(yùn)行,從而可以拜訪整個(gè)硬件)
用戶態(tài):用戶程序在用戶態(tài)下運(yùn)行,僅僅只能執(zhí)行cpu整個(gè)指令集的一個(gè)子集,該子集中不包括操作硬件功能的部分,因此,一般情況下,在用戶態(tài)中有關(guān)I/O和內(nèi)存保護(hù)(操作系統(tǒng)占用的內(nèi)存是受保護(hù)的,不能被別的程序占用),當(dāng)然,在用戶態(tài)下,將PSW中的模式設(shè)置成內(nèi)核態(tài)也是禁止的.
那為什么需要設(shè)計(jì)出兩種工作模式呢?由于需要限制不同的程序之間的拜訪能力, 防止他們獲取別的程序的內(nèi)存數(shù)據(jù), 或者獲取外圍設(shè)備的數(shù)據(jù), 并發(fā)送到網(wǎng)絡(luò), CPU從而劃分出兩個(gè)權(quán)限等級.
所有用戶程序都是運(yùn)行在用戶態(tài)的,但是有時(shí)候程序確實(shí)需要做一些內(nèi)核態(tài)的事情, 例如從硬盤讀取數(shù)據(jù),或者從鍵盤獲取輸入等.而唯一可以做這些事情的就是操作系統(tǒng),所以此時(shí)程序就需要向操作系統(tǒng)哀求以程序的名義來執(zhí)行這些操作.
這時(shí)必要一個(gè)這樣的機(jī)制: 用戶態(tài)程序切換到內(nèi)核態(tài),但是不能控制在內(nèi)核態(tài)中執(zhí)行的指令,這種機(jī)制叫系統(tǒng)調(diào)用(system call),在CPU中的實(shí)現(xiàn)稱之為陷阱指令(Trap Instruction).
它們的事情流程如下:
? 多線程和多核芯片
Moore定律指出,芯片中的晶體管數(shù)量每18個(gè)月翻一倍,隨著晶體管數(shù)量的增多,更強(qiáng)大的功能成為了可能,如
I.第一步增強(qiáng):在cpu芯片中加入更大的緩存,一級緩存L1,用和cpu相同的材質(zhì)制成,cpu訪問它沒有延時(shí).
II.第二步增強(qiáng):一個(gè)cpu中的處理邏輯增多,intel公司首次提出,稱為多線程(multithreading)或超線程(hyperthreading),對用戶來說一個(gè)有兩個(gè)線程的cpu就相當(dāng)于兩個(gè)cpu.多線程運(yùn)行cpu保持兩個(gè)不同的線程狀態(tài),可以在納秒級的時(shí)間內(nèi)來回切換,速度快到你看到的結(jié)果是并發(fā)的,偽并行的,然而多線程不提供真正的并行處理,一個(gè)cpu同一時(shí)刻只能處理一個(gè)進(jìn)程(一個(gè)進(jìn)程中至少一個(gè)線程,進(jìn)程是資源單位而線程才是cpu的執(zhí)行單位).
III.第三步增強(qiáng):除了多線程,還出現(xiàn)了包含2個(gè)或者4個(gè)完整處理器的cpu芯片,如下圖.要使用這類多核芯片肯定需要有多處理操作系統(tǒng).
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖3
存儲器
由于硬件技術(shù)的限制,我們可以制造出容量很小但很快的存儲器,也可以制造出容量很大但很慢的存儲器,魚與熊掌不可兼得,不可能制造出訪問速度又快容量又大的存儲器.因此,現(xiàn)代計(jì)算機(jī)都把存儲器分成若干級,稱為Memory Hierarchy,依照離CPU由近到遠(yuǎn)的順序依次是CPU寄存器、Cache、內(nèi)存、硬盤,越靠近CPU的存儲器容量越小但訪問速度越快,下圖給出了各種存儲器的容量和訪問速度的典型值.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖4
?
寄存器、Cache和內(nèi)存中的數(shù)據(jù)都是掉電丟失的,這稱為易失性存儲器(Volatile Memory),與之相對的,硬盤是一種非易失性存儲器(Non-volatile Memory).
除了拜訪寄存器由程序指令直接控制之外,拜訪其它存儲器都不是由指令直接控制的,有些是硬件自動(dòng)完成的,有些是操作系統(tǒng)配合硬件完成的.
Cache從內(nèi)存取數(shù)據(jù)時(shí)一次取一個(gè)Cache Line緩存起來,操作系統(tǒng)從硬盤取數(shù)據(jù)時(shí)一次取 幾KB緩存起來,都是希望這些數(shù)據(jù)以后會被拜訪到.大多數(shù)程序的行為都具有局部性 (Locality)的特點(diǎn):它們會花費(fèi)大量的時(shí)間反復(fù)執(zhí)行一小段代碼(例如循環(huán)),或者反 復(fù)拜訪一個(gè)很小的地址范圍中的數(shù)據(jù)(例如拜訪一個(gè)數(shù)組).所以預(yù)讀緩存的辦法是很有 效的:CPU取一條指令,我把它相鄰的指令也都緩存起來,CPU很可能馬上就會取 到;CPU拜訪一個(gè)數(shù)據(jù),我把它相鄰的數(shù)據(jù)也都緩存起來,CPU很可能馬上就會拜訪到. 設(shè)想有兩臺計(jì)算機(jī),一臺有32KB的Cache,另一臺沒有Cache,而內(nèi)存都是512MB的, 硬盤都是100GB的,雖然多出來32KB的Cache和內(nèi)存、硬盤的容量相比微不足道,但由 于局部性原理,有Cache的計(jì)算機(jī)明顯會快很多.高速存儲器即使容量只能做得很小也能 顯著提升計(jì)算機(jī)的性能,這就是Memory Hierarchy的意義所在.
寄存器即L1緩存:
用與cpu相同材質(zhì)制造,與cpu一樣快,因而cpu拜訪它無延時(shí),典型容量是:在32位cpu中為32*32,在64位cpu中為64*64,在兩種情況下容量均<1KB.
高速緩存即L2緩存:
主要由硬件控制高速緩存的存取,內(nèi)存中有高速緩存行按照0~64字節(jié)為行0,64~127為行1......最常用的高速緩存行放置在cpu內(nèi)部或者非常接近c(diǎn)pu的高速緩存中.當(dāng)某個(gè)程序需要讀一個(gè)存儲字時(shí),高速緩存硬件檢查所需要的高速緩存行是否在高速緩存中.如果是,則稱為高速緩存命中,緩存滿足了哀求,就不需要通過總線把訪問哀求送往主存(內(nèi)存),這畢竟是慢的.高速緩存的命中通常需要兩個(gè)時(shí)鐘周期.高速緩存未命中,就必須訪問內(nèi)存,這需要付出大量的時(shí)間代價(jià).由于高速緩存價(jià)格昂貴,所以其大小有限,有些機(jī)器具有兩級甚至三級高速緩存,每一級高速緩存比前一級慢但是容量大.
緩存在計(jì)算機(jī)科學(xué)的許多領(lǐng)域中起著重要的作用,并不僅僅只是RAM(隨機(jī)存取存儲器)的緩存行.只要存在大量的資源可以劃分為小的部分,那么這些資源中的某些部分肯定會比其他部分更頻繁地得到使用.此時(shí)用緩存可以帶來性能上的提升.一個(gè)典型的例子就是操作系統(tǒng)一直在使用緩存,比如,多數(shù)操作系統(tǒng)在內(nèi)存中保存頻繁使用的文件(的一部分),以避免從磁盤中重復(fù)地調(diào)用這些文件,類似的/root/a/b/c/d/e/f/a.txt的長路徑名轉(zhuǎn)換成該文件所在的磁盤地址的結(jié)果然后放入緩存,可以避免重復(fù)尋找地址,還有一個(gè)web頁面的url地址轉(zhuǎn)換為網(wǎng)絡(luò)地址(IP)地址后,這個(gè)轉(zhuǎn)換結(jié)果也可以緩存起來供將來使用.
緩存是一個(gè)好方法,在現(xiàn)代cpu中設(shè)計(jì)了兩個(gè)緩存,再看圖3中的兩種cpu設(shè)計(jì).第一級緩存稱為L1總是在CPU中,通常用來將已經(jīng)解碼的指令調(diào)入cpu的執(zhí)行引擎,對那些頻繁使用的數(shù)據(jù)自,多少芯片還會依照第二L1緩存 ...另外往往設(shè)計(jì)有二級緩存L2,用來存放近來經(jīng)常使用的內(nèi)存字.L1與L2的差別在于對cpu對L1的訪問無時(shí)間延遲,而對L2的訪問則有1-2個(gè)時(shí)鐘周期(即1-2ns)的延遲.
內(nèi)存:
再往下一層是主存,此乃存儲器系統(tǒng)的主力,主存通常稱為隨機(jī)拜訪存儲RAM,就是我們通常所說的內(nèi)存,容量一直在不斷攀升,所有不能再高速緩存中找到的,都會到主存中找,主存是易失性存儲,斷電后數(shù)據(jù)全部消失.
除了主存RAM之外,許多計(jì)算機(jī)已經(jīng)在使用少量的非易失性隨機(jī)拜訪存儲如ROM(Read Only Memory,ROM),在電源切斷之后,非易失性存儲的內(nèi)容并不會丟失,ROM只讀存儲器在工廠中就被編程完畢,然后再也不能修改.ROM速度快且便宜,在有些計(jì)算機(jī)中,用于啟動(dòng)計(jì)算機(jī)的引導(dǎo)加載模塊就存放在ROM中,另外一些I/O卡也采用ROM處理底層設(shè)備的控制.
EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,但是與ROM相反,他們可以擦除和重寫.不過重寫時(shí)花費(fèi)的時(shí)間比寫入RAM要多.在便攜式電子設(shè)備中,閃存通常作為存儲媒介.閃存是數(shù)碼相機(jī)中的膠卷,是便攜式音譯播放器的磁盤,還應(yīng)用于固態(tài)硬盤.閃存在速度上介于RAM和磁盤之間,但與磁盤不同的是,閃存擦除的次數(shù)過多,就被磨損了.
還有一類存儲器就是CMOS,它是易失性的,許多計(jì)算機(jī)利用CMOS存儲器來保持當(dāng)前時(shí)間和日期.CMOS存儲器和遞增時(shí)間的電路由一小塊電池驅(qū)動(dòng),所以,即使計(jì)算機(jī)沒有加電,時(shí)間也仍然可以正確地更新,除此之外CMOS還可以保存配置的參數(shù),比如,哪一個(gè)是啟動(dòng)磁盤等,之所以采用CMOS是因?yàn)樗碾姺浅I?一塊工廠原裝電池往往能使用若干年,但是當(dāng)電池失效時(shí),相關(guān)的配置和時(shí)間等都將丟失.
磁盤:
磁盤低速的原因是因?yàn)樗且环N機(jī)械裝置,在磁盤中有一個(gè)或多個(gè)金屬盤片,它們以5400,7200或10800rpm(RPM?=revolutions per minute 每分鐘多少轉(zhuǎn)?)的速度旋轉(zhuǎn).從邊緣開始有一個(gè)機(jī)械臂懸在盤面上,這類似于老式黑膠唱片機(jī)上的拾音臂.信息寫在磁盤上的一些列的同心圓上,是一連串的2進(jìn)制位(稱為bit位),為了統(tǒng)計(jì)方便,8個(gè)bit稱為一個(gè)字節(jié)bytes,1024bytes=1k,1024k=1M,1024M=1G,所以我們平時(shí)所說的磁盤容量最終指的就是磁盤能寫多少個(gè)2進(jìn)制位.
每個(gè)磁頭可以讀取一段環(huán)形區(qū)域,稱為磁道.把一個(gè)機(jī)械手臂位置上所有的磁道合起來,組成一個(gè)柱面.每個(gè)磁道劃成若干扇區(qū),扇區(qū)典型的值是512字節(jié).
數(shù)據(jù)都存放于一段一段的扇區(qū),即磁道這個(gè)圓圈的一小段圓圈,從磁盤讀取一段數(shù)據(jù)需要經(jīng)歷尋道時(shí)間和延遲時(shí)間.
平均尋道時(shí)間:
機(jī)械手臂從一個(gè)柱面隨機(jī)移動(dòng)到相鄰的柱面的時(shí)間成為尋到時(shí)間,找到了磁道就以為著招到了數(shù)據(jù)所在的那個(gè)圈圈,但是還不知道數(shù)據(jù)具體這個(gè)圓圈的具體位置.
平均延遲時(shí)間:
機(jī)械臂到達(dá)正確的磁道之后還必須等待旋轉(zhuǎn)到數(shù)據(jù)所在的扇區(qū)下,這段時(shí)間稱為延遲時(shí)間.
虛擬內(nèi)存:
許多計(jì)算機(jī)支持虛擬內(nèi)存機(jī)制,該機(jī)制使計(jì)算機(jī)可以運(yùn)行大于物理內(nèi)存的程序,辦法是將正在使用的程序放入內(nèi)存取執(zhí)行,而暫時(shí)不需要執(zhí)行的程序放到磁盤的某塊地方,這塊地方稱為虛擬內(nèi)存,在linux中稱為swap.這種機(jī)制的核心在于快速地映射內(nèi)存地址,由cpu中的一個(gè)部件負(fù)責(zé),稱為存儲器管理單元(Memory Management Unit ,MMU).
PS:從一個(gè)程序切換到另外一個(gè)程序,稱為上下文切換(context switch),緩存和MMU的出現(xiàn)提升了系統(tǒng)的性能,尤其是上下文切換.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖6
更多詳情見請繼續(xù)閱讀下一頁的出色內(nèi)容: ?
I/O設(shè)備
cpu和存儲器并不是操作系統(tǒng)唯一需要管理的資源,I/O設(shè)備也是非常重要的一環(huán).I/O設(shè)備一般包括兩個(gè)部分:設(shè)備控制器和設(shè)備本身.
控制器:是查找主板上的一塊芯片或一組芯片(硬盤,網(wǎng)卡,聲卡等都需要插到一個(gè)口上,這個(gè)口連的便是控制器),控制器負(fù)責(zé)控制連接的設(shè)備,它從操作系統(tǒng)接收命令,比如讀硬盤數(shù)據(jù),然后就對硬盤設(shè)備發(fā)起讀哀求來讀出內(nèi)容.
控制器的功能:通常情況下對設(shè)備的控制是非常復(fù)雜和具體的,控制器的任務(wù)就是為操作系統(tǒng)屏蔽這些復(fù)雜而具體的工作,提供給操作系統(tǒng)一個(gè)簡單而清晰的接口
設(shè)備本身:有相對簡單的接口且標(biāo)準(zhǔn)的,這樣大家都可以為其編寫驅(qū)動(dòng)程序了.要想調(diào)用設(shè)備,必須根據(jù)該接口編寫復(fù)雜而具體的程序,于是有了控制器提供設(shè)備驅(qū)動(dòng)接口給操作系統(tǒng).必須把設(shè)備驅(qū)動(dòng)程序安裝到操作系統(tǒng)中.
總線
從概念上講,一臺簡單的個(gè)人計(jì)算機(jī)可以抽象為類似圖7的模型,CPU、內(nèi)存以及I/O設(shè)備都由一條系統(tǒng)總線(bus)連接起來并通過總線與其他設(shè)備通信.但是隨著處理器和存儲器速度越來越快,單總線很難處理總線的交通流量了,于是呈現(xiàn)了圖8的多總線模式,他們處理I/O設(shè)備及cpu到存儲器的速度都更快.
北橋即PCI橋:銜接高速設(shè)備
南橋即ISA橋:銜接慢速設(shè)備
?
? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖7?
? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖8
?
啟動(dòng)計(jì)算機(jī)
在計(jì)算機(jī)的主板上有一個(gè)基本的輸入輸出法式(Basic ?Input Output System,BIOS)
BIOS就相當(dāng)于一個(gè)小的操作系統(tǒng),它有底層的I/O軟件,包含讀鍵盤,寫屏幕,進(jìn)行磁盤I/O,該程序存放于一非易失性閃存RAM中.?
啟動(dòng)流程:
1.計(jì)算機(jī)加電.
2.BIOS開端運(yùn)行,檢測硬件:cpu、內(nèi)存、硬盤等.
3.BIOS讀取CMOS存儲器中的參數(shù),選擇啟動(dòng)裝備.
4.從啟動(dòng)設(shè)備上讀取第一個(gè)扇區(qū)的內(nèi)容.(MBR主引導(dǎo)記錄512字節(jié),前446為引導(dǎo)信息,后64為分區(qū)信息,最后兩個(gè)為標(biāo)記位)
5.依據(jù)分區(qū)信息讀入bootloader啟動(dòng)裝載模塊,啟動(dòng)操作系統(tǒng).
6.然后操作系統(tǒng)詢問BIOS,以獲得配置信息.對于每種設(shè)備,系統(tǒng)會檢查其設(shè)備驅(qū)動(dòng)程序是否存在,如果沒有,系統(tǒng)則會要求用戶安裝設(shè)備驅(qū)動(dòng)程序.一旦有了全部的設(shè)備驅(qū)動(dòng)程序,操作系統(tǒng)就將它們調(diào)入內(nèi)核.然后初始有關(guān)的表格(如進(jìn)程表),創(chuàng)建必要的進(jìn)程,并在每個(gè)終端上啟動(dòng)登錄程序或GUI.
本文永遠(yuǎn)更新鏈接地址:
維易PHP培訓(xùn)學(xué)院每天發(fā)布《LINUX教程:計(jì)算機(jī)基礎(chǔ)系列教程一:計(jì)算機(jī)硬件》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/13020.html