學作業系統之前還是要對計算機有一定的概念比較妥當!這是因為 Linux 與硬體不可分啊!
由過去的經驗當中,鳥哥發現到因為興趣或生活所逼而必須要接觸 Linux 的朋友,很多可能並非資訊相關科系出身, 因此對於電腦軟/硬體方面的概念不熟。然而作業系統這種咚咚跟硬體有相當程度的關連性, 所以,如果不瞭解一下計算機概論,要很快的瞭解 Linux 的概念是有點難度的。因此,鳥哥就自作聰明的新增一個小章節來談談計概囉! 因為鳥哥也不是資訊相關學門出身,所以,寫的不好的地方請大家多多指教啊!^_^
現在的人們幾乎無時無刻都會碰電腦!不管是桌上型電腦(桌機)、筆記型電腦(筆電)、平板電腦、智慧型手機等等,這些東西都算是電腦。 雖然接觸的這麼多,但是,你瞭解電腦裡面的元件有什麼嗎?以桌機來說,電腦的機殼裡面含有什麼元件?不同的電腦可以應用在哪些工作? 你生活周遭有哪些電器用品內部是含有電腦相關元件的?底下我們就來談一談這些東西呢!
所謂的電腦就是一種計算機,而計算機其實是:『接受使用者輸入指令與資料,經由中央處理器的數學與邏輯單元運算處理後, 以產生或儲存成有用的資訊』。因此,只要有輸入設備 (不管是鍵盤還是觸控式螢幕) 及輸出設備 (例如電腦螢幕或直接由印表機列印出來),讓你可以輸入資料使該機器產生資訊的, 那就是一部計算機了。
好了,根據這個定義你知道哪些東西是計算機了嗎?其實包括一般商店用的簡易型加減乘除計算機、打電話用的手機、開車用的衛星定位系統 (GPS)、提款用的提款機 (ATM)、你上課會使用的桌上型個人電腦、外出可能會帶的筆記型電腦 (包括 notebook 與 netbook),還有近幾年 (2015前後) 非常熱門的平板電腦與智慧型手機, 甚至是未來可能會大流行的單版電腦 (Xapple pi, banana pi, Raspberry pi, 註1) 與智慧型手錶,甚至於更多的智慧型穿戴式電腦(註2)等等,這些都是計算機喔!
那麼計算機主要的組成元件是什麼呢?底下我們以常見的個人電腦主機或伺服器工作站主機來作為說明好了。
關於電腦的硬體組成部分,其實你可以觀察你的桌上型電腦來分析一下,依外觀來說這傢伙主要可分為三部分,分別是:
我們主要透過輸入設備如滑鼠與鍵盤來將一些資料輸入到主機裡面,然後再由主機的功能處理成為圖表或文章等資訊後, 將結果傳輸到輸出設備,如螢幕或印表機上面。那主機裡面含有什麼元件呢?如果你曾經拆開過電腦主機機殼 (包括拆開你的智慧型手機也一樣喔!), 會發現其實主機裡面最重要的就是一片主機板,上面安插了中央處理器 (CPU) 以及主記憶體、硬碟 (或記憶卡) 還有一些介面卡裝置而已。 當然大部分智慧型手機是將這些元件直接焊接在主機板上面而不是插卡啦!
整部主機的重點在於中央處理器 (Central Processing Unit, CPU),CPU 為一個具有特定功能的晶片, 裡頭含有微指令集,如果你想要讓主機進行什麼特異的功能,就得要參考這顆 CPU 是否有相關內建的微指令集才可以。 由於 CPU 的工作主要在於管理與運算,因此在 CPU 內又可分為兩個主要的單元,分別是: 算數邏輯單元與控制單元。(註3) 其中算數邏輯單元主要負責程式運算與邏輯判斷,控制單元則主要在協調各周邊元件與各單元間的工作。
既然 CPU 的重點是在進行運算與判斷,那麼要被運算與判斷的資料是從哪裡來的? CPU 讀取的資料都是從主記憶體來的! 主記憶體內的資料則是從輸入單元所傳輸進來!而 CPU 處理完畢的資料也必須要先寫回主記憶體中,最後資料才從主記憶體傳輸到輸出單元。
綜合上面所說的,我們會知道其實電腦是由幾個單元所組成的,包括輸入單元、 輸出單元、CPU 內部的控制單元、算數邏輯單元與主記憶體五大部分。 這幾個東西的相關性如下所示:
上面圖示中的『系統單元』其實指的就是電腦機殼內的主要元件,而重點在於 CPU 與主記憶體。 特別要看的是實線部分的傳輸方向,基本上資料都是流經過主記憶體再轉出去的! 至於資料會流進/流出記憶體則是 CPU 所發佈的控制命令!而 CPU 實際要處理的資料則完全來自於主記憶體 (不管是程式還是一般文件資料)!這是個很重要的概念喔! 這也是為什麼當你的記憶體不足時,系統的效能就很糟糕!也是為什麼現在人們買智慧型手機時,對於可用記憶體的要求都很高的原因!
而由上面的圖示我們也能知道,所有的單元都是由 CPU 內部的控制單元來負責協調的,因此 CPU 是整個電腦系統的最重要部分! 那麼目前世界上有哪些主流的 CPU 呢?是否剛剛我們談到的硬體內全部都是相同的 CPU 架構呢?底下我們就來談一談。
如前面說過的,CPU 其實內部已經含有一些微指令,我們所使用的軟體都要經過 CPU 內部的微指令集來達成才行。 那這些指令集的設計主要又被分為兩種設計理念,這就是目前世界上常見到的兩種主要 CPU 架構, 分別是:精簡指令集 (RISC) 與複雜指令集 (CISC) 系統。底下我們就來談談這兩種不同 CPU 架構的差異囉!
這種 CPU 的設計中,微指令集較為精簡,每個指令的執行時間都很短,完成的動作也很單純,指令的執行效能較佳; 但是若要做複雜的事情,就要由多個指令來完成。常見的 RISC 微指令集 CPU 主要例如甲骨文 (Oracle) 公司的 SPARC 系列、 IBM 公司的 Power Architecture (包括 PowerPC) 系列、與安謀公司 (ARM Holdings) 的 ARM CPU 系列等。
在應用方面,SPARC CPU 的電腦常用於學術領域的大型工作站中,包括銀行金融體系的主要伺服器也都有這類的電腦架構; 至於PowerPC架構的應用上,例如新力(Sony)公司出產的Play Station 3(PS3)就是使用PowerPC架構的Cell處理器; 那安謀的 ARM 呢?你常使用的各廠牌手機、PDA、導航系統、網路設備(交換器、路由器等)等,幾乎都是使用 ARM 架構的 CPU 喔! 老實說,目前世界上使用範圍最廣的 CPU 可能就是 ARM 這種架構的呢! (註6)
與RISC不同的,CISC在微指令集的每個小指令可以執行一些較低階的硬體操作,指令數目多而且複雜, 每條指令的長度並不相同。因為指令執行較為複雜所以每條指令花費的時間較長, 但每條個別指令可以處理的工作較為豐富。常見的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架構的CPU。
由於AMD、Intel、VIA所開發出來的x86架構CPU被大量使用於個人電腦(Personal computer)用途上面, 因此,個人電腦常被稱為x86架構的電腦!那為何稱為x86架構(註8)呢? 這是因為最早的那顆Intel發展出來的CPU代號稱為8086,後來依此架構又開發出80286, 80386..., 因此這種架構的CPU就被稱為x86架構了。
在2003年以前由Intel所開發的x86架構CPU由8位元升級到16、32位元,後來AMD依此架構修改新一代的CPU為64位元, 為了區別兩者的差異,因此64位元的個人電腦CPU又被統稱為x86_64的架構喔!
那麼不同的x86架構的CPU有什麼差異呢?除了CPU的整體結構(如第二層快取、每次運作可執行的指令數等)之外, 主要是在於微指令集的不同。新的x86的CPU大多含有很先進的微指令集, 這些微指令集可以加速多媒體程式的運作,也能夠加強虛擬化的效能,而且某些微指令集更能夠增加能源效率, 讓CPU耗電量降低呢!由於電費越來越高,購買電腦時,除了整體的效能之外, 節能省電的CPU特色也可以考慮喔!
五大單元中最重要的控制、算術邏輯被整合到 CPU 的封裝中,但系統當然不可能只有 CPU 啊!那其他三個重要電腦單元的設備還有哪些呢? 其實在主機機殼內的設備大多是透過主機板 (main board) 連接在一塊,主機板上面有個連結溝通所有設備的晶片組,這個晶片組可以將所有單元的設備連結起來, 好讓 CPU 可以對這些設備下達命令。其他單元的重要設備主要有:
更詳細的各項主機與周邊裝置我們將在下個小節進行介紹!在這裡我們先來瞭解一下各元件的關係囉!那就是,電腦是如何運作的呢?
如果不是很瞭解電腦的運作流程的話,鳥哥拿個簡單的想法來思考好了~假設電腦是一個人體,那麼每個元件對應到那個地方呢?可以這樣思考:
由這樣的關係圖當中,我們知道整個活動中最重要的就是腦袋瓜子! 而腦袋瓜子當中與現在正在進行的工作有關的就是CPU與主記憶體!任何外界的接觸都必須要由腦袋瓜子中的主記憶體記錄下來, 然後給腦袋中的CPU依據這些資料進行判斷後,再發佈命令給各個周邊設備!如果需要用到過去的經驗, 就得由過去的經驗(硬碟)當中讀取囉!
也就是說,整個人體最重要的地方就是腦袋瓜子,同樣的,整部主機當中最重要的就是CPU與主記憶體, 而CPU的資料來源通通來自於主記憶體,如果要由過去的經驗來判斷事情時, 也要將經驗(硬碟)挪到目前的記憶(主記憶體)當中,再交由CPU來判斷喔!這點得要再次的強調啊! 下個章節當中,我們就對目前常見的個人電腦各個元件來進行說明囉!
知道了電腦的基本組成與周邊裝置,也知道其實電腦的CPU種類非常的多,再來我們想要瞭解的是,電腦如何分類? 電腦的分類非常多種,如果以電腦的複雜度與運算能力進行分類的話,主要可以分為這幾類:
若光以效能來說,目前的個人電腦效能已經夠快了,甚至已經比工作站等級以上的電腦運算速度還要快! 但是工作站電腦強調的是穩定不當機,並且運算過程要完全正確,因此工作站以上等級的電腦在設計時的考量與個人電腦並不相同啦! 這也是為啥工作站等級以上的電腦售價較貴的原因。
電腦的運算能力除了 CPU 微指令集設計的優劣之外,但主要還是由速度來決定的。至於存放在電腦儲存設備當中的資料容量也是有單位的。
電腦對資料的判斷主要依據有沒有通電來記錄資訊,所以理論上對於每一個紀錄單位而言,它只認識 0 與 1 而已。0/1 這個二進位的的單位我們稱為 bit。 但 bit 實在太小了,所以在儲存資料時每份簡單的資料都會使用到 8 個 bits 的大小來記錄,因此定義出 byte 這個單位,他們的關係為:
1 Byte = 8 bits
不過同樣的,Byte 還是太小了,在較大的容量情況下,使用 byte 相當不容易判斷資料的大小,舉例來說,1000000 bytes 這樣的顯示方式你能夠看得出有幾個零嗎?所以後來就有一些常見的簡化單位表示法,例如 K 代表 1024 byte,M 代表 1024K 等。 而這些單位在不同的進位制下有不同的數值表示,底下就列出常見的單位與進位制對應:
進位制 | Kilo | Mega | Giga | Tera | Peta | Exa | Zetta |
二進位 | 1024 | 1024K | 1024M | 1024G | 1024T | 1024P | 1024E |
十進位 | 1000 | 1000K | 1000M | 1000G | 1000T | 1000P | 1000E |
一般來說,檔案容量使用的是二進位的方式,所以 1 GBytes 的檔案大小實際上為:1024x1024x1024 Bytes 這麼大! 速度單位則常使用十進位,例如 1GHz 就是 1000x1000x1000 Hz 的意思。
CPU的運算速度常使用 MHz 或者是 GHz 之類的單位,這個 Hz 其實就是秒分之一。而在網路傳輸方面,由於網路使用的是 bit 為單位,因此網路常使用的單位為 Mbps 是 Mbits per second,亦即是每秒多少 Mbit。舉例來說,大家常聽到的 20M/5M 光世代傳輸速度,如果轉成檔案容量的 byte 時,其實理論最大傳輸值為:每秒 2.5Mbyte/ 每秒640Kbyte的下載/上傳速度喔!
因為一般硬碟製造商會使用十進位的單位,所以500GByte代表為500*1000*1000*1000Byte之意。 轉成檔案的容量單位時使用二進位(1024為底),所以就成為466GB左右的容量了。
硬碟廠商並非要騙人,只是因為硬碟的最小物理量為512Bytes,最小的組成單位為磁區(sector), 通常硬碟容量的計算採用『多少個sector』,所以才會使用十進位來處理的。相關的硬碟資訊在這一章後面會提到的!
一般消費者常說的電腦通常指的就是x86的個人電腦架構,因此我們有必要來瞭解一下這個架構的各個元件。事實上,Linux最早在發展的時候,就是依據個人電腦的架構來發展的, 所以真的得要瞭解一下呢!另外,早期兩大主流x86開發商(Intel, AMD)的CPU架構與設計理念都有些許差異。不過互相學習對方長處的結果,就是兩者間的架構已經比較類似了。 由於目前市場佔有率還是以 Intel 為大宗,因此底下以目前(2015)相對較新的 Intel 主機板架構來談談:
由於主機板是連結各元件的一個重要項目,因此在主機板上面溝通各部元件的晶片組設計優劣,就會影響效能不少喔!早期的晶片組通常分為兩個橋接器來控制各元件的溝通, 分別是:(1)北橋:負責連結速度較快的CPU、主記憶體與顯示卡界面等元件;(2)南橋:負責連接速度較慢的裝置介面, 包括硬碟、USB、網路卡等等。(晶片組的南北橋與三國的大小喬沒有關係 @_@)。不過由於北橋最重要的就是 CPU 與主記憶體之間的橋接,因此目前的主流架構中, 大多將北橋記憶體控制器整合到 CPU 封裝當中了。所以上圖你只會看到 CPU 而沒有看到以往的北橋晶片喔!
畢竟目前世界上x86的CPU主要供應商為Intel,所以底下鳥哥將以Intel的主機板架構說明各元件囉! 我們以華碩公司出的主機板,型號:Asus Z97-AR 作為一個說明的範例,搭配著主機板晶片組邏輯圖 0.2.1 的說明,主機板各元件如下所示:
上述的圖片中,主機板上面設計的插槽主要有 CPU (Intel LGA 1150 Socket)、主記憶體 (DDR3 3200 support)、顯示卡界面 (PCIe3.0)、SATA 磁碟插槽 (SATA express)等等。 底下的元件在解說的時候,請參考上述兩張圖示來印證喔!
如同華碩主機板示意圖上半部的中央部分,那就是CPU插槽。 由於CPU負責大量運算,因此CPU通常是具有相當高發熱量的元件。所以如果你曾經拆開過主機板, 應該就會看到CPU上頭通常會安插一顆風扇來主動散熱的。
x86個人電腦的CPU主要供應商為Intel與AMD,目前(2015)主流的CPU都是雙核以上的架構了! 原本的單核心CPU僅有一個運算單元,所謂的多核心則是在一顆CPU封裝當中嵌入了兩個以上的運算核心, 簡單的說,就是一個實體的CPU外殼中,含有兩個以上的CPU單元就是了。
不同的CPU型號大多具有不同的腳位(CPU上面的插腳),能夠搭配的主機板晶片組也不同, 所以當你想要將你的主機升級時,不能只考慮CPU,你還得要留意你的主機板上面所支援的CPU型號喔! 不然買了最新的CPU也不能夠安插在你的舊主機板上頭的!目前主流的CPU有Intel的 i3/i5/i7 系列產品中,甚至先後期出廠的類似型號的腳位也不同, 例如 i7-2600 使用 LGA1155 腳位而 i7-4790 則使用 FCLGA1150 腳位,挑選時必須要很小心喔!
我們前面談到CPU內部含有微指令集,不同的微指令集會導致CPU工作效率的優劣。除了這點之外, CPU效能的比較還有什麼呢?那就是CPU的時脈了!什麼是時脈呢?簡單的說, 時脈就是CPU每秒鐘可以進行的工作次數。 所以時脈越高表示這顆CPU單位時間內可以作更多的事情。舉例來說,Intel的 i7-4790 CPU時脈為3.6GHz, 表示這顆CPU在一秒內可以進行3.6x109次工作,每次工作都可以進行少數的指令運作之意。
早期的 CPU 架構主要透過北橋來連結系統最重要的 CPU、主記憶體與顯示卡裝置。因為所有的設備都得掉透過北橋來連結,因此每個設備的工作頻率應該要相同。 於是就有所謂的前端匯流排 (FSB) 這個東西的產生。但因為 CPU 的運算速度比其他的設備都要來的快,又為了要滿足 FSB 的頻率,因此廠商就在 CPU 內部再進行加速, 於是就有所謂的外頻與倍頻了。
總結來說,在早期的 CPU 設計中,所謂的外頻指的是CPU與外部元件進行資料傳輸時的速度,倍頻則是 CPU 內部用來加速工作效能的一個倍數, 兩者相乘才是CPU的時脈速度。例如 Intel Core 2 E8400 的內頻為 3.0GHz,而外頻是333MHz,因此倍頻就是9倍囉!(3.0G=333Mx9, 其中1G=1000M)
但如此一來所有的資料都被北橋卡死了,北橋又不可能比 CPU 更快,因此這傢伙常常是系統效能的瓶頸。為了解決這個問題,新的 CPU 設計中, 已經將記憶體控制器整合到 CPU 內部,而連結 CPU 與記憶體、顯示卡的控制器的設計,在Intel部份使用 QPI (Quick Path Interconnect) 與 DMI 技術,而 AMD 部份則使用 Hyper Transport 了,這些技術都可以讓 CPU 直接與主記憶體、顯示卡等設備分別進行溝通,而不需要透過外部的連結晶片了。
因為現在沒有所謂的北橋了 (整合到 CPU 內),因此,CPU 的時脈設計就無須考慮得要同步的外頻,只需要考量整體的頻率即可。 所以,如果你經常有查閱自己 CPU 時脈的習慣,當使用 cpu-z (註9) 這個軟體時,應該會很驚訝的發現到,怎麼外頻變成 100MHz 而倍頻可以到達 30 以上!相當有趣呢!
從前面的簡易說明中,我們知道 CPU 的各項資料通通得要來自於主記憶體。因此,如果主記憶體能提供給 CPU 的資料量越大的話,當然整體系統的效能應該也會比較快! 那如何知道主記憶體能提供的資料量呢?此時還是得要藉由 CPU 內的記憶體控制晶片與主記憶體間的傳輸速度『前端匯流排速度(Front Side Bus, FSB) 來說明。
與 CPU 的時脈類似的,主記憶體也是有其工作的時脈,這個時脈限制還是來自於 CPU 內的記憶體控制器所決定的。以圖0.2.1 為例, CPU 內建的記憶體控制晶片對主記憶體的工作時脈最高可達到 1600MHz。這只是工作時脈(每秒幾次)。一般來說,每次時脈能夠傳輸的資料量,大多為 64 位元,這個 64 位元就是所謂的『寬度』了! 因此,在圖0.2.1 這個系統中,CPU可以從記憶體中取得的最快頻寬就是 1600MHz * 64bit = 1600MHz * 8 bytes = 12.8Gbyte/s。
與匯流排寬度相似的,CPU每次能夠處理的資料量稱為字組大小(word size), 字組大小依據CPU的設計而有32位元與64位元。我們現在所稱的電腦是32或64位元主要是依據這個 CPU解析的字組大小而來的!早期的32位元CPU中,因為CPU每次能夠解析的資料量有限, 因此由主記憶體傳來的資料量就有所限制了。這也導致32位元的CPU最多只能支援最大到4GBytes的記憶體。
由於x86架構的CPU在Intel的Pentium系列(1993年)後就有不統一的腳位與設計,為了將不同種類的CPU規範等級, 所以就有i386,i586,i686等名詞出現了。基本上,在Intel Pentium MMX與AMD K6年代的CPU稱為i586等級, 而Intel Celeron與AMD Athlon(K7)年代之後的32位元CPU就稱為i686等級。 至於目前的64位元CPU則統稱為x86_64等級。
目前很多的程式都有對CPU做最佳化的設計,萬一哪天你發現一些程式是註明給x86_64的CPU使用時, 就不要將他安裝在686以下等級的電腦中,否則可是會無法執行該軟體的! 不過,在x86_64的硬體下倒是可以安裝386的軟體喔!也就是說,這些東西具有向下相容的能力啦!
我們知道現在的 CPU 至少都是兩個核心以上的多核心 CPU 了,但是 Intel 還有個很怪的東西,叫做 CPU 的超執行緒 (Hyper-Threading) 功能! 那個是啥鬼東西?我們知道現在的 CPU 運算速度都太快了,因此運算核心經常處於閒置狀態下。而我們也知道現在的系統大多都是多工的系統, 同時間有很多的程序會讓 CPU 來執行。因此,若 CPU 可以假象的同時執行兩個程序,不就可以讓系統效能增加了嗎?反正 CPU 的運算能力還是沒有用完啊!
那是怎麼達成的啊這個 HT 功能?強者鳥哥的同事蔡董大大用個簡單的說明來解釋。在每一個 CPU 內部將重要的暫存器 (register) 分成兩群, 而讓程序分別使用這兩群暫存器。也就是說,可以有兩個程序『同時競爭 CPU 的運算單元』,而非透過作業系統的多工切換! 這一過程就會讓 CPU 好像『同時有兩個核心』的模樣!因此,雖然大部分 i7 等級的 CPU 其實只有四個實體核心,但透過 HT 的機制, 則作業系統可以抓到八個核心!並且讓每個核心邏輯上分離,就可以同時運作八個程序了。
雖然很多研究與測試中,大多發現 HT 雖然可以提昇效能,不過,有些情況下卻可能導致效能降低喔!因為,實際上明明就僅有一個運算單元嘛! 不過在鳥哥使用數值模式的情況下,因為鳥哥操作的數值模式主要為平行運算功能,且運算通常無法達到 100% 的 CPU 使用率,通常僅有大約60%運算量而已。 因此在鳥哥的實作過程中,這個 HT 確實提昇相當多的效能!至少應該可以節省鳥哥大約30%~50%的等待時間喔!不過網路上大家的研究中, 大多說這個是 case by case,而且使用的軟體影響很大!所以,在鳥哥的例子是啟用 HT 幫助很大!您的案例就得要自行研究囉!
如同圖0.2.2、華碩主機板示意圖中的右上方部分的那四根插槽,那就是主記憶體的插槽了。 主記憶體插槽中間通常有個突起物將整個插槽稍微切分成為兩個不等長的距離, 這樣的設計可以讓使用者在安裝主記憶體時,不至於前後腳位安插錯誤,是一種防呆的設計喔。
前面提到CPU所使用的資料都是來自於主記憶體(main memory),不論是軟體程式還是資料,都必須要讀入主記憶體後CPU才能利用。 個人電腦的主記憶體主要元件為動態隨機存取記憶體(Dynamic Random Access Memory, DRAM), 隨機存取記憶體只有在通電時才能記錄與使用,斷電後資料就消失了。因此我們也稱這種RAM為揮發性記憶體。
DRAM根據技術的更新又分好幾代,而使用上較廣泛的有所謂的SDRAM與DDR SDRAM兩種。 這兩種記憶體的差別除了在於腳位與工作電壓上的不同之外,DDR是所謂的雙倍資料傳送速度(Double Data Rate), 他可以在一次工作週期中進行兩次資料的傳送,感覺上就好像是CPU的倍頻啦! 所以傳輸頻率方面比SDRAM還要好。新一代的PC大多使用DDR記憶體了。 下表列出SDRAM與DDR SDRAM的型號與頻率及頻寬之間的關係。(註11)
SDRAM/DDR | 型號 | 資料寬度(bit) | 內部時脈(MHz) | 頻率速度 | 頻寬(頻率x寬度) |
SDRAM | PC100 | 64 | 100 | 100 | 800MBytes/sec |
SDRAM | PC133 | 64 | 133 | 133 | 1064MBytes/sec |
DDR | DDR-266 | 64 | 133 | 266 | 2.1GBytes/sec |
DDR | DDR-400 | 64 | 200 | 400 | 3.2GBytes/sec |
DDR | DDR2-800 | 64 | 200 | 800 | 6.4GBytes/sec |
DDR | DDR3-1600 | 64 | 200 | 1600 | 12.8GBytes/sec |
DDR SDRAM又依據技術的發展,有DDR, DDR2, DDR3, DDR4等等,其中,DDR2 的頻率倍數則是 4 倍而DDR3 則是 8 倍喔! 目前鳥哥用到伺服器等級的記憶體,已經到 DDR4 了耶!超快超快!
主記憶體除了頻率/頻寬與型號需要考慮之外,記憶體的容量也是很重要的喔! 因為所有的資料都得要載入記憶體當中才能夠被CPU判讀,如果記憶體容量不夠大的話將會導致某些大容量資料無法被完整的載入, 此時已存在記憶體當中但暫時沒有被使用到的資料必須要先被釋放,使得可用記憶體容量大於該資料,那份新資料才能夠被載入呢! 所以,通常越大的記憶體代表越快速的系統,這是因為系統不用常常釋放一些記憶體內部的資料。 以伺服器來說,主記憶體的容量有時比CPU的速度還要來的重要的!
由於所有的資料都必須要存放在主記憶體,所以主記憶體的資料寬度當然是越大越好。 但傳統的匯流排寬度一般大約僅達64位元,為了要加大這個寬度,因此晶片組廠商就將兩個主記憶體彙整在一起, 如果一支記憶體可達64位元,兩支記憶體就可以達到128位元了,這就是雙通道的設計理念。
如上所述,要啟用雙通道的功能你必須要安插兩支(或四支)主記憶體,這兩支記憶體最好連型號都一模一樣比較好, 這是因為啟動雙通道記憶體功能時,資料是同步寫入/讀出這一對主記憶體中,如此才能夠提升整體的頻寬啊! 所以當然除了容量大小要一致之外,型號也最好相同啦!
你有沒有發現圖 0.2.2、華碩主機板示意圖上那四根記憶體插槽的顏色呢?是否分為兩種顏色,且兩兩成對? 為什麼要這樣設計?答出來了嗎?是啦!這種顏色的設計就是為了雙通道來的!要啟動雙通道的功能時, 你必須要將兩根容量相同的主記憶體插在相同顏色的插槽當中喔!
除了主記憶體之外,事實上整部個人電腦當中還有許許多多的記憶體存在喔!最為我們所知的就是CPU內的第二層快取記憶體。 我們現在知道CPU的資料都是由主記憶體提供,但CPU到主記憶體之間還是得要透過記憶體控制器啊! 如果某些很常用的程式或資料可以放置到CPU內部的話,那麼CPU資料的讀取就不需要跑到主記憶體重新讀取了! 這對於效能來說不就可以大大的提升了?這就是第二層快取的設計概念。第二層快取與主記憶體及CPU的關係如下圖所示:
因為第二層快取(L2 cache)整合到CPU內部,因此這個L2記憶體的速度必須要CPU時脈相同。 使用DRAM是無法達到這個時脈速度的,此時就需要靜態隨機存取記憶體(Static Random Access Memory, SRAM)的幫忙了。 SRAM在設計上使用的電晶體數量較多,價格較高,且不易做成大容量,不過由於其速度快, 因此整合到CPU內成為快取記憶體以加快資料的存取是個不錯的方式喔!新一代的CPU都有內建容量不等的L2快取在CPU內部, 以加快CPU的運作效能。
主機板上面的元件是非常多的,而每個元件的參數又具有可調整性。舉例來說,CPU與記憶體的時脈是可調整的; 而主機板上面如果有內建的網路卡或者是顯示卡時,該功能是否要啟動與該功能的各項參數, 是被記錄到主機板上頭的一個稱為CMOS的晶片上,這個晶片需要藉著額外的電源來發揮記錄功能, 這也是為什麼你的主機板上面會有一顆電池的緣故。
那CMOS內的資料如何讀取與更新呢?還記得你的電腦在開機的時候可以按下[Del]按鍵來進入一個名為BIOS的畫面吧? BIOS(Basic Input Output System)是一套程式,這套程式是寫死到主機板上面的一個記憶體晶片中, 這個記憶體晶片在沒有通電時也能夠將資料記錄下來,那就是唯讀記憶體(Read Only Memory, ROM)。 ROM是一種非揮發性的記憶體。另外,BIOS對於個人電腦來說是非常重要的, 因為他是系統在開機的時候首先會去讀取的一個小程式喔!
另外,韌體(firmware)(註12)很多也是使用ROM來進行軟體的寫入的。 韌體像軟體一樣也是一個被電腦所執行的程式,然而他是對於硬體內部而言更加重要的部分。例如BIOS就是一個韌體, BIOS雖然對於我們日常操作電腦系統沒有什麼太大的關係,但是他卻控制著開機時各項硬體參數的取得! 所以我們會知道很多的硬體上頭都會有ROM來寫入韌體這個軟體。
BIOS 對電腦系統來講是非常重要的,因為他掌握了系統硬體的詳細資訊與開機設備的選擇等等。但是電腦發展的速度太快了, 因此 BIOS 程式碼也可能需要作適度的修改才行,所以你才會在很多主機板官網找到 BIOS 的更新程式啊!但是 BIOS 原本使用的是無法改寫的 ROM ,因此根本無法修正 BIOS 程式碼!為此,現在的 BIOS 通常是寫入類似快閃記憶體 (flash) 或 EEPROM (註13) 中。(註14)
顯示卡插槽如同圖 0.2.2、華碩主機板示意圖所示,在中左方有個 PCIe 3.0 的項目, 這張主機板中提供了兩個顯示卡插槽喔!
顯示卡又稱為VGA(Video Graphics Array),他對於圖形影像的顯示扮演相當關鍵的角色。 一般對於圖形影像的顯示重點在於解析度與色彩深度,因為每個圖像顯示的顏色會佔用掉記憶體, 因此顯示卡上面會有一個記憶體的容量,這個顯示卡記憶體容量將會影響到你的螢幕解析度與色彩深度的喔!
除了顯示卡記憶體之外,現在由於三度空間遊戲(3D game)與一些3D動畫的流行,因此顯示卡的『運算能力』越來越重要。 一些3D的運算早期是交給CPU去運作的,但是CPU並非完全針對這些3D來進行設計的,而且CPU平時已經非常忙碌了呢! 所以後來顯示卡廠商直接在顯示卡上面嵌入一個3D加速的晶片,這就是所謂的GPU稱謂的由來。
顯示卡主要也是透過CPU的控制晶片來與CPU、主記憶體等溝通。如前面提到的,對於圖形影像(尤其是3D遊戲)來說, 顯示卡也是需要高速運算的一個元件,所以資料的傳輸也是越快越好!因此顯示卡的規格由早期的PCI導向AGP, 近期AGP又被PCI-Express規格所取代了。如前面華碩主機板圖示當中看到的就是PCI-Express的插槽。 這些插槽最大的差異就是在資料傳輸的頻寬了!如下所示:
規格 | 寬度 | 速度 | 頻寬 |
PCI | 32 bits | 33 MHz | 133 MBytes/s |
PCI 2.2 | 64 bits | 66 MHz | 533 MBytes/s |
PCI-X | 64 bits | 133 MHz | 1064 MBytes/s |
AGP 4x | 32 bits | 66x4 MHz | 1066 MBytes/s |
AGP 8x | 32 bits | 66x8 MHz | 2133 MBytes/s |
PCIe 1.0 x1 | 無 | 無 | 250 MBytes/s |
PCIe 1.0 x8 | 無 | 無 | 2 GBytes/s |
PCIe 1.0 x16 | 無 | 無 | 4 GBytes/s |
比較特殊的是,PCIe(PCI-Express)使用的是類似管線的概念來處理,在 PCIe 第一版 (PCIe 1.0) 中,每條管線可以具有250MBytes/s的頻寬效能, 管線越多(通常設計到 x16 管線)則總頻寬越高!另外,為了提昇更多的頻寬,因此 PCIe 還有進階版本,目前主要的版本為第三版,相關的頻寬如下:(註15)
規格 | 1x頻寬 | 16x頻寬 |
PCIe 1.0 | 250MByte/s | 4GByte/s |
PCIe 2.0 | 500MByte/s | 8GByte/s |
PCIe 3.0 | ~1GByte/s | ~16GByte/s |
PCIe 4.0 | ~2GByte/s | ~32GByte/s |
若以圖0.2.2的主機板為例,它使用的是 PCIe 3.0 的 16x,因此最大頻寬就可以到達接近 32Gbytes/s 的傳輸量! 比起AGP是快很多的!好可怕的傳輸量....
如果你的主機是用來打3D遊戲的,那麼顯示卡的選購是非常重要喔!如果你的主機是用來做為網路伺服器的, 那麼簡單的入門級顯示卡對你的主機來說就非常夠用了!因為網路伺服器很少用到3D與圖形影像功能。
除了顯示卡與主機板的連接介面需要知道外,那麼顯示卡是透過什麼格式與電腦螢幕 (或電視) 連接的呢?目前主要的連接介面有:
電腦總是需要記錄與讀取資料的,而這些資料當然不可能每次都由使用者經過鍵盤來打字!所以就需要有儲存設備咯。 電腦系統上面的儲存設備包括有:硬碟、軟碟、MO、CD、DVD、磁帶機、隨身碟(快閃記憶體)、還有新一代的藍光光碟機等, 乃至於大型機器的區域網路儲存設備(SAN, NAS)等等,都是可以用來儲存資料的。而其中最常見的應該就是硬碟了吧!
大家應該都看過硬碟吧!硬碟依據桌上型與筆記型電腦而有分為3.5吋及2.5吋的大小。我們以3.5吋的桌上型電腦使用硬碟來說明。 在硬碟盒裡面其實是由許許多多的圓形磁碟盤、機械手臂、 磁碟讀取頭與主軸馬達所組成的,整個內部如同下圖所示:
實際的資料都是寫在具有磁性物質的磁碟盤上頭,而讀寫主要是透過在機械手臂上的讀取頭(head)來達成。 實際運作時, 主軸馬達讓磁碟盤轉動,然後機械手臂可伸展讓讀取頭在磁碟盤上頭進行讀寫的動作。 另外,由於單一磁碟盤的容量有限,因此有的硬碟內部會有兩個以上的磁碟盤喔!
既然資料都是寫入磁碟盤上頭,那麼磁碟盤上頭的資料又是如何寫入的呢?其實磁碟盤上頭的資料有點像下面的圖示所示:
由於磁碟盤是圓的,並且透過機器手臂去讀寫資料,磁碟盤要轉動才能夠讓機器手臂讀寫。因此,通常資料寫入當然就是以圓圈轉圈的方式讀寫囉! 所以,當初設計就是在類似磁碟盤同心圓上面切出一個一個的小區塊,這些小區塊整合成一個圓形,讓機器手臂上的讀寫頭去存取。 這個小區塊就是磁碟的最小物理儲存單位,稱之為磁區 (sector),那同一個同心圓的磁區組合成的圓就是所謂的磁軌(track)。 由於磁碟裡面可能會有多個磁碟盤,因此在所有磁碟盤上面的同一個磁軌可以組合成所謂的磁柱 (cylinder)。
我們知道同心圓外圈的圓比較大,佔用的面積比內圈多啊!所以,為了善用這些空間,因此外圍的圓會具有更多的磁區(註16)! 就如同圖 0.2.5 的示意一般。此外,當磁碟盤轉一圈時,外圈的磁區數量比較多,因此如果資料寫入在外圈,轉一圈能夠讀寫的資料量當然比內圈還要多! 因此通常資料的讀寫會由外圈開始往內寫的喔!這是預設值啊!
另外,原本硬碟的磁區都是設計成 512byte 的容量,但因為近期以來硬碟的容量越來越大,為了減少資料量的拆解,所以新的高容量硬碟已經有 4Kbyte 的磁區設計! 購買的時候也需要注意一下。也因為這個磁區的設計不同了,因此在磁碟的分割方面,目前有舊式的 MSDOS 相容模式,以及較新的 GPT 模式喔! 在較新的 GPT 模式下,磁碟的分割通常使用磁區號碼來設計,跟過去舊的 MSDOS 是透過磁柱號碼來分割的情況不同喔!相關的說明我們談到磁碟管理 (第七章) 再來聊!
為了要提昇磁碟的傳輸速度,磁碟與主機板的連接界面也經過多次的改版,因此有許多不同的界面喔!傳統磁碟界面包括有 SATA, SAS, IDE 與 SCSI 等等。 若考慮外接式磁碟,那就還包括了 USB, eSATA 等等界面喔!不過目前 IDE 已經被 SATA 取代,而 SCSI 則被 SAS 取代,因此我們底下將僅介紹 SATA, USB 與 SAS 界面而已。
如同華碩主機板圖示右下方所示為SATA硬碟的連接介面插槽。這種插槽所使用的排線比較窄小, 而且每個裝置需要使用掉一條SATA線。因為SATA線比較窄小之故,所以對於安裝與機殼內的通風都比較好!因此原本的IDE粗排線界面就被SATA取代了! SATA的插槽示意圖如下所示:
由於SATA一條排線僅接一顆硬碟,所以妳不需要調整跳針。不過一張主機板上面SATA插槽的數量並不是固定的, 且每個插槽都有編號,在連接SATA硬碟與主機板的時候,還是需要留意一下。此外,目前的 SATA 版本已經到了第三代 (註17), 每一代之間的傳輸速度如下所示,而且重點是,每一代都可以向下相容喔!只是速度上會差很多就是了。目前主流都是使用 SATA3 這個界面速度可達 600Mbyte/s 的界面!
版本 | 頻寬 (Gbit/s) | 速度 (Mbyte/s) |
SATA 1.0 | 1.5 | 150 |
SATA 2.0 | 3 | 300 |
SATA 3.0 | 6 | 600 |
因為 SATA 傳輸界面傳輸時,透過的資料演算法的關係,當傳輸 10 位元編碼時,僅有 8 位元為資料,其餘 2 位元為檢驗之用。因此頻寬的計算上面, 使用的換算 (bit 轉 byte) 為 1:10 而不是 1byte=8bits 喔!上表的對應要稍微注意一下。另外,雖然這個 SATA3 界面理論上可達 600Mbytes/s 的傳輸速度, 不過目前傳統的硬碟由於其物理組成的限制,一般極限速度大約在 150~200Mbyte/s 而已啦!所以廠商們才要發展固態硬碟啊! ^_^
早期工作站或大型大腦上面,為了讀寫速度與穩定度,因此在這樣的機器上面,大多使用的是 SCSI 這種高階的連接介面。 不過這種介面的速度後來被 SATA 打敗了!但是 SCSI 有其值得開發的功能,因此後來就有串列式 SCSI (Serial Attached SCSI, SAS) 的發展。這種介面的速度比 SATA 來的快,而且連接的 SAS 硬碟的磁碟盤轉速與傳輸的速度也都比 SATA 硬碟好! 只是...好貴喔!而且一般個人電腦的主機板上面通常沒有內建 SAS 連接介面,得要透過外接卡才能夠支援。因此一般個人電腦主機還是以 SATA 介面為主要的磁碟連接介面囉。
版本 | 頻寬 (Gbit/s) | 速度 (Mbyte/s) |
SAS 1 | 3 | 300 |
SAS 2 | 6 | 600 |
SAS 3 | 12 | 1200 |
因為這種介面的速度確實比較快喔!而且還支援例如熱拔插等功能,因此,許多的裝置連接會以這種介面來連結! 例如我們經常會聽到的磁碟陣列卡的連接插槽,就是利用這種 SAS 介面開發出來的支援的 SFF-8087 裝置等等的 (註18)。
如果你的磁碟是外接式的界面,那麼很可能跟主機板連結的就是 USB 這種界面了!這也是目前 (2015) 最常見到的外接式磁碟界面了。 不過傳統的 USB 速度挺慢的,即使是比較慢的傳統硬碟,其傳輸率大概都還有 80~120Mbytes/s ,但傳統的 USB 2.0 僅有大約 60Mbytes/s 的理論傳輸率, 通常實做在主機板上面的連接口,竟然都僅有 30~40 Mbyte/s 而已呢!實在發揮不出磁碟的性能啊!
為了改善 USB 的傳輸率,因此新一代的 USB 3.0 速度就快很多了!據說還有更新的 USB 3.1 正在發展中!這幾代版本的頻寬與速度製表如下 (註19):
版本 | 頻寬 (Mbit/s) | 速度 (Mbyte/s) |
USB 1.0 | 12 | 1.5 |
USB 2.0 | 480 | 60 |
USB 3.0 | 5G | 500 |
USB 3.1 | 10G | 1000 |
跟 SATA 界面一樣,不是理論速度到達該數值,實際上就可以跑到這麼高!USB 3.0 雖然速度很快,但如果妳去市面上面買 USB 的傳統磁碟或快閃碟, 其實他的讀寫速度還是差不多在 100Mbytes/s 而已啦!不過這樣就超級快了!因為一般 USB2.0 的快閃碟讀寫速度大約是 40Mbytes/10Mbytes 左右而已說。 在購買這方面的外接式磁碟時,要特別考量喔!
傳統硬碟有個很致命的問題,就是需要驅動馬達去轉動磁碟盤~這會造成很嚴重的磁碟讀取延遲!想想看,你得要知道資料在哪個磁區上面,然後再命令馬達開始轉, 之後再讓讀取頭去讀取正確的資料。另外,如果資料放置的比較離散(磁區分佈比較廣又不連續),那麼讀寫的速度就會延遲更明顯!速度快不起來。因此, 後來就有廠商拿快閃記憶體去製作成高容量的設備,這些設備的連接界面也是透過 SATA 或 SAS,而且外型還做的跟傳統磁碟一樣!所以, 雖然這類的設備已經不能稱為是磁碟 (因為沒有讀寫頭與磁碟盤啊!都是記憶體!)。但是為了方便大家稱呼,所以還是稱為磁碟!只是跟傳統磁碟 (Hard Disk Drive, HDD) 不同, 就稱為固態硬碟 (Solid State Disk 或 Solid State Driver, SSD)。
固態硬碟最大的好處是,它沒有馬達不需要轉動,而是透過記憶體直接讀寫的特性,因此除了沒資料延遲且快速之外,還很省電! 不過早期的 SSD 有個很重要的致命傷,就是這些快閃記憶體有『寫入次數的限制』在,因此通常 SSD 的壽命大概兩年就頂天了!所以資料存放時, 需要考慮到備份或者是可能要使用 RAID 的機制來防止 SSD 的損毀(註20)!
其實我們在讀寫磁碟時,通常沒有連續讀寫,大部分的情況下都是讀寫一大堆小檔案,因此,你不要妄想傳統磁碟一直轉少少圈就可以讀到所有的資料! 通常很多小檔案的讀寫,會很操硬碟,因為磁碟盤要轉好多圈!這也很花人類的時間啊!SSD 就沒有這個問題!也因為如此,近年來在測試磁碟的效能時, 有個很特殊的單位,稱為每秒讀寫操作次數 (Input/Output Operations Per Second, IOPS)!這個數值越大,代表可操作次數較高,當然效能好的很!
如果你想要增加一顆硬碟在你的主機裡頭時,除了需要考慮你的主機板可接受的插槽介面(SATA/SAS)之外,還有什麼要注意的呢?
你的伺服器可能因為某些特殊的需求,因此需要使用主機板之外的其他介面卡。所以主機板上面通常會預留多個擴充界面的插槽, 這些插槽依據歷史沿革,包括 PCI/AGP/PCI-X/PCIe 等等,但是由於 PCIe 速度快到太好用了,因此幾乎所有的卡都以 PCIe 來設計了! 但是有些比較老舊的卡可能還需要使用啊,因此一般主機板大多還是會保留一兩個 PCI 插槽,其他的則是以 PCIe 來設計。
由於各元件的價格直直落,現在主機板上面通常已經整合了相當多的設備元件了! 常見整合到主機板的元件包括音效卡、網路卡、USB控制卡、顯示卡、磁碟陣列卡等等。 你可以在主機板上面發現很多方形的晶片,那通常是一些個別的設備晶片喔。
不過,因為某些特殊的需求,有時你可能還是需要增加額外的擴充卡的。舉例來說,我們如果需要一部個人電腦連接多個網域時(Linux 伺服器用途), 恐怕就得要有多個網路卡。當你想要買網路卡時,大賣場上面有好多耶!而且速度一樣都是 giga 網卡 (Gbit/s),但價格差很多耶! 觀察規格,主要有 PCIe x1 以及 PCI 界面的!你要買哪種界面呢?
觀察一下 0.2.3 顯示卡的章節內,你會發現到 PCI 界面的理論傳輸率最高指到 133Mbytes/s 而已,而 PCIe 2.0 x1 就高達 500Mbytes/s 的速度! 鳥哥實測的結果也發現,PCI 界面的 giga 網卡極限速度大約只到 60Mbytes/s 而已,而 PCIe 2.0 x1 的 giga 網卡確實可以到達大約 110Mbytes/s 的速度! 所以,購買設備時,還是要查清楚連接界面才行啦!
在 0.2.3 節也談到 PCIe 有不同的通道數,基本上常見的就是 x1, x4, x8, x16 等,個人電腦主機板常見是 x16 的,一般中階伺服器則大多有多個 x8 的界面, x16 反而比較少見。這些界面在主機板上面的設計,主要是以插槽的長度來看的,例如華碩主機板示意圖中,左側有 2 個 PCI 界面, 其他的則是 3 個 x16 的插槽,以及 2 個 x1 的插槽,看長度就知道了。
再回頭看看圖 0.2.1 的示意圖,你可以發現 CPU 最多最多僅能支援 16 個 PCIe 3.0 的通道數,因此在圖示當中就明白的告訴你, 你可以設計(1)一個 x16 (2)或者是兩個 x8 ,(3)或者是兩個 x4 加上一個 x8 的方式來增加擴充卡!這是可以直接連結到 CPU 的通道!咦! 那為何圖 0.2.2 可以有 3 個 x16 的插槽呢?原因是前兩個屬於 CPU 支援的,後面兩個可能就是南橋提供的 PCIe 2.0 的界面了! 那明明最多僅能支援一個 x16 的界面,怎麼可能設計 3 個 x16 呢?
因為要讓所有的擴充卡都可以安插在主機板上面,所以在比較中高階的主機板上面,他們都會做出 x16 的插槽,但是該插槽內其實只有 x8 或 x4 的通道有用! 其他的都是空的沒有金手指 (電路的意思)~咦!那如果我的 x16 的卡安裝在 x16 的插槽,但是這個插槽僅有 x4 的電路設計,那我這張卡可以運作嗎? 當然可以!這就是 PCIe 的好處了!它可以讓你這張卡僅使用 x4 的電路來傳送資料,而不會無法使用!只是...你的這張卡的極限效能,就會只剩下 4/16 = 1/4 囉!
因為一般伺服器慣用的擴充卡,大多數都使用 PCIe x8 的界面 (因為也沒有什麼裝置可以將 PCIe 3.0 的 x8 速度用完啊!), 為了增加擴充卡的數量,因此伺服器級的主機板才會大多使用到 x8 的插槽說!反正,要發揮擴充卡的能力,就得要搭配相對應的插槽才行啦!
這個小節我們特別再將主機板拿出來說明一下,特別要講的就是晶片組與擴充卡之間的關係了!
如同圖 0.2.1 所示,其實系統上面可能會有多個 x8 的插槽,那麼到底你的卡插在哪個插槽上面效能最好? 我們以該圖來說,如果你是安插在左上方跟 CPU 直接連線的那幾個插槽,那效能最佳!如果你是安插在左側由上往下數的第五個 PCIe 2.0 x8 的插槽呢? 那個插槽是與南橋連接,所以你的擴充卡資料需要先進入南橋跟大家搶頻寬,之後要傳向 CPU 時,還得要透過 CPU 與南橋的溝通管道, 那條管道稱為 DMI 2.0。
根據 Intel 方面的資料來看,DMI 2.0 的傳輸率是 4GT/s,換算成檔案傳輸量時,大約僅有 2GByte/s 的速度, 要知道,PCIe 2.0 x8 的理論速度已經達到 4GByte/s 了,但是與 CPU 的通道竟然僅有 2GB,效能的瓶頸就這樣發生在 CPU 與南橋的溝通上面! 因此,卡安裝在哪個插槽上面,對效能而言也是影響很大的!所以插卡時,請詳細閱讀您主機板上面的邏輯圖示啊 (類似本章的 Intel 晶片示意圖)! 尤其 CPU 與南橋溝通的頻寬方面,特別重要喔!
主機板是負責各個電腦元件之間的溝通,但是電腦元件實在太多了,有輸出/輸入/不同的儲存裝置等等, 主機板晶片組怎麼知道如何負責溝通吶?這個時候就需要用到所謂的I/O位址與IRQ囉!
I/O位址有點類似每個裝置的門牌號碼,每個裝置都有他自己的位址,一般來說,不能有兩個裝置使用同一個I/O位址, 否則系統就會不曉得該如何運作這兩個裝置了。而除了I/O位址之外,還有個IRQ中斷(Interrupt)這個咚咚。
如果I/O位址想成是各裝置的門牌號碼的話,那麼IRQ就可以想成是各個門牌連接到郵件中心(CPU)的專門路徑囉! 各裝置可以透過IRQ中斷通道來告知CPU該裝置的工作情況,以方便CPU進行工作分配的任務。 老式的主機板晶片組IRQ只有15個,如果你的周邊介面太多時可能就會不夠用, 這個時候你可以選擇將一些沒有用到的周邊介面關掉,以空出一些IRQ來給真正需要使用的介面喔! 當然,也有所謂的sharing IRQ的技術就是了!
前面記憶體的地方我們有提過CMOS與BIOS的功能,在這裡我們再來強調一下: CMOS主要的功能為記錄主機板上面的重要參數, 包括系統時間、CPU電壓與頻率、各項設備的I/O位址與IRQ等,由於這些資料的記錄要花費電力,因此主機板上面才有電池。 BIOS為寫入到主機板上某一塊 flash 或 EEPROM 的程式,他可以在開機的時候執行,以載入CMOS當中的參數, 並嘗試呼叫儲存裝置中的開機程式,進一步進入作業系統當中。BIOS程式也可以修改CMOS中的資料, 每種主機板呼叫BIOS設定程式的按鍵都不同,一般桌上型電腦常見的是使用[del]按鍵進入BIOS設定畫面。
主機板與各項輸出/輸入設備的連結主要都是在主機機殼的後方,主要有:
我們以華碩主機板的連結介面來看的話,主要有這些:
除了上面這些元件之外,其實還有一個很重要的元件也要來談一談,那就是電源供應器(Power)。 在你的機殼內,有個大大的鐵盒子,上頭有很多電源線會跑出來,那就是電源供應器了。 我們的CPU/RAM/主機板/硬碟等等都需要用電,而近來的電腦元件耗電量越來越高,以前很古早的230W電源已經不夠用了, 有的系統甚至得要有500W以上的電源才能夠運作~真可怕~
電源供應器的價差非常大!貴一點的300W可以到4000 NT,便宜一點的300W只要500 NT不到! 怎麼差這麼多?沒錯~因為Power的用料不同,電源供應的穩定度也會差很多。如前所述,電源供應器相當於你的心臟, 心臟差的話,活動力就會不足了!所以, 穩定度差的電源供應器甚至是造成電腦不穩定的元兇呢!所以,盡量不要使用太差的電源供應器喔!
電源供應器本身也會吃掉一部份的電力的!如果你的主機系統需要 300W 的電力時,因為電源供應器本身也會消耗掉一部份的電力, 因此你最好要挑選400W以上的電源供應器。電源供應器出廠前會有一些測試數據,最好挑選高轉換率的電源供應器。 所謂的高轉換率指的是『輸出的功率/輸入的功率』。意思是說,假如你的主機板用電量為250W, 但是電源供應器其實已經使用掉320W的電力,則轉換率為:250/320=0.78的意思。 這個數值越高表示被電源供應器『玩掉』的電力越少,那就符合能源效益了!^_^
在購買主機時應該需要進行整體的考量,很難依照某一項標準來選購的。 老實說,如果你的公司需要一部伺服器的話,建議不要自行組裝,買品牌電腦的伺服器比較好! 這是因為自行組裝的電腦雖然比較便宜,但是每項設備之間的適合性是否完美則有待自行檢測。
另外,在效能方面並非僅考量CPU的能力而已,速度的快慢與『整體系統的最慢的那個設備有關!』,如果你是使用最快速的Intel i7 系列產品,使用最快的 DDR3-1600 記憶體, 但是配上一個慢慢的過時顯示卡,那麼整體的3D速度效能將會卡在那個顯示卡上面喔!所以,在購買整套系統時, 請特別留意需要全部的介面都考慮進去喔!尤其是當您想要升級時,要特別注意這個問題, 並非所有的舊的設備都適合繼續使用的。
除此之外,到底那個元件特別容易造成系統的不穩定呢?有幾個常見的系統不穩定的狀態是:
事實上我們的電腦只認識0與1,記錄的資料也是只能記錄0與1而已,所以電腦常用的資料是二進位的。 但是我們人類常用的數值運算是十進位,文字方面則有非常多的語言,台灣常用的語言就有英文、中文(又分正體與簡體中文)、日文等。 那麼電腦如何記錄與顯示這些數值/文字呢?就得要透過一系列的轉換才可以啦!底下我們就來談談數值與文字的編碼系統囉!
早期的電腦使用的是利用通電與否的特性的真空管,如果通電就是1,沒有通電就是0, 後來沿用至今,我們稱這種只有0/1的環境為二進位制,英文稱為binary的哩。所謂的十進位指的是逢十進一位, 因此在個位數歸為零而十位數寫成1。所以所謂的二進位,就是逢二就前進一位的意思。
那二進位怎麼用呢?我們先以十進位來解釋好了。如果以十進位來說,3456的意義為:
特別注意:『任何數值的零次方為1』所以100的結果就是1囉。 同樣的,將這個原理帶入二進位的環境中,我們來解釋一下1101010的數值轉為十進位的話,結果如下:
這樣你瞭解二進位的意義了嗎?二進位是電腦基礎中的基礎喔!瞭解了二進位後,八進位、十六進位就依此類推啦! 那麼知道二進位轉成十進位後,那如果有十進位數值轉為二進位的環境時,該如何計算? 剛剛是乘法,現在則是除法就對了!我們同樣的使用十進位的106轉成二進位來測試一下好了:
最後的寫法就如同上面的紅色箭頭,由最後的數字向上寫,因此可得到1101010的數字囉! 這些數字的轉換系統是非常重要的,因為電腦的加減乘除都是使用這些機制來處理的! 有興趣的朋友可以再參考一下其他計算計概論的書籍中,關於1的補數/2的補數等運算方式喔!
既然電腦都只有記錄0/1而已,甚至記錄的資料都是使用byte/bit等單位來記錄的,那麼文字該如何記錄啊? 事實上文字檔案也是被記錄為0與1而已,而這個檔案的內容要被取出來查閱時,必須要經過一個編碼系統的處理才行。 所謂的『編碼系統』可以想成是一個『字碼對照表』,他的概念有點像底下的圖示:
當我們要寫入檔案的文字資料時,該文字資料會由編碼對照表將該文字轉成數字後,再存入檔案當中。 同樣的,當我們要將檔案內容的資料讀出時,也會經過編碼對照表將該數字轉成對應的文字後,再顯示到螢幕上。 現在你知道為何瀏覽器上面如果編碼寫錯時,會出現亂碼了嗎?這是因為編碼對照表寫錯, 導致對照的文字產生誤差之故啦!
常用的英文編碼表為ASCII系統,這個編碼系統中, 每個符號(英文、數字或符號等)都會佔用1bytes的記錄, 因此總共會有28=256種變化。至於中文字當中的編碼系統早期最常用的就是big5這個編碼表了。 每個中文字會佔用2bytes,理論上最多可以有216=65536,亦即最多可達6萬多個中文字。 但是因為big5編碼系統並非將所有的位元都拿來運用成為對照,所以並非可達這麼多的中文字碼的。 目前big5僅定義了一萬三千多個中文字,很多中文利用big5是無法成功顯示的~所以才會有造字程式說。
big5碼的中文字編碼對於某些資料庫系統來說是很有問題的,某些字碼例如『許、蓋、功』等字, 由於這幾個字的內部編碼會被誤判為單/雙引號,在寫入還不成問題,在讀出資料的對照表時, 常常就會變成亂碼。不只中文字,其他非英語系國家也常常會有這樣的問題出現啊!
為了解決這個問題,由國際組織ISO/IEC跳出來制訂了所謂的Unicode編碼系統, 我們常常稱呼的UTF8或萬國碼的編碼就是這個咚咚。因為這個編碼系統打破了所有國家的不同編碼, 因此目前網際網路社會大多朝向這個編碼系統在走,所以各位親愛的朋友啊,記得將你的編碼系統修訂一下喔!
鳥哥在上課時常常會開玩笑的問:『我們知道沒有插電的電腦是一堆廢鐵,那麼插了電的電腦是什麼?』 答案是:『一堆會電人的廢鐵』!這是因為沒有軟體的運作,電腦的功能就無從發揮之故。 就好像沒有了靈魂的軀體也不過就是行屍走肉,重點在於軟體/靈魂囉!所以底下咱們就得要瞭解一下『軟體』是什麼。
一般來說,目前的電腦系統將軟體分為兩大類,一個是系統軟體,一個是應用程式。但鳥哥認為我們還是得要瞭解一下什麼是程式, 尤其是機器程式,瞭解了之後再來探討一下為什麼現今的電腦系統需要『作業系統』這玩意兒呢!
我們前面談到電腦只認識0與1而已,而且電腦最重要的運算與邏輯判斷是在CPU內部, 而CPU其實是具有微指令集的。因此,我們需要CPU幫忙工作時,就得要參考微指令集的內容, 然後撰寫讓CPU讀的懂的指令碼給CPU執行,這樣就能夠讓CPU運作了。
不過這樣的流程有幾個很麻煩的地方,包括:
那怎麼解決啊?為了解決這個問題,電腦科學家設計出一種讓人類看的懂得程式語言, 然後創造一種『編譯器』來將這些人類能夠寫的程式語言轉譯成為機器能看懂得機器碼, 如此一來我們修改與撰寫程式就變的容易多了!目前常見的編譯器有C, C++, Java, Fortran等等。 機器語言與高階程式語言的差別如下所示:
從上面的圖示我們可以看到高階程式語言的程式碼是很容易察看的!鳥哥已經將程式碼(英文)寫成中文說~ 這樣比較好理解啦!所以這樣已經將程式的修改問題處理完畢了。 問題是,在這樣的環境底下我們還是得要考量整體的硬體系統來設計程式喔!
舉例來說,當你需要將運作的資料寫入記憶體中,你就得要自行分配一個記憶體區塊出來讓自己的資料能夠填上去, 所以你還得要瞭解到記憶體的位址是如何定位的,啊!眼淚還是不知不覺的流了下來... 怎麼寫程式這麼麻煩啊!
為了要克服硬體方面老是需要重複撰寫控制碼的問題,所以就有作業系統(Operating System, OS)的出現了! 什麼是作業系統呢?底下就來談一談先!
如同前面提到的,在早期想要讓電腦執行程式就得要參考一堆硬體功能函數,並且學習機器語言才能夠撰寫程式。 同時每次寫程式時都必須要重新改寫,因為硬體與軟體功能不見得都一致之故。那如果我能夠將所有的硬體都驅動, 並且提供一個發展軟體的參考介面來給工程師開發軟體的話,那發展軟體不就變的非常的簡單了?那就是作業系統啦!
作業系統(Operating System, OS)其實也是一組程式, 這組程式的重點在於管理電腦的所有活動以及驅動系統中的所有硬體。 我們剛剛談到電腦沒有軟體只是一堆廢鐵,那麼作業系統的功能就是讓CPU可以開始判斷邏輯與運算數值、 讓主記憶體可以開始載入/讀出資料與程式碼、讓硬碟可以開始被存取、讓網路卡可以開始傳輸資料、 讓所有周邊可以開始運轉等等。總之,硬體的所有動作都必須要透過這個作業系統來達成就是了。
上述的功能就是作業系統的核心(Kernel)了!你的電腦能不能做到某些事情,都與核心有關! 只有核心有提供的功能,你的電腦系統才能幫你完成!舉例來說,你的核心並不支援TCP/IP的網路協定, 那麼無論你購買了什麼樣的網卡,這個核心都無法提供網路能力的!
但是單有核心我們使用者也不知道能作啥事的~因為核心主要在管控硬體與提供相關的能力(例如存取硬碟、網路功能、CPU資源取得等), 這些管理的動作是非常的重要的,如果使用者能夠直接使用到核心的話,萬一使用者不小心將核心程式停止或破壞, 將會導致整個系統的崩潰!因此核心程式所放置到記憶體當中的區塊是受保護的! 並且開機後就一直常駐在記憶體當中。
既然我的硬體都是由核心管理,那麼如果我想要開發軟體的話,自然就得要去參考這個核心的相關功能! 唔!如此一來不是從原本的參考硬體函數變成參考核心功能,還是很麻煩啊!有沒有更簡單的方法啊!
為了解決這個問題,作業系統通常會提供一整組的開發介面給工程師來開發軟體! 工程師只要遵守該開發介面那就很容易開發軟體了!舉例來說,我們學習C程式語言只要參考C程式語言的函式即可, 不需要再去考量其他核心的相關功能,因為核心的系統呼叫介面會主動的將C程式語言的相關語法轉成核心可以瞭解的任務函數, 那核心自然就能夠順利運作該程式了!
如果我們將整個電腦系統的相關軟/硬體繪製成圖的話,他的關係有點像這樣:
電腦系統主要由硬體構成,然後核心程式主要在管理硬體,提供合理的電腦系統資源分配(包括CPU資源、記憶體使用資源等等), 因此只要硬體不同(如x86架構與RISC架構的CPU),核心就得要進行修改才行。 而由於核心只會進行電腦系統的資源分配,所以在上頭還需要有應用程式的提供,使用者才能夠操作系統的。
為了保護核心,並且讓程式設計師比較容易開發軟體,因此作業系統除了核心程式之外,通常還會提供一整組開發介面, 那就是系統呼叫層。軟體開發工程師只要遵循公認的系統呼叫參數來開發軟體,該軟體就能夠在該核心上頭運作。 所以你可以發現,軟體與核心有比較大的關係,與硬體關係則不大!硬體也與核心有比較大的關係! 至於與使用者有關的,那就是應用程式啦!
簡單的說,上面的圖示可以帶給我們底下的概念:
既然核心主要是在負責整個電腦系統相關的資源分配與管理,那我們知道其實整部電腦系統最重要的就是CPU與主記憶體, 因此,核心至少也要有這些功能的:
老實說,驅動程式可以說是作業系統裡面相當重要的一環了!不過,硬體可是持續在進步當中的! 包括主機板、顯示卡、硬碟等等。那麼比較晚推出的較新的硬體,例如顯示卡,我們的作業系統當然就不認識囉! 那作業系統該如何驅動這塊新的顯示卡?為了克服這個問題,作業系統通常會提供一個開發介面給硬體開發商, 讓他們可以根據這個介面設計可以驅動他們硬體的『驅動程式』,如此一來,只要使用者安裝驅動程式後, 自然就可以在他們的作業系統上面驅動這塊顯示卡了。
由上圖我們可以得到幾個小重點:
所以,如果妳想要在某個作業系統上面安裝一張新的顯示卡,那麼請要求該硬體廠商提供適當的驅動程式吧! ^_^! 為什麼要強調『適當的驅動程式』呢? 因為驅動程式仍然是依據作業系統而開發的, 所以,給Windows用的驅動程式當然不能使用於Linux的環境下了。
應用程式是參考作業系統提供的開發介面所開發出來軟體,這些軟體可以讓使用者操作,以達到某些電腦的功能利用。 舉例來說,辦公室軟體(Office)主要是用來讓使用者辦公用的;影像處理軟體主要是讓使用者用來處理影音資料的; 瀏覽器軟體主要是讓使用者用來上網瀏覽用的等等。
需要注意的是,應用程式是與作業系統有關係的,如同上面的圖示當中的說明喔。因此,如果你想要購買新軟體, 請務必參考軟體上面的說明,看看該軟體是否能夠支援你的作業系統啊!舉例來說,如果你想要購買線上遊戲光碟, 務必參考一下該光碟是否支援你的作業系統,例如是否支援Windows XP/Windows Vista/MAC/Linux等等。 不要購買了才發現該軟體無法安裝在你的作業系統上喔!
我們拿常見的微軟公司的產品來說明。妳知道Windows 8.1, Office 2013之間的關係了嗎?