CodeFree|喝一杯咖啡,輕鬆學電腦科學 - 上

今天又是喝咖啡學習系列,不過不是學程式,而是學電腦科學。筆記內容包括三門課。

這門課看了下內文其實就是計算機概論,有點令人懷念的一門課…想當初算二進制算到超挫折的 XDDD 不過怎感覺這篇不是在寫讀書筆記,而是重寫了一次課程?很多東西它沒提到,是我自己忽然想到其他關鍵字就一併寫進去了 XDDD

hiskio codefree codefree time(圖片來源: hiskio codefree

CH 1|電腦的先驅:早期的機械式計算工具

這段歷史算是電腦史中的遠古史吧,想當初我好像是從馬克一號學起的?不是鋼鐵人那個馬克一號,是哈佛大學的 ASCC MARK I,等等看課程有沒有提到吧。

Hot Toys Iron Man Mark I 鋼鐵人 Mark I(圖片來源: marvelousRoland|Flickr

1-1|電腦之父 Charles Babbage 就是發明電腦的人?

電腦史大致可以劃分成真空管、電晶體、積體電路、超大型積體電路四個時期。但查理.巴貝奇(Charles Babbage) 所設計的分析機並不屬於這幾個時期,硬要歸類的話它是第零代的機械時期吧?所以我才會戲稱它是遠古史 🤭

嚴格說來,巴貝奇並不是發明第一台電腦的人;但他所設計的分析機,卻是後世電子通用電腦的先驅,也因此他才會被尊稱為電腦之父。但與其說是電腦之父,倒不如說是通用電腦之父可能會比較精準,畢竟歷史上可以當電腦它爹有好幾位呢,再不然電腦之祖父(?)可能也會更貼切 XDDD

「電腦之父」巴貝奇 「電腦之父」巴貝奇(圖片來源: The News Lens 關鍵評論網

既然提到電腦它有好幾個爹了,我就整理一下它的親爹名單:

  1. 查理.巴貝奇(Charles Babbage):通用電腦之父
    就是前面提到的那位,這邊不提了。

  2. 艾倫.圖靈(Alan Mathison Turing):電腦科學之父
    這位大家應該也很熟,尤其是資工系的同學應該都對他又愛又恨?像是圖靈機、圖靈測試,還有圖靈獎都跟他頗有淵源。

    艾倫.圖靈本人與劇照 艾倫.圖靈本人與劇照(圖片來源: 卡卡的異想世界|痞客邦

  3. 約翰·阿坦那索夫(John Vincent Atanasoff):電子電腦之父
    這位大神是第一位用真空管做出電子電腦,也第一台電子電腦的發明者,這部電腦在日後被稱為阿塔納索夫-貝瑞電腦(Atanasoff–Berry Computer,ABC 電腦)。其它特點還有只能解線性方程式、使用二進制…等。

  4. 約翰·馮紐曼(John von Neumann):現代電腦之父
    這位大家有很不陌生吧?傳說中的馮紐曼模型,這是現代所使用的電腦的基礎!理論上等等課程中應該會出現…如果沒出現…那就…沒出現吧 XDDD 不過應該很難跳過才對。

單元測驗

  1. 請問電腦之父巴貝奇是發明第一台電腦的人嗎?
    • 是,他發明的分析機就是第一台電腦
    • 否,雖然他被稱為電腦之父,但他發明的分析機僅是電腦的先驅,並不算是第一台電腦

1-2|「加法計算器」、「步進計算器」與「自動化織布機」的誕生

它這邊真的打算從機械時期說起…而且還是由齒輪帶動的機械開說起…剛好補一下我的遠古史 XDDD

加法計算器

滾輪式加法器,又稱帕斯卡計算器。由法國數學家布萊茲·帕斯卡(Blaise Pascal) 於 1642 年發明,用於協助父親算帳,但我看過另一個版本是為方便自己算帳而發明的。果然懶,才是推動世界發展的真正動力 XDDD

帕斯卡計算器的設計利用齒輪及槓桿原理,在其包含了一組相連的齒輪,只要在上面撥動數字,齒輪之間互相轉動後便會算出累加後的值,再顯示於小窗口上。

帕斯卡計算器 帕斯卡計算器(圖片來源: 課程

是說,數學家跟帕斯卡這個組合讓我感覺很熟悉,查了下著名的帕斯卡三角形果然跟他有關。另一個跟他有關的則是壓力單位帕斯卡 (Pascal, Pa) ,這個單位也是為了紀念他所命名的。

步進計算器

在 1673 年時,德國人萊布尼茲(Gottfried van Leibniz)在研讀了帕斯卡的論文後,決心將加法器升級成有乘除的功能步進計算器。

步進計算器中有一連串的齒輪,每個齒輪有十個齒,表 0 到 9,每當一個齒輪轉過 9,它會轉回零,並同時讓旁邊的齒輪前進 1 個齒;做減法時,則是反向運轉;至於乘除,則是運用了累進的加減的概念!

不過這兩個版本的計算器都有相同的問題:造價太高、需求太少

步進計算器 步進計算器(圖片來源: 課程

是說這位萊布尼茲也是個狠人,除了有句:「讓優秀的人浪費時間算數簡直侮辱尊嚴」名言外。他最廣為人所知並讓莘莘學子都對他咬牙切齒的功績就是—微積分!他是微積分的創始人之一,現今所使用的微積分符號也都是他的版本。

微積分大戰
關於他跟牛頓(對!又是牛頓)的微積分大戰有興趣的,可以參考這篇—〈世紀的審判〉就最終的結果看來,牛頓雖然贏得當時了皇家學會的審判,但歷史的審判卻站在了萊布尼茲這方。

自動化織布機

前面兩項發明嚴格說來是方便的計算工具,但仍不算電腦/計算機(computer)。由電腦構成的三要素(硬體、資料與軟體)來看,它既不能儲存資訊,也無法儲存指令並重複執行

第一台引入這兩個要素的機器,是在 1801 年由法國人約瑟夫.傑夸德(Joseph Jacquard)為了織布而製造的自動織布機。它可用打孔卡片來記錄織布的圖樣,讓機器根據打孔卡孔的有無來控制經線與緯線的。

自動化織布機 自動化織布機(圖片來源: 課程

這台自動織布機為電腦的發展引進兩個重要的觀念:

  1. 編碼:資訊可以在打孔卡片上編碼(Coded)
  2. 程式:資訊可以儲存在卡片上,當卡片組合在一起就可做為一連串的指令。

所以嚴格說來,約瑟夫不僅是自動織布機的發明者,也是程式設計的發明者

單元測驗

  1. 「加法計算器」、「步進計算器」與「自動化織布機」有著不同的貢獻,你可別搞混囉!請你判斷下列敘述何者正確呢?
    • 加法計算器引進了「編碼」、「程式」兩種重要的觀念
    • 步進計算器是第一部能加減乘除的計算器
    • 自動化織布機內部包含了一組相連的齒輪,只要在上面撥出數字,齒輪之間互相轉動後便會算出累加後的值,再顯示於小窗口上

1-3|「差分機、分析機」與電器化時代的「打孔卡片處理器」

看到這標題,我第一個反應是…電腦終於要有電了嗎 XDDD

差分機、分析機

而巴貝奇的設計要來到 1823 年,他首先設計了用來解多項式差分機,由英國政府補助出資研發。雖然差分機被證實理論上可行,但最終因財政、製作延宕、故障頻率與私人因素…等,導致巴貝奇失去了政府的金援。

說到製作延宕,就必須提到巴貝奇的三心二意,不僅經常朝令夕改,還常常開新的支線任務,才會導致差分機的製作一延再延。而在他的支線任務中,最有名的就是分析機。在這部機器包括輸入裝置處理機和計算器指揮工作和計算順序的控制單元儲存裝置輸出裝置等五大部門,這正是後來設計電腦的構想。

差分機與分析機 差分機與分析機(圖片來源: 課程

說到分析機,就必須提提愛達·奧古斯塔(Ada Augusta),她為分析機寫了假想的程式(虛擬碼?),因此被認為是世界第一位程式設計師。挖屋~祖師爺欸!

愛達勒芙蕾絲 197 週年誕辰 愛達勒芙蕾絲 197 週年誕辰(圖片來源: Doodle 作品資料庫

打孔卡片處理器

真正進入商用的時期,則是赫勒里斯(Herman Hollerith)的打孔卡片處理器,他採用 Jacquard 的打孔卡片原理,使穿過孔的細棒構成一個電路來計算,這項發明也使得計算器的機械時代移轉到電器化時代

早期的打孔卡片處理器是為人口普查而設計,因此僅具備加法器的功能;後來經過改良整合萊布尼茲的步進滾筒,使知能完成四則運算。

打孔卡片處理器 打孔卡片處理器(圖片來源: 課程

他有成立成立一家名為「製表機器公司」(Tabulating Machine Company)的公司,並於 1911 年與另外三家合併為「計算—製表—記錄公司」(Computing-Tabulating-Recording Company,C-T-R)。這家公司也是大有來頭,它在 1924 年更名為國際商業機器公司,英文名稱 International Business Machines Corporation,也就是我們現在熟知的 IBM。

單元測驗

  1. 你還記得差分機、分析機~打孔卡片處理器的演進嗎?現在就來考考你,下列敘述何者錯誤?
    • 巴貝奇被尊稱為「電腦之父」,他發明了「分析機」,其包含輸入裝置、處理機和計算器等五大部門,這正是後來設計電腦的構想
    • 赫勒里斯發明的「分析機」使計算器的機械時代移轉到電器化時代,電腦技術也從此開始發展
    • 愛達.奧古斯塔為「分析機」寫了假想的程式,是一種用來送入分析機,並能使這部機器執行工作的指令,類似於現在的程式碼,因此她被喻為「第一位程式員」

CH 2|一覽電腦的發展史

電腦的發展始於 1944 年,從繼電器做簡單四則運算,一路演進至今。依其組成的元件可以將電腦的演進過程分成:真空管、電晶體、積體電路、超大型積體電路四個時期。

喔,1944 年就是哈佛大學的 ASCC MARK-I 被製作出來的時間點,它是台電氣機械式的電腦,使用了 3,000 個以上的繼電器(Relay)和多量的齒輪,被認為是第一部通用型電腦,也是第一部被實作出來的全自動電腦,無須人為介入。相比同時期的電腦可靠不少,因此被認為是現代電腦時代的開端

ASCC MARK I 真實存在的馬克一號 XDDD(圖片來源: 維基百科

2-1|1946年~1954年 第一代電腦 真空管時期

普遍認為最早的通用電子電腦,是在二戰期間賓州大學的莫奇來(Dr.John W.Mauchly)博士和他的學生埃克特(J.Presper Echert)因應美軍要求,設計用來計算砲彈彈道的 ENIAC

ENIAC 是第一部以真空管取代繼電器的通用電子電腦,設計上總共使用了 18800 個真空管,總長 50 英呎,寬 30 英呎,總佔地 1500 平方英呎、大約 42 坪,且重達 30 噸。換算下來這台電腦大約是一間半的教室大、六隻大象重,現在應該很難想像有這們龐大且笨重的電腦。

它的計算速度在當時算快,每秒鐘可以做 300 多次乘法運算或 4500 次的加法運算。但由於它的所有的程式都是由機械碼撰寫、是以硬體上的變化做為依據,因此在運算過程中會產生大量的熱量、不易冷卻,同時消耗大量電力。除此之外,真空管的損耗率也極高,每 15 分鐘就可能燒掉一支,且操作人員須再花 15 分鐘以上找出壞掉的管子進行更換,使用上極為不便。

是說,現在家用電腦,每秒鐘都能達到 10 的 8 次方以上整數加減乘除的速度…

ENIAC ENIAC(圖片來源: 課程

另一個小趣聞是,ENIAC 是在 1946 年 2 月 14 日發表的耶!不虧是工程師,情人節還是跟電腦作伴,還顛覆世界了呢!是說,它是為二戰設計,但 1946 年二戰應該結束了吧?

在 1973 年以前,ENIAC 普遍被認為是第一台現代意義上的電子電腦。但是在 1973 年時,美國聯邦地方法院註銷了 ENIAC 的專利,認定 ENIAC 發明是從 ABC 電腦那裡繼承了電子電腦的主要構件思想。因此,ABC 電腦被認定為世界上第一台電子電腦,而這台 ABC 電腦,就是我們之前提過阿坦那索夫在 1937 年所發明的。

不過嚴格說來,ABC 並不是台圖靈完備的電腦,也沒能實現儲存程式結構,更不具備通用性,就這幾點看來 ENIAC 完勝只能解線性方程式的 ABC。

然而,這 ABC 電腦中的 3 個關鍵仍是現代電腦組成的一部分:

  1. 使用二進制表示所有的數值和資料。
  2. 使用電子元件進行所有操作,而不是滾輪、棘輪或者機械開關。
  3. 計算和儲存在系統中分離成兩部分。

前面雖然把兩者相比較,但有趣的是,ENIAC 其實跟 ABC 電腦很不一樣。例如:在 ENIAC 中,還是使用十進制來計算,而非二進制,這是兩個剛好互補嗎?我的缺點是你的優點,你的缺點是我的優點 XDDD

ENIAC 的另一個致命缺點,就是它是使用機械碼,換句話說它必須依靠重新接線、切換開關的方式來切換不同程式。即便它計算迅速,但每每更換程式,就得花半天的時間,嚴重拖累整體效能。

因此,數學家馮紐曼(Dr. John Von Neumann) 提出程式必須儲存在記憶體的重要概念。程式可用打孔卡片編寫,再輸入到記憶單元中儲存起來,如此便可輕易更換不同程式,又不會影響運作速度;但若要將程式儲進記憶體中,這表示程式必須與資料一樣都是二進制的儲存方式。

記憶體中的程式與資料 記憶體中的程式與資料(圖片來源: 《計算機概論 2/e》

喔對,把程式獨立出來的概念並不是由馮紐曼提出,而是圖靈提的圖靈機(Turing Machine);馮紐曼提出的是程式儲存在記憶體的概念。

記憶體中的程式與資料 記憶體中的程式與資料(圖片來源: 《計算機概論 2/e》

故此,在 ENIAC 之後完成的電腦,如:離散變量自動電子電腦(英語:Electronic Discrete Variable Automatic Computer,EDVAC)、電子延遲存儲自動計算器(英文:Electronic Delay Storage Auto-matic Calculator、EDSAC),這些電腦在開發時都採用馮紐曼模型(Von Neumann model) 來建構,因此它們的硬體可分成四個子系統:記憶體算術邏輯單元控制單元輸入/輸出

馮紐曼模型 馮紐曼模型(圖片來源: 《計算機概論 2/e》

單元測驗

  1. 真空管時期的電腦是屬於第一代電腦,可別忘記囉!關於真空管電腦,下列敘述何者正確呢?
    • 第一部真正的電腦是機械式的計算器
    • 以真空管取代繼電器為電子元件的自動電腦名為「ENIAC」
    • 真空管電腦消耗的熱量極低,且極為省電,因此在當時蔚為風潮

2-2|1954年~1964年 第二代電腦 電晶體時期 - 1964年~1970年 第三代電腦 積體電路時期

1954年~1964年 第二代電腦 電晶體時期

1948 年美國貝爾實驗室的科學家約翰.巴丁(John Bardeen)、華特.布拉頓(Walter Houser Brattain)和威廉.肖克利(William Shockley)共同發展出電晶體,這項發明給一般的電子應用帶來極大的變革。

此時期的電腦其電路板都裝有磁芯記憶體和獨立的電晶體,電晶體的大小只有真空管的二十分之一,使電腦的體積更小、重量更輕;且耗電量、散熱量減少、故障率也直線下降

這個時代除了電晶體的應用外,高階程式語言也發展出來了。感謝這發明,讓我不用真的得跟機器打交道,我硬體學的超差的 XDDD

電晶體 電晶體(圖片來源: 課程

1964年~1970年 第三代電腦 積體電路時期

在 1958 年傑克.基爾比(Jack Kilby)和羅伯特.諾頓.諾伊斯(Robert Norton Noyce)都發明了以為材料的積體電路(IC, Integrated Circuit)。

隨著半導體積體電路的出現,各家廠商陸續投入研發,直到 1964 年,IBM 公司正式推出成功以積體電路研製的 IBM SYSTEM-360 型電腦,從而宣告第三代電腦時代的來臨。在一片比 1/8 英吋還小的晶片上,包含了幾百個電子元件,使電腦體積更加的輕巧,而且計算速度又快了幾百倍。

除此之外,相較前兩個時代,其耗損率又進一步的下降,大約使用 3300 萬個小時後,才可能發生故障,進一步壓低了成本。

積體電路 積體電路(圖片來源: 課程

是說,這篇筆記到此提到的人物都是一時人傑,像傑克.基爾比這位是 2000 年諾貝爾物理學獎得主,另一個小趣聞是他在 1998 年首次訪臺時獲得交大的榮譽博士學位;另一位羅伯特.諾伊斯則是英特爾的共同創始人之一。

單元測驗

  1. 可別忘了,第二~三代的電腦有著巨大的發展!下列敘述何者正確呢?
    • 電晶體時期的電腦大小比真空管電腦小,且更輕、更省電,且故障率更低,計算能力更快
    • 電晶體時期的電腦耗用能源較積體電路時期的電腦少,成本也更為低廉
    • 第一代至第三代電腦發展的順序依據為真空管、積體電路、電晶體

2-3|1971年~至今 第四代電腦 超大型積體電路時期

1971年~至今 第四代電腦 超大型積體電路時期

1975 年,超大型積體電路(VLSI,Very Large Scale Integrated Circuit) 被完成,這是以積體電路改良而成。密度更高的超大型積體電路,能在一片晶片中可以裝進數萬個電子元件,體積比第一代電腦小了百倍,計算速度卻快了千倍。

以超大型積體電路所製造的電腦,就是現在的個人電腦(PC,Personal Computer)。而延續超大型積體電路而發展的微處理機,更可實際應用於日常的每一種機器上,如:微波爐、冷氣機、音響、電視、洗衣機等等。

課程給了張演進史,方便一覽電腦的演化:

電腦的演進史 電腦的演進史(圖片來源: 課程

第五代與第六代電腦

一般在找資料時前文所提到的四個時代是公認,之後的第五代與第六代電腦似乎就有些待定了。

第五代電腦被提到機率對半,我想這是因為它跟前面幾代的變革方向不太一樣,第五代電腦在 1982 年被日本科學家定義屬於人工智慧(AI,Artificial Intelligenec)的時代,感覺是偏向軟體上的突破,或是應用上的改變。當然硬體也是有所突破,但卻不像是之前的是全新的一種技術,而是偏向製程的革新,所以以這個的角度不將它歸入似乎也合理?

至於第六代電腦我在多數的電腦演進史都沒看到,但有在部分詞條是寫生物電腦(Biological Computer / Biocomputer),我還以為會是量子電腦(Quantum computer)哩。不過看了看資料,不管生物電腦還量子電腦都是發展中的的技術,究竟哪個會先進入商用成為一個新的時代,這還有待觀察。

單元測驗

  1. 關於第四代電腦,下列敘述何者正確?
    • 第四代電腦使用的電子元件為超大型積體電路
    • 人工智慧電腦的時代也被歸類為第四代電腦
    • 第四代電腦的最終目的是開發一部擁有「超級電腦的運算效能」和「可用的人工智慧」的電腦

CH 3|1111 + 1 ≠ 1112?

二進位

3-1|二進位制與八進位制

據說,因為人類有十根手指頭,所以人類記數時是採用十進制;而電子的訊號只有開跟關兩種狀態,因此在記數時是採用基底為二的數字系統。

題外話,我之前想過人有十根手指,但我所能表達的數其實有 11 個吧?也就是 0、1、2、3、4、5、6、7、8、9、10,那為什麼用不是 11 進制?我同學說是不是 0 太年輕了(0 的概念是較後來才出現的),所以在算的時候忘了算它?笑死我了,妳當作是點名的時候太矮沒算到嗎? 🤣

不過說真的,搞不好真的跟 0 的概念出現較晚的原因有關。 🤔

二進位制

剛剛提到電子的訊號只有開(1)跟關(0) 兩種狀態,而在單條電路上的開關狀態被稱為 1 個 bit,這也是電腦可以儲存的最小單位,若是表達複雜的訊息,則會需要更多的電路、表示更多位元,這也就是二進制雛形。

二進制是一種滿 2 進位,基底為二的數字系統,所以只有 0 和 1 兩個數字。跟我們常用以十為基底的數字系統,每進一位就是多乘 10 一樣,在二進制系統中,每進一位時就是多乘 2

所以下圖中 10011100100 的計算則是:

\[1001_2 = 1\times2^3+0\times2^2+0\times2^1+1\times2^0 = 9_10 \\ 1100100_2 = 1\times2^6+1\times2^5+0\times2^4+0\times2^3+1\times2^2+0\times2^1++0\times2^0 = 100_10\]

十進制與二進制 十進制與二進制(圖片來源: 課程

八進位制

八進制和二進制雷同,數字符號為 0、1、2、3、4、5、6、7,是逢 8 進位的。

所以下圖中 144 的計算則是:

\[144_{8} = 1\times8^2+4\times8^1+4\times8^0 = 100_{10}\]

十進制與八進制 十進制與八進制(圖片來源: 課程

單元測驗

  1. 可別搞混二進位制與八進位制的規則喔!請問用八進位制表示 100 怎麼表示呢?
    • 1100100
    • 144

    不用算,第一個選項如果是八進制,光 $8^3$ 就超過 100 更別提 $8^6$。

3-2|十六進位制

舉一反三,十六進制就是逢 16 進位的系統。但一般數字只有 0 ~ 9,因此 10 ~ 15 會使用 A ~ F

我們知道二進制是電腦用的數字系統,所有的輸入都會被轉換成一連串二進制的指令;但必須說,二進制並不是一個有效率的數字系統。以 1024 來說,我們用十進制來表示時只需要 4 位元,但用二進制時卻需要 11 位元($2^{10}=1024$),這打到後面少了幾個 0 可能都沒發現吧 XDDD

所以,當我們要輸入相關設定時,習慣上會將 4 個位元轉化成十六進位制,像我們習慣的色碼 #FFFFFF,就是常見的十六進位應用!

進制對照表 進制對照表(圖片來源: 課程

單元測驗

  1. 現在你學會更複雜的十六進位制了!請問用十六進位制表示 12 怎麼表示呢?
    • C
    • 2A
    • 12

3-3|圖解進位制轉換規則

接下來介紹介紹一些常見的進位制轉換規則。

十進位制轉換為其他進位制

將一個數分成整數小數兩部分來討論:

  1. 整數
    在轉換整數的時候是用除法,將整數/欲轉換進位數,一直除到商數為 0 為止,最終再將餘數逆向取出。用短除法的話,就是由下往上

    將十進位整數轉換為其他基底流程 將十進位數字轉換為其他基底流程(圖片來源: 《計算機概論 2/e》

    計算示意如下:

    轉換十進位整數計算示意 轉換十進位整數計算示意(圖片來源: 《計算機概論 2/e》

    實際計算就是做短除法啦,不過計概課本這邊的把計算過程打橫了,所以可能看起來會有點不太習慣。一開始黑底的數字是十進制的 $35$,除以 $2$ 得到商 $17$ 和餘數 $1$,一路向左計算,最終得轉換結果 \(35_{10}=100011_{2}\)。

    顯示如何把 35 轉成二進位 顯示如何把 35 轉成二進位(圖片來源: 《計算機概論 2/e》

  2. 小數
    至於小數部分是使用乘法,將小數*欲轉換進位數,乘積的整數位保留,小數位繼續運算直到為 0 或是位數足夠時候,最終再將整數依序取出。

    將十進位小數轉換為其他基底流程 將十進位小數轉換為其他基底流程(圖片來源: 《計算機概論 2/e》

    計算示意如下:

    轉換十進位小數計算示意 轉換十進位小數計算示意(圖片來源: 《計算機概論 2/e》

    因為這例子沒有整數部分,所以不考慮它了,直接看小數部分。黑底的數字 $0.625$,乘以 $2$ 得乘積 $1.25$,故保留 $1$、$0.25$ 繼續向下計算,一路向右運算,直到為 0 或終止運算,最終得轉換結果 \(0.625_{10}=0.101_{2}\)。

    顯示如何把 0.625 轉成二進位 顯示如何把 0.625 轉成二進位(圖片來源: 《計算機概論 2/e》

其他進位制轉換為十進位制

把轉換來源的每個位元乘上它的以基底所得出的位值,最終將每個位元的計算結果相加,即可的得到十進位的結果。

其他基底轉換成十進位 其他基底轉換成十進位(圖片來源: 《計算機概論 2/e》

所以下圖八進制的 $1144_{8}$ 轉回十進制的計算則是:

\[1144_{8} = 1\times8^3+1\times8^2+4\times8^1+4\times8^0 = 612_{10}\]

八進制 1144 轉十進制 八進制 1144 轉十進制(圖片來源: 課程

十六進制的 $1144_{16}$ 的轉換計算則是:

\[1144_{16} = 1\times16^3+1\times16^2+4\times16^1+4\times16^0 = 4420_{10}\]

十六進制 1144 轉十進制 十六進制 1144 轉十進制(圖片來源: 課程

二進位制與十六進位制轉換

16 為 2 的四次方,所以在進行二與十六進制互轉時是以 4 個位元為一組。以小數點為基準,分向左右兩邊,以 4 個為一組進行分群,若整數不足 4 位則前面補 0,若小數不足 4 個位數則後面補 0。

二進制與十六進制轉換 二進制與十六進制轉換(圖片來源: 《計算機概論 2/e》

以 \(111010011.101_{2}\) 轉換為例,首先把二進位數以 4 個位為一組作整理:$1$、 $1101$、 $0011$、 $.$、 $101$,左右兩邊不足 4 位數的補零變成:$0001$、 $1101$、 $0011$、 $.$、 $1010$,然後將各組轉成十進制分別是 $1$、 $13$、 $3$、 $.$、 $10$,再換回十六進制就是最終答案了 \(1D3.A_{16}\)。

二進制 111010011.101 轉十六進制 二進制 111010011.101 轉十六進制(圖片來源: 課程

至於十六轉二進制,核心概念也是 4 個位元為一組。當一個十六進制數轉成二進制表示,若不足 4 位數則要在該組前面補 0。舉例來說,$24C_{16}$ 要成二進制,\(2_{16}\) → \(0010_{2}\)、 \(4_{16}\) → \(0100_{2}\)、 \(C_{16}\) → \(1100_{2}\),最終結果為 \(001001001100_{2}\)。

單元測驗

  1. 學完這些進位制,該來點進階題了!請問將 62.25 (十進位制)轉換為二進位制 要怎麼表示呢?
    • 100100.1
    • 111110.01

CH 4|1 與 0 的邏輯運算

4-1|布林代數與邏輯閘

布林代數是處理數位邏輯的代數運算式,用來表示不是,在實際電腦中會以 10 來表示。

這邊舉個例子,網頁要檢查你現在是不是點擊叉叉關掉了頁面,此時會有兩種可能:

  1. 是,點擊了叉叉
    布林代數會記錄此情況為 True 真,而電腦會以 1 記錄表示成立。
  2. 否,沒有點擊叉叉
    反之,會記錄 False 假,並記錄 0 表示不成立。

不過實際運行時,整個系統是多工處理,可能會同時檢查好幾件事,並根據這些事件來做出反應,這時就會用到邏輯閘/邏輯運算了。

一樣是按叉叉的例子,網頁想要知道你是不是同時點擊了叉叉和重新整理這兩顆鍵,因為它想要崩潰給你看 XDDD。這時它需要做幾件事:

  1. 檢查是不是按了叉叉
  2. 檢查是不是按了重新整理
  3. 檢查兩個事件是不是都成立

用來釐清所有條件之間的關係,檢查兩個事件是不是都成立,就是邏輯閘的工作了。這些布林代數或者說是 0 和 1 ,在經過不同的閘時會產生出不同的結果。

最常用的邏輯閘可歸納為 8 項,最基本的 4 個分別為 NOTORANDXOR,另外的 NORNANDXNOR 則是前述的反向結果,最後 Buffer 緩衝器在這邊先別管它,因為它是起到緩衝或強波的作用,並不會對布林值的輸出有任何的變化。

8 個基本邏輯閘符號 8 個基本邏輯閘符號(圖片來源: 松山工農

單元測驗

  1. 如果我要「電腦隨時檢查你是不是同時按了叉叉和 F5 這兩顆鍵」,需要使用到下列何者?
    • 布林代數
    • 邏輯閘

    其實兩個應該都要用到才對,但它是單選題 =__=

4-2|NOT 閘(NOT Gate)

NOT Gate,中文叫做反相閘,又稱為反相器(Inverter)。不過在記邏輯閘名稱的時後,我沒用過中文啦,一來是當初考試都是英文、二來寫程式的時候也都是英文或符號居多,至於最後一個原因等等你們看到其他閘的中譯就知道了…那絕對會亂掉的!

NOT 是 7 個邏輯閘中,唯一一個一元運算子,它的工作就是負責唱反調,你說 True 它就回 False,反之你說 False 它就回 True。就好像你說你有妹妹的時候,內建 NOT Gate 的鄉民會回答:「其實你沒有妹妹!」就是這個意思。

最後附上一張精美的真值表(truth table)。喔,真值表就是定義了各種可能輸入與其輸出值的表格:

NOT Gate 真值表 NOT Gate 真值表(圖片來源: 課程

單元測驗

  1. 如果我輸入 1 ,那麼 NOT 閘會輸出什麼呢?
    • 1,因為 NOT 閘「遇 1 則 1 」
    • 0,因為 NOT 閘「遇 1 則 0 」

4-3|或閘 (OR Gate)、反或閘(NOR Gate)

或閘(OR Gate)

從這邊開都是二元或是多元運算子。OR Gate 被直接翻譯成或閘,它的特性就是只有所有人都否決的時候,事件才會被否決;一旦有一人同意,事件則會成立

舉個例子,依民法規定,如果妳想結婚,要嘛妳成年了或是妳的法定代理人同意,只要其中一個條件成立妳就可以去戶政事務登記了;不然妳未成年、代理人又不同意的話,那就只能從長計議…嗯…這個例子要成立的前提是妳有結婚對象了 XDDD

成年 法定代理人同意 結婚
X X X
O X O
X O O
O O O

我們把例子換回符號,我們已經知道,否決表示不成立,記為 0、False;反之同意則為 1、True,因此其真值表如下:

OR Gate 真值表 OR Gate 真值表(圖片來源: 課程

反或閘(NOR Gate)

NOR Gate,看文字就知道它是把 OR 跟 NOT 組在一起。因此其結果就是或閘被套了反相,只要所有條件都不成立時,事件才會成立。簡單易點的記法,我會先做 OR 再對 OR 結果做 NOT,這樣你只要熟悉前面兩個邏輯閘

舉個例子,如果你未成年、或是喝了酒,只要符合其中一項,按規定不能開車上路;如果你不是未成年、也沒有喝酒,那麼你就可以安心上路啦(嗯…安心上路…好像哪裡怪怪 XDDD

未成年 喝了酒 開車上路
X X O
O X X
X O X
O O X

真值表長這樣:

NOR Gate 真值表 NOR Gate 真值表(圖片來源: 課程

單元測驗

  1. 如果我輸入 1 與 1 ,那麼反或閘會輸出什麼呢?
    • 0,因為反或閘「當所有輸入端都是 0,輸出才是 1」
    • 1,因為反或閘「當所有輸入端皆為 0,則輸出方為 0」

4-4|及閘(AND Gate)、反及閘(NAND Gate)

及閘(AND Gate)

如果說 OR Gate 是只有所有條件都不成立時事件才不成立,哪麼 AND Gate 則是相反,只有當所有條件都成立時事件才會成立

例如,只有當你成年且在該地住滿六個月才有投票權,如果你未成年或是住不滿六個月,那麼你就沒有這次的投票權。

成年 住滿六個月 投票權
X X X
O X X
X O X
O O O

換回符號長這樣:

AND Gate 真值表 AND Gate 真值表(圖片來源: 課程

反及閘(NAND Gate)

一樣 NAND Gate 就是 AND Gate 的相反。

舉例,在跟騷法規定中,只有當存在騷擾行為且是持續進行的情況下,行為人不符合無罪認定;若僅符合其中一項條件時,會被認定是無罪的。

通訊騷擾 針對特定人反覆或持續 無罪
X X O
O X O
X O O
O O X

真值表:

NAND Gate 真值表 NAND Gate 真值表(圖片來源: 課程

單元測驗

  1. 如果我輸入 1 與 1 ,那麼及閘會輸出什麼呢?
    • 1,因為及閘「遇 0 則 0」,而當所有輸入端皆為 1,輸出才會是 1
    • 0,因為及閘「遇 1 則 1」,只要輸入端有 1,輸出就會是 1

4-5|互斥或閘(XOR Gate)、反互斥或閘(XNOR Gate)

互斥或閘(XOR Gate)

兩個輸入值相同,則輸出 0;若相異則輸出 1。

舉個真實例子,某次紅燈右轉被員警逮個正著時,這時員警問我想要未依交通號誌行駛的罰單、還是紅燈右轉的罰單,很明顯我只能選擇其一,即便我都不想要,而他也不能都開 XDDD

未依交通號誌行駛 紅燈右轉 取締成功
X X X
O X O
X O O
O O X

我記得那次好像要了未依交通號誌行駛的罰單。因為兩張罰單的罰緩一樣,但號誌那張記一點,而紅燈右轉記三點,一次就用掉了一半的扣打,笨蛋才選這個。

XOR Gate 真值表 XOR Gate 真值表(圖片來源: 課程

反互斥或閘(XNOR Gate)

XOR Gate 的相反,當兩個輸入值相同,則輸出 1;若相異則輸出 0。

糟糕,這我真的想不到可以用的例子,有沒有誰要提供一個跟日常法律相關的例子 XDDD

XNOR Gate 真值表 XNOR Gate 真值表(圖片來源: 課程

奇怪,現在看來很簡單阿!我當初真值表怎麼背得半死的?

感到疑惑的女性 感到疑惑的女性(圖片來源: Andrea Piacquadio|Pexels

單元測驗

  1. 如果我輸入 1 與 1 ,那麼互斥或閘會輸出什麼呢?
    • 0,因為互斥或閘「當輸入端有奇數個 1 時,輸出為 1,否則輸出 0」
    • 1,因為互斥或閘「當輸入端有偶數個 1 時,輸出為 1,否則輸出為 0」

CH 5|電腦如何與人類溝通?

5-1|字元如何被呈現?

前面的章節提過,電腦中是以 0 和 1 兩個數字來儲存及表示訊息。而這個章節則介紹了編碼的概念,如何將文字與符號對應到 0 和 1 的組合上

使用位元樣式表示符號 使用位元樣式表示符號(圖片來源: 《計算機概論 2/e》

ASCII

ASCII code 跟 Unicode 大概是世界上最廣為人知的編碼之二。

它的全名是 American Standard Code for Information Interchange,中文翻譯為美國資訊交換標準程式碼。這套編碼用了 7 個位元來表示每一個字元,共可以表示出 $2^7 = 128$ 個字元,數量雖不多但足以滿足英語系國家。在如今 ASCII 已被納入 Unicode 中

ASCII 雖可滿足英語系國家的需求,但對於其他西歐語系,他們並非使用純英文表示的字元。因此後期發展出的 EASCII(Extended ASCII),就將 ASCII 閒置的首碼拿來使用,將其由 7 位元擴充為 8 位元,共計 256 個字元,擴充了許多符號、希臘或拉丁符號使用。

但這也導致新的問題,因為不同的國家有不同的字母,即便同樣採用 8 位元的編碼方式,但在 128-255 這段所代表的字母卻不盡相同,這也就形成了我們打開文件時所看的亂碼

當然,對於我們亞洲語系而言,看到亂碼成因會更加的複雜。因為 EASCII 雖解決了部分西歐語言的顯示問題,但對其他使用符號更多的語言仍無能為力。因此他們被迫採用了更多的位元組(byte)來表示一個字元,比如說繁體中文常用的 Big52 個位元組表示一個字元,所以理論上最多可以表示 $256\times256 = 65536$ 個符號。

題外話,當你在 Windows 當中使用記事本存檔時,看一下它所支援的編碼。那些 UT 開頭的跟等等的 Unicode 有關,課程還沒提到先略過不提,有趣的是第一個 ANSI 編碼。

它其實並不是某一種特定的編碼格式,在不同語系的系統中,ANSI 表示不同的編碼。在我的系統中 ANSI 其實是 Big5、在簡中系統裡則是 GB2312、韓文是 EUC-KR、日文是 JIS,而英文中的才是 ASCII。因為早期的預設編碼都是 ANSI,所以當你打開從不同的系統中取得的文檔時,才會出現亂碼的情況。

記事本存檔時所支援的編碼 記事本存檔時所支援的編碼

Unicode

Unicode,稱為萬國碼或是國際碼,它使用了 32 位元,因此可表達 $2^{32}=4264967296$ 種符號,編碼中不同的區段分配給不同語系符號來使用,最終為全世界所有的文字與符號都提供了一個唯一的數字代碼

但嚴格說來,Unicode 是一個字元集,它將所有的文字與符號使用一個二進制數字進行編號,卻沒有規定這個二進制數字應該如何儲存。如果使用時,不進行任何轉換直接儲存勢必照成空間上極大的浪費。

舉例來說,在前文我們已得知,英文字母只需使用一個位元組表示即可,但若 Unicode 與 Big5 一樣統一規定,每個字元必須統一使用 2 個位元組來表示,這將導致每個英文字母的第首前位元組皆為 0,這些無意義的資料會造成儲存空間的浪費。更別說 Unicode 是有 32 位元、8 個位元組的,這會導致儲存多少無效資料?就算儲存空間按摩爾定律指數增長也不夠這麼花吧!

因此後來衍生出了多種 Unicode 轉換儲存方式,其中最廣為人知的是 Unicode Transformation Format (UTF)!

UTF-8

UTF-8 是目前使用最廣的一種 Unicode 的轉換儲存方式。其他實現方式還包括 UTF-16 LE、 UTF-16 BE 和 UTF-32…等。

UTF-8 最著名的特點就是可變長度的編碼,它採用 1 到 4 個不等的位元組來表達一個字元,這個變化與 Unicode 編號的有關,編號小的使用的位元組就少,編號大的使用的位元組就多。其中英文字母使用 1 個位元組表示,中文則用 3 個位元組來表示,因此與 ASCII 相容,但與 Big5 不相容。

下面是 UTF-8 編碼的範圍和對應的格式:

編碼範圍 編碼格式
0x00-0x7F(0-127) 0XXXXXXX
0x80-0x7FF(128-2047) 110XXXXX 10XXXXXX
0x800-0xFFFF(2048-65535) 1110XXXX 10XXXXXX 10XXXXXX
0x10000-0x10FFFF(65536以上) 1 1110XXX 10XXXXXX 10XXXXXX 10XXXXXX

單元測驗

  1. 學完那麼多種編碼,你還記得他們的特性嗎?關於各種編碼,下列敘述何者錯誤呢?
    • ASCII 後期的發展由 7 位元擴充為 8 位元,稱作 EASCII,共以 256 個字元所組成,擴充了許多符號、更提供希臘或拉丁符號使用。
    • ASCII 在中文裡稱為萬國碼或是國際碼,顧名思義它正是一套業界標準,將全世界所有的文字與符號都收錄進去。
    • 電腦只看得懂 0 和 1,所以我們需要將 Unicode 轉換為 0 和 1 才能在電腦上運行 Unicode。

5-2|位元是什麼:電腦的儲存單位

我發現我剛剛在做前面章節筆記的時候,其實就用到這邊的內容了。這邊應該有都不太陌生,日常生活還滿常用到的,檔案大小幾 M 之類的。

  1. bit(位元)
    電腦中最小的儲存單位,以 0、1 來表示。同時它也是傳輸資料的基本單位,同一時間能傳達的位元數越多,代表資料傳輸的速度越快。

  2. byte(位元組)
    8bits = 1byte,也就是有 256 種狀態。電腦中通常以一個位元組來表示一個英文字母及數字,也就是剛剛提到 ASCII,至於中文字則看是走什麼編碼方式了,可能會用 2~3 個位元組來表示。

  3. word(字組)
    這單位日常表示中常用,但可能沒有被注意。字組指的 CPU 一次所能處理的位元數,因此會隨著系統而有所差異,日常說的 64 位元的作業系統,指的就是 CPU 一次所能處理 64 位元數,也就是說這台電腦的 1 word = 64 bits。

    一般說來,字組長度較長的電腦,處理速度較快、主記憶體的容量較大、數值精度較高。

課程最後附了張電腦儲存單位表:

電腦儲存單位表 電腦儲存單位表(圖片來源: 課程

不過說實話,上面那張表只適用計算檔案儲存單位。你在買硬體時,其實走的是 SI 制或者說十進制(decimal)位元組,用的是 1000 下去換算,習慣上單位會標示成 KB、MB、GB、TB;而 Windows 系統在報告容量時,走個是二進制,顯示的數字單位實際上是 KiB、MiB、GiB、TiB。

電腦儲存單位表 1000 vs 1024 電腦儲存單位表 1000 vs 1024(圖片來源: 維基百科

所以你以為你買 1T 的硬碟是買 1024 GiB,但其實只有 1000 GB。這也是你在某些網誌或討論區會看到諸如下列討論的原因:

是說,我在看資料的時候發現 Mac OS X 的檔案管理器是走十進制,而 Windows 是走二進制。我跟 Mac 不熟,所以這件事我還是第一次知道欸!所以我拿顆相同的硬碟,在 Mac 跟 Windows 上看到的數字是不一樣的?🤔

還真的是哩,我看到賣硬碟的公司還在網誌提醒了這件事,還畫了對照表。難怪我會在 PTT(還是 Dcard?)看到有人驚恐的再問她在 Mac 的繪圖資料為什麼拿到影印店時檔案變小了 XDDD

硬碟大小在 Windows 與 Mac 的換算量 硬碟大小在 Windows 與 Mac 的換算量(圖片來源: Crucial Taiwan

至於 Linux 那邊我沒怎麼注意它檔案系統用的十進制還是二進制,不過看上表應該是十進制的。因為通常我比較介意的伺服器上的空間,但沒伺服器 UI 阿 XDDD 所以一般我會用 df 搭配 -h 顯示 KiB、MiB、GiB、TiB,如果要看十進制的話就用 -H

df 搭配 -h 與 -H 所顯示的容量差異 df 搭配 -h 與 -H 所顯示的容量差異

單元測驗

  1. 看完電腦的儲存單位表後,換你試著換算看看吧!請問 1 KB 等於多少 bits 呢?
    • 8192
    • 1048576

CH 6|現代電腦的擬人神經系統

6-1|電腦是怎麼動起來的?

Q:你曾在光華商場聽商人講得天花亂墜,卻因為不認識電腦而不知道如何抉擇嗎?
A:…我就算認識電腦,還能直接開規格,但我還是不知道如何抉擇阿…這其實跟認不認識電腦無關…應該只是選擇困難症吧。

這節是講解電腦構成。就外形而言,可以分為輸入(Input)主機運算(Process)輸出(Output) 3大部分。

電腦外形構成 電腦外形構成(圖片來源: 《計算機概論 2/e》

而就功能及理論上來說,電腦的硬體架構可分成五大單元輸入單元(Input Unit)輸出單元(Output Unit)算術邏輯單元(Arithmetic & Logic Unit)控制單元(Control Unit)記憶單元(Memory Unit);其中算數邏輯單元(Arithmetic & Logic Unit)及控制單元(Control Unit)可合併稱為中央處理單元(Central Processing Unit, CPU)

基本上這就是前面帶過的馮紐曼模型,這個 70 年前就提出的架構仍是現代通用電腦的模型。

馮紐曼模型 馮紐曼模型(圖片來源: 《計算機概論 2/e》

馮紐曼模型的偉大之處,就是他通過抽象化的方式抓住了電腦的本質,你再怎麼變,也跳不出我定義的模型,任何事物都是從理論到實踐,理論要做的事情就是抽象抽象再抽象,抓住事物的本質。

單元測驗

  1. 相信你看完流程圖後,對電腦的運作更加了解了!請選出下列錯誤的敘述。
    • 電腦得到訊號後的動作依序為輸入、處理、輸出
    • 電腦共有 4 大單元,分別是輸入單元、輸出單元、記憶單元、控制單元

6-2|輸入單元(IU)與輸出單元(OU)

輸入單元(IU)

負責將資料或程式讀入,並轉換為二進位傳送到記憶單元中。其作用相當於人的感官,負責接收訊息。常見的輸入單元有滑鼠、鍵盤、麥克風、光碟機、掃描器、繪圖板…等。

輸出單元(OU)

負責將處理過的結果,從記憶體取出,並轉換成可閱讀的文字、數字、圖形、音訊、影像…等。其作用相當於人的反應器官,將結果表現出來。常見的輸出單元有螢幕、印表機、喇叭…等。

單元測驗

  1. 學習完輸入單元與輸出單元後,試著判斷看看「智慧型設備上的螢幕」是屬於輸入單元還是輸出單元呢?
    • 輸入單元 (IU)
    • 輸出單元 (OU)
    • 是輸入也是輸出單元
    • 不是輸入也不是輸出單元

6-3|記憶單元(MU)與控制單元(CU)

記憶單元(MU)

負責儲存輸入單元送來的待處理程式或資料,等候處理或運算;同時處理完的的資料,也會放進記憶單元中,等待輸出或進一步的處理。

記憶單元又可分為兩類

  1. 主記憶體(main memory)
    又稱內部記憶體,用來儲存處理中的程式和資料。可以分成兩大類 RAM 與 ROM:

    RAM and ROM RAM and ROM(圖片來源: Open Naukri

    1. 隨機存取記憶體(Random Access Memory, RAM)
      是構成電腦中大部分的主記憶體,也是平時所輸入的程式和資料所儲存的位置具有揮發性,一旦關閉電源關閉,則資訊就會被清除,因此只能充當暫時性的資料存放媒介。

      平常我們說得的加記憶體就是加這個,它的大小會直接影響系統的整體效能,至少會讓你能開更多的軟體或檔案 XDDD。

      如果再繼續向下細分,依 RAM 的技術可在分成 SRAMDRAM 兩大類。

      1. SRAM
        稱為靜態隨機存取記憶體(static RAM),只要電源是開啟狀態,不需要持續充電更新即可保存資料,也不需要更新記憶體位置。SRAM 速度快但價格昂貴。因製作成本較高、存取速度較快,常被用來做快取記憶體。
      2. DRAM
        稱為動態隨機存取記憶體(Dynamic RAM),使用電容來做資料儲存,但因電容會隨時間漏失電荷,所以必須週期性充電更新才能保存資料。DRAM 速度慢但價格便宜,因為有著成本優勢,是使用最多的記憶體,常見的 DDR4 就是 DRAM。

    2. 唯讀記憶體(Read Only Memory, ROM)
      看名字就知道,只能讀不能寫,一般出廠時就會將資料燒入。具備揮發性,資料不會隨電源關閉而消失,因此被用來存放永久性的程式或資料,如 BIOS。

      它跟 RAM 不同,與系統運行速度毫無瓜葛。它所直接影響的是能事先寫入更多的軟體或是更強大的系統,想像一下手機中的作業系統跟卸也卸不掉的隨機出廠的 App,就是寫在這裡。

      是說,雖然 ROM 是為唯讀的,但你應該聽過刷機吧?它就是藉由重燒 ROM 來修改 ROM 中的資料,不過這需要借助特定的方法。糟糕,好久沒重燒 ROM 了,有點忘了該怎麼做了…想當初開發時一天得刷個 4、5 次機…。

  2. 輔助記憶體(secondary memory)
    又稱外部記憶體,用來儲存暫時不用的大量程式和資料,以彌補主記憶體空間不足,當要使用才會從輔助記憶體讀入主記憶體中處理。如:硬碟、光碟等。

記憶體分類 記憶體分類(圖片來源: coggle

控制單元(CU)

負責控制、協調電腦各單元的運作。會從主記憶體中擷取並解碼指令,並傳送控制訊號到其他單元,藉以指揮及監督每一個單元,並進行資料的傳遞。就像人體中的大腦,負責發出指令。

單元測驗

  1. 請問硬碟屬於下列哪者呢?
    • 記憶單元中的主記憶體
    • 記憶單元中的輔助記憶體
    • 控制單元中的主記憶體
    • 控制單元中的輔助記憶體

6-4|算術邏輯單元(ALU)

總覺得,課程的分節有點奇怪,它竟然把控制單元跟記憶單元放一節,而不是跟算術邏輯單元歸在一起?會這麼說是因為,控制單元及算術邏輯單元兩者都是 中央處理單元(central processing unit;CPU) 組成的一部分。

CPU 的組成架構 CPU 的組成架構(圖片來源: 《計算機概論 2/e》

CPU 應該是還滿常聽到的一個詞?它是電腦的大腦,是個極為複雜的晶片電路,主要用來執行儲存在記憶體的程式指令控制著數位資料的處理及運算。前者很明顯是上一節所提過的控制單元的職責,而後者則是這節的算術邏輯單元的工作。

算術邏輯單元,顧名思義就是負責算術邏輯運算。控制單元會將程式或資料由記憶單元送來,它會負責執行四則運算、比較運算與邏輯運算,再將結果送回記憶單元儲存。

此外,在 CPU 內部還有一個極小的快速獨立儲存裝置,稱為暫存器(register),是用來暫時存放運算過程中的資料或程式,依照保存資料的不同可以再分成不同的暫存器,如保留算術邏輯單元中間計算結果的資料暫存器、存放從記憶體中所擷取的多個指令的指令暫存器、以及記載程式中變數的程式計數器…等。

CPU 的組成架構 CPU 的組成架構(圖片來源: NDHU_Course 試卷

單元測驗

  1. 學完這五個單元後,可別搞混他們的分工喔!請問下列關於算術邏輯單元的敘述,何者正確呢
    • 算術運算會進行四則運算
    • 邏輯運算會先進行邏輯運算(邏輯閘:AND、OR、NOT),再進行比較運算(大於 / 等於 / 小於)
    • 算術邏輯單元與記憶單元一同擔任「大腦的職位」

6-5|5 大單元的運作原理

整個系統會在控制單元的操作下進行分工合作,它會控制各單元執行各別不同的任務,但又協調它們進行交換。

運作概述如下,在控制單元的操控下輸入單元會將資料或程式載入到記憶單元,並將程式指令進行解碼,如果指令需要運算,就會送到算術邏輯單元計算,再將結果存回記憶單元;當要輸出結果時,控制單元會將結果由記憶單元,傳送到輸出單元輸出。

硬體架構與資料流 硬體架構與資料流(圖片來源: 趙文聖 計算機概論

單元測驗

  1. 學完電腦的 5 大單元後,你熟悉他們的運作原理了嗎?請判斷下列哪一個是錯誤的運作方式吧!
    • 使用者透過「輸入單元」輸入資料或程式到「記憶單元」
    • 控制單元」從輸入單元中讀取資料或程式
    • 如果要進行運算,必須經過「算術邏輯單元」來進行算術或邏輯運算

6-6|GPU 是什麼?

這節在介紹跟 CPU 只有一個字母之差的 GPU。

圖形處理器(Graphic Process Unit,GPU)又稱為顯示晶片、視覺處理器,是常聽到的顯示卡中的核心零件。(顯示卡是 GPU + 記憶體 + 電路板 + 散熱器等的統稱)。

它是一種專門在電腦、遊戲機和一些行動裝置(如平板電腦、智慧型手機等)上執行繪圖運算工作的微處理器。除了單獨存在外,也可以內嵌嵌入主機板或 CPU 上,也就是我們所說的內顯。

除了遊戲影像和視覺效果的支援外,GPU 亦作用為平行處理器,加速資料的計算,這也是現今機器學習再次崛起的主因之一。

CPU 和 GPU 繪圖有什麼差異 CPU 和 GPU 繪圖有什麼差異(圖片來源: 課程

是說,有人沒看過這兩圖的故事嗎?忘記是哪一年的 NVIDIA 請流言終結者來做的實驗,速度差距果然顯著,有興趣的可以去看看 NVIDIA 的活動影片

CPU 與 GPU 的繪圖能力與速度上的差別: CPU CPU 與 GPU 的繪圖能力與速度上的差別: CPU(圖片來源: 奧森文創設計

CPU 與 GPU 的繪圖能力與速度上的差別: GPU CPU 與 GPU 的繪圖能力與速度上的差別: GPU(圖片來源: 奧森文創設計

單元測驗

  1. CPU 與 GPU 只差一個英文字母,但功能差很多,千萬別搞混了!請選出下列關於「GPU」正確的敘述。
    • 中文是圖形處理器,又稱為顯示晶片
    • 負責解釋電腦指令以及處理電腦軟體中的資料
    • 中文為中央處理器,是電腦的核心部位

CH 7|世界市值最大的五家公司,都是 IT 巨頭

這邊開始進入第二堂課,課程內容稍微雜了一點包含程式語言、作業系統、軟體工程跟人工智慧…等。我在上課的時候還稍微疑惑了下,當初上計概的時候有提到這些嗎?好像沒印象耶~!?結果翻開課本,我囧了還真有,而且還滿了筆記 XDDD

掃描目錄

7-1|什麼是作業系統?

電腦是由硬體軟體所構成的系統,而軟體又可分成作業系統應用程式兩大類。

作業系統(operating system,簡稱 OS)是介於電腦硬體與應用程式之間的程式,除提供了使用者存取硬體的介面外,也負責管理記憶體、系統資源供需的次序、輸入與輸出裝置、網路與檔案系統,簡而言之就是套管理硬軟體資源的系統軟體。

電腦系統 電腦系統(圖片來源: 《計算機概論 2/e》

作業系統與硬體的關係緊密結合,針對不同機器會有不同的作業系統,比如行動裝置、嵌入式(如微波爐、GPS 等處理單一功能為主的裝置)與伺服器…等。他們會針對不同的應用需求與硬體管理,而衍生出不同的作業系統,如:Android 與 IOS、Windows CE 與 Palm OS、Linux 和 Windows 與 Mac…等。

單元測驗

  1. 針對作業系統的描述,哪一項是錯誤的呢?
    • 它是介於電腦硬體與應用軟體之間的程式
    • 為了保持使用與設計上的一致性,不同的硬體其作業系統皆相同
    • 作業系統其實也是一種軟體服務

7-2|知名的作業系統-個人電腦

個人電腦中的三大作業系統:

  1. Microsoft Windows
    微軟公司開發的個人電腦作業系統,前身就是 MS-DOS,整體市佔率高達九成

  2. macOS
    以精簡的設計美學著稱,蘋果公司旗下的作業系統都以產品本身的名稱加上 OS 為命名風格。

  3. Linux
    三套中唯一一套開放原始碼系統,也是開源專案的最佳典範。目前多數廣泛使用的自由軟體都有與 Windows 平台版本和相應的 Linux 版本,例如:LibreOffice;部分流行的專有軟體也有相應的 Linux 版本,如:Google Chrome;也有些應用程式沒有 Linux 的版本,但通常可以找到類似功能的應用軟體。….對我來說唯一不能取代的大概就是遊戲了吧?

有人戲稱 Windows 是一般人使用;macOS 是有錢人(蘋果系列的產品都是高單價),或設計人使用;Linux 則是工程師專用。

單元測驗

  1. 了解完這些知名的個人電腦作業系統之後,你有記起來它們的特性嗎?請選出下列錯誤的敘述。
    • Linux 它可以讓開發者從開放原始碼上快速、低價(幾乎免費)的建立專業能力
    • Linux 的相關應用軟體主要是由駭客,或其它 Linux 愛好者合作開發出來的,其軟體操作方式一致性高
    • Linux 目前能在 Windows 或 macOS 上使用的應用軟體大部分沒有 Linux 版本,因此較不如 Windows 或 macOS 通行(尤其亞洲地區)

7-3|知名的作業系統-手機

是說,手機上的作業系統還有人不知道?

  1. Android
    非正式中文名稱為安卓,但我其實不太喜歡這個名字 XDDD。它是由 Google 公司收購同名公司後開發而成,被視為是 Google 跨足行動領域並邁向成功的一步。

    作業系統本身是以 Linux 為核心的開放原始碼系統,因此任何人都可以使用或者開發其相關的應用程式,市佔率高達八成。是說,雖然 Android 是開源的,但它其實不是免費的 XDDD。有興趣的可以去找找他們的授權費的相關資料,前幾年因為歐盟的反托拉斯法鬧得沸沸揚揚的。

  2. iOS
    蘋果手機 iPhone 專屬的作業系統,承襲蘋果電腦的設計風格,與 Android 系統為手機市場兩大巨頭。

Android vs Mac Android vs Mac(圖片來源: XFastest News

除了兩大龍頭外,也還有些小的作業系統,不過似乎都 GG 了,這邊就課程照貼囉~!

  1. Windows Mobile / Windows Phone
    微軟針對行動通訊產品開發的作業系統,市佔率低。後者為前者的繼承者,曾與 Nokia 戰略結盟,合作推出 Lumia 系列手機想抵抗安卓與 iOS,但依舊以失敗告終。

  2. BlackBerry OS / BlackBerry 10
    黑莓公司開發的封閉原始碼系統,專屬自家品牌黑莓手機,以高安全性著稱而一度吸引許多商務人士使用,但最終仍然不敵慘淡的市佔率與銷售成績,黑莓作業系統也將 2019 年底結束服務,轉向 Android。

  3. Symbian / Meego
    Nokia 公司旗下的作業系統,由於改革緩慢,在智慧型手機市場始終無法有所突破,最終放棄了這兩個作業系統,轉向 Windows Phone。

在找資料的時候看到幾張有趣演進。從圖中可以看到 2009 時,手機作業系統市場相當分散,黑莓機跟 Nokia 依舊是主流,Android 還被壓得出不了頭;但大約到 2013 之後,這些作業系統就幾乎被雙頭壟斷,兩者佔了快 80%。

手機作業系統市場份額變化 手機作業系統市場份額變化(圖片來源: Business Insider/Statista

從 2017 年至今,市場的變化不大,仍舊是被 Android 跟 iOS 幾乎吃掉 99.8% 的份額,可以說市面上只剩兩種作業系統。是說…Android 原來贏這麼多?我還以為只有小贏而已。

手機作業系統市場份額變化 手機作業系統市場份額變化(圖片來源: Statista

單元測驗

  1. 除了個人電腦的作業系統,你也清楚手機作業系統的特性了嗎?請選出下列錯誤的敘述喔!
    • 黑莓公司所開發的作業系統 BlackBerry OS / BlackBerry 10,其原始碼為開放原始碼。因其安全性較低,所以市佔率與銷售成績皆不理想
    • Symbian / Meego 為 Nokia 公司旗下的作業系統,由於改革緩慢,在智慧型手機市場始終無法有所突破

7-4|什麼是軟體服務?

軟體即服務(SaaS,Software as a Service),廣義上來說,軟體服務是提供商會給一套軟體,讓你直接應用不需要再自己開發。課程這邊給的例子是作業系統的交付,個人覺得覺得這比較難以理解,主要是涉及作業系統本身的角色與特性,所以這邊就不用它當例子了。

因隨著網路的發展,現今最常見的交付方式是讓使用者透過網際網路和瀏覽器等媒介,以隨用隨付或訂閱制為基礎的方式取得所需軟體服務,最常見的如:電子郵件、日曆、Adobe 系列…等。

透過此方式,使用者無須購買、安裝、更新或維護任何硬體、中介軟體,即可以使用該軟體,且資料放在雲端,基本上只要裝置可以連網,幾乎可以從世界各地存取應用程式,是目前日常生活中最常接觸到的服務。

之前寫過一篇 〈雲端計算 IaaS、PaaS、SaaS 與 FaaS〉,有興趣的可以點擊過去看看。

傳統軟體服務與現代軟體服務比較 傳統軟體服務與現代軟體服務比較(圖片來源: 課程

單元測驗

  1. 在資訊領域,你是不是也常常聽到「軟體服務」這個名詞呢?經過我們的講解,相信你更了解它了!請你選出正確的敘述吧
    • 軟體服務的英文縮寫為 SaaS
    • 現代的軟體服務需要透過載體安裝,無法透過網路直接下載
    • 廣義來說,軟體服務是提供商會給一套軟體給你自行開發
    • Android 是以 Linux 為核心的開放原始碼系統,因此任何人都可以使用或者開發其相關的應用程式,市佔率高

7-5|軟體服務好處多,近年來的產業龍頭都是軟體服務商

這章節其實就是在說 SaaS 的好處:

  1. 技術
    無須配置軟體專業技術人員去維護,又能得到最新的技術。

  2. 資金
    除了節省人力成本外,也無須再購買與維護機器。但會以改付「月費」來購買使用使用權,好處大概就是不用一次拿出大筆金額購買,緩解資金壓力。

  3. 儲存
    資料儲存在雲端上,資料也不會遺失。因為這是把資料放到別人那裡去,所以這算好處還壞處就看資料敏感性?

  4. 降低風險
    SaaS 通常會提供試用服務,可以降低不適用的風險。

簡單來說,就是不用更新或維護任何軟硬體、可隨時存取且有備援。

另外,全球近幾年來最有價值五間的公司,分別是:Apple、Amazon、Alphabet(Google)、Microsoft 及 Facebook,五間公司。

傳統軟體服務與現代軟體服務比較 傳統軟體服務與現代軟體服務比較(圖片來源: 課程

單元測驗

  1. 軟體服務好處多,近年來的產業龍頭都是軟體服務商。請問下列哪一個不是軟體服務的好處呢?
    • SaaS 通常會提供試用服務,可以降低不適用的風險
    • 資料儲存在雲端上,即便使用者裝置失敗,資料也不會遺失
    • 資料儲存雖然不會存在雲端,但會存在電腦本機,即便使用者裝置失敗,資料也不會遺失

CH 8|硬體?韌體?軟體?你分得清楚嗎?

8-1|電腦世界中的三位一體

電子設備可以分成硬體軟體韌體三個部分:

電腦架構 電腦架構(圖片來源: Roger的工程師研究日誌

  1. 硬體 Hardware
    簡單來說,你看得見摸得著的電子產品與零組件就叫硬體,例如電主機板、晶片…等。

  2. 軟體 Software
    與硬體不同,軟體是用程式語言撰寫執行在硬體上的應用,看不見摸不著,例如:APP、網頁、Office、作業系統…等。

  3. 韌體 Firmware
    介於軟體與硬體之間,特別指用來驅動硬體進行作業的軟體,主要是透過程式語言來操控硬體,像是控制主機板、晶片的驅動程式,或是電腦的BIOS。

那麼,這「三體」工程師有什麼差別呢?

三體工程師差別 三體工程師差別(圖片來源: 課程

  1. 硬體工程師
    「懂電路!」相關科系以電子工程與電機工程為主,三者之中與「程式設計」的相關性最小,主要負責「開發硬體設備」,因此有人戲稱是「製造業」。

  2. 軟體工程師
    「會寫程式!」目前需求最多最廣的職位,入行門檻相對低,也是非本科轉職的主要選擇,主要負責「寫程式讓硬體執行各種工作」,工作範圍在三者之中與提供消費者服務的關係最直接,因此有人戲稱算是「服務業」。

  3. 韌體工程師
    「懂電路又會寫程式!」主要的工作就是「寫程式讓硬體『可以』執行各種工作」。由於韌體介於硬體與軟體之間,因此要成為一位韌體工程師需要兼具兩者的特質,除了熟悉硬體元件,也要熟練高、低階程式語言。

單元測驗

  1. 你分得清楚電子設備的「三體」嗎?針對「三體」的敘述,下列何者正確?
    • 通常大家說的改機,就是指更改「軟體」
    • 韌體工程師雖然不用會寫程式,但一定要懂電路,而其估作內容與程式設計相關性極小,主要負責開發設備
    • 三體等於硬體 + 軟體 + 韌體

其他連結

  1. 課程內容:
    1. Codefree - 電腦科學(上)
    2. Codefree - 電腦科學(中)
    3. Codefree - 電腦科學(下)
  2. 課程筆記:
    1. CodeFree|喝一杯咖啡,輕鬆學電腦科學 - 上
    2. CodeFree|喝一杯咖啡,輕鬆學電腦科學 - 下

參考資料

  1. mohjj mo (2019)。計算機結構 & 計算機概論。檢自 HackMD (2022-07-11)。
  2. hank.lon (2005-05-06)。計算機概論講義。檢自 就只是學習用的嘛|隨意窩 (2022-07-11)。
  3. 張瑞棋 (2020-08-24)。人口普查、打孔卡片、IBM——第一台插電的計算機│《電腦簡史》數位時代(一)。檢自 PanSci 泛科學 (2022-07-12)。
  4. 卞哲琛, Et al.。煞氣a精靈部隊之期末 ALL PASS 版本計算機概論重點整理。檢自 nutncsie11037 (2022-07-12)。
  5. 曾學文。Introduction to Computer_Science ch 01。檢自 國立中興大學 (2022-07-14)。
  6. 杨陈菊 (2018-11-18)。我所了解的GB2312、Unicode、GBK、UTF-8、BIG5等编码。檢自 杨陈菊的博客|CSDN博客 (2022-07-14)。
  7. 協同撰寫。ANSI(一种字符代码)。檢自 百度百科 (2022-07-14)。
  8. 阮一峰 (2007-10-28)。字符编码笔记:ASCII,Unicode 和 UTF-8。檢自 阮一峰的网络日志 (2022-07-14)。
  9. Roy Kwok (2019-06-16)。Unicode 與 UTF-8 的關係?。檢自 Roy Kwok|Medium (2022-07-14)。
  10. 小智IT课堂 (2019-12-14)。你知道吗,他应该才是计算机科学之父(六)。檢自 知乎 (2022-07-15)。
  11. (2012)。電腦的硬體(主機)。檢自 桃園國中 (2022-07-15)。
  12. 電腦基本架構。檢自 全華圖書全球資訊網 (2022-07-15)。
  13. 4-2 記憶單元。檢自 資訊科技概論 (2022-07-15)。
  14. 駭客人 (2017-11-26)。誰才是真正的計算機之父。檢自 每日頭條 (2022-09-30)。
  15. 協同撰寫。阿塔那索夫貝理電腦。檢自 維基百科 (2022-09-30)。

更新紀錄

最後更新日期:2022-10-04
  • 2022-10-04 發布
  • 2022-07-26 完稿
  • 2022-06-20 起稿