[程式少女] 第一章、美麗新世界的工作制度(Von Neumann 架構)

目錄

說明

這一章講述的是目前通用型電腦的基礎--Von Neumann 架構。

其中相關的概念,主要取材自暨南大學資管系俞旭升老師所撰寫的 C 語言教學網頁講議「電腦內部運作」一節,以及維基百科的 Von Neumann Architecture 條目。若您需要詳細的技術性說明,請參考上述的兩個頁面。

第一章、美麗新世界的工作制度(Von Neumann 架構)

星期日的早晨七點半,被手機鬧鈴聲吵醒的桐仁睡眼惺鬆地掙扎著從學生宿舍的被窩中爬起。

「呵啊……」

好不容易張開雙眼桐仁了個大大的呵欠,覺得全身散佈著一陣不適應的乏力感,彷彿只要輕輕一動,骨頭就會發出卡滋卡滋的聲響似的。

沒辦法,為了確認星期一要繳交的期末程式專案搞到半夜一點多才回到宿舍,再加上昨晚那陣騷動所造成的精神衝擊,似乎不是睡一個晚上就能復原的。

好不容易稍微清醒些的桐仁稍做梳洗,匆忙抓起昨晚回到宿舍後就順手丟在書桌上的社辦錀匙和筆記型電腦,往電腦研究社的社辦衝去。

畢竟雖說同樣是在校園內,但學生宿舍離臨時活動中心還是有些距離,現在已經七點五十分了,可以幾乎說是肯定會遲到的。

而當桐仁終於上氣不接下氣地來到臨時活動中心,卻發現社辦的門早就已經打開了,並起從裡頭傳出桐仁絕對不會認錯、充滿了朝氣,卻又讓人感到有些困擾的聲音--

「喂,太慢了吧……都八點五分了耶!我和小深夏可是從七點半就準時在這裡等你囉!小深夏妳說對不對?」

「唔……」

「哪有人提前半小時還說準時的啊!而且也不想想是誰害的,我可不記得說過我今天早上八點可以吧,全都是妳自己在說啊!我可是沒答應說今天要過來的喲。」

桐仁嘴上一邊抱怨著,一邊走進社辦,順手拉了張折疊椅放在桌旁坐了下來,同時抽出包包內的筆記型電腦打開放在桌上。

「是男人的話,這種小事就咚麥啦!我們還是快點來幫小深夏惡補一下吧,明天就要補考了,再不快點小深夏就危險了耶!」

「算了。要不是想要請深夏同學當實驗對象,我才懶得理妳咧。」

設定好電腦的桐仁深深地嘆了口氣後,將筆記型電腦推到深夏的面前,畫面上顯示的是計概老師的教學講義網頁,正好是這次要補考的部份。

起身將放在社辦角落一旁的可移動式白板移到桌子的正前方,桐仁拿起白板筆在上面寫了大大的 Von Neumann Architecture 這幾個大字。

「好吧,那我們就開始吧。深夏同學,黑板上這個東西妳有印象嗎?」

「Von……呃,我記得好像是……」

深夏還沒說完,音羽就已經高高舉起右手不斷揮舞著回答道:

「我知道!這個課堂上有教過~~Von Neumann 架構是現在通用型電腦的基礎架構,雖然現在的電腦技術上已經有許多突破和改良,但本質上都還維持著這個架構。」

這個傢伙是精力過盛的小學生嗎……看著露出洋洋得意的表情的學妺,桐仁的產生了這樣的想法,但還是壓下了想吐嘈的心情說道:

「沒錯,這次的考式範圍也正是 Von Neumann Architecutre 還有為了說明這個架構下的電腦運作的基本原理,而設計出的一些簡化組合語言指令。話說回來,音羽同學,雖然妳說妳對電腦不熟,但妳應該也有在用自己的電腦才對吧?」

「我是有一台個人電腦沒錯……不過都只是拿來看網路上的文章和寫些東西而已,其他的就不太會了。」

「這樣說來,妳早就用過 Von Neumann 架構的東西了喔。接下來我會盡量用深夏同學可以理解的方式來說明,一定很快就可以理解這次考試範圍裡的內容的,所以不用太擔心啦!」

聽到桐仁這樣說的深夏,似乎有些害羞似的低著頭小聲說道:「嗯……那、那就麻煩你了。」

「好,那我們就正式開始吧。就像音羽同學說的,Von Neumann 架構是現代電腦的基礎架構,就連妳在用的個人電腦,或是桌上的這部個人電腦,都還是使用著 Von Neumann 架構。也可以說,其實 Von Neumann 架構就是簡化了的個人電腦。所以說,其實 Von Neumann 架構離我們並沒有那麼遙遠,可以說我們天天都在用,只是不自覺罷了。」

看見音羽點了點頭,桐仁繼續說道:「音羽同學,妳看一下講義網頁上的那張 Von Neumann 架構示意圖,上面分別有幾個區塊對吧?」

「嗯……有 Control Unit、Arithmetic Logic Unit、Accumulator、Memory 和 Intput 還有 Output 這幾個方塊。」

「那妳再看看桌上那台筆記型電腦,右下角的貼紙上面寫的規格上是怎麼寫的。」

「右下角,等一下喔……Intel Core i5 processor、13.3" HD LED LCD、2GB Memory……是說這些嗎?」

深夏將手指移到筆記型電腦備配貼紙的地方,將上頭列著的配備一項一項地唸出。

「沒錯,其實這些東西都可以和那張架構圖上對應起來喲。配備列表上的 Memory 和 Von Neumann 架構上的 Memory 是同一個東西,而這裡的 Intel Core i5 processor 是則是把 Control Unit、Arithemtic Logic Unit 和 Accumulator 這幾個東西,封裝成單一元件後,通常我們會稱做中央處理器或 CPU。

「至於 13.3" LED 指的是螢幕,是屬於 Output 區塊的東西,也就是讓電腦顯示結果給使用者用的東西。而 Input 區塊,則是負責讓使用者送資料給電腦,告知電腦要做什麼,最常見的東西就是鍵盤或滑鼠囉。」

「嗯……鍵盤滑鼠這些東我大慨可以理解,可是我還是搞不太懂其他東西到底是在做什麼的……」

「那還用說嗎~ALU 負責運算、CU 拿來控制程式流程、而 Memory 用來存放要計算的資料啊!都講過了這麼多次,小深夏妳怎麼還是不會啊……」

「咕嗚……可、可是……人家就是記不起來那一堆莫名其妙名稱嘛。」面對好友的無情炮火攻擊,深夏噱著嘴說道。

「好了啦,其實我也大概了解深夏同學的心情。這些東西真的很饒口又很難記,所以我才試著想用大家都可以了解的方式來說明。話說回來,既然深夏同學妳說妳是個文學少女,那妳有看過美麗新世界這部小說嗎?」

「美麗新世界……學長是說英國作家赫胥黎寫的美麗新世界嗎?當然有看過囉,那可是反烏托邦小說的經典作品,當然看過囉。不過這和電腦有什麼關係嗎?」

「這麼說吧,妳應該知道在赫胥黎筆下的美麗新世界,是個階級和分工極為明確的世界,每個人負責做些什麼事,用什麼方式去做,都是事先規定好的。其實 Von Neumann 架構也有點像是美麗新世界或是歐威爾的 1984 這類小說中所描寫的界喲。」

「咦?!真的嗎?」

「嗯……這麼說吧,你可以把整個 Von Neumann 架構的電腦,想成是美麗新世界那個社會裡的一個機關。在這個機關裡有著嚴格的作業規範,同時每個部門都只負責單一的一件事,而要完成一個簡單的動作,則需要每個部門合作……」

「這是說剛剛那些 Control Unit 還是 Accumulator 都分別對應到這個單位裡的不同部門囉?」

「嗯……好像也有點不一樣呢。」

見到深夏似乎開始有點提起了興趣,桐仁繼續用這個比喻來說明整個 Von Neumann 架構的運作方式--在這個機關中,為了讓一切都能順利的運作並且保證不會出錯,機關中制定了一整套嚴格的工作流程以及看似奇怪規範。

首先,為了確保沒有任何人可以洩漏密秘,Von Neumann 機關中規定了所有資料都必須存放在稱做 Memory 的保密櫃中,而且除了資料外,要命令部門做什麼事情的命令,也都統一存放在 Memory 保密櫃中。這可以說是 Von Neumann 架構式組織管理上最大的特點。

再者,這個被稱做 Memory 的保密櫃也有個有趣的地方,每個格子都是個堆疊--也就是說他的開口是在櫃子的上方,如果要放文件進去,就只能放在最上方,蓋住下方的文件,相對的,如果想取出資料,每次也只能取出最上方的一張紙。

在這個機關中,只有被分配到 Control Unit 工作的精英懂得如何解讀撰寫在紙片上的命令暗碼。可是這個部門的權力也被嚴格控管,他們只能開啟 Program Counter 上面所顯示的號碼相對應的保密櫃格子。

「可是剛剛那張圖好像並沒有 Program Counter 這個東西耶?」

聽到此處,深夏提出了疑問。

「大概是因為都算是 ALU 裡面的暫存器,所以老師偷懶只畫了 Accumulator 而已吧?」

「沒錯,就像音羽同學說的,不論是 Program Counter 或是 Accumaltor 都是 ALU 中的一些元件,所以通常只會畫出其中幾個。而最常被提到的大概就是 Accumulator 和 Program Counter 這兩個東西了。」

「那……是誰來控制 Program Counter 來限制 Control Unit 的權力呢?總不會是 Control Unit 部門自己吧?」

「改變 Program Counter 來指定 Control Unit 可以開啟的保密櫃,這個動作是由 ALU 來完成。但另一方面,ALU 必須接到命令才可以這麼做,否則 ALU 是不能更動 Program Counter 的內容的。」

在說明的同時,桐仁也在白板畫下一些示意圖,右側是一格一格標著了編號的記憶體,左側則依序是畫成計算機型式的 ALU、一張標識成 Control Unit 的晶片小人,和一塊寫著 Program Counter 的方塊。

桐仁繼續解釋道:

「這是老師的講義上畫的示意圖,我拿來借用了……剛剛提到 ALU 負責了更改 Program Counter 的動作,但其實 ALU 也負則進行諸如算術運算等工作……

「另外,這個機關規定了非常詳細但又簡單的工作流程:首先,CU 部門會檢視 ALU 部門的 Program Counter,並依照 Program Counter 上的內容取得 Memory 中相對應的資料。舉例而言,若 Program Counter 上顯示 20 的話,那 CU 部門就會打開 Memory 保密櫃第 20 格,將保密櫃中儲存的命令暗碼抄寫一份到自己的部門,並進行解析。

「這裡很重要的一點,是原本的命令還是放在保密櫃中,CU 部門只是抄寫一份新的到自己部門中進行解讀而已。

「拿到命令暗碼的 CU 部門會針對這個命令暗碼進行解讀,再將命令上指定的動作告訴 ALU,同時 CU 也會將做這些動作時所需要的資料,從保密櫃上抄寫一份給 ALU 部門。

「最後,等到 ALU 執行指定的動作後,如果那個動作有相關的數值產生,就會被寫在 Accumulator 上面,而 ALU 也會遵照 CU 告知的指令上的附註,調整 Program Counter 裡的內容。」

「呣唔……好像稍微可以想像了呢,這樣聽起來還滿合理的,除了那些奇怪的名稱之外。」

「咦?!小深夏妳終於開竅了嗎?為什麼我講的時候妳就聽不懂,這樣不公平啦~~~虧我們兩個是好朋友耶……」

(待續)

重點複習

  • Von Neumann 架構的組成
  • Input/Output(輸入/輸出)--負責與外界溝通
  • Memory(記憶體)--儲存資料與指令
  • Control Unit(控制單元)--負責擷取和解讀指令
  • Arithmetic and Logic Unit(算術邏輯單元)--進行數學和邏輯運算,同時內部包含

    • Program Counter 暫存器--告知 CU 下一個要執行的指令在哪裡
    • Accumulator 暫存器--存放運算結果
  • Von Neumann 架構的特色

  • 指令和資料都存放在記憶體中

  • Von Neumann 架構下的電腦指令的運作流程

  • Fetch(擷取)--由 Control Unit 讀取 Program Counter 的內容,並取出 Program Counter 所指到的記憶體的值。
  • Decode(解碼)--由 Control Unit 解析該值所代表的命令。
  • Execute(執行)--由 ALU 負責實際執行在第二步奏時 Control Unit 所解析出的指令。
  • Write(寫回)--根據所執行的指令,更改 Program Counter 的內容。

回響