鳥叔的linux私房菜:第0章 計算機概論學習筆記(Learning Notes for Basic Computer Theory)

本博客是針對《鳥叔的Linux私房菜 基礎學習篇 第四版》的第0章 計算機概論的學習筆記。

0.1 電腦:輔助人腦的好工具

現在人們無時無刻都在使用電腦,不管是桌面電腦(臺式機)、筆記本電腦(筆記本)、平板電腦(ipad)還是智能手機等等,這些都是電腦。

電腦本質就是一種計算機,而計算機的定義是:

接受使用者輸入指令與數據,經由中央處理器的數學與邏輯單元運算處理後,以產生或儲存成有用的信息。

因此,只要有輸入設備(無論是鍵盤還是觸摸屏)及輸出設備(例如電腦屏幕或直接由打印機打印出來),讓你可以輸入數據並使該機器產生信息的,那就可以算作一部計算機。

那麼計算機主要的組成元件是什麼呢?下面我們以常見的個人電腦主機或服務器工作站主機來作爲說明。

0.1.1 計算機硬件的五大單元

從外觀上來看,電腦的硬件可分爲三部分:

  • 輸入單元:包括鍵盤、鼠標、讀卡器、掃描儀、手寫板、觸摸屏等等;
  • 主機部分:這個就是系統單元,被主機機箱保護住了,裏面含有一堆板子、與內存等;
  • 輸出單元:例如屏幕、打印機等等

我們主要通過輸入設備如鼠標與鍵盤來將一些數據輸入到主機裏面,然後再由主機的功能處理成爲圖表或文章等信息後, 將結果傳輸到輸出設備,如屏幕或打印機上面。

那主機裏面含有什麼元件呢?如果你曾經拆開過電腦主機機箱 (包括拆開你的智能手機也一樣喔!),會發現其實主機裏面最重要的就是一塊主板,上面安插了中央處理器(CPU)以及內存、硬盤(或記憶卡)還有一些適配卡設備而已。 當然大部分智能手機是將這些元件直接焊接在主板上面而不是插卡啦!

整部主機的重點在於中央處理器 (Central Processing Unit, CPU),CPU 爲一個具有特定功能的芯片, 裏頭含有微指令集,如果你想要讓主機進行什麼特異的功能,就得要參考這顆CPU是否有相關內置的微指令集纔可以。 由於 CPU 的工作主要在於管理與運算,因此在CPU內又可分爲兩個主要的單元,分別是:算數邏輯單元與控制單元。其中算數邏輯單元主要負責程序運算與邏輯判斷,控制單元則主要在協調各周邊元件與各單元間的工作。

既然 CPU 的重點是在進行運算與判斷,那麼要被運算與判斷的數據是從哪裏來的?CPU讀取的數據都是從內存來的! 內存內的數據則是從輸入單元所傳輸進來!而CPU處理完畢的數據也必須要先寫回內存中,最後數據才從內存傳輸到輸出單元。

所以爲什麼會說,要加快系統性能,通常將內存容量加大就可以獲得相當好的成效?如同下圖以及上面的說明,因爲所有的數據都要經過內存的傳輸,所以內存的容量如果太小,數據高速緩存就不足~影響性能相當大!尤其針對Linux作爲服務器的環境下!

綜合上面所說,我們會知道其實電腦是由幾個單元所組成的,包括輸入單元、輸出單元、CPU內部的控制單元、算數邏輯單元與內存五大部分。 這幾個東西的相關性如下所示:

上面圖示中的“系統單元”其實指的就是電腦機箱內的主要元件,而重點在於CPU與內存。特別要看的是實線部分的傳輸方向,基本上數據都是流經過內存再轉出去的! 至於數據會流進/流出內存則是CPU所發佈的控制命令!而CPU實際要處理的數據則完全來自於內存(不管是程序還是一般文件數據)!這是個很重要的概念喔! 這也是爲什麼當你的內存不足時,系統的性能就很糟糕!也是爲什麼現在人們買智能手機時,對於可用內存的要求都很高的原因!

0.1.2 一切設計的起點:CPU的架構

如前面說過的,CPU其實內部已經含有一些微指令,我們所使用的軟件都要經過CPU內部的微指令集來達成纔行。 那這些指令集的設計主要又被分爲兩種設計理念,這就是目前世界上常見到的兩種主要CPU架構,分別是:精簡指令集 (RISC) 與複雜指令集(CISC)系統。下面我們就來談談這兩種不同CPU架構的差異囉!

  • 精簡指令集(Reduced Instruction Set Computer, RISC):

這種 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 這種架構的呢!

  • 複雜指令集(Complex Instruction Set Computer, CISC):

與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被大量用於個人電腦上。而x86名字所指的是Intel最早推出的8086代號的芯片(8位),後來隨着位數不斷升級,有了16、32、64位的電腦,而爲了區別出64位的架構,64位的個人電腦CPU又被統稱爲x86_64的架構。(不用再爲下載軟件時看不懂適配的cpu架構問題而煩惱了)

  • Tips:

Tips 所謂的位指的是CPU一次數據讀取的最大量!64位CPU代表CPU一次可以讀寫64bits這麼多的數據,32位CPU則是CPU一次只能讀取32位的意思。 因爲CPU讀取數據量有限制,因此能夠從內存中讀寫的數據也就有所限制。所以,一般32位的CPU所能讀寫的最大數據量,大概就是4GB左右。

那麼不同的x86架構的CPU有什麼差異呢?除了CPU的整體結構(如第二層高速緩存、每次運行可執行的指令數等)之外, 主要是在於微指令集的不同。新的x86的CPU大多含有很先進的微指令集,這些微指令集可以加速多媒體程序的運行,也能夠加強虛擬化的性能,而且某些微指令集更能夠增加能源效率, 讓CPU耗電量降低呢!由於電費越來越高,購買電腦時,除了整體的性能之外,節能省電的CPU特色也可以考慮喔!

其它單元的設備

五大單元中最重要的控制、算術邏輯被整合到 CPU 的封裝中,但系統當然不可能只有 CPU
啊!那其他三個重要電腦單元的設備還有哪些呢? 其實在主機機箱內的設備大多是通過主板
(main board) 連接在一塊,主板上面有個鏈接溝通所有設備的芯片組,這個芯片組可以將
所有單元的設備鏈接起來, 好讓 CPU 可以對這些設備下達命令。其他單元的重要設備主要
有:

  • 系統單元:如圖 0.1.2 所示,系統單元包括 CPU 與內存及主板相關元件。而主板上頭其
    實還有很多的連接接口與相關的適配卡,包括鳥哥近期常使用的 PCI-E 10G 網卡、 磁盤
    陣列卡、還有顯卡等等。尤其是顯卡,這東西對於玩3D遊戲來說是非常重要的一環,他
    與顯示的精緻度、色彩與分辨率都有關係。
  • 存儲單元:包括內存 (main memory, RAM) 與輔助內存,其中輔助內存其實就是大家
    常聽到的“儲存設備”囉!包括硬盤、軟盤、光盤、磁帶等等的。
  • 輸入、輸出單元:同時涵蓋輸入輸出的設備最常見的大概就是觸摸屏了。至於單純的輸
    入設備包括前面提到的鍵盤鼠標之外,目前的體感設備也是重要的輸入設備喔! 至於輸
    出設備方面,除了屏幕外,打印機、音效喇叭、HDMI電視、投影機、藍牙耳機等等,都
    算喔!

更詳細的各項主機與周邊設備我們將在下個小節進行介紹!在這裏我們先來了解一下各元件
的關係囉!那就是,電腦是如何運行的呢?

運行流程

如果不是很瞭解電腦的運行流程的話,鳥哥拿個簡單的想法來思考好了~假設電腦是一個人體,那麼每個元件對應到那個地方呢?可以這樣思考:

這樣看,計算機是不是可以說與人類非常相似呢?那麼強人工智能是不是也是非常可能的呢prprpr…

  • CPU=腦袋瓜子:每個人會作的事情都不一樣(微指令集的差異),但主要都是通過腦袋瓜子來進行判斷與控制身體各部分的活動;

  • 內存=腦袋中放置正在被思考的數據的區塊:在實際活動過程中,我們的腦袋瓜子需要有外界刺激的數據 (例如光線、環境、語言等)來分析,那這些互動數據暫時存放的地方就是內存,主要是用來提供給腦袋瓜子判斷用的信息。

  • 硬盤=腦袋中放置回憶的記憶區塊:跟剛剛的內存不同,內存是提供腦袋目前要思考與處理的信息,但是有些生活瑣事或其他沒有要立刻處理的事情, 就當成回憶先放置到腦袋的記憶深處吧!那就是硬盤!主要目的是將重要的數據記錄起來,以便未來將這些重要的經驗再次的使用;

  • 主板=神經系統:好像人類的神經一樣,將所有重要的元件連接起來,包括手腳的活動都是腦袋瓜子發佈命令後, 通過神經(主板)傳導給手腳來進行活動啊!各項周邊設備=人體與外界溝通的手、腳、皮膚、眼睛等:就好像手腳一般,是人體與外界互動的重要關鍵!

  • 顯卡=腦袋中的影像:將來自眼睛的刺激轉成影像後在腦袋中呈現,所以顯卡所產生的數據來源也是CPU控制的。

  • 電源供應器 (Power)=心臟:所有的元件要能運行得要有足夠的電力供給纔行!這電力供給就好像心臟一樣,如果心臟不夠力,那麼全身也就無法動彈的!心臟不穩定呢?那你的身體當然可能斷斷續續的~不穩定!

由這樣的關係圖當中,我們知道整個活動中最重要的就是腦袋瓜子! 而腦袋瓜子當中與現在正在進行的工作有關的就是CPU與內存!任何外界的接觸都必須要由腦袋瓜子中的內存記錄下來,然後給腦袋中的CPU依據這些數據進行判斷後,再發布命令給各個周邊設備!如果需要用到過去的經驗,就得由過去的經驗(硬盤)當中讀取囉!

也就是說,整個人體最重要的地方就是腦袋瓜子,同樣的,整部主機當中最重要的就是CPU與內存, 而CPU的數據來源通通來自於內存,如果要由過去的經驗來判斷事情時, 也要將經驗(硬盤)挪到目前的記憶(內存)當中,再交由CPU來判斷喔!這點得要再次的強調啊!下個章節當中,我們就對目前常見的個人電腦各個元件來進行說明囉!

電腦按用途分類

知道了電腦的基本組成與周邊設備,也知道其實電腦的CPU種類非常的多,再來我們想要了解的是,電腦如何分類?電腦的分類非常多種,如果以電腦的複雜度與運算能力進行分類的話,主要可以分爲這幾類:

  • 超級計算機(Supercomputer) 超級計算機是運行速度最快的電腦,但是他的維護、操作費用也最高!主要是用於需要有高速計算的計劃中。例如:國防軍事、氣象預測、太空科技,用在仿真的領域較多。詳情也可以參考: 國家高速網絡與計算中心
    http://www.nchc.org.tw的介紹! 至於全世界最快速的前500大超級計算機,則請參考:http://www.top500.org

  • 大型計算機(Mainframe Computer) 大型計算機通常也具有數個高速的CPU,功能上雖
    不及超級計算機,但也可用來處理大量數據與複雜的運算。 例如大型企業的主機、全國
    性的證券交易所等每天需要處理數百萬筆數據的企業機構, 或者是大型企業的數據庫服
    務器等等。

  • 迷你電腦(Minicomputer) 迷你電腦仍保有大型計算機同時支持多使用者的特性,但是
    主機可以放在一般作業場所, 不必像前兩個大型計算機需要特殊的空調場所。通常用來
    作爲科學研究、工程分析與工廠的流程管理等。

  • 工作站(Workstation) 工作站的價格又比迷你電腦便宜許多,是針對特殊用途而設計的
    電腦。在個人電腦的性能還沒有提升到目前的狀況之前, 工作站電腦的性能/價格比是所
    有電腦當中較佳的,因此在學術研究與工程分析方面相當常見。

  • 微電腦(Microcomputer) 個人電腦就屬於這部份的電腦分類,也是我們本章主要探討的
    目標!體積最小,價格最低,但功能還是五臟俱全的! 大致又可分爲桌上型、筆記型等
    等。

若光以性能來說,目前的個人電腦性能已經夠快了,甚至已經比工作站等級以上的電腦運算
速度還要快! 但是工作站電腦強調的是穩定不死機,並且運算過程要完全正確,因此工作站
以上等級的電腦在設計時的考慮與個人電腦並不相同啦! 這也是爲啥工作站等級以上的電腦
售價較貴的原因。

知識點:常用的個人電腦時屬於“微電腦”的類型喲,因爲相對於它的兄弟姐妹的體型來看,它確實可以稱得上“微小”了。

電腦上面常用的計算單位(容量、速度等)

電腦的運算能力除了 CPU 微指令集設計的優劣之外,但主要還是由速度來決定的。至於存放
在電腦儲存設備當中的數據容量也是有單位的。

  • 容量單位

電腦對數據的判斷主要依據有沒有通電來記錄信息,所以理論上對於每一個紀錄單位而言,
它只認識 0 與 1 而已。0/1 這個二進制的的單位我們稱爲 bit。 但 bit 實在太小了,所以在儲
存數據時每份簡單的數據都會使用到 8 個 bits 的大小來記錄,因此定義出 Byte 這個單位,他
們的關係爲:

1 Byte = 8 bits

不過同樣的,Byte 還是太小了,在較大的容量情況下,使用 Byte 相當不容易判斷數據的大
小,舉例來說,1000000 Bytes 這樣的顯示方式你能夠看得出有幾個零嗎?所以後來就有一
些常見的簡化單位表達式,例如 K 代表 1024Byte,M 代表 1024K 等。 而這些單位在不同的
進位制下有不同的數值表示,下面就列出常見的單位與進位制對應:

進位制Kilo Mega Giga Tera Peta
二進制1024 1024K 1024M 1024G 1024T
十進制1000 1000K 1000M 1000G 1000T

一般來說,文件大小使用的是二進制的方式,所以 1GBytes 的文件大小實際上爲:
1024x1024x1024Bytes 這麼大! 速度單位則常使用十進制,例如 1GHz 就是
1000x1000x1000Hz 的意思。

  • Tips

CPU的運算速度常使用 MHz 或者是 GHz 之類的單位,這個 Hz 其實就是秒分之一。而在網
絡傳輸方面,由於網絡使用的是 bit 爲單位,因此網絡常使用的單位爲 Mbps 是 Mbits per
second,亦即是每秒多少 Mbit。舉例來說,大家常聽到的 20M/5M 光世代傳輸速度,如果轉
成文件大小的 Byte 時,其實理論最大傳輸值爲:每秒 2.5MByte/ 每秒625KByte的下載/上傳
速度喔!

例題:假設你今天購買了500GB的硬盤一顆,但是格式化完畢後卻只剩下460GB左右的容
量,這是什麼原因?答:因爲一般硬盤製造商會使用十進制的單位,所以500GByte代表爲
500*1000*1000*1000Byte之意。 轉成文件的容量單位時使用二進制(1024爲底),所以就成
爲466GB左右的容量了。

硬盤廠商並非要騙人,只是因爲硬盤的最小物理量爲512Bytes,最小的組成單位爲扇區
(sector), 通常硬盤容量的計算採用“多少個sector”,所以纔會使用十進制來處理的。相關
的硬盤信息在這一章後面會提到的!

所以以後,大家再看到什麼寬帶的網速多少字節,記得先除以8(默認以bit爲單位嘛);買硬盤看容量時,記得也先乘以(1000/1024)的三次方(默認是十進制嘛)prprpr…

0.2 個人電腦架構與相關設備元件

一般消費者常說的電腦通常指的就是x86的個人電腦架構,因此我們有必要來了解一下這個架
構的各個元件。事實上,Linux最早在發展的時候,就是依據個人電腦的架構來發展的, 所以
真的得要了解一下呢!另外,早期兩大主流x86開發商(Intel, AMD)的CPU架構與設計理念
都有些許差異。不過互相學習對方長處的結果,就是兩者間的架構已經比較類似了。 由於目
前市場佔有率還是以 Intel 爲大宗,因此下面以目前(2015)相對較新的 Intel 主板架構來談
談:

由於主板是鏈接各元件的一個重要項目,因此在主板上面溝通各部元件的芯片組設計優劣,
就會影響性能不少喔!早期的芯片組通常分爲兩個橋接器來控制各元件的溝通, 分別是:
(1)北橋:負責鏈接速度較快的CPU、內存與顯卡接口等元件;(2)南橋:負責連接速度
較慢的設備接口, 包括硬盤、USB、網卡等等。(芯片組的南北橋與三國的大小喬沒有關係
@_@)。不過由於北橋最重要的就是 CPU 與內存之間的橋接,因此目前的主流架構中, 大
多將北橋內存控制器整合到 CPU 封裝當中了。所以上圖你只會看到 CPU 而沒有看到以往的
北橋芯片喔!

0.2.1 執行腦袋運算與判斷的 CPU

如同華碩主板示意圖上半部的中央部分,那就是CPU插槽。 由於CPU負責大量運算,因此
CPU通常是具有相當高發熱量的元件。所以如果你曾經拆開過主板, 應該就會看到CPU上頭
通常會安插一顆風扇來主動散熱的。

樹莓派主板也有

x86個人電腦的CPU主要供應商爲Intel與AMD,目前(2015)主流的CPU都是雙核以上的架
構了! 原本的單核心CPU僅有一個運算單元,所謂的多核心則是在一顆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 次工作,每次工作都可以進行少數的指令運行之意。

  • Tips

注意,不同的CPU之間不能單純的以頻率來判斷運算性能喔!這是因爲每顆CPU的微指
令集不相同,架構也不見得一樣,可使用的第二層高速緩存及其計算機制可能也不同, 加上
每次頻率能夠進行的工作指令數也不同!所以,頻率目前僅能用來比較同款CPU的速度!

所以只比頻率是比較耍流氓的行爲。

  • 32位與64位的CPU與總線“寬度”

從前面的簡易說明中,我們知道 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的內存

終於解決了爲什麼沒看過32位系統搭載8G內存的電腦配置的疑惑了…

  • 超線程 (Hyper-Threading, HT)

我們知道現在的 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的型號與頻率及帶寬之間的關係。

DDR SDRAM又依據技術的發展,有DDR, DDR2, DDR3, DDR4等等,其中,DDR2 的頻率
倍數則是 4 倍而DDR3 則是 8 倍喔! 目前鳥哥用到服務器等級的內存,已經到 DDR4 了耶!
超快超快!

  • DRAM與SRAM

除了內存條之外,事實上整部個人電腦當中還有許許多多的內存存在喔!最爲我們所知的就
是CPU內的第二層高速緩存內存。 我們現在知道CPU的數據都是由內存提供,但CPU到內存
之間還是得要通過內存控制器啊! 如果某些很常用的程序或數據可以放置到CPU內部的話,
那麼CPU數據的讀取就不需要跑到內存重新讀取了! 這對於性能來說不就可以大大的提升
了?這就是第二層高速緩存的設計概念。第二層高速緩存與內存及CPU的關係如下圖所示:

因爲第二層高速緩存(L2 cache)整合到CPU內部,因此這個L2內存的速度必須要CPU頻率
相同。 使用DRAM是無法達到這個頻率速度的,此時就需要靜態隨機存取內存(Static
Random Access Memory, SRAM)的幫忙了。 SRAM在設計上使用的電晶體數量較多,價格
較高,且不易做成大容量,不過由於其速度快, 因此整合到CPU內成爲高速緩存內存以加快
數據的存取是個不錯的方式喔!新一代的CPU都有內置容量不等的L2高速緩存在CPU內部,
以加快CPU的運行性能。

  • 只讀存儲器(ROM)

主板上面的元件是非常多的,而每個元件的參數又具有可調整性。舉例來說,CPU與內存的
頻率是可調整的; 而主板上面如果有內置的網卡或者是顯卡時,該功能是否要啓動與該功能
的各項參數,是被記錄到主板上頭的一個稱爲CMOS的芯片上,這個芯片需要藉着額外的電源來發揮記錄功能, 這也是爲什麼你的主板上面會有一顆電池的緣故。

那CMOS內的數據如何讀取與更新呢?還記得你的電腦在開機的時候可以按下[Del]按鍵來進
入一個名爲BIOS的畫面吧? BIOS(Basic Input Output System)是一套程序,這套程序是寫
死到主板上面的一個內存芯片中, 這個內存芯片在沒有通電時也能夠將數據記錄下來,那就
是隻讀存儲器(Read Only Memory, ROM)。 ROM是一種非揮發性的內存。另外,BIOS對
於個人電腦來說是非常重要的, 因爲他是系統在開機的時候首先會去讀取的一個小程序喔!

另外,固件(firmware)很多也是使用ROM來進行軟件的寫入的。 固件像軟件一樣也是
一個被電腦所執行的程序,然而他是對於硬件內部而言更加重要的部分。例如BIOS就是一個
固件, BIOS雖然對於我們日常操作電腦系統沒有什麼太大的關係,但是他卻控制着開機時各
項硬件參數的取得! 所以我們會知道很多的硬件上頭都會有ROM來寫入固件這個軟件。
BIOS 對電腦系統來講是非常重要的,因爲他掌握了系統硬件的詳細信息與開機設備的選擇等
等。但是電腦發展的速度太快了, 因此 BIOS 程序碼也可能需要作適度的修改纔行,所以你
纔會在很多主板官網找到 BIOS 的更新程序啊!但是 BIOS 原本使用的是無法改寫的 ROM ,
因此根本無法修正 BIOS 程序碼!爲此,現在的 BIOS 通常是寫入類似閃存 (flash) 或
EEPROM 中。

0.2.3 顯卡

顯卡又稱爲VGA(Video Graphics Array),他對於圖形影像的顯示扮演相當關鍵的角色。 一
般對於圖形影像的顯示重點在於分辨率與色彩深度,因爲每個圖像顯示的顏色會佔用掉內
存, 因此顯卡上面會有一個內存的容量,這個顯存容量將會影響到你的屏幕分辨率與色彩深
度的喔!

除了顯存之外,現在由於三度空間遊戲(3D game)與一些3D動畫的流行,因此顯卡的“運算
能力”越來越重要。 一些3D的運算早期是交給CPU去運行的,但是CPU並非完全針對這些3D
來進行設計的,而且CPU平時已經非常忙碌了呢! 所以後來顯卡廠商直接在顯卡上面嵌入一
個3D加速的芯片,這就是所謂的GPU稱謂的由來。

如果你的主機是用來打3D遊戲的,那麼顯卡的選購是非常重要喔!如果你的主機是用來做爲
網絡服務器的, 那麼簡單的入門級顯卡對你的主機來說就非常夠用了!因爲網絡服務器很少
用到3D與圖形影像功能。

例題:假設你的桌面使用1024x768分辨率,且使用全綵(每個像素佔用3Bytes的容量),請
問你的顯卡至少需要多少內存才能使用這樣的彩度?答:因爲1024x768分辨率中會有786432
個像素,每個像素佔用3Bytes,所以總共需要2.25MBytes以上纔行! 但如果考慮屏幕的更新
率(每秒鐘屏幕的更新次數),顯卡的內存還是越大越好!

0.2.4 硬盤與存儲設備

電腦總是需要記錄與讀取數據的,而這些數據當然不可能每次都由使用者經過鍵盤來打字!
所以就需要有儲存設備咯。 電腦系統上面的儲存設備包括有:硬盤、軟盤、MO、CD、
DVD、磁帶機、U盤(閃存)、還有新一代的藍光光驅等, 乃至於大型機器的區域網絡儲存
設備(SAN, NAS)等等,都是可以用來儲存數據的。而其中最常見的應該就是硬盤了吧!

  • 硬盤的物理組成

大家應該都看過硬盤吧!硬盤依據臺式機與筆記本電腦而有分爲3.5英寸及2.5英寸的大小。我
們以3.5英寸的臺式機使用硬盤來說明。 在硬盤盒裏面其實是由許許多多的圓形盤片、機械手
臂、 磁頭與主軸馬達所組成的,整個內部如同下圖所示:

實際的數據都是寫在具有磁性物質的盤片上頭,而讀寫主要是通過在機械手臂上的磁頭
(head)來達成。 實際運行時, 主軸馬達讓盤片轉動,然後機械手臂可伸展讓磁頭在盤片上
頭進行讀寫的動作。 另外,由於單一盤片的容量有限,因此有的硬盤內部會有兩個以上的盤
片喔!

  • 盤片上的數據

既然數據都是寫入盤片上頭,那麼盤片上頭的數據又是如何寫入的呢?其實盤片上頭的數據
有點像下面的圖示所示:

由於盤片是圓的,並且通過機器手臂去讀寫數據,盤片要轉動才能夠讓機器手臂讀寫。因
此,通常數據寫入當然就是以圓圈轉圈的方式讀寫囉! 所以,當初設計就是在類似盤片同心
圓上面切出一個一個的小區塊,這些小區塊整合成一個圓形,讓機器手臂上的磁頭去存取。
這個小區塊就是磁盤的最小物理儲存單位,稱之爲扇區 (sector),那同一個同心圓的扇區
組合成的圓就是所謂的磁道(track)。 由於磁盤裏面可能會有多個盤片,因此在所有盤片上
面的同一個磁道可以組合成所謂的柱面 (cylinder)。

我們知道同心圓外圈的圓比較大,佔用的面積比內圈多啊!所以,爲了善用這些空間,因此
外圍的圓會具有更多的扇區[16]! 就如同圖 0.2.5 的示意一般。此外,當盤片轉一圈時,外圈
的扇區數量比較多,因此如果數據寫入在外圈,轉一圈能夠讀寫的數據量當然比內圈還要
多! 因此通常數據的讀寫會由外圈開始往內寫的喔!這是默認值啊!

另外,原本硬盤的扇區都是設計成 512Byte 的容量,但因爲近期以來硬盤的容量越來越大,
爲了減少數據量的拆解,所以新的大容量硬盤已經有 4KByte 的扇區設計! 購買的時候也需
要注意一下。也因爲這個扇區的設計不同了,因此在磁盤的分區方面,目前有舊式的
MSDOS 相容模式,以及較新的 GPT 模式喔! 在較新的 GPT 模式下,磁盤的分區通常使用
扇區號碼來設計,跟過去舊的 MSDOS 是通過柱面號碼來分區的情況不同喔!相關的說明我
們談到磁盤管理 (第七章) 再來聊!

  • USB接口

  • 固態硬盤

傳統硬盤有個很致命的問題,就是需要驅動馬達去轉動盤片~這會造成很嚴重的磁盤讀取延
遲!想想看,你得要知道數據在哪個扇區上面,然後再命令馬達開始轉, 之後再讓磁頭去讀
取正確的數據。另外,如果數據放置的比較離散(扇區分佈比較廣又不連續),那麼讀寫的
速度就會延遲更明顯!速度快不起來。因此, 後來就有廠商拿閃存去製作成大容量的設備,
這些設備的連接接口也是通過 SATA 或 SAS,而且外型還做的跟傳統磁盤一樣!所以, 雖然
這類的設備已經不能稱爲是磁盤 (因爲沒有磁頭與盤片啊!都是內存!)。但是爲了方便大
家稱呼,所以還是稱爲磁盤!只是跟傳統磁盤 (Hard Disk Drive, HDD) 不同, 就稱爲固態
硬盤 (Solid State Disk 或 Solid State Driver, SSD)。

固態硬盤最大的好處是,它沒有馬達不需要轉動,而是通過內存直接讀寫的特性,因此除了
沒數據延遲且快速之外,還很省電! 不過早期的 SSD 有個很重要的致命傷,就是這些閃存
有“寫入次數的限制”,因此通常 SSD 的壽命大概兩年就頂天了!所以數據存放時, 需要考慮
到備份或者是可能要使用 RAID 的機制來防止 SSD 的損毀!

  • 選購與運行須知

如果你想要增加一顆硬盤在你的主機裏頭時,除了需要考慮你的主板可接受的插槽接口
(SATA/SAS)之外,還有什麼要注意的呢?

  • HDD 或 SSD:畢竟 HDD 與 SSD 的價格與容量真的差很多!不過,速度也差很多就是
    了!因此,目前大家的使用方式大多是這樣的,使用 SSD 作爲系統盤, 然後數據儲存大
    多放置在 HDD 上面!這樣系統運行快速 (SSD),而數據儲存量也大 (HDD)。

  • 容量:畢竟目前數據量越來越大,所以購買磁盤通常首先要考慮的就是容量的問題!目前
    (2015)主流市場HDD容量已經到達 2TB以上, 甚至有的廠商已經生產高達 8TB 的產
    品呢!硬盤可能可以算是一種消耗品,要注意重要數據還是得常常備份出來喔! 至於
    SSD 方面,目前的容量大概還是在 128~256GB 之間吧!

  • 緩衝內存:硬盤上頭含有一個緩衝內存,這個內存主要可以將硬盤內常使用的數據高速緩
    存起來,以加速系統的讀取性能。 通常這個緩衝內存越大越好,因爲緩衝內存的速度要
    比數據從硬盤盤中被找出來要快的多了! 目前主流的產品可達64MB左右的內存大小喔。
    轉速 因爲硬盤主要是利用主軸馬達轉動盤片來存取,因此轉速的快慢會影響到性能。 主
    流的臺式機硬盤爲每分鐘7200轉,筆記本電腦則是5400轉。有的廠商也有推出高達
    10000轉的硬盤, 若有高性能的數據存取需求,可以考慮購買高轉速硬盤。

  • 運行須知:由於硬盤內部機械手臂上的磁頭與硬盤盤的接觸是很細微的空間, 如果有抖動
    或者是髒污在磁頭與硬盤盤之間就會造成數據的損毀或者是實體硬盤整個損毀~ 因此,
    正確的使用電腦的方式,應該是在電腦通電之後,就絕對不要移動主機,並免抖動到硬
    盤, 而導致整個硬盤數據發生問題啊!另外,也不要隨便將插頭拔掉就以爲是順利關
    機!因爲機械手臂必須要歸回原位, 所以使用操作系統的正常關機方式,才能夠有比較
    好的硬盤保養啊!因爲他會讓硬盤的機械手臂歸回原位啊!

0.3 數據表示方式

事實上我們的電腦只認識0與1,記錄的數據也是隻能記錄0與1而已,所以電腦常用的數據是
二進制的。 但是我們人類常用的數值運算是十進制,文字方面則有非常多的語言,臺灣常用
的語言就有英文、中文(又分正體與簡體中文)、日文等。 那麼電腦如何記錄與顯示這些數
值/文字呢?就得要通過一系列的轉換纔可以啦!下面我們就來談談數值與文字的編碼系統
囉!

0.3.1 數字系統

早期的電腦使用的是利用通電與否的特性的真空管,如果通電就是1,沒有通電就是0, 後來
沿用至今,我們稱這種只有0/1的環境爲二進制制,英文稱爲binary的哩。所謂的十進制指的
是逢十進一位, 因此在個位數歸爲零而十位數寫成1。所以所謂的二進制,就是逢二就前進一
位的意思。

那二進制怎麼用呢?我們先以十進制來解釋好了。如果以十進制來說,3456的意義爲:

3456 = 3x103 + 4x102 + 5x101 + 6x100

特別注意:“任何數值的零次方爲1”所以100的結果就是1囉。 同樣的,將這個原理帶入二進制
的環境中,我們來解釋一下1101010的數值轉爲十進制的話,結果如下:

1101010=1x26+1x25+0x24+1x23+0x22+1x21+0x20=64+32+0x16+8+0x4+2+0x1=106

這樣你瞭解二進制的意義了嗎?二進制是電腦基礎中的基礎喔!瞭解了二進制後,八進位、
十六進制就依此類推啦! 那麼知道二進制轉成十進制後,那如果有十進制數值轉爲二進制的
環境時,該如何計算? 剛剛是乘法,現在則是除法就對了!我們同樣的使用十進制的106轉
成二進制來測試一下好了:

最後的寫法就如同上面的紅色箭頭,由最後的數字向上寫,因此可得到1101010的數字囉!
這些數字的轉換系統是非常重要的,因爲電腦的加減乘除都是使用這些機制來處理的! 有興
趣的朋友可以再參考一下其他計算計概論的書籍中,關於1的補數/2的補數等運算方式喔!

0.3.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.4 軟件程序運行

鳥哥在上課時常常會開玩笑的問:“我們知道沒有插電的電腦是一堆廢鐵,那麼插了電的電腦
是什麼?” 答案是:“一堆會電人的廢鐵”!這是因爲沒有軟件的運行,電腦的功能就無從發揮
之故。 就好像沒有了靈魂的軀體也不過就是行屍走肉,重點在於軟件/靈魂囉!所以下面咱們
就得要了解一下“軟件”是什麼。

一般來說,目前的電腦系統將軟件分爲兩大類,一個是系統軟件,一個是應用程序。但鳥哥
認爲我們還是得要了解一下什麼是程序, 尤其是機器程序,瞭解了之後再來探討一下爲什麼
現今的電腦系統需要“操作系統”這玩意兒呢!

0.4.1 機器程序與編譯程序

我們前面談到電腦只認識0與1而已,而且電腦最重要的運算與邏輯判斷是在CPU內部, 而
CPU其實是具有微指令集的。因此,我們需要CPU幫忙工作時,就得要參考微指令集的內
容, 然後撰寫讓CPU讀的懂的指令碼給CPU執行,這樣就能夠讓CPU運行了。

不過這樣的流程有幾個很麻煩的地方,包括:

  • 需要了解機器語言:機器只認識0與1,因此你必須要學習直接寫給機器看的語言! 這個
    地方相當的難呢!
  • 需要了解所有硬件的相關功能函數:因爲你的程序必須要寫給機器看, 當然你就得要參
    考機器本身的功能,然後針對該功能去撰寫程序碼。例如,你要讓DVD影片能夠放映,
    那就得要參考DVD光驅的硬件信息纔行。萬一你的系統有比較冷門的硬件,光是參考技
    術手冊可能會昏倒~
  • 程序不具有可攜性:每個CPU都有獨特的微指令集,同樣的,每個硬件都有其功能函
    數。 因此,你爲A電腦寫的程序,理論上是沒有辦法在B電腦上面運行的!而且程序碼的
    修改非常困難! 因爲是機器碼,並不是人類看的懂得程序語言啊!
  • 程序具有專一性:因爲這樣的程序必須要針對硬件功能函數來撰寫, 如果已經開發了一
    支瀏覽器程序,想要再開發文件管理程序時,還是得從頭再參考硬件的功能函數來繼續
    撰寫, 每天都在和“硬件”挑戰!可能需要天天喝蠻牛了!@_@

那怎麼解決啊?爲了解決這個問題,電腦科學家設計出一種讓人類看的懂得程序語言, 然後
創造一種“編譯器”來將這些人類能夠寫的程序語言轉譯成爲機器能看懂得機器碼, 如此一來
我們修改與撰寫程序就變的容易多了!目前常見的編譯器有C, C++, Java, Fortran等等。 機器
語言與高階程序語言的差別如下所示:

從上面的圖示我們可以看到高階程序語言的程序碼是很容易察看的!鳥哥已經將程序碼(英
文)寫成中文說~ 這樣比較好理解啦!所以這樣已經將程序的修改問題處理完畢了。 問題
是,在這樣的環境下面我們還是得要考慮整體的硬件系統來設計程序喔!

舉例來說,當你需要將運行的數據寫入內存中,你就得要自行分配一個內存區塊出來讓自己
的數據能夠填上去, 所以你還得要了解到內存的位址是如何定位的,啊!眼淚還是不知不覺
的流了下來… 怎麼寫程序這麼麻煩啊!

**爲了要克服硬件方面老是需要重複撰寫控制碼的問題,所以就有操作系統(Operating
System, OS)的出現了**! 什麼是操作系統呢?下面就來談一談先!

0.4.2 操作系統

如同前面提到的,在早期想要讓電腦執行程序就得要參考一堆硬件功能函數,並且學習機器
語言才能夠撰寫程序。 同時每次寫程序時都必須要重新改寫,因爲硬件與軟件功能不見得都
一致之故。那如果我能夠將所有的硬件都驅動, 並且提供一個發展軟件的參考接口來給工程
師開發軟件的話,那發展軟件不就變的非常的簡單了?那就是操作系統啦!

  • 操作系統核心(Kernel)

操作系統(Operating System, OS)其實也是一組程序, 這組程序的重點在於管理電腦的所
有活動以及驅動系統中的所有硬件。 我們剛剛談到電腦沒有軟件只是一堆廢鐵,那麼操作系
統的功能就是讓CPU可以開始判斷邏輯與運算數值、 讓內存可以開始載入/讀出數據與程序
碼、讓硬盤可以開始被存取、讓網卡可以開始傳輸數據、 讓所有周邊可以開始運行等等。總
之,硬件的所有動作都必須要通過這個操作系統來達成就是了。

上述的功能就是操作系統的核心(Kernel)了!你的電腦能不能做到某些事情,都與核心有
關! 只有核心有提供的功能,你的電腦系統才能幫你完成!舉例來說,你的核心並不支持
TCP/IP的網絡協定, 那麼無論你購買了什麼樣的網卡,這個核心都無法提供網絡能力的!

但是單有核心我們使用者也不知道能作啥事的~因爲核心主要在管控硬件與提供相關的能力
(例如存取硬盤、網絡功能、CPU資源取得等), 這些管理的動作是非常的重要的,如果使
用者能夠直接使用到核心的話,萬一使用者不小心將核心程序停止或破壞, 將會導致整個系
統的崩潰!因此核心程序所放置到內存當中的區塊是受保護的! 並且開機後就一直常駐在內
存當中。

類比一下,《哈爾的移動城堡》裏面,當哈爾的城堡失去那個火精靈的時候,就成了一個毫無生機的破銅廢鐵,而當火精靈正常運行時,城堡就能動起來,而且城堡裏面的各種設備也能正常運行了。所以,火精靈至於城堡,就像操作系統至於計算機。而所謂的核心,其實也就相當於火精靈具備的魔力了~~

Tips 所以整部系統只有核心的話,我們就只能看着已經準備好運行(Ready)的電腦系統,
但無法操作他! 好像有點望梅止渴的那種感覺啦!這個時候就需要軟件的幫忙了!

  • 系統調用(System Call)

既然我的硬件都是由核心管理,那麼如果我想要開發軟件的話,自然就得要去參考這個核心
的相關功能! 唔!如此一來不是從原本的參考硬件函數變成參考核心功能,還是很麻煩啊!
有沒有更簡單的方法啊!

爲了解決這個問題,操作系統通常會提供一整組的開發接口給工程師來開發軟件! 工程師只
要遵守該開發接口那就很容易開發軟件了!舉例來說,我們學習C程序語言只要參考C程序語
言的函數即可, 不需要再去考慮其他核心的相關功能,因爲核心的系統調用接口會主動的將
C程序語言的相關語法轉成核心可以瞭解的任務函數, 那核心自然就能夠順利運行該程序
了!

如果我們將整個電腦系統的相關軟/硬件繪製成圖的話,他的關係有點像這樣:

電腦系統主要由硬件構成,然後核心程序主要在管理硬件,提供合理的電腦系統資源分配
(包括CPU資源、內存使用資源等等), 因此只要硬件不同(如x86架構與RISC架構的
CPU),核心就得要進行修改纔行。 而由於核心只會進行電腦系統的資源分配,所以在上頭
還需要有應用程序的提供,使用者才能夠操作系統的。

爲了保護核心,並且讓程序設計師比較容易開發軟件,因此操作系統除了核心程序之外,通
常還會提供一整組開發接口(API), 那就是系統調用層。軟件開發工程師只要遵循公認的系統調用
參數來開發軟件,該軟件就能夠在該核心上頭運行。 所以你可以發現,軟件與核心有比較大
的關係,與硬件關係則不大!硬件也與核心有比較大的關係! 至於與使用者有關的,那就是
應用程序啦!

Tips 在定義上,只要能夠讓計算機硬件正確無誤的運行,那就算是操作系統了。所以說, 操
作系統其實就是核心與其提供的接口工具,不過就如同上面講的,因爲最陽春的核心缺乏了
與使用者溝通的友好接口, 所以在目前,一般我們提到的“操作系統”都會包含核心與相關的
使用者應用軟件呢!

簡單的說,上面的圖示可以帶給我們下面的概念:

  • 操作系統的核心層直接參考硬件規格寫成, 所以同一個操作系統程序不能夠在不一樣的
    硬件架構下運行。舉例來說,個人電腦版的Windows 8.1 不能直接在 ARM 架構 (手機
    與平板硬件) 的電腦下運行。

  • 操作系統只是在管理整個硬件資源,包括CPU、內存、輸入輸出設備及文件系統文件。
    如果沒有其他的應用程序輔助,操作系統只能讓電腦主機準備妥當(Ready)而已!並無
    法運行其他功能。 所以你現在知道爲何Windows上面要達成網頁影像的運行還需要類似
    PhotoImpact或Photoshop之類的軟件安裝了吧?

  • **應用程序的開發都是參考操作系統提供的開發接口, 所以該應用程序只能在該操作系統
    上面運行而已,不可以在其他操作系統上面運行的。** 現在您知道爲何去購買線上遊戲的
    光盤時,光盤上面會明明白白的寫着該軟件適合用於哪一種操作系統上了吧? 也該知道
    某些遊戲爲何不能夠在Linux上面安裝了吧?

  • 核心功能

既然核心主要是在負責整個電腦系統相關的資源分配與管理,那我們知道其實整部電腦系統
最重要的就是CPU與內存, 因此,核心至少也要有這些功能的:

  • 系統調用接口(System call interface) 剛剛談過了,這是爲了方便程序開發者可以輕易
    的通過與核心的溝通,將硬件的資源進一步的利用, 於是需要有這個簡易的接口來方便
    程序開發者。
  • 程序管理(Process control) 總有聽過所謂的“多任務環境”吧?一部電腦可能同時間有很
    多的工作跑到CPU等待運算處理, 核心這個時候必須要能夠控制這些工作,讓CPU的資
    源作有效的分配纔行!另外, 良好的CPU調度機制(就是CPU先運行那個工作的排列順
    序)將會有效的加快整體系統性能呢!
  • 內存管理(Memory management) 控制整個系統的內存管理,這個內存控制是非常重
    要的,因爲系統所有的程序碼與數據都必須要先存放在內存當中。 通常核心會提供虛擬
    內存的功能,當內存不足時可以提供內存交換(swap)的功能哩。
  • 文件系統管理(Filesystem management) 文件系統的管理,例如數據的輸入輸出
    (I/O)等等的工作啦!還有不同文件格式的支持啦等等, 如果你的核心不認識某個文件
    系統,那麼您將無法使用該文件格式的文件囉!例如:Windows 98就不認識NTFS文件
    格式的硬盤;
  • 設備的驅動(Device drivers) 就如同上面提到的,硬件的管理是核心的主要工作之一,
    當然囉,設備的驅動程序就是核心需要做的事情啦! 好在目前都有所謂的“可載入模
    塊”功能,可以將驅動程序編輯成模塊,就不需要重新的編譯核心啦!

Tips 事實上,驅動程序的提供應該是硬件廠商的事情!硬件廠商要推出硬件時,應該要自行
參考操作系統的驅動程序開發接口, 開發完畢後將該驅動程序連同硬件一同販賣給使用者才
對!舉例來說,當你購買顯卡時, 顯卡包裝盒都會附上一片光盤,讓你可以在進入Windows
之後進行驅動程序的安裝啊!

  • 操作系統與驅動程序

老實說,驅動程序可以說是操作系統裏面相當重要的一環了!不過,硬件可是持續在進步當
中的! 包括主板、顯卡、硬盤等等。那麼比較晚推出的較新的硬件,例如顯卡,我們的操作
系統當然就不認識囉! 那操作系統該如何驅動這塊新的顯卡?爲了克服這個問題,操作系統
通常會提供一個開發接口給硬件開發商, 讓他們可以根據這個接口設計可以驅動他們硬件
的“驅動程序”,如此一來,只要使用者安裝驅動程序後, 自然就可以在他們的操作系統上面
驅動這塊顯卡了。

由上圖我們可以得到幾個小重點:

  • 操作系統必須要能夠驅動硬件,如此應用程序才能夠使用該硬件功能;
  • 一般來說,操作系統會提供開發接口,讓開發商製作他們的驅動程序;
  • 要使用新硬件功能,必須要安裝廠商提供的驅動程序纔行;
  • 驅動程序是由廠商提供的,與操作系統開發者無關。

所以,如果你想要在某個操作系統上面安裝一張新的顯卡,那麼請要求該硬件廠商提供適當
的驅動程序吧! ^_^! 爲什麼要強調“適當的驅動程序”呢? 因爲驅動程序仍然是依據操作系
統而開發的, 所以,給Windows用的驅動程序當然不能使用於Linux的環境下了。

0.4.3 應用程序

應用程序是參考操作系統提供的開發接口所開發出來軟件,這些軟件可以讓使用者操作,以
達到某些電腦的功能利用。 舉例來說,辦公室軟件(Office)主要是用來讓使用者辦公用的;
影像處理軟件主要是讓使用者用來處理影音數據的; 瀏覽器軟件主要是讓使用者用來上網瀏
覽用的等等。

需要注意的是,應用程序是與操作系統有關係的,如同上面的圖示當中的說明喔。因此,如
果你想要購買新軟件, 請務必參考軟件上面的說明,看看該軟件是否能夠支持你的操作系統
啊!舉例來說,如果你想要購買線上遊戲光盤, 務必參考一下該光盤是否支持你的操作系
統,例如是否支持Windows XP/Windows Vista/MAC/Linux等等。 不要購買了才發現該軟件無
法安裝在你的操作系統上喔!

我們拿常見的微軟公司的產品來說明。你知道Windows 8.1, Office 2013之間的關係了嗎?

  • Windows 8.1 是一套操作系統,他必須先安裝到個人電腦上面,否則電腦無法開機運
    行;
  • Windows 7 與Windows 8.1 是兩套不同的操作系統,所以能在Win 7上安裝的軟件不見得
    可在Win 8.1上安裝;
  • Windows 8.1安裝好後,就只能擁有很少的功能,並沒有辦公室軟件;
  • Office 2013是一套應用程序,要安裝前必須要瞭解他能在哪些操作系統上面運行。

0.5 重點回顧

  • 計算機的定義爲:“接受使用者輸入指令與數據,經由中央處理器的數學與邏輯單元運算
    處理後,以產生或儲存成有用的信息”;
  • 電腦的五大單元包括:輸入單元、輸出單元、控制單元、算數邏輯單元、存儲單元五大
    部分。其中CPU佔有控制、算術邏輯單元,存儲單元又包含內存與輔助內存;
  • 數據會流進/流出內存是CPU所發佈的控制命令,而CPU實際要處理的數據則完全來自於
    內存;
  • CPU依設計理念主要分爲:精簡指令集(RISC)與複雜指令集(CISC)系統;
  • 關於CPU的頻率部分:外頻指的是CPU與外部元件進行數據傳輸時的速度,倍頻則是
    CPU內部用來加速工作性能的一個倍數, 兩者相乘纔是CPU的頻率速度;
  • 新的 CPU 設計中,已經將北橋的內存控制芯片整合到 CPU 內,而 CPU 與內存、顯卡
    溝通的總線通常稱爲系統總線。 南橋就是所謂的輸入輸出(I/O)總線,主要在聯繫硬
    盤、USB、網卡等周邊設備;
  • CPU每次能夠處理的數據量稱爲字組大小(word size),字組大小依據CPU的設計而有
    32位與64位。 我們現在所稱的電腦是32或64位主要是依據這個 CPU解析的字組大小而
    來的!
  • 個人電腦的內存主要元件爲動態隨機存取內存(Dynamic Random Access Memory,
    DRAM), 至於CPU內部的第二層高速緩存則使用靜態隨機存取內存(Static Random
    Access Memory, SRAM);
  • BIOS(Basic Input Output System)是一套程序,這套程序是寫死到主板上面的一個內
    存芯片中, 這個內存芯片在沒有通電時也能夠將數據記錄下來,那就是隻讀存儲器
    (Read Only Memory, ROM);
  • 目前主流的外接卡接口大多爲 PCIe 接口,且最新爲 PCIe 3.0,單信道速度高達
    1GBytes/s
  • 常見的顯卡連接到屏幕的接口有 HDMI/DVI/D-Sub/Display port 等等。HDMI 可同時傳送
    影像與聲音。
  • 傳統硬盤的組成爲:圓形盤片、機械手臂、 磁頭與主軸馬達所組成的,其中盤片的組成
    爲扇區、磁道與柱面;
  • 磁盤連接到主板的接口大多爲 SATA 或 SAS,目前臺式機主流爲 SATA 3.0,理論極速可
    達 600MBytes/s。
  • 常見的文字編碼爲 ASCII,繁體中文編碼主要有 Big5 及 UTF8 兩種,目前主流爲 UTF8
    操作系統(Operating System, OS)其實也是一組程序, 這組程序的重點在於管理電腦
    的所有活動以及驅動系統中的所有硬件。
  • 電腦主要以二進制作爲單位,常用的磁盤容量單位爲Bytes,其單位換算爲1 Byte =
    8bits。
  • 最陽春的操作系統僅在驅動與管理硬件,而要使用硬件時,就得需要通過應用軟件或者
    是殼程序(shell)的功能, 來調用操作系統操縱硬件工作。目前稱爲操作系統的,除了
    上述功能外,通常已經包含了日常工作所需要的應用軟件在內。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章