2024-05-12|閱讀時間 ‧ 約 29 分鐘

電腦系統的運作原理1 - 重要角色介紹 (上)

電腦的運作需要仰賴許多硬體與軟體的相互配合,統稱電腦系統 (computer system)。這篇文章會概略地介紹電腦系統中的重要角色,以及它們如何相互合作,來完成複雜的工作,比如說讓無所事事的宅宅如我,假日可以躲在房間玩一整天的遊戲。


電腦、程式、與使用者

說到電腦,你的腦中會浮現什麼呢? 是螢幕、滑鼠鍵盤、閃著各種燈的主機、還是吵死人的風扇?

再想得更深入一點,可能會冒出更多問題: 手機裡面有電腦嗎? 應該是有,但手機只有螢幕,沒有滑鼠和鍵盤。機械手臂裡面應該也有電腦吧? 但它連螢幕都沒有,長得跟筆電或桌上型電腦完全不像。

其實電腦的型態有非常多種,長得樣子千奇百怪、體積的差距也十分懸殊。大型的電腦長得就像一排排貨架,插滿各種線路,佔據數百坪的空間。小型的電腦則會隱藏在其他的裝置裡面: 像是剛剛提到的機械手臂、智慧手表、或 VR 眼鏡。火車、捷運、和飛機上也有相當複雜的電腦,來協助駕駛員控制交通工具,並偵測、防範潛在的危險狀況。 大家刻板印象中的電腦: 筆電和桌上型電腦,只是電腦家族中的一份子

電腦終其一生就只有一個任務: 運算 (operation)。講得更精確一點: 讀取資料、對資料進行運算,然後產生新的資料。而程式 (program) 則是用來令命電腦做事情的手段。

打個比方,你可以把電腦想像成是精通各種烹飪技巧的「烹飪機器人」,它熟悉刀工、了解如何處理各種食材、以及各式器具的使用方式。程式就像食譜一樣,告訴我們的烹飪機器人如何一步一步,精準無誤得做出一道菜來: 也就是我們希望電腦能夠達成的任務,比如播放影片、發送 email、或是在遇到亂流的時候盡量保持機身的平穩。

也就是說,儘管電腦 (烹飪機器人) 有能力對資料 (食材) 進行各種運算 (烹飪技巧),但它並不知道要用什麼方式和順序去進行運算,必須仰賴程式 (食譜) 告訴它具體的步驟,才能做到滿足人類需求的應用 (菜色),如: 讓我們開心玩糞 game。


糞 game 運作的原理

這邊以糞 game 為例,實際講述一次從程式、電腦、和開心的宅宅如我之間的關係。

遊戲就如同任何其他軟體一樣,是由一堆程式碼所構成的,透過某些方式安裝在我們的手機當中。當我們在玩糞 game 的時候,手機裡面的電腦其實正在以飛快的速度讀取程式碼 (食譜): 它會發現程式命令它讀取使用者的操作 (資料),看看使用者想要幹嘛。它讀取了以後,發現使用者正在狂按大招,它接著繼續讀取程式碼,發現程式告訴它,如果使用者狂按大招,就在螢幕上顯示華麗炫炮的特效,同時計算敵人是否在大招範圍內,如果是的話就依照大招的傷害,扣除敵人的血量......。

上面的描述其實有點過於簡略,事實上,下面列的事情都需要程式碼進一步提供具體的步驟,電腦才知道該如何做到:
1. 發現使用者正在狂按大招。
2. 在螢幕上顯示華麗炫炮的特效。
3. 計算敵人是否在大招範圍內。
4. 依照大招的傷害,扣除敵人的血量。

看到這裡,有人可能會感到困惑,這些行為跟「運算」到底有什麼關聯呢? 運算就像電腦這個詞彙一樣是個泛稱,就如同世界上各種不同的電腦一樣,也有各式各樣不同種類的運算

舉例來說,當電腦讀取使用者的操作的時候,它是怎麼知道點一下手機螢幕上的某個按鈕,代表的意思是大招呢? 這其實是靠一個叫做「比較 (comparison)」的運算做到的。具體來說,程式會告訴電腦: 拿使用者的操作來和 xxx 進行比較這個運算 (xxx 是程式碼中對於大招的定義),假如比較出來的結果是吻合的,就表示使用者想要開大招,這時候應該要...... (更多程式碼)。

舉另外一個例子: 電腦是如何在螢幕上顯示出大招的特效的呢? 螢幕其實是由許多個小點點 (pixel) 所組成的,程式會告訴電腦要如何計算出每一個點在每一個瞬間的顏色和亮度,才能夠拼湊出一段開大招的特效。在這個例子中。


電腦的基本架構

雖然電腦的種類形形色色,但它們通常都有一個基本的架構,如下圖所示:



CPU: Central Processing Unit,電腦的核心,負責處理所有的運算

Memory: 記憶體,負責儲存資料。CPU 會從記憶體取得資料,進行運算,並且將計算的結果 (新的資料) 儲存回記憶體。

Input device: 輸入裝置,負責從電腦外部取得資料的裝置。如: 滑鼠、鍵盤、觸控螢幕、紅外線感測器、攝像頭。

Output device: 輸出裝置,從電腦讀取資料的外部裝置。如: 螢幕 (依照資料顯示畫面)、機械手臂 (依照資料做出動作)、音響 (依照資料發出聲音)。

下面以糞 game 的例子,說明電腦在各個步驟具體做的事情:

  1. 讀取使用者的操作: CPU 從觸控螢幕 (input) 接受到玩家的操作,將這個操作存進記憶體。
  2. 發現使用者正在狂按大招: CPU 從記憶體讀取使用者剛剛進行的操作,經過比較運算以後,發現玩家想開大招。
  3. 在螢幕上顯示華麗炫炮的特效: CPU 計算出每個瞬間螢幕 (output) 上的每個點 (pixel) 應該要顯示的顏色與亮度,將這些資料存進記憶體。接著 CPU 再從記憶體將這些資料傳送給螢幕 (output),螢幕接收到以後就可以依照資料顯示出大招的特效。
  4. 計算敵人是否在大招範圍內: CPU 從記憶體讀取目前角色之間的相對位置,以及大絕範圍的資料,經過運算以後,發現敵人在大招範圍內。
  5. 依照大招的傷害,扣除敵人的血量: CPU 從記憶體讀取目前敵人的血量以及大招的傷害,將敵人的血量扣除適當的量以後,將目前敵人的血量儲存回記憶體。接下來 CPU 可能會再次從記憶體讀取敵人的血量,計算出螢幕應該如何顯示目前的血條,並將資料傳送給螢幕 (output),螢幕收到以後,就可以顯示扣血過後的敵人血條。

這些步驟看起來很繁瑣 (真實的狀況其實遠比上面描述得還要複雜好幾百倍...),但由於電腦運作的速度非常非常快,幾乎在一瞬間就可以把上面所有的步驟都做完,對人類玩家而言,根本不會注意到在他按下大招的按鈕到敵人被扣血之間,其實經過這麼多的資料運算以及資料搬運。

由上面的例子,我們可以歸納出電腦做事情的三個大原則:

  1. CPU 可以從輸入裝置取得資料並儲存到記憶體,也可以從記憶體將資料傳送給輸出裝置。
  2. CPU 在進行運算前,都會先從記憶體取得資料。
  3. CPU 在完成運算以後,會將新的資料儲存回記憶體。

本文一開始提到的不同類型的電腦,都會依循這三個大原則對資料進行各種運算,產生更多新的資料,並搭配形形色色的輸入與輸出裝置,來滿足人類各種奇怪的需求

稍微補充一下,這三個大原則是電腦最最最基礎的運作方式,現代的電腦系統設計得越來越複雜,很多時候為了做到更強大的功能,並不會完全依循這三個原則。不過不管是什麼樣的設計,都是從這邊介紹的基礎架構以及原則去做延伸的。

最後要再次強調,上述的步驟都是透過程式 (食譜) 來告訴電腦具體應該要做什麼事情 (資料的運算以及資料的搬運)。電腦本身完全不知道做這些事情的意義是什麼,是程式設計師利用程式來控制電腦做出對人類來說有意義的行為


硬體與軟體的差異

由電腦做事情的三個大原則可以得知,程式除了告訴電腦要對資料做什麼運算以外,還要告訴電腦何時該讀取以及儲存資料。

比如說在電腦有辦法判斷你施放的大招究竟是有打到人、還是打了個寂寞以前,程式必須先叫電腦從記憶體讀取不同角色的位置、大絕的範圍等等的資料。計算完了以後,程式必須再叫它存回記憶體,不然它一轉眼就會把剛剛算出來的東西忘掉。

想必各位應該都會有一種想法: 電腦也太笨了吧! 不能自動自發一點,自己把需要的資料從記憶體讀出來,算好後自己寫回去嗎? 為什麼連這種事情都要一個指令一個動作。

這個原因很簡單: 電腦的本質就是笨、但做事非常快

硬體的開發與生產是非常燒錢的,所以通常硬體在設計上都會採取「把最基本、最重要的事情做得又快又好」。所以電腦會做的事情其實非常有限,但絕對非常有效率

你可以把電腦能夠做的事情想像成是一塊一塊樂高積木,它們的種類有限,而且形狀通常都很單純。而所謂的程式 (或軟體) 其實就是透過組裝樂高積木,來做出令人嘆為觀止的酷東西: 像是帝國大廈的模型、星際大戰的死星,或是薩諾斯的無限手套。

透過這種方式,儘管電腦會做的事情是有限的,程式/軟體 (食譜) 卻可以有無限多種可能




分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.