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