(音樂) 好 那我們就正式開始作業系統的Chapter 0 那每一年一開始一定會跟大家講 重申一下作業系統這門課的重要性 那為什麼作業系統非常非常的重要 因為我們知道這個電腦的運作 它就是分成上面的程式 下面的硬體 還有中間的作業系統 作業系統是三個絕對不可或缺的部分 那所以基本上 在你這個 在除了作業系統之後 你就可以對於上面的這些應用程式軟體 怎麼樣使用電腦這件事情 還有對於下面怎麼樣去管理硬體資源 還有如果今天有新的硬體的Device出來 怎麼樣子運用到 透過它建立一個適合它的系統 電腦系統出來 都是靠作業系統 所以作業系統是非常非常重要 連結上面跟下面的那個部分 同時也是 我個人認為 最能夠代表資工系的課程之一 就是核心課程 而且它是非常能夠代表的 因為上面可能你會需要很多的Domain Knowledge 甚至於數學系的人 他們的這些演算法的概念 比我們資工系的學生都還強 還不一定是我們資工系的最強的強項之一 那如果你往下看 這些硬體的部分 EE的比我們學的更扎實 它對於這些硬體的設計 這些運作物理的部分 比我們資工系的又更熟悉一些 但唯獨作業系統它就在中間 也就是資工系扮演的角色 對不對 就是怎麼樣子透過軟體去控制硬體 讓使用者來用電腦 這個部分 這supposedly就是資工系的強項了 所以說 如果你作業系統學不好 那你要怎麼打贏別人 對不對 你是資工系的學生的話 那當然作業系統這一塊要非常的扎實才對 那這是以非常積極的角度 所以大家應該可以體會到作業系統的重要性 而且像我當初我在還是學生的時候 作業系統就是我最喜歡的一門課 因為學完之後 你就對於整個電腦的運作真的就比較了解了 簡單來講就像是你在寫程式 大一大二大家都寫很多程式作業 動不動就碰到segmentation 4 對不對 crash 那可能大家也不在乎 大家有概念就是有bug 要修一修 那可是為什麼會有segmentation 4 你看到一個error message 你compile它不會過 跳出一堆的pronounce message 這些都是你的hint跟線索來去解決問題 對不對 可是如果你不知道作業系統 你就會比人家吃虧 就不知道怎麼問題出在哪裡 上完作業系統就會更清楚 原來是因為我們電腦作業系統在做這些事情 你沒按照它的這些規定做 所以它會出現這些error 那所以我的程式要怎麼去修改 頓時你就更清楚 為什麼會有這些錯誤訊息了 怎麼樣去寫出更好的程式 那你往下看 今天我們買了一個device 說SSD啊 或者說Hard Disk 我插上去之後 我們會第一件事情做什麼 formatting 對不對 format完它才可以開始存資料
為什麼要做formatting 對不對 formatting這個去format這個 這個storage的device 這個就是在作業系統在做的事情 所以為什麼要做這個事你就會知道了 所以並不是一個硬體 然後接上去插了電 欸 會動了 絕對不是這樣 對不對 你會發現你要去使用它的話 必須要透過作業系統 所以作業系統其實完全掌控了 怎麼樣子這些device 怎麼被使用的這個很關鍵的部分 所以你也就會知道為什麼 今天我們說Hard Disk比較慢 Hard Disk比較慢 SSD反而就會比較快 這個作業系統 它在控制這些檔案擺放的時候的差異在哪裡 從這些concept 作業系統上的concept 你就可以得知一二了 所以什麼是formatting 我們之後也會講到 所以你就會把整個東西把它給貫通在一起 所以非常非常重要 好 當然各位可以比較消極的角度 資工系三門核心課程 Algorithm, Computer Architecture, OS 大家都知道的 所以大三上非常重要 因為你的Algorithm跟OS都在這邊 它有多重要 也就是說各位在學校 不管讀什麼課成績怎麼樣子 其實還不是最主要的 當大家再去看 一個學生有沒有學好 有沒有學扎實的話 其實是把這三門課拿出來 真的就是如此 會個別列出來這三堂課的成績 這三堂課的成績其實就代表了幾乎是一切的 所以如果你作業程式的成績不好 這三個課的成績如果不好 其他的課程在表現如何 可能都會被打上一個問號 所以這是非常非常重要的一門課 也就是成績不好的 這是你的機會了 這個時候趕快把它追上來 成績好的你一定要去維持住它 那對於很多我知道不是資工系 major的 想要未來去出國 每一年我都有很多這樣的學生 就是需要去國外讀研究所 然後你就會發現必修OS 沒有OS你就不能去申請 所以很多這個因為這個原因來申請的 所以你就知道這個重視的程度有多大 所以有很多的這個這是非常非常重要 然後需要去有的的條件 包括你如果未來讀了碩士 對我們清大碩士博士必須要修OS 不管你有沒有考進來 你考進來之後你拿到了這個資格 讀書的這個我們入學的資格之後 還必須回頭來補這些課 如果你沒有修過的話 可見它有多麼的重要 好所以希望大家很深刻的體會 希望大家多花點時間 然後很紮實的把這整個課給修好 好那我們今天時間還蠻有限的 所以只能很簡短的介紹一下 這個chapter 0的部分 是要講的東西就像我們剛才說的 第一個就是我們會剛才講過 OS其實是個involve的過程 它也是不斷的在演進 這些concept卻從來沒變過 所以我們其實會先去講mainframe 就是最早時候的電腦叫mainframe computer 現在你可能都覺得它是落伍古董 可是我們就從這開始 從這上面你就已經可以看見 作業系統的角色了
所以我們用這個先來看一下 作業系統到底需要哪些 非常非常基本的這些功能 那也就會變成未來大家上課的那些chapters 那再來我們會介紹 這個Computer System Architecture 指的是什麼呢 就是各式各樣架構的電腦 所以從這個Single or Personal的computer 到分散式的系統 Cluster我們會看見一大堆的名詞 Multi-core processor 為什麼會講這麼多 這些各式各樣的電腦系統 原因是因為讓大家知道 其實有很多的電腦系統的存在 所以當然它們上面的作業系統設計就不太一樣了 但是大家還是一樣 我們只會講的是核心 但是透過這個大家應該要有一個認知 到底還有哪些系統的存在 就算一個簡單的一般的PC 我們也可以把它兜出來 變成一個更大然後更複雜的系統 所以我們會在這邊介紹這些各式各樣的系統 讓大家有一個基本的background 所謂的Systems到底有哪些類型的存在 最後就我們剛才說的 後面有一些什麼real-time 很特殊的考量的一些電腦 以及它的作業系統 我們這邊就只能用簡單的幾個slides 讓大家稍微提一下 讓大家知道這些系統的存在 所以一個broad overview 讓大家不要只是局限在課本講的那些最基本的部分 其實你會發現有形形色色的電腦 你就要apply這些concept 然後去處理不一樣的問題了 好 沒問題 我們今天就會先講這個mainframe systems的部分 好 那mainframe systems 它雖然是最早以前的 但是你會看見它的演進 作業系統這邊的演進 就從最早期的我們叫做所謂的Batch 什麼Batch我們等一下就一一介紹 所以從Batch到所謂的Multiprogramming 到所謂的Time Sharing 那所謂像Time Sharing跟Multiprogramming 這個就算是今天現今的電腦 仍然如此 它就是最fundamental的concept 所以仍然是存在的 那我們就會來介紹一下 為什麼需要去演進這樣子的改變 你怎麼樣去使用這個電腦資源的部分 那為什麼我們就會產生出很多 Memory的管理的問題 或是檔案系統的問題等等 就從這邊你就可以看見了 好 好 所以第一個 什麼是mainframe systems呢 這就是你會發現作業系統 就讓大家知道作業系統這堂課 有些人還蠻討厭的 因為你會聽到一大堆的名詞 因為這是非常基本 fundamental嘛 所以很多background大家可能之前沒有 所以第一次聽到這些名詞 所以當然第一次會很生疏 但是這些都是必要的 像讀英文你要背單字 所以你其實要知道這些都是很基本的一些 這些名詞它代表一些基本的意義 那所以還是需要去把它給記下來的 但不是只要記這個名詞 而是要去思考那個名詞當初它的意義到底是什麼 那像mainframe 就知道這個其實就是電腦系統之一的某一種 類型我們叫做所謂的mainframe 那mainframe最早這個事實出來 就是在形容最早期時候的電腦 那時候叫mainframe
英文的意思就是體積很大 就是這樣 因為第一代電腦就是體積很大 大家第一次看到不會覺得它很厲害 只覺得怎麼那麼大 這就叫mainframe 那這些電腦你可以想見 當然剛出的background是因為它的技術比較落後 所以它就是必須要做得比較大 另外一個原因就是因為 它其實是非常昂貴的 不像現在大家隨便就買個手機這些的 對不對電腦當初出來 只有國家等級最尖端的研究才能夠使用到 或者這些就很特殊的purpose 專門處理某樣東西的 才會用到這樣的電腦這樣的設備 所以這些mainframe的特性就是 它體積很大 然後通常它其實它的I/O Define之間就是很慢 那當初是這樣 那只是計算的power比較強 然後它做的事情是非常單一的 就是這台電腦就是在管理這家銀行的某件事情 這台電腦就在做科學運算的模擬 就這樣一件事情 它就只做它不是拿來跑跑大家的遊戲 這些各式各樣不是這樣 所以這種的電腦我們就稱之為mainframe 那這個mainframe的電腦 就像我們剛才說的 我們會介紹前面 今天應該給cover到前面一兩個 就從Batch到最後Time Sharing 就是它在程式怎麼樣run在這個電腦上 當初也是過了好幾年的改變 大家在想怎麼樣去設計所謂的OS 這個Terms有沒有出來我都不確定 但是大家就在想 我要怎麼樣子讓把程式跑在這個電腦上 我要怎麼樣的一個軟體系統在裡面 就有這個演進的過程 所以從中我們就可以看見作業系統的重要性 大家不要笑說mainframe好像好老 這是淘汰的東西嗎 並不是如此 所以我們剛才說過意義 mainframe當初有它的時空背景 但是它有很多意義留下來了 也就是現在的意義是什麼 就是它是專門在處理某一件事情的機器 而且是大量工作的機器 我們仍然叫做它mainframe 所以像現在很多的這些Bank 裡面他們用的這些Server這些伺服器 如果你要更精準的說它就是一個mainframe 那也因為它是特殊做的事情是很重要 然後是專門單一Purpose的 不是隨便可以Assess進去的 所以你會發現這些mainframe在設計上 它指的就是那些Reliability特別好 就是Fail的機率比較小的 就算電腦有些component壞掉 它也不會整個電腦就Crash 這就叫mainframe 還有它的Security Security非常重要 所以如果你Break into CIA 或者是FBI總部的電腦 那個就叫mainframe 那Security可不是隨便可以去Compromise的 所以這就是設計這項電腦的時候 一定要特別注意的 那種電腦才叫做mainframe 現今仍然常常存在 而且都是扮演非常重要的角色 所以這就是mainframe 最早的時候的電腦這些mainframe 它要怎麼樣把程式RUN在上面 大家可以看見是如此的簡單跟難以想像 也就是最早的時候電腦出來 你要寫程式 不是這樣打打鍵盤Keyboard就好 如果你問系上有一些比較資深的老師 他們都還經歷過那個時代 就是要打卡 我不知道大一的介紹的時候 跟我提到這些陳年往事 但是我是沒有經歷過 但是真的我知道是同時打卡的 就是在那邊打洞 那就是你的程式了 然後寫程式就是準備寫了一大堆的卡片 然後把它放到機器那邊 然後開始讀那個卡片 然後開始做運算
很難想像但真的是如此 那所以你會看見在電腦的input就是這樣 一堆的卡片 那這個卡片 每一個電腦它能夠做的事情也非常非常簡單 它一次只能夠算一個程式 它只能處理一個程式就這樣子 所以這個人處理完了 很抱歉其他人就在那邊等 一人一個慢慢的排隊 那因為這樣子所以就叫做Batch 什麼叫做Batch呢 就是指英文的意思就是批次的 對不對 所以如果大家去看作業系統 你的電腦打開 你按像Microsoft 你按會看到什麼Batch檔 有時候會注意到 就是那個開機的程式 它最最最原始的形式的那些程式就這樣 它就是要獨佔整台電腦 然後做完它你才能夠做下一個 所以是一批一批一批 所以它就叫做Batch 那每一批裡面 可以看見跟現在的程式 仍然是相同的架構 對於程式而言使用者而言 也就是一張卡片說 我要開始執行一個程式 所以它可以有process的或程式的ID 讓它可以去認知到它是誰的 對不對 然後就會有你的程式 然後會有一個load的一張卡片 所以意思是什麼 就是大家也都知道的 程式要執行要先load到memory 對不對 因為CPU是讀不到硬碟的 它只能夠assess memory 所以load就是把這些東西把它compile好之後 load到memory 然後開始做執行的動作 執行的過程中它可能會有一些output 或者是使用者要給一些input對不對 那這些input就是一樣一堆卡片 所以它就會讀這些input 開始做執行 就跟現在的電腦一樣 所以你在keyboard上打 當初就是塞一堆卡片 然後最後結束 它可能就output另外一張卡片是它的結果 所以就跟現在電腦的這個架構其實是一樣的 但是這個作業系統 你會發現它是多麼的簡化 因為它沒權沒有管理的能力 只是要能夠用它就好 所以一次就一個檔案 那在我們的memory裡面 我們知道電腦運作很重要的就是memory 對不對 那memory裡面你可以看見 它就切兩塊 上面那一塊就叫做os 那一樣因為它要運作 它要管理那些程式嘛 就是統稱的os 所以當然它本身也是一個程式 所以當然就像我知道 它需要占用一塊memory的空間 那但是因為這個架構是如此的簡單 或者說os的設計是這麼的單純 所以它只把memory就是拆成兩塊 因為也不會有別人嘛 因為直接管理 我就是整個flush掉 清掉換下一個人 所以完全就是把我們的memory的空間 切成兩塊 上面一塊作業系統 下面一塊就是你的user的空間 你要怎麼用隨便你 那你用完了 我就整個殺掉 然後換下一個人來用 這就是batch 那所以你可以看見 這個作業系統 這整個處理的過程 使用者要去save job 排卡片的順序 排錯也會fail掉 然後這個operator 因為general有很多使用者 所以每個人都帶了一捆的
一疊的卡片給這個電腦管理者 然後電腦管理者要負責決定 誰先誰後 是人喔 是operator那個人 來說今天A同學你先好了 然後再C再B 怎麼決定 他自己決定的 跟電腦設計無關 這個也是人來做決定 電腦只做了一件事 或是os只做了那麼一件事 就是在transfer control 也就是os執行他的程式的時候 可能會通到os的code 然後讀一步了 還要去user這邊讀一讀 然後整個做完之後 我就把它清掉就這樣子 所以他只是負責 在transfer從一個job到下一個job之間 在那邊initialize 還有去clean up就這樣而已 這是最早的作業系統 簡單來講就是什麼時候不用做 所以說os什麼時候不需要談及 反正就只有一個人在run 這個空間都是你的 你要怎麼用 你也沒有security的問題 因為只有你嘛 所以你有total control 這是最早期的作業系統 那這樣的作業系統 我們就稱為batch的system 一批 一批 一批 這就是最早的電腦 那很明顯的 這樣的電腦非常的 畢竟是第一代 當然就有非常非常多缺失 甚至於你可以說是無法容忍 但當時能夠用電腦就很幸福了 所以就算它慢 就算它要花很多人力 還是大家可以接受 它有些非常非常嚴重的缺點 大家一定想一下就可以知道 第一個one job at a time 對不對 所以我們剛才才說 這台電腦找說你可以run一百個 你要run一千個程式在上面都不是問題 很多做應用你就是需要這麼多的程式 才有辦法對不對建立出來 但是當時那樣的電腦 那樣的os 它就是很限制一次一個job 一個程式就這樣 所以它就是很單純 但是是一個很大的一個限制 第二個no interaction 對不對 所以說你就是丟一堆卡片給它 然後它就吐出一張卡片就這樣子 這中間的過程你會忘記塞什麼東西 或執行過程中你想要改變任何事情 抱歉是做不到的 它就全部這樣讀過去而已 所以完全沒有interaction 也就是說 尤其現在的程式都是interact 就是一般的手機 你就在那邊 所有的事情其實都是driven by人的events 那這些interaction 在剛剛的電腦你會發現完全做不到 因為它根本不知道什麼時候要讓人來介入 它就只能處理你的程式就這樣 line by line很單純 那最後一個也是這個 其實說最大的問題當初 就是這個電腦很貴很貴 你再笑它多慢 當時都是非常貴的東西 可是你就會發現
它的CPU居然都在IDLE 也就是它都在那邊沒做事情 擺在那就它只是好看而已 根本沒在做事 為什麼會這樣子 因為I/O非常的慢 對不對 因為你看看見我要卡電路進去 那個可能是機械式的 所以當然很慢 跟這個電子對不對 我們這邊電機系的更熟 CPU計算有多快 有很大的差距 所以變成說我在很多時候在電腦 就在那邊等著在做input跟output 那CPU因為在等 所以它就在那邊IDLE 就浪費掉了 那這個問題 即使在現在的電腦 也是一樣的啊對不對 不管這些科技再怎麼進步 我們大家還是知道 你手上的手機 CPU的計算的frequency 它的這個每秒鐘可以處理instruction 非常非常多的 那I/O這邊就算現在再怎麼去優化 你輸出控制等等 它的速度還是遠慢於CPU 所以這個問題其實仍然存在 所以我們來說concept沒有改變 問題的本質仍在那裡 所以當初當然就想出了一些解決的方法 那現在電腦依然是如此 好所以可以看見 我們到這邊看到就是 這一塊這個第一個跟第三個 也就是我們等一下會見到的 multiprogramming 那怎麼樣可以讓CPU不要IDLE 怎麼樣可以讓很多的job 就是你要塞很多的program 進到這台電腦對不對 所以這就是我們等一下會講的 下一代的問題是 multiprogramming要解決的問題 interaction指的就是time sharing 所以我可以讓這些程式 很快很快的切換 所以處理你I/O的其實是一個程式 那這才是我如果切換得非常非常快速的話 使用者就不會有感覺 就會以為我以為我一直在跟這台電腦在運作 或者說我們可以同時使用這台電腦 原因是因為我用了time sharing的 這樣的一個作業系統的概念 去share這個時間 讓每一個人誤以為他擁有這台電腦 那因為人更慢嘛 對不對人的處理速度當然遠不及電腦 所以其實電腦可以偷偷的 處理很多人的事情 讓每一個人都覺得 他可以跟這個電腦在做interact 其實是還是step by step 好 所以這就是很明顯我們就從這邊看到的幾個問題 那我們等一下之後 下一次必須要等到下一次 介紹兩個非常重要的multiprogramming 跟time sharing這兩個概念的時候 就是要解決這個最基本的fundamental的問題 那你可以發現第一代的batch OS就是什麼都可以做 所以這邊我們還有一個東西 叫OS的這個軟體 但還不需要解決任何問題 (音樂)