(音樂) 好那各位同學好 歡迎來到這個作業系統這一堂課 那我是周志遠這堂課授課的老師 好那我們這堂課咧 作業系統的課本 是這一本叫做 Operating System Concepts 那這本書咧就如同作業系統一樣 它是我們的這個資工系的聖經之一 就是最重要最重要的課本 只要是教作業系統 大概80%尤其是知名的學校等等 幾乎全部都是用這一本 所以稱之為所謂的聖經 那你可以看見這個書呢 其實這個非常非常久就有了 我在讀書的時候 也是用這一本 而且都已經到了好像第六版了 可見第一版有多早 所以是非常非常古老的一本書了 那這本書咧隨著這個 這幾年都有很大的一個 就是它都有不斷地在翻新版本 所以就現在最新的 我們會使用的也是以這個第九版為主 那也就是這邊這一本 大家可以看見 那非常建議大家去買這一本書 因為如同剛才說的 這是非常重要的一門課 然後是非常非常重要的 裡面的內容是非常基礎的 那所以說非常值得參考 那但每一個版本 其實不必太在意 你們買的是哪一個版本 其實它每一版的改版的內容 差異非常的非常的小 尤其是最重要最核心的部分 其實沒有太大的變化 所以如果你在圖書館啊 街道或是從哪邊有人這個 可以給你 比較舊一版本的這個作業系統的書的話 其實沒有關係 你們可以就去用 無所謂 但是非常非常重要是 每一年都提醒 但是的確最近這個狀況越來越多的就是 大家都只看課本的 這種課堂上的slides 因為都幫你整理好嘛 可能考試也比較會從slides出來 但是呢 各位絕對要去仔細的看 這本書裡面的內容 每一個章節 因為裡面講的才是details 才會把很多很重要的觀念 講得非常非常清楚 上課畢竟時間是很有限的 一個小時就 兩個小時就一章就過去了 一些例子等等 可是這書裡面 它怎麼樣去形容這些 裡面的這每一個的定義 還有例子等等 它會解釋得非常清楚 所以大家一定要去看裡面的書 這樣才不會有 考試的時候才會問到 老師這個講的時候 好像沒有講清楚 或是說怎麼講的不太一樣 那其實一定是以課本為主的 所以希望大家一定要好好的去看 裡面的內容 是非常值得看的 好那這本書你可以看見 它叫做Operating Concepts 它用了concepts這個term 其實是非常好的 我認為是非常非常好的一個 這個含義在裡頭 因為有兩個原因 第一個電腦演進非常的快 對不對 我們等一下第一節就會介紹 從有電腦開始 我們稱之為電腦 就有作業系統 到了現在 我們雖然只過了什麼四五十年
可是電腦的發展 大家都看得見 非常非常大 所以作業系統當然還在那裡 可是電腦的形式 它的功能等等 變化其實非常大的 所以可以想見 其實作業系統這個軟體 這個系統的設計本身 一定改變也非常非常的多 但是這本書 我們剛才說了 它已經出了這麼多年了 內容也不太改 為什麼 因為它介紹的就是核心的concepts 這個是就算電腦再怎麼改變 是沒有做變動的部分 所以其實並不是要教大家 現在的 現在大家可能比較care的是 Android手機上的OS 對不對 並不是要教各位 手機上的OS到底是怎麼運作的 不是這種最新State of Art 然後是這些東西 其實它教的只是核心的基礎而已 所以不管未來在做怎麼樣的變化 電腦的形式等等 再做怎麼樣的改變 你會發現concept仍然就是那一些 所以它這個concepts就是 這個核心的部分 而不是要教大家最advanced 然後最複雜的 甚至於各位會發現 我們上課教的那種怎麼 好像很straight forward 很多設計的方法概念 這個都想得到 因為它只是要告訴你一個概念 當然到了你 真的去看一些作業系統 更複雜的作業系統的時候 當然不是這樣簡單的 所以才有這麼多的研究 繼續 ongoing 去設計未來的OS等等 但是它的核心其實就是 那些不會變 也就是我們這堂課要教的部分 好 對 那 第二個部分的話就是說 你可以看見 它的concept意思就是說 其實它只會教到你 就像剛剛提到的概念這個事情 它是最核心的 但它也只會教到概念 所以真的OS 像我們剛才說的 到底怎麼運作 你今天知道這個概念 你怎麼樣可以把它真的 實作出來 我今天真的有辦法做一個作業系統嗎 這本書就沒有cover到這麼多 也就是像實作 還有一些這種hands-on的東西 它就畢竟是有限 我們大概看見內容其實非常非常多 所以沒有辦法cover到這麼多 然後這麼的廣泛 那這是為什麼我們這堂課 會有 會有作業的原因了 就是想要彌補 這本書 或者課堂上的slides 只有cover到concept概念 卻沒有實作的部分 所以我們會有四個作業 讓大家去修改一個 教育用的模擬的作業系統 雖然聽起來好像只是教育 只是模擬 但其實它該有的都有 我們等一下就會提到 所以就是各位會需要去實作 真的去寫 這個OS裡面一些最核心的 控制的部分的程式
然後需要去trace 所以才會說 其實programming的loading是不少的 那需要有一定的background 知道怎麼去trace code ok 這個是 這個書本的部分 所以非常建議大家去買 好 那剛剛也提到了 那我們這堂課最大的特色 就是會有這四個程式的作業 去修改一個 simulated的OS 而且是for education 它純粹就是為了上課教學 被開發出來的作業系統 那這個作業系統叫做NACHOS 就墨西哥那個 洋芋片那個NACHOS 當然不是 大家可以去看一下它的全名 全名當然是跟OS等等有關的 只是簡寫變成NACHOS 好念好記 那這個 其實在國外 在國外的大學 尤其知名大學 還有國內重要的學校 其實都已經在使用這個NACHOS了 所以它並不是一個什麼很特殊的 其實非常普遍 而且其實是一個 大家公認 是一個很好的一個教學的一個軟體 就是提供讓大家可以更了解 它的code的部分 的幾個教材 那所以其實 它的這個相關的資料 其實是蠻多的 當然你要去查 用英文查 不是中文查 中文當然都查不到這些 比較國外在使用的東西 畢竟國內還沒有到那麼那麼普遍 但是每一年都有越來越多學校開始去使用 那我們 我們開這堂課已經用了好幾年 從第一年開始 所以已經到第六年了 那所以其實裡面的這些內容設計 還有份量 因此也就每一年每年都在增加一點 那今年 去年很重要的加入file system的部分 那今年就沒有再增加了 所以這是好news 但基本上已經蠻多了 你可以看見這三個主要的component都有了 所以我們當然沒有再繼續加下去 那所以有任何疑問 大家就是google 我們computer science最好的地方就在於 全部在網路上都可以學習 所以NACHOS你絕對可以找到非常多的相關的資訊 還有討論 都可以找得到這些資料 但是當然就希望大家也不要過度的去查 也就是說 甚至於去找答案這些 這就非常不建議了 並不是要大家找一個答案出來給我們而已 是希望你們自己去寫 然後去跟課程的東西做聯想 那我們在demo的時候 助教當然會問問題 而且是兩位同學都會去問 所以你們的分數不是說 同一組分數反正就一樣 不是這樣子 TA會去看你們的貢獻度 還有回答問題的內容 去做一些調整 所以說一定要自己真的了解 自己動手下去寫 不要這個過度的去找答案而已 好 但是這個作業會發現 真的比較challenging 尤其跟你們之前的作業 這種程式作業 也還是不一樣
第一個 這個code是用C++寫的 supposedly這個問題應該比較小 因為大家資工系一定寫過C 一定會C 對不對 那或是有background的一定都有C 那或許沒有用過C++ 可是如果你上過OO的課 object oriented的 現在大部分比較新的language 都是這種物件導向的觀念 你有那個觀念 你會C的語法結合在一起 那就是C++了 所以其實你應該把所學 把它結合一下 應該問題不大 但是如果這些概念都沒經驗 當然會非常非常痛苦 那就不太建議了 第二個 Linux的coding environment 所以我知道很多人 之前的程式 就只focus在自己的程式 所以大家都跑在 Universal Studio 這些就是這些GUI介面 但是這堂課既然是OS OS當然就是Linux 對不對 因為它open source 所以你可以去改可以去動 而不是Windows只是一個commercial 包起來user friendly這樣子而已 所以對於Linux這個作業系統 應該要做一個更進一步的了解 所以這堂課會是你非常好的機會 開始去對這部分了解 以前如果沒接觸過Linux的話 應該用這堂課 開始在上面熟悉 在上面做一些簡單的code tracing 檔案的處理 compile 執行 debugging等等 這些非常基本的東西 comment去熟悉一下 所以我們的助教會set up這個環境 其實也沒有什麼特別 就是login進去 你就在上面開始使用 只是說你都要用一些comment的方式 而不是用滑鼠點點這些東西 那其實並不只是為了寫程式 你會發現你在去使用這個作業系統的時候 因為它更貼近了作業系統本身 不是透過一個頁面 透過一個視覺化的東西 你會更能夠去感受到 作業系統的運作 我們這堂課其實教了很多的東西 就是你們下這些comment 在做後面背後的事情而已 所以其實你真的去操作這些comment 然後去看它output出來這些東西 內容data等等 你就可以更能夠感覺到 它之間的關聯性 所以非常非常建議大家 就是開始login進去 然後在上面 完全在上面去寫程式debug等等 未來你們去工作也一樣 一定很多不少都是在這種環境的 所以千萬不要等到去工作才開始學 在學校就是一個很好的機會了 尤其有些問題什麼TA等等 都會給你協助 所以同學也可以討論 自己上網查一下comment line有哪些這樣子 其實不會太複雜的 好最後一個也非常特別的code tracing 所以之前大家的程式作業 我相信幾乎都是從頭從main開始寫 對不對從頭到尾就是自己的程式 然後可能你很了不起寫了1000行 覺得這整個是我的這個畢生的 目前為止最好的milestone了
你會發現未來碰到的程式 1000好像沒有什麼 都是幾萬行幾十萬行 那所以當然不可能是自己寫的 對不對沒有人會從頭到尾把一整個 這個系統或是完整的東西全部自己寫 這種機會其實是很少很少發生的 所以真正到未來你們寫程式的時候 多半都是在修改別人的程式 對不對所以你要知道先看懂別人程式的架構是什麼 然後知道我今天要做的這件事情 是在這整個程式中的哪一個部分 然後我怎麼樣去做debugging 我改寫這一塊之後 就連compile都不會compile了 那你要能夠figure out為什麼 所以這是一個很大的差異 那這堂課呢因為當然nachos是別人寫的啦 對不對而且各位要去改的就是我們剛才看見的那幾個部分而已 那幾個部分不代表只在一個檔案喔 是只在好幾個檔案 所以這叫做code tracing 你要知道它的code path 所以這每一個每個這個程式的檔案 還有function code之間的順序是什麼 所以我在哪邊要去改動的話 其他地方也要相對應的去做調整 這就叫做code tracing 所以這堂課必須這麼做 所以一定要去你會發現這幾個作業的第一個working item 就是請大家先去看一下它目前怎麼實作的 實作的流程 那你trace完之後了解了你再去判斷 我要改的是哪一塊 然後咧所以剛才說了linux上面 那些print f基本的debugging 這些簡單的工具或方式 大家還是要去使用的 才有可能去能夠去完成它 所以這是很不一樣的部分 不是從頭到尾自己寫一個作業系統 就是寫一個檔案就結束了 其實是要對整個系統一些了解 所以again如果對於整個程式 這些方面background不足的話 你就會比較吃力的 但是CS的我們訓練了兩年 supposedly這些技能應該都已經有了 但你可能還沒有機會去用而已 那這會是一個很好的機會 知道怎麼樣不只是debug自己的程式 還有別人的程式 怎麼樣去compile它等等 好沒問題 所以這是MT的部分 (音樂)