今天又是喝咖啡學習系列,不過不是學程式,而是學電腦科學。筆記內容包括上、中、下三門課。
這門課看了下內文其實就是計算機概論,有點令人懷念的一門課…想當初算二進制算到超挫折的 XDDD 不過怎感覺這篇不是在寫讀書筆記,而是重寫了一次課程?很多東西它沒提到,是我自己忽然想到其他關鍵字就一併寫進去了 XDDD
codefree time(圖片來源: hiskio codefree)
CH 1|電腦的先驅:早期的機械式計算工具
這段歷史算是電腦史中的遠古史吧,想當初我好像是從馬克一號學起的?不是鋼鐵人那個馬克一號,是哈佛大學的 ASCC MARK I,等等看課程有沒有提到吧。
鋼鐵人 Mark I(圖片來源: marvelousRoland|Flickr)
1-1|電腦之父 Charles Babbage 就是發明電腦的人?
電腦史大致可以劃分成真空管、電晶體、積體電路、超大型積體電路四個時期。但查理.巴貝奇(Charles Babbage) 所設計的分析機並不屬於這幾個時期,硬要歸類的話它是第零代的機械時期吧?所以我才會戲稱它是遠古史 🤭
嚴格說來,巴貝奇並不是發明第一台電腦的人;但他所設計的分析機,卻是後世電子通用電腦的先驅,也因此他才會被尊稱為電腦之父。但與其說是電腦之父,倒不如說是通用電腦之父可能會比較精準,畢竟歷史上可以當電腦它爹有好幾位呢,再不然電腦之祖父(?)可能也會更貼切 XDDD
「電腦之父」巴貝奇(圖片來源: The News Lens 關鍵評論網)
既然提到電腦它有好幾個爹了,我就整理一下它的親爹名單:
-
查理.巴貝奇(Charles Babbage):通用電腦之父
就是前面提到的那位,這邊不提了。 - 艾倫.圖靈(Alan Mathison Turing):電腦科學之父
這位大家應該也很熟,尤其是資工系的同學應該都對他又愛又恨?像是圖靈機、圖靈測試,還有圖靈獎都跟他頗有淵源。艾倫.圖靈本人與劇照(圖片來源: 卡卡的異想世界|痞客邦)
-
約翰·阿坦那索夫(John Vincent Atanasoff):電子電腦之父
這位大神是第一位用真空管做出電子電腦,也第一台電子電腦的發明者,這部電腦在日後被稱為阿塔納索夫-貝瑞電腦(Atanasoff–Berry Computer,ABC 電腦)。其它特點還有只能解線性方程式、使用二進制…等。 - 約翰·馮紐曼(John von Neumann):現代電腦之父
這位大家有很不陌生吧?傳說中的馮紐曼模型,這是現代所使用的電腦的基礎!理論上等等課程中應該會出現…如果沒出現…那就…沒出現吧 XDDD 不過應該很難跳過才對。
單元測驗
- 請問電腦之父巴貝奇是發明第一台電腦的人嗎?
- 是,他發明的分析機就是第一台電腦
- 否,雖然他被稱為電腦之父,但他發明的分析機僅是電腦的先驅,並不算是第一台電腦
1-2|「加法計算器」、「步進計算器」與「自動化織布機」的誕生
它這邊真的打算從機械時期說起…而且還是由齒輪帶動的機械開說起…剛好補一下我的遠古史 XDDD
加法計算器
滾輪式加法器,又稱帕斯卡計算器。由法國數學家布萊茲·帕斯卡(Blaise Pascal) 於 1642 年發明,用於協助父親算帳,但我看過另一個版本是為方便自己算帳而發明的。果然懶,才是推動世界發展的真正動力 XDDD
帕斯卡計算器的設計利用齒輪及槓桿原理,在其包含了一組相連的齒輪,只要在上面撥動數字,齒輪之間互相轉動後便會算出累加後的值,再顯示於小窗口上。
帕斯卡計算器(圖片來源: 課程)
是說,數學家跟帕斯卡這個組合讓我感覺很熟悉,查了下著名的帕斯卡三角形果然跟他有關。另一個跟他有關的則是壓力單位帕斯卡 (Pascal, Pa) ,這個單位也是為了紀念他所命名的。
步進計算器
在 1673 年時,德國人萊布尼茲(Gottfried van Leibniz)在研讀了帕斯卡的論文後,決心將加法器升級成有乘除的功能步進計算器。
步進計算器中有一連串的齒輪,每個齒輪有十個齒,表 0 到 9,每當一個齒輪轉過 9,它會轉回零,並同時讓旁邊的齒輪前進 1 個齒;做減法時,則是反向運轉;至於乘除,則是運用了累進的加減的概念!
不過這兩個版本的計算器都有相同的問題:造價太高、需求太少。
步進計算器(圖片來源: 課程)
是說這位萊布尼茲也是個狠人,除了有句:「讓優秀的人浪費時間算數簡直侮辱尊嚴」名言外。他最廣為人所知並讓莘莘學子都對他咬牙切齒的功績就是—微積分!他是微積分的創始人之一,現今所使用的微積分符號也都是他的版本。
自動化織布機
前面兩項發明嚴格說來是方便的計算工具,但仍不算電腦/計算機(computer)。由電腦構成的三要素(硬體、資料與軟體)來看,它既不能儲存資訊,也無法儲存指令並重複執行。
第一台引入這兩個要素的機器,是在 1801 年由法國人約瑟夫.傑夸德(Joseph Jacquard)為了織布而製造的自動織布機。它可用打孔卡片來記錄織布的圖樣,讓機器根據打孔卡孔的有無來控制經線與緯線的。
自動化織布機(圖片來源: 課程)
這台自動織布機為電腦的發展引進兩個重要的觀念:
- 編碼:資訊可以在打孔卡片上編碼(Coded)
- 程式:資訊可以儲存在卡片上,當卡片組合在一起就可做為一連串的指令。
所以嚴格說來,約瑟夫不僅是自動織布機的發明者,也是程式設計的發明者。
單元測驗
- 「加法計算器」、「步進計算器」與「自動化織布機」有著不同的貢獻,你可別搞混囉!請你判斷下列敘述何者正確呢?
- 加法計算器引進了「編碼」、「程式」兩種重要的觀念
- 步進計算器是第一部能加減乘除的計算器
- 自動化織布機內部包含了一組相連的齒輪,只要在上面撥出數字,齒輪之間互相轉動後便會算出累加後的值,再顯示於小窗口上
1-3|「差分機、分析機」與電器化時代的「打孔卡片處理器」
看到這標題,我第一個反應是…電腦終於要有電了嗎 XDDD
差分機、分析機
而巴貝奇的設計要來到 1823 年,他首先設計了用來解多項式差分機,由英國政府補助出資研發。雖然差分機被證實理論上可行,但最終因財政、製作延宕、故障頻率與私人因素…等,導致巴貝奇失去了政府的金援。
說到製作延宕,就必須提到巴貝奇的三心二意,不僅經常朝令夕改,還常常開新的支線任務,才會導致差分機的製作一延再延。而在他的支線任務中,最有名的就是分析機。在這部機器包括輸入裝置、處理機和計算器、指揮工作和計算順序的控制單元、儲存裝置、輸出裝置等五大部門,這正是後來設計電腦的構想。
差分機與分析機(圖片來源: 課程)
說到分析機,就必須提提愛達·奧古斯塔(Ada Augusta),她為分析機寫了假想的程式(虛擬碼?),因此被認為是世界第一位程式設計師。挖屋~祖師爺欸!
愛達勒芙蕾絲 197 週年誕辰(圖片來源: Doodle 作品資料庫)
打孔卡片處理器
真正進入商用的時期,則是赫勒里斯(Herman Hollerith)的打孔卡片處理器,他採用 Jacquard 的打孔卡片原理,使穿過孔的細棒構成一個電路來計算,這項發明也使得計算器的機械時代移轉到電器化時代。
早期的打孔卡片處理器是為人口普查而設計,因此僅具備加法器的功能;後來經過改良整合萊布尼茲的步進滾筒,使知能完成四則運算。
打孔卡片處理器(圖片來源: 課程)
他有成立成立一家名為「製表機器公司」(Tabulating Machine Company)的公司,並於 1911 年與另外三家合併為「計算—製表—記錄公司」(Computing-Tabulating-Recording Company,C-T-R)。這家公司也是大有來頭,它在 1924 年更名為國際商業機器公司,英文名稱 International Business Machines Corporation,也就是我們現在熟知的 IBM。
單元測驗
- 你還記得差分機、分析機~打孔卡片處理器的演進嗎?現在就來考考你,下列敘述何者錯誤?
- 巴貝奇被尊稱為「電腦之父」,他發明了「分析機」,其包含輸入裝置、處理機和計算器等五大部門,這正是後來設計電腦的構想
- 赫勒里斯發明的「分析機」使計算器的機械時代移轉到電器化時代,電腦技術也從此開始發展
- 愛達.奧古斯塔為「分析機」寫了假想的程式,是一種用來送入分析機,並能使這部機器執行工作的指令,類似於現在的程式碼,因此她被喻為「第一位程式員」
CH 2|一覽電腦的發展史
電腦的發展始於 1944 年,從繼電器做簡單四則運算,一路演進至今。依其組成的元件可以將電腦的演進過程分成:真空管、電晶體、積體電路、超大型積體電路四個時期。
喔,1944 年就是哈佛大學的 ASCC MARK-I 被製作出來的時間點,它是台電氣機械式的電腦,使用了 3,000 個以上的繼電器(Relay)和多量的齒輪,被認為是第一部通用型電腦,也是第一部被實作出來的全自動電腦,無須人為介入。相比同時期的電腦可靠不少,因此被認為是現代電腦時代的開端。
真實存在的馬克一號 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 是在 1946 年 2 月 14 日發表的耶!不虧是工程師,情人節還是跟電腦作伴,還顛覆世界了呢!是說,它是為二戰設計,但 1946 年二戰應該結束了吧?
在 1973 年以前,ENIAC 普遍被認為是第一台現代意義上的電子電腦。但是在 1973 年時,美國聯邦地方法院註銷了 ENIAC 的專利,認定 ENIAC 發明是從 ABC 電腦那裡繼承了電子電腦的主要構件思想。因此,ABC 電腦被認定為世界上第一台電子電腦,而這台 ABC 電腦,就是我們之前提過阿坦那索夫在 1937 年所發明的。
- 〈第一台通用型電子計算機——專利糾葛、優劣並存的 ENIAC │《電腦簡史》數位時代(十)〉
不過嚴格說來,ABC 並不是台圖靈完備的電腦,也沒能實現儲存程式結構,更不具備通用性,就這幾點看來 ENIAC 完勝只能解線性方程式的 ABC。
然而,這 ABC 電腦中的 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》)
單元測驗
- 真空管時期的電腦是屬於第一代電腦,可別忘記囉!關於真空管電腦,下列敘述何者正確呢?
- 第一部真正的電腦是機械式的計算器
- 以真空管取代繼電器為電子元件的自動電腦名為「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 年首次訪臺時獲得交大的榮譽博士學位;另一位羅伯特.諾伊斯則是英特爾的共同創始人之一。
單元測驗
- 可別忘了,第二~三代的電腦有著巨大的發展!下列敘述何者正確呢?
- 電晶體時期的電腦大小比真空管電腦小,且更輕、更省電,且故障率更低,計算能力更快
- 電晶體時期的電腦耗用能源較積體電路時期的電腦少,成本也更為低廉
- 第一代至第三代電腦發展的順序依據為真空管、積體電路、電晶體
2-3|1971年~至今 第四代電腦 超大型積體電路時期
1971年~至今 第四代電腦 超大型積體電路時期
1975 年,超大型積體電路(VLSI,Very Large Scale Integrated Circuit) 被完成,這是以積體電路改良而成。密度更高的超大型積體電路,能在一片晶片中可以裝進數萬個電子元件,體積比第一代電腦小了百倍,計算速度卻快了千倍。
以超大型積體電路所製造的電腦,就是現在的個人電腦(PC,Personal Computer)。而延續超大型積體電路而發展的微處理機,更可實際應用於日常的每一種機器上,如:微波爐、冷氣機、音響、電視、洗衣機等等。
課程給了張演進史,方便一覽電腦的演化:
電腦的演進史(圖片來源: 課程)
第五代與第六代電腦
一般在找資料時前文所提到的四個時代是公認,之後的第五代與第六代電腦似乎就有些待定了。
第五代電腦被提到機率對半,我想這是因為它跟前面幾代的變革方向不太一樣,第五代電腦在 1982 年被日本科學家定義屬於人工智慧(AI,Artificial Intelligenec)的時代,感覺是偏向軟體上的突破,或是應用上的改變。當然硬體也是有所突破,但卻不像是之前的是全新的一種技術,而是偏向製程的革新,所以以這個的角度不將它歸入似乎也合理?
至於第六代電腦我在多數的電腦演進史都沒看到,但有在部分詞條是寫生物電腦(Biological Computer / Biocomputer),我還以為會是量子電腦(Quantum computer)哩。不過看了看資料,不管生物電腦還量子電腦都是發展中的的技術,究竟哪個會先進入商用成為一個新的時代,這還有待觀察。
單元測驗
- 關於第四代電腦,下列敘述何者正確?
- 第四代電腦使用的電子元件為超大型積體電路
- 人工智慧電腦的時代也被歸類為第四代電腦
- 第四代電腦的最終目的是開發一部擁有「超級電腦的運算效能」和「可用的人工智慧」的電腦
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。
所以下圖中 1001
與 1100100
的計算則是:
十進制與二進制(圖片來源: 課程)
八進位制
八進制和二進制雷同,數字符號為 0、1、2、3、4、5、6、7,是逢 8 進位的。
所以下圖中 144
的計算則是:
十進制與八進制(圖片來源: 課程)
單元測驗
- 可別搞混二進位制與八進位制的規則喔!請問用八進位制表示 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
,就是常見的十六進位應用!
進制對照表(圖片來源: 課程)
單元測驗
- 現在你學會更複雜的十六進位制了!請問用十六進位制表示 12 怎麼表示呢?
- C
- 2A
- 12
3-3|圖解進位制轉換規則
接下來介紹介紹一些常見的進位制轉換規則。
十進位制轉換為其他進位制
將一個數分成整數與小數兩部分來討論:
-
整數
在轉換整數的時候是用除法,將整數/欲轉換進位數,一直除到商數為 0 為止,最終再將餘數逆向取出。用短除法的話,就是由下往上。將十進位數字轉換為其他基底流程(圖片來源: 《計算機概論 2/e》)
計算示意如下:
轉換十進位整數計算示意(圖片來源: 《計算機概論 2/e》)
實際計算就是做短除法啦,不過計概課本這邊的把計算過程打橫了,所以可能看起來會有點不太習慣。一開始黑底的數字是十進制的 $35$,除以 $2$ 得到商 $17$ 和餘數 $1$,一路向左計算,最終得轉換結果 \(35_{10}=100011_{2}\)。
顯示如何把 35 轉成二進位(圖片來源: 《計算機概論 2/e》)
-
小數
至於小數部分是使用乘法,將小數*欲轉換進位數,乘積的整數位保留,小數位繼續運算直到為 0 或是位數足夠時候,最終再將整數依序取出。將十進位小數轉換為其他基底流程(圖片來源: 《計算機概論 2/e》)
計算示意如下:
轉換十進位小數計算示意(圖片來源: 《計算機概論 2/e》)
因為這例子沒有整數部分,所以不考慮它了,直接看小數部分。黑底的數字 $0.625$,乘以 $2$ 得乘積 $1.25$,故保留 $1$、$0.25$ 繼續向下計算,一路向右運算,直到為 0 或終止運算,最終得轉換結果 \(0.625_{10}=0.101_{2}\)。
顯示如何把 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_{16}$ 的轉換計算則是:
\[1144_{16} = 1\times16^3+1\times16^2+4\times16^1+4\times16^0 = 4420_{10}\]十六進制 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 轉十六進制(圖片來源: 課程)
至於十六轉二進制,核心概念也是 4 個位元為一組。當一個十六進制數轉成二進制表示,若不足 4 位數則要在該組前面補 0。舉例來說,$24C_{16}$ 要成二進制,\(2_{16}\) → \(0010_{2}\)、 \(4_{16}\) → \(0100_{2}\)、 \(C_{16}\) → \(1100_{2}\),最終結果為 \(001001001100_{2}\)。
單元測驗
- 學完這些進位制,該來點進階題了!請問將 62.25 (十進位制)轉換為二進位制 要怎麼表示呢?
- 100100.1
- 111110.01
CH 4|1 與 0 的邏輯運算
4-1|布林代數與邏輯閘
布林代數是處理數位邏輯的代數運算式,用來表示是或不是,在實際電腦中會以 1 和 0 來表示。
這邊舉個例子,網頁要檢查你現在是不是點擊叉叉關掉了頁面,此時會有兩種可能:
- 是,點擊了叉叉
布林代數會記錄此情況為 True 真,而電腦會以 1 記錄表示成立。 - 否,沒有點擊叉叉
反之,會記錄 False 假,並記錄 0 表示不成立。
不過實際運行時,整個系統是多工處理,可能會同時檢查好幾件事,並根據這些事件來做出反應,這時就會用到邏輯閘/邏輯運算了。
一樣是按叉叉的例子,網頁想要知道你是不是同時點擊了叉叉和重新整理這兩顆鍵,因為它想要崩潰給你看 XDDD。這時它需要做幾件事:
- 檢查是不是按了叉叉
- 檢查是不是按了重新整理
- 檢查兩個事件是不是都成立
用來釐清所有條件之間的關係,檢查兩個事件是不是都成立,就是邏輯閘的工作了。這些布林代數或者說是 0 和 1 ,在經過不同的閘時會產生出不同的結果。
最常用的邏輯閘可歸納為 8 項,最基本的 4 個分別為 NOT、 OR、 AND、 XOR,另外的 NOR、 NAND、 XNOR 則是前述的反向結果,最後 Buffer 緩衝器在這邊先別管它,因為它是起到緩衝或強波的作用,並不會對布林值的輸出有任何的變化。
8 個基本邏輯閘符號(圖片來源: 松山工農)
單元測驗
- 如果我要「電腦隨時檢查你是不是同時按了叉叉和 F5 這兩顆鍵」,需要使用到下列何者?
- 布林代數
- 邏輯閘
其實兩個應該都要用到才對,但它是單選題 =__=
4-2|NOT 閘(NOT Gate)
NOT Gate,中文叫做反相閘,又稱為反相器(Inverter)。不過在記邏輯閘名稱的時後,我沒用過中文啦,一來是當初考試都是英文、二來寫程式的時候也都是英文或符號居多,至於最後一個原因等等你們看到其他閘的中譯就知道了…那絕對會亂掉的!
NOT 是 7 個邏輯閘中,唯一一個一元運算子,它的工作就是負責唱反調,你說 True 它就回 False,反之你說 False 它就回 True。就好像你說你有妹妹的時候,內建 NOT Gate 的鄉民會回答:「其實你沒有妹妹!」就是這個意思。
最後附上一張精美的真值表(truth table)。喔,真值表就是定義了各種可能輸入與其輸出值的表格:
NOT Gate 真值表(圖片來源: 課程)
單元測驗
- 如果我輸入 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 真值表(圖片來源: 課程)
反或閘(NOR Gate)
NOR Gate,看文字就知道它是把 OR 跟 NOT 組在一起。因此其結果就是或閘被套了反相,只要所有條件都不成立時,事件才會成立。簡單易點的記法,我會先做 OR 再對 OR 結果做 NOT,這樣你只要熟悉前面兩個邏輯閘
舉個例子,如果你未成年、或是喝了酒,只要符合其中一項,按規定不能開車上路;如果你不是未成年、也沒有喝酒,那麼你就可以安心上路啦(嗯…安心上路…好像哪裡怪怪 XDDD
未成年 | 喝了酒 | 開車上路 |
---|---|---|
X | X | O |
O | X | X |
X | O | X |
O | O | X |
真值表長這樣:
NOR Gate 真值表(圖片來源: 課程)
單元測驗
- 如果我輸入 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 真值表(圖片來源: 課程)
反及閘(NAND Gate)
一樣 NAND Gate 就是 AND Gate 的相反。
舉例,在跟騷法規定中,只有當存在騷擾行為且是持續進行的情況下,行為人不符合無罪認定;若僅符合其中一項條件時,會被認定是無罪的。
通訊騷擾 | 針對特定人反覆或持續 | 無罪 |
---|---|---|
X | X | O |
O | X | O |
X | O | O |
O | O | X |
真值表:
NAND Gate 真值表(圖片來源: 課程)
單元測驗
- 如果我輸入 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 真值表(圖片來源: 課程)
反互斥或閘(XNOR Gate)
XOR Gate 的相反,當兩個輸入值相同,則輸出 1;若相異則輸出 0。
糟糕,這我真的想不到可以用的例子,有沒有誰要提供一個跟日常法律相關的例子 XDDD
XNOR Gate 真值表(圖片來源: 課程)
奇怪,現在看來很簡單阿!我當初真值表怎麼背得半死的?
感到疑惑的女性(圖片來源: Andrea Piacquadio|Pexels)
單元測驗
- 如果我輸入 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)來表示一個字元,比如說繁體中文常用的 Big5 ,2 個位元組表示一個字元,所以理論上最多可以表示 $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 |
單元測驗
- 學完那麼多種編碼,你還記得他們的特性嗎?關於各種編碼,下列敘述何者錯誤呢?
- ASCII 後期的發展由 7 位元擴充為 8 位元,稱作 EASCII,共以 256 個字元所組成,擴充了許多符號、更提供希臘或拉丁符號使用。
- ASCII 在中文裡稱為萬國碼或是國際碼,顧名思義它正是一套業界標準,將全世界所有的文字與符號都收錄進去。
- 電腦只看得懂 0 和 1,所以我們需要將 Unicode 轉換為 0 和 1 才能在電腦上運行 Unicode。
5-2|位元是什麼:電腦的儲存單位
我發現我剛剛在做前面章節筆記的時候,其實就用到這邊的內容了。這邊應該有都不太陌生,日常生活還滿常用到的,檔案大小幾 M 之類的。
-
bit(位元)
電腦中最小的儲存單位,以 0、1 來表示。同時它也是傳輸資料的基本單位,同一時間能傳達的位元數越多,代表資料傳輸的速度越快。 -
byte(位元組)
8bits = 1byte,也就是有 256 種狀態。電腦中通常以一個位元組來表示一個英文字母及數字,也就是剛剛提到 ASCII,至於中文字則看是走什麼編碼方式了,可能會用 2~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(圖片來源: 維基百科)
所以你以為你買 1T 的硬碟是買 1024 GiB,但其實只有 1000 GB。這也是你在某些網誌或討論區會看到諸如下列討論的原因:
是說,我在看資料的時候發現 Mac OS X 的檔案管理器是走十進制,而 Windows 是走二進制。我跟 Mac 不熟,所以這件事我還是第一次知道欸!所以我拿顆相同的硬碟,在 Mac 跟 Windows 上看到的數字是不一樣的?🤔
還真的是哩,我看到賣硬碟的公司還在網誌提醒了這件事,還畫了對照表。難怪我會在 PTT(還是 Dcard?)看到有人驚恐的再問她在 Mac 的繪圖資料為什麼拿到影印店時檔案變小了 XDDD
硬碟大小在 Windows 與 Mac 的換算量(圖片來源: Crucial Taiwan)
至於 Linux 那邊我沒怎麼注意它檔案系統用的十進制還是二進制,不過看上表應該是十進制的。因為通常我比較介意的伺服器上的空間,但沒伺服器 UI 阿 XDDD 所以一般我會用 df
搭配 -h
顯示 KiB、MiB、GiB、TiB,如果要看十進制的話就用 -H
:
df 搭配 -h 與 -H 所顯示的容量差異
單元測驗
- 看完電腦的儲存單位表後,換你試著換算看看吧!請問 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》)
馮紐曼模型的偉大之處,就是他通過抽象化的方式抓住了電腦的本質,你再怎麼變,也跳不出我定義的模型,任何事物都是從理論到實踐,理論要做的事情就是抽象抽象再抽象,抓住事物的本質。
單元測驗
- 相信你看完流程圖後,對電腦的運作更加了解了!請選出下列錯誤的敘述。
- 電腦得到訊號後的動作依序為輸入、處理、輸出
- 電腦共有 4 大單元,分別是輸入單元、輸出單元、記憶單元、控制單元
6-2|輸入單元(IU)與輸出單元(OU)
輸入單元(IU)
負責將資料或程式讀入,並轉換為二進位傳送到記憶單元中。其作用相當於人的感官,負責接收訊息。常見的輸入單元有滑鼠、鍵盤、麥克風、光碟機、掃描器、繪圖板…等。
輸出單元(OU)
負責將處理過的結果,從記憶體取出,並轉換成可閱讀的文字、數字、圖形、音訊、影像…等。其作用相當於人的反應器官,將結果表現出來。常見的輸出單元有螢幕、印表機、喇叭…等。
單元測驗
- 學習完輸入單元與輸出單元後,試著判斷看看「智慧型設備上的螢幕」是屬於輸入單元還是輸出單元呢?
- 輸入單元 (IU)
- 輸出單元 (OU)
- 是輸入也是輸出單元
- 不是輸入也不是輸出單元
6-3|記憶單元(MU)與控制單元(CU)
記憶單元(MU)
負責儲存輸入單元送來的待處理程式或資料,等候處理或運算;同時處理完的的資料,也會放進記憶單元中,等待輸出或進一步的處理。
記憶單元又可分為兩類
-
主記憶體(main memory)
又稱內部記憶體,用來儲存處理中的程式和資料。可以分成兩大類 RAM 與 ROM:RAM and ROM(圖片來源: Open Naukri)
-
隨機存取記憶體(Random Access Memory, RAM)
是構成電腦中大部分的主記憶體,也是平時所輸入的程式和資料所儲存的位置。具有揮發性,一旦關閉電源關閉,則資訊就會被清除,因此只能充當暫時性的資料存放媒介。平常我們說得的加記憶體就是加這個,它的大小會直接影響系統的整體效能,至少會讓你能開更多的軟體或檔案 XDDD。
如果再繼續向下細分,依 RAM 的技術可在分成 SRAM 和 DRAM 兩大類。
- SRAM
稱為靜態隨機存取記憶體(static RAM),只要電源是開啟狀態,不需要持續充電更新即可保存資料,也不需要更新記憶體位置。SRAM 速度快但價格昂貴。因製作成本較高、存取速度較快,常被用來做快取記憶體。 - DRAM
稱為動態隨機存取記憶體(Dynamic RAM),使用電容來做資料儲存,但因電容會隨時間漏失電荷,所以必須週期性充電更新才能保存資料。DRAM 速度慢但價格便宜,因為有著成本優勢,是使用最多的記憶體,常見的 DDR4 就是 DRAM。
- SRAM
-
唯讀記憶體(Read Only Memory, ROM)
看名字就知道,只能讀不能寫,一般出廠時就會將資料燒入。具備非揮發性,資料不會隨電源關閉而消失,因此被用來存放永久性的程式或資料,如 BIOS。它跟 RAM 不同,與系統運行速度毫無瓜葛。它所直接影響的是能事先寫入更多的軟體或是更強大的系統,想像一下手機中的作業系統跟卸也卸不掉的隨機出廠的 App,就是寫在這裡。
是說,雖然 ROM 是為唯讀的,但你應該聽過刷機吧?它就是藉由重燒 ROM 來修改 ROM 中的資料,不過這需要借助特定的方法。糟糕,好久沒重燒 ROM 了,有點忘了該怎麼做了…想當初開發時一天得刷個 4、5 次機…。
-
-
輔助記憶體(secondary memory)
又稱外部記憶體,用來儲存暫時不用的大量程式和資料,以彌補主記憶體空間不足,當要使用才會從輔助記憶體讀入主記憶體中處理。如:硬碟、光碟等。
記憶體分類(圖片來源: coggle)
控制單元(CU)
負責控制、協調電腦各單元的運作。會從主記憶體中擷取並解碼指令,並傳送控制訊號到其他單元,藉以指揮及監督每一個單元,並進行資料的傳遞。就像人體中的大腦,負責發出指令。
單元測驗
- 請問硬碟屬於下列哪者呢?
- 記憶單元中的主記憶體
- 記憶單元中的輔助記憶體
- 控制單元中的主記憶體
- 控制單元中的輔助記憶體
6-4|算術邏輯單元(ALU)
總覺得,課程的分節有點奇怪,它竟然把控制單元跟記憶單元放一節,而不是跟算術邏輯單元歸在一起?會這麼說是因為,控制單元及算術邏輯單元兩者都是 中央處理單元(central processing unit;CPU) 組成的一部分。
CPU 的組成架構(圖片來源: 《計算機概論 2/e》)
CPU 應該是還滿常聽到的一個詞?它是電腦的大腦,是個極為複雜的晶片電路,主要用來執行儲存在記憶體的程式指令,控制著數位資料的處理及運算。前者很明顯是上一節所提過的控制單元的職責,而後者則是這節的算術邏輯單元的工作。
算術邏輯單元,顧名思義就是負責算術與邏輯運算。控制單元會將程式或資料由記憶單元送來,它會負責執行四則運算、比較運算與邏輯運算,再將結果送回記憶單元儲存。
此外,在 CPU 內部還有一個極小的快速獨立儲存裝置,稱為暫存器(register),是用來暫時存放運算過程中的資料或程式,依照保存資料的不同可以再分成不同的暫存器,如保留算術邏輯單元中間計算結果的資料暫存器、存放從記憶體中所擷取的多個指令的指令暫存器、以及記載程式中變數的程式計數器…等。
CPU 的組成架構(圖片來源: NDHU_Course 試卷)
單元測驗
- 學完這五個單元後,可別搞混他們的分工喔!請問下列關於算術邏輯單元的敘述,何者正確呢
- 算術運算會進行四則運算
- 邏輯運算會先進行邏輯運算(邏輯閘:AND、OR、NOT),再進行比較運算(大於 / 等於 / 小於)
- 算術邏輯單元與記憶單元一同擔任「大腦的職位」
6-5|5 大單元的運作原理
整個系統會在控制單元的操作下進行分工合作,它會控制各單元執行各別不同的任務,但又協調它們進行交換。
運作概述如下,在控制單元的操控下輸入單元會將資料或程式載入到記憶單元,並將程式指令進行解碼,如果指令需要運算,就會送到算術邏輯單元計算,再將結果存回記憶單元;當要輸出結果時,控制單元會將結果由記憶單元,傳送到輸出單元輸出。
硬體架構與資料流(圖片來源: 趙文聖 計算機概論)
單元測驗
- 學完電腦的 5 大單元後,你熟悉他們的運作原理了嗎?請判斷下列哪一個是錯誤的運作方式吧!
- 使用者透過「輸入單元」輸入資料或程式到「記憶單元」
- 控制單元」從輸入單元中讀取資料或程式
- 如果要進行運算,必須經過「算術邏輯單元」來進行算術或邏輯運算
6-6|GPU 是什麼?
這節在介紹跟 CPU 只有一個字母之差的 GPU。
圖形處理器(Graphic Process Unit,GPU)又稱為顯示晶片、視覺處理器,是常聽到的顯示卡中的核心零件。(顯示卡是 GPU + 記憶體 + 電路板 + 散熱器等的統稱)。
它是一種專門在電腦、遊戲機和一些行動裝置(如平板電腦、智慧型手機等)上執行繪圖運算工作的微處理器。除了單獨存在外,也可以內嵌嵌入主機板或 CPU 上,也就是我們所說的內顯。
除了遊戲影像和視覺效果的支援外,GPU 亦作用為平行處理器,加速資料的計算,這也是現今機器學習再次崛起的主因之一。
CPU 和 GPU 繪圖有什麼差異(圖片來源: 課程)
是說,有人沒看過這兩圖的故事嗎?忘記是哪一年的 NVIDIA 請流言終結者來做的實驗,速度差距果然顯著,有興趣的可以去看看 NVIDIA 的活動影片。
CPU 與 GPU 的繪圖能力與速度上的差別: CPU(圖片來源: 奧森文創設計)
CPU 與 GPU 的繪圖能力與速度上的差別: GPU(圖片來源: 奧森文創設計)
單元測驗
- CPU 與 GPU 只差一個英文字母,但功能差很多,千萬別搞混了!請選出下列關於「GPU」正確的敘述。
- 中文是圖形處理器,又稱為顯示晶片
- 負責解釋電腦指令以及處理電腦軟體中的資料
- 中文為中央處理器,是電腦的核心部位
CH 7|世界市值最大的五家公司,都是 IT 巨頭
這邊開始進入第二堂課,課程內容稍微雜了一點包含程式語言、作業系統、軟體工程跟人工智慧…等。我在上課的時候還稍微疑惑了下,當初上計概的時候有提到這些嗎?好像沒印象耶~!?結果翻開課本,我囧了還真有,而且還滿了筆記 XDDD
掃描目錄
7-1|什麼是作業系統?
電腦是由硬體和軟體所構成的系統,而軟體又可分成作業系統和應用程式兩大類。
作業系統(operating system,簡稱 OS)是介於電腦硬體與應用程式之間的程式,除提供了使用者存取硬體的介面外,也負責管理記憶體、系統資源供需的次序、輸入與輸出裝置、網路與檔案系統,簡而言之就是套管理硬軟體資源的系統軟體。
電腦系統(圖片來源: 《計算機概論 2/e》)
作業系統與硬體的關係緊密結合,針對不同機器會有不同的作業系統,比如行動裝置、嵌入式(如微波爐、GPS 等處理單一功能為主的裝置)與伺服器…等。他們會針對不同的應用需求與硬體管理,而衍生出不同的作業系統,如:Android 與 IOS、Windows CE 與 Palm OS、Linux 和 Windows 與 Mac…等。
單元測驗
- 針對作業系統的描述,哪一項是錯誤的呢?
- 它是介於電腦硬體與應用軟體之間的程式
- 為了保持使用與設計上的一致性,不同的硬體其作業系統皆相同
- 作業系統其實也是一種軟體服務
7-2|知名的作業系統-個人電腦
個人電腦中的三大作業系統:
-
Microsoft Windows
微軟公司開發的個人電腦作業系統,前身就是 MS-DOS,整體市佔率高達九成。 -
macOS
以精簡的設計美學著稱,蘋果公司旗下的作業系統都以產品本身的名稱加上 OS 為命名風格。 -
Linux
三套中唯一一套開放原始碼系統,也是開源專案的最佳典範。目前多數廣泛使用的自由軟體都有與 Windows 平台版本和相應的 Linux 版本,例如:LibreOffice;部分流行的專有軟體也有相應的 Linux 版本,如:Google Chrome;也有些應用程式沒有 Linux 的版本,但通常可以找到類似功能的應用軟體。….對我來說唯一不能取代的大概就是遊戲了吧?
有人戲稱 Windows 是一般人使用;macOS 是有錢人(蘋果系列的產品都是高單價),或設計人使用;Linux 則是工程師專用。
單元測驗
- 了解完這些知名的個人電腦作業系統之後,你有記起來它們的特性嗎?請選出下列錯誤的敘述。
- Linux 它可以讓開發者從開放原始碼上快速、低價(幾乎免費)的建立專業能力
- Linux 的相關應用軟體主要是由駭客,或其它 Linux 愛好者合作開發出來的,其軟體操作方式一致性高
- Linux 目前能在 Windows 或 macOS 上使用的應用軟體大部分沒有 Linux 版本,因此較不如 Windows 或 macOS 通行(尤其亞洲地區)
7-3|知名的作業系統-手機
是說,手機上的作業系統還有人不知道?
-
Android
非正式中文名稱為安卓,但我其實不太喜歡這個名字 XDDD。它是由 Google 公司收購同名公司後開發而成,被視為是 Google 跨足行動領域並邁向成功的一步。
作業系統本身是以 Linux 為核心的開放原始碼系統,因此任何人都可以使用或者開發其相關的應用程式,市佔率高達八成。是說,雖然 Android 是開源的,但它其實不是免費的 XDDD。有興趣的可以去找找他們的授權費的相關資料,前幾年因為歐盟的反托拉斯法鬧得沸沸揚揚的。 -
iOS
蘋果手機 iPhone 專屬的作業系統,承襲蘋果電腦的設計風格,與 Android 系統為手機市場兩大巨頭。
Android vs Mac(圖片來源: XFastest News)
除了兩大龍頭外,也還有些小的作業系統,不過似乎都 GG 了,這邊就課程照貼囉~!
-
Windows Mobile / Windows Phone
微軟針對行動通訊產品開發的作業系統,市佔率低。後者為前者的繼承者,曾與 Nokia 戰略結盟,合作推出 Lumia 系列手機想抵抗安卓與 iOS,但依舊以失敗告終。 -
BlackBerry OS / BlackBerry 10
黑莓公司開發的封閉原始碼系統,專屬自家品牌黑莓手機,以高安全性著稱而一度吸引許多商務人士使用,但最終仍然不敵慘淡的市佔率與銷售成績,黑莓作業系統也將 2019 年底結束服務,轉向 Android。 -
Symbian / Meego
Nokia 公司旗下的作業系統,由於改革緩慢,在智慧型手機市場始終無法有所突破,最終放棄了這兩個作業系統,轉向 Windows Phone。
在找資料的時候看到幾張有趣演進。從圖中可以看到 2009 時,手機作業系統市場相當分散,黑莓機跟 Nokia 依舊是主流,Android 還被壓得出不了頭;但大約到 2013 之後,這些作業系統就幾乎被雙頭壟斷,兩者佔了快 80%。
手機作業系統市場份額變化(圖片來源: Business Insider/Statista)
從 2017 年至今,市場的變化不大,仍舊是被 Android 跟 iOS 幾乎吃掉 99.8% 的份額,可以說市面上只剩兩種作業系統。是說…Android 原來贏這麼多?我還以為只有小贏而已。
手機作業系統市場份額變化(圖片來源: Statista)
單元測驗
- 除了個人電腦的作業系統,你也清楚手機作業系統的特性了嗎?請選出下列錯誤的敘述喔!
- 黑莓公司所開發的作業系統 BlackBerry OS / BlackBerry 10,其原始碼為開放原始碼。因其安全性較低,所以市佔率與銷售成績皆不理想
- Symbian / Meego 為 Nokia 公司旗下的作業系統,由於改革緩慢,在智慧型手機市場始終無法有所突破
7-4|什麼是軟體服務?
軟體即服務(SaaS,Software as a Service),廣義上來說,軟體服務是提供商會給一套軟體,讓你直接應用不需要再自己開發。課程這邊給的例子是作業系統的交付,個人覺得覺得這比較難以理解,主要是涉及作業系統本身的角色與特性,所以這邊就不用它當例子了。
因隨著網路的發展,現今最常見的交付方式是讓使用者透過網際網路和瀏覽器等媒介,以隨用隨付或訂閱制為基礎的方式取得所需軟體服務,最常見的如:電子郵件、日曆、Adobe 系列…等。
透過此方式,使用者無須購買、安裝、更新或維護任何硬體、中介軟體,即可以使用該軟體,且資料放在雲端,基本上只要裝置可以連網,幾乎可以從世界各地存取應用程式,是目前日常生活中最常接觸到的服務。
之前寫過一篇 〈雲端計算 IaaS、PaaS、SaaS 與 FaaS〉,有興趣的可以點擊過去看看。
傳統軟體服務與現代軟體服務比較(圖片來源: 課程)
單元測驗
- 在資訊領域,你是不是也常常聽到「軟體服務」這個名詞呢?經過我們的講解,相信你更了解它了!請你選出正確的敘述吧
- 軟體服務的英文縮寫為 SaaS
- 現代的軟體服務需要透過載體安裝,無法透過網路直接下載
- 廣義來說,軟體服務是提供商會給一套軟體給你自行開發
- Android 是以 Linux 為核心的開放原始碼系統,因此任何人都可以使用或者開發其相關的應用程式,市佔率高
7-5|軟體服務好處多,近年來的產業龍頭都是軟體服務商
這章節其實就是在說 SaaS 的好處:
-
技術
無須配置軟體專業技術人員去維護,又能得到最新的技術。 -
資金
除了節省人力成本外,也無須再購買與維護機器。但會以改付「月費」來購買使用使用權,好處大概就是不用一次拿出大筆金額購買,緩解資金壓力。 -
儲存
資料儲存在雲端上,資料也不會遺失。因為這是把資料放到別人那裡去,所以這算好處還壞處就看資料敏感性? -
降低風險
SaaS 通常會提供試用服務,可以降低不適用的風險。
簡單來說,就是不用更新或維護任何軟硬體、可隨時存取且有備援。
另外,全球近幾年來最有價值五間的公司,分別是:Apple、Amazon、Alphabet(Google)、Microsoft 及 Facebook,五間公司。
傳統軟體服務與現代軟體服務比較(圖片來源: 課程)
單元測驗
- 軟體服務好處多,近年來的產業龍頭都是軟體服務商。請問下列哪一個不是軟體服務的好處呢?
- SaaS 通常會提供試用服務,可以降低不適用的風險
- 資料儲存在雲端上,即便使用者裝置失敗,資料也不會遺失
- 資料儲存雖然不會存在雲端,但會存在電腦本機,即便使用者裝置失敗,資料也不會遺失
CH 8|硬體?韌體?軟體?你分得清楚嗎?
8-1|電腦世界中的三位一體
電子設備可以分成硬體、軟體和韌體三個部分:
電腦架構(圖片來源: Roger的工程師研究日誌)
-
硬體 Hardware
簡單來說,你看得見摸得著的電子產品與零組件就叫硬體,例如電主機板、晶片…等。 -
軟體 Software
與硬體不同,軟體是用程式語言撰寫執行在硬體上的應用,看不見摸不著,例如:APP、網頁、Office、作業系統…等。 -
韌體 Firmware
介於軟體與硬體之間,特別指用來驅動硬體進行作業的軟體,主要是透過程式語言來操控硬體,像是控制主機板、晶片的驅動程式,或是電腦的BIOS。
那麼,這「三體」工程師有什麼差別呢?
三體工程師差別(圖片來源: 課程)
-
硬體工程師
「懂電路!」相關科系以電子工程與電機工程為主,三者之中與「程式設計」的相關性最小,主要負責「開發硬體設備」,因此有人戲稱是「製造業」。 -
軟體工程師
「會寫程式!」目前需求最多最廣的職位,入行門檻相對低,也是非本科轉職的主要選擇,主要負責「寫程式讓硬體執行各種工作」,工作範圍在三者之中與提供消費者服務的關係最直接,因此有人戲稱算是「服務業」。 -
韌體工程師
「懂電路又會寫程式!」主要的工作就是「寫程式讓硬體『可以』執行各種工作」。由於韌體介於硬體與軟體之間,因此要成為一位韌體工程師需要兼具兩者的特質,除了熟悉硬體元件,也要熟練高、低階程式語言。
單元測驗
- 你分得清楚電子設備的「三體」嗎?針對「三體」的敘述,下列何者正確?
- 通常大家說的改機,就是指更改「軟體」
- 韌體工程師雖然不用會寫程式,但一定要懂電路,而其估作內容與程式設計相關性極小,主要負責開發設備
- 三體等於硬體 + 軟體 + 韌體
其他連結
- 課程內容:
- 課程筆記:
參考資料
- mohjj mo (2019)。計算機結構 & 計算機概論。檢自 HackMD (2022-07-11)。
- hank.lon (2005-05-06)。計算機概論講義。檢自 就只是學習用的嘛|隨意窩 (2022-07-11)。
- 張瑞棋 (2020-08-24)。人口普查、打孔卡片、IBM——第一台插電的計算機│《電腦簡史》數位時代(一)。檢自 PanSci 泛科學 (2022-07-12)。
- 卞哲琛, Et al.。煞氣a精靈部隊之期末 ALL PASS 版本計算機概論重點整理。檢自 nutncsie11037 (2022-07-12)。
- 曾學文。Introduction to Computer_Science ch 01。檢自 國立中興大學 (2022-07-14)。
- 杨陈菊 (2018-11-18)。我所了解的GB2312、Unicode、GBK、UTF-8、BIG5等编码。檢自 杨陈菊的博客|CSDN博客 (2022-07-14)。
- 協同撰寫。ANSI(一种字符代码)。檢自 百度百科 (2022-07-14)。
- 阮一峰 (2007-10-28)。字符编码笔记:ASCII,Unicode 和 UTF-8。檢自 阮一峰的网络日志 (2022-07-14)。
- Roy Kwok (2019-06-16)。Unicode 與 UTF-8 的關係?。檢自 Roy Kwok|Medium (2022-07-14)。
- 小智IT课堂 (2019-12-14)。你知道吗,他应该才是计算机科学之父(六)。檢自 知乎 (2022-07-15)。
- (2012)。電腦的硬體(主機)。檢自 桃園國中 (2022-07-15)。
- 電腦基本架構。檢自 全華圖書全球資訊網 (2022-07-15)。
- 4-2 記憶單元。檢自 資訊科技概論 (2022-07-15)。
- 駭客人 (2017-11-26)。誰才是真正的計算機之父。檢自 每日頭條 (2022-09-30)。
- 協同撰寫。阿塔那索夫貝理電腦。檢自 維基百科 (2022-09-30)。
更新紀錄
最後更新日期:2022-10-04
- 2022-10-04 發布
- 2022-07-26 完稿
- 2022-06-20 起稿