姓名:朱佳男
學(xué)號(hào):17021210978
專業(yè):信號(hào)與信息處理
轉(zhuǎn)載自:http://www.lxweimin.com/p/b14a35b9b7ad
【嵌牛導(dǎo)讀】現(xiàn)代人們對(duì)于計(jì)算機(jī)的硬件基礎(chǔ)知識(shí)有所來(lái)了解是很有必要的,這篇文章主要介紹了計(jì)算機(jī)硬件的基礎(chǔ)知識(shí),包括CPU、寄存器、存儲(chǔ)器與磁盤等等。通過(guò)對(duì)本文的閱讀,能讓我們對(duì)計(jì)算機(jī)的工作方式有一個(gè)基本的認(rèn)識(shí)。
【嵌牛鼻子】計(jì)算機(jī)硬件、CPU、寄存器
【嵌牛提問(wèn) 】CPU的作用是什么?寄存器包括哪些類?操作系統(tǒng)的啟動(dòng)流程是怎么樣的?
【嵌牛正文】
一.編程語(yǔ)言的作用及與操作系統(tǒng)和硬件的關(guān)系
編程語(yǔ)言是程序員用來(lái)控制計(jì)算機(jī)的工具,是一種標(biāo)準(zhǔn)化的交流技巧,使得人與計(jì)算機(jī)之間可以在某種程度上交流,使得計(jì)算機(jī)能夠完成人所下達(dá)的工作。
在計(jì)算機(jī)剛出現(xiàn)的時(shí)候,程序員直接控制硬件來(lái)使計(jì)算機(jī)工作,但是用機(jī)器語(yǔ)言(二進(jìn)制代碼)編寫(xiě)的程序無(wú)明顯特征,難以書(shū)寫(xiě)和閱讀,具有很大的局限性。因此隨著計(jì)算機(jī)的發(fā)展,操作系統(tǒng)出現(xiàn)并成為了人與計(jì)算機(jī)硬件之間的橋梁,人直接控制操作系統(tǒng),操作系統(tǒng)調(diào)用計(jì)算機(jī)硬件。
應(yīng)用程序即是軟件,是程序員用編程語(yǔ)言寫(xiě)的程序,應(yīng)用程序在操作系統(tǒng)環(huán)境下運(yùn)行,并通過(guò)操作系統(tǒng)調(diào)動(dòng)計(jì)算機(jī)硬件完成工作。
二.計(jì)算機(jī)硬件
計(jì)算機(jī)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備等五個(gè)邏輯部件組成,其中運(yùn)算器和控制器合稱為中央處理器(Central Processing Unit,簡(jiǎn)稱CPU),存儲(chǔ)器(Memory)分為內(nèi)存和外存,輸入設(shè)備(Input Device)和輸出設(shè)備(Output Device)即是通過(guò)各種控制器能被計(jì)算機(jī)調(diào)用并實(shí)現(xiàn)輸入或輸出的設(shè)備。
CPU是計(jì)算機(jī)系統(tǒng)的核心,是運(yùn)算中心和指揮中心。內(nèi)存是存儲(chǔ)速度較快而容量較小的存儲(chǔ)器,外存(通常指磁盤)是存儲(chǔ)速度較慢而容量較大的存儲(chǔ)器。內(nèi)存是通過(guò)電工作的存儲(chǔ)器,斷電則存儲(chǔ)的數(shù)據(jù)丟失;磁盤是通過(guò)磁工作的存儲(chǔ)器,可長(zhǎng)時(shí)間保存數(shù)據(jù)。
計(jì)算機(jī)工作時(shí),CPU從內(nèi)存中取出指令解碼并執(zhí)行,當(dāng)需要用到磁盤中的數(shù)據(jù)時(shí),則將磁盤中的數(shù)據(jù)送入內(nèi)存后再使用。
三.CPU與寄存器
CPU是計(jì)算機(jī)的大腦,通過(guò)從內(nèi)存中取出指令并解碼執(zhí)行來(lái)控制計(jì)算機(jī)各個(gè)部件。每個(gè)CPU都有一套可執(zhí)行的專門指令集,任何軟件的執(zhí)行都必須轉(zhuǎn)換為CPU的指令去執(zhí)行。
因訪問(wèn)內(nèi)存得到指令或數(shù)據(jù)花費(fèi)的時(shí)間比CPU解碼執(zhí)行指令的時(shí)間多得多,因此CPU內(nèi)部有一些保存關(guān)鍵變量和臨時(shí)數(shù)據(jù)的寄存器,CPU可直接從寄存器中調(diào)用常用數(shù)據(jù)或者通過(guò)寄存器中的內(nèi)存地址直接調(diào)用內(nèi)存中的數(shù)據(jù),使運(yùn)行速度更快。
寄存器分類:
1.通用寄存器:保存變量和臨時(shí)結(jié)果。
2.程序計(jì)數(shù)器:保存了將要取出的下一條指令的內(nèi)存地址,指令取出后,程序計(jì)數(shù)器就更新以執(zhí)行后續(xù)指令。
3.堆棧指針:它指向內(nèi)存中當(dāng)前棧的頂端,該棧包含已經(jīng)進(jìn)入但還沒(méi)有退出的每個(gè)過(guò)程中的一個(gè)框架。在一個(gè)堆棧框架中保存了有關(guān)的輸入?yún)?shù)、局部變量以及那些沒(méi)有保存在寄存器中的臨時(shí)變量。
4.程序狀態(tài)字寄存器(Program Status Word,PSW):該寄存器包含條碼位(由比較指令設(shè)置)、CPU優(yōu)先級(jí)、模式(用戶態(tài)和內(nèi)核態(tài))、以及各種其他控制位。用戶通常讀入整個(gè)PSW,但只對(duì)其中少量的字段寫(xiě)入。在系統(tǒng)調(diào)用I/O設(shè)備中,PSW非常重要。
寄存器的維護(hù):
在時(shí)間多路復(fù)用的CPU中,操作系統(tǒng)每次停止一個(gè)正在運(yùn)行的程序時(shí),都必須保存所有的寄存器,這樣在稍后該程序再次運(yùn)行時(shí),可以把這些寄存器重新裝入。
四.內(nèi)核態(tài)與用戶態(tài)及如何切換
多數(shù)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í),可以執(zhí)行指令集中的所有指令,即可以使用硬件的所有功能。
用戶態(tài):當(dāng)CPU在用戶態(tài)運(yùn)行時(shí),僅僅只能執(zhí)行指令集中的一個(gè)子集,該子集不包含操作硬件功能的部分,一般情況下,在用戶態(tài)下不允許訪問(wèn)外圍設(shè)備,不允許占用其他程序的用戶空間,將PSW的模式設(shè)置成內(nèi)核態(tài)也是禁止的。
將用戶態(tài)切換到內(nèi)核態(tài)的過(guò)程稱為系統(tǒng)調(diào)用(system call),CPU中對(duì)應(yīng)的指令為陷阱指令(Trap Instruction),這個(gè)過(guò)程的實(shí)現(xiàn)需要通過(guò)調(diào)用操作系統(tǒng)。
五.存儲(chǔ)器系列
存儲(chǔ)器在計(jì)算機(jī)硬件中僅次于處理器(CPU),一般而言,隨著存儲(chǔ)器容量的增加,其讀寫(xiě)速度會(huì)逐漸變慢。
L1緩存指寄存器:用與CPU相同材質(zhì)制造,CPU訪問(wèn)它無(wú)時(shí)延,典型容量是:在32位CPU中為32*32,在64位CPU中為64*64,兩種情況下容量均小于1KB。
L2緩存指高速緩存:主要由硬件控制高速緩存的存取,不同CPU,高速緩存行大小不同,如X86是32BYTES,ALPHA是64BYTES,并且始終在第32或64個(gè)字節(jié)出對(duì)齊(從0開(kāi)始)。最常用的高速緩存行放置下CPU內(nèi)部或者非常接近CPU的高速緩存中。高速緩存命中指當(dāng)某個(gè)程序需要讀一個(gè)存儲(chǔ)數(shù)據(jù)時(shí),高速緩存硬件檢查所需要的高速緩存行在高速緩存中。高速緩存的命中通常需要兩個(gè)時(shí)鐘周期(2ns),若高速緩存命中,就必須訪問(wèn)內(nèi)存,這需要付出大量時(shí)間代價(jià)。高速緩存價(jià)格昂貴,因此大小有限,有些機(jī)器具有兩級(jí)甚至三級(jí)高速緩存,每一級(jí)高速緩存比前一級(jí)慢但是容量大。
主存(即內(nèi)存)通常稱為隨機(jī)訪問(wèn)存儲(chǔ)(RAM),主存是易失性存儲(chǔ),斷電后數(shù)據(jù)消失。
ROM(Read Only Memory)是非易失性隨機(jī)訪問(wèn)存儲(chǔ),但它是只讀存儲(chǔ)器。ROM速度快且便宜,在有些計(jì)算機(jī)中,用于啟動(dòng)計(jì)算機(jī)的引導(dǎo)加載模塊就存放在ROM中,另外一些I/O卡也采用ROM處理底層設(shè)備的控制。
EEPROM(Electrically Erasable PROM,電可擦除可編程ROM)和閃存(flash memory)也是非易失性的,但它們可以被擦除和重寫(xiě),不過(guò)花費(fèi)的時(shí)間比RAM多。閃存速度介于RAM和磁盤之間,但閃存擦除次數(shù)過(guò)多就會(huì)磨損。
CMOS是易失性的,許多計(jì)算機(jī)利用它來(lái)保持當(dāng)前時(shí)間和日期。CMOS存儲(chǔ)器和遞增時(shí)間的電路由一小塊電池驅(qū)動(dòng)。CMOS還可以保存配置的參數(shù),比如哪一個(gè)是啟動(dòng)磁盤等。CMOS耗電非常少,一塊原裝電池能用若干年。
BIOS基本輸入輸出程序儲(chǔ)存在ROM芯片中,CMOS用來(lái)存儲(chǔ)BIOS設(shè)置和系統(tǒng)時(shí)間。
六.磁盤
1.磁盤結(jié)構(gòu):在磁盤中有一個(gè)或多個(gè)金屬盤片,它們以5400,7200或10800RPM(RPM,revolutions per minute,轉(zhuǎn)速)的速度旋轉(zhuǎn),從邊緣開(kāi)始有一個(gè)機(jī)械臂懸在盤面上,信息寫(xiě)在磁盤上的一些列的同心圓上,是一連串的二進(jìn)制位(稱為bit位)
機(jī)械臂稱為磁頭。
每個(gè)磁頭在磁盤表面劃出的圓形軌跡,稱為磁道(Track)。
在有多個(gè)盤片構(gòu)成的盤組中,由不同盤片的面,但處于同一半徑圓的多個(gè)磁道組成的一個(gè)圓柱面(Cylinder)。
磁盤上的每個(gè)磁道被等分為若干個(gè)弧段,這些弧段便是硬盤的扇區(qū)(Sector)。硬盤的第一個(gè)扇區(qū),叫做引導(dǎo)扇區(qū)。
每個(gè)磁道劃分成多個(gè)扇區(qū),扇區(qū)的典型值是512字節(jié)。
扇區(qū)是磁盤級(jí)別的最小讀寫(xiě)單位,操作系統(tǒng)的最小讀寫(xiě)單位是1block = 8 * 512Bytes。
2.平均尋道時(shí)間:機(jī)械手臂從一個(gè)柱面隨機(jī)移動(dòng)到相鄰的柱面的時(shí)間稱為尋道時(shí)間,找到了磁道就找到了數(shù)據(jù)所在的那個(gè)圓圈,但是還是不知道這個(gè)數(shù)據(jù)在這個(gè)圓圈的具體位置。
3.平均延遲時(shí)間:機(jī)械臂到達(dá)正確的磁道之后還必須等待旋轉(zhuǎn)到數(shù)據(jù)所在的扇區(qū)下,這段時(shí)間成為延遲時(shí)間
數(shù)據(jù)存放于一段一段的扇區(qū),即磁道這個(gè)圓圈的一小段圓弧,從磁盤讀取一段數(shù)據(jù)需要經(jīng)歷尋道時(shí)間和延遲時(shí)間。
4.虛擬內(nèi)存和MMU:將正在使用的程序放入內(nèi)存,而將暫時(shí)不需要執(zhí)行的程序放到磁盤的某個(gè)地方,這塊地方稱為虛擬內(nèi)存(Virtual Memory),在linux中稱為swap。這種機(jī)制的核心在于快速映射內(nèi)存地址,由cpu中的一個(gè)部件負(fù)責(zé),稱為存儲(chǔ)器管理單元(Memory Management Unit,MMU)
從一個(gè)程序切換到另外一個(gè)程序,稱為上下午切換(context switch),緩存和MMU的出現(xiàn)提升了系統(tǒng)的性能,尤其是上下文切換。
5.磁帶:在價(jià)錢相同的情況下比硬盤擁有更高的存儲(chǔ)容量,雖然速度低于磁盤,但因其容量大,在地震水災(zāi)火災(zāi)時(shí)機(jī)動(dòng)性強(qiáng)等特性,常被用來(lái)做備份。(常見(jiàn)于大型數(shù)據(jù)庫(kù)系統(tǒng)中)
6.I/O設(shè)備:I/O設(shè)備一般包括兩個(gè)部分:設(shè)備控制器和設(shè)備本身。
控制器:是主板上的一塊芯片或一組芯片,控制器負(fù)責(zé)控制連接的設(shè)備,它從操作系統(tǒng)接收命令,比如讀取硬盤數(shù)據(jù),然后就對(duì)硬盤設(shè)備發(fā)起讀取請(qǐng)求來(lái)讀出內(nèi)容。
控制器的功能:通常情況下對(duì)設(shè)備的控制是復(fù)雜而具體的,控制器的任務(wù)就是為操作系統(tǒng)屏蔽這些復(fù)雜而具體的工作,提供給操作系統(tǒng)一個(gè)簡(jiǎn)單而清晰的接口。
設(shè)備本身:要想調(diào)用設(shè)備,必須根據(jù)該接口編寫(xiě)復(fù)雜而具體的程序,于是有了控制器提供設(shè)備驅(qū)動(dòng)接口給操作系統(tǒng)。必須把設(shè)備驅(qū)動(dòng)程序安裝到操作系統(tǒng)中。
七.總線與南橋和北橋
南橋即ISA橋:連接慢速設(shè)備
北橋即PCI橋:連接高速設(shè)備
八.操作系統(tǒng)的啟動(dòng)流程
1.計(jì)算機(jī)加電
2.BIOS開(kāi)始運(yùn)行,檢測(cè)硬件:CPU、內(nèi)存、硬盤等
3.BIOS讀取CMOS存儲(chǔ)器中的參數(shù),選擇啟動(dòng)設(shè)備
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)詢問(wèn)BIOS,獲得配置信息。對(duì)于每種設(shè)備,系統(tǒng)會(huì)檢查起設(shè)備驅(qū)動(dòng)程序是否存在,如果沒(méi)有,系統(tǒng)則會(huì)要求用戶安裝設(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。
九.應(yīng)用程序的啟動(dòng)流程
1.通過(guò)操作系統(tǒng)發(fā)出啟動(dòng)程序的指令,并將之存入內(nèi)存。
2.CPU從內(nèi)存中調(diào)出指令,并解碼執(zhí)行。
3.程序數(shù)據(jù)從硬盤讀入內(nèi)存
4.CPU從內(nèi)存中讀取程序數(shù)據(jù)并運(yùn)行