Re: [問卦] 精通作業系統對Coding有什麼幫助?

看板Gossiping作者 (松鼠)時間4年前 (2020/04/24 03:03), 4年前編輯推噓329(330161)
留言392則, 331人參與, 4年前最新討論串3/3 (看更多)
※ 引述《bencert (根本ㄏㄏ)》之銘言: : 我資管的 : 作業系統這門科目的內容有 : io運作、Process、Thread、Deadlock、Process communication、記憶體管理、磁碟管理、檔案系統等內容 : 想問精通這些內容跟Coding有什麼關係? : 有沒有八卦? 我文組 (工作任務之一是撰寫論文和各式報告,沒辦法提槍上戰場,文組無誤) 的,論文 繳交的截止日受到 COVID-19 衝擊而延後,上來跟大家抬槓。 Linux 核心的開創者 Linus Torvalds 在紀錄片《Revolution OS》[1] 提到: 「作業系統就是你永遠不會看到的東西,因為沒有人直接使用作業系統,人們使用的是 (應用) 程式。在他們的電腦上,作業系統唯一的使命就是,幫助其它程式執行, 所以作業系統從未獨立運行,而僅是默默等待程式,來向它要求現有資源、某個存在 硬碟上的檔案或要求其它程式將這個程式連接到外面去,然後作業系統再一步步地, 試著讓人們寫程式容易一些」 通俗來說,作業系統讓絕大多數的人免於需要理解硬體及各式電腦原理,得以使用各式 電腦程式,從而讓軟體自起初電腦硬體的附屬品 (說「附贈」也不為過),迅速在上世紀 建立完整的生態系統及奠定今日資訊科技工業。原提問者的訴求是 : 「精通作業系統跟程式設計有何關係?」 實在是很好的問題,待我娓娓道來。 美國威斯康辛大學教授 Remzi H. Arpaci-Dusseau 賢伉儷撰寫的開放存取式教科書 《Operating Systems: Three Easy Pieces》[2],在〈The Abstraction: The Process〉 一章提到: : HOW TO PROVIDE THE ILLUSION OF MANY CPUS? : Although there are only a few physical CPUs available, how can the OS : provide the illusion of a nearly-endless supply of said CPUs? 作業系統藉由虛擬化 (virtualize) CPU 資源,達到在單一處理器實作出 (概念上) 猶如 同時多個程式執行於各自的處理器之上的假象 -- 其中關鍵的手法就是分時多工 (time-sharing),而 Unix 的第一篇論文《The UNIX Time Sharing System》[3],由 Ken Thompson 和 Dennis Ritchie 在 1973 年 10 月 ACM Symposium on Operating Systems Principles (SOSP) 中提出,該論文在 1974 年 7 月的 Communications of the ACM 發表,正是採用分時多工作為主題。 當然,今日的作業系統不限於上述分時多工,充分發揮現代硬體的特性,彷彿應用程式的 開發者只要會運用現有 API 及各式應用程式開發框架 (application framework) 即可, 不用去理會作業系統的內部原理? 我會說,對!多數情況下,應用程式開發者真的不用理會太多作業系統的內部運作機制, 一如不懂資料庫管理系統的運作,也可運用 SQL 語法存取資料庫,甚至連不學習 SQL 語法也可。但倘若遇到效能、擴充性,或者各式來自底層系統問題時,應用程式開發者 往往不得不正視作業系統的設計及實作。 以新酷音輸入法 [4] 來說,在 2004 年我嘗試導入 TaBE [5] 和相容於自由軟體授權的 詞彙用語後,將單字詞列入,字詞總量就達數十萬之譜,但中文輸入法往往是視窗系統 (window system) 及桌面環境 (desktop environment) 啟動不久就會載入的工具程式, 於是使用者很快就面臨一個嚴酷的問題:新酷音輸入法載入的時間越來越長,當然使用者 體驗就差,但華文經典和各式新潮用語又不能隨意捨棄,該怎麼辦? 順帶一提,上個世紀末,我發展中文輸入法最初的動機是,讓前女友在 GNU/Linux 環境 中得以順暢地處理中英文輸入,儘管我不是語文專家,但無形中投入中文資訊系統發展, 用程式碼寫日記 (改寫自經典廣告台詞:「有人用筆寫日記,有人用歲月寫日記,而我, 用柯尼卡寫日記。」)。不算很認真開發,但有空就順手改進。 針對上述輸入法啟動時間太長的疑慮,我和熱血的開發者同儕在 2005 年用泛 UNIX 家族 (即 UNIX-like 作業系統) 的 mmap 系統呼叫 [6] 和 Microsoft Windows API 的 CreateFileA 或 CreateFileForMappingA (針對 WinCE,冷知識: 新酷音輸入法曾經移植 到 Windows Mobile,不過由於程式碼參雜著和自由軟體授權不相容的工具函式庫,所以 我無法公開釋出。隨著離職程序中,繳回前公司配給的 Windows Mobile 裝置後,我就 不再開發過 Windows 平台軟體了,有點可惜 [7]),使得新酷音輸入法的啟動時間大幅 縮短,因為原本是透過 C 標準函式庫的 fopen, fread, fwrite, fclose 等操作進行 stream I/O 再逐步建立輸入法所需要的樹狀結構,現在透過 mmap 一類的系統呼叫,讓 作業系統建立檔案和虛擬記憶體的映射關係,只要預先將樹狀結構予以適度的保存 (即 serialization),即可快速地進行資料操作。(在過去,現在我不清楚) 在 Microsoft Windows 平台,新酷音輸入法啟動的時間比自然輸入法來得迅速,有部分是上述機制 [8] 的運用。 再舉一個我參與開發過的案例。 2019 年 Linux 核心正式收錄發展超過十年的 PREEMPT_RT [9],成為 Linux 5.3 版的 特徵之一,這意味著 Linux 核心已具備 hard realtime (硬即時) 和 soft realtime (軟即時,也寫作 soft-RT) 能力的作業系統基礎。soft-RT 應用情境絕對不限於工業 自動化一類,而是跟你我生活息息相關,怎麼說呢? Android 的音效處理很複雜,首先要處理混音 (mixer),也就是,不管前景應用程式是 什麼,一旦有多個音訊要合成,系統就該在夠低的延遲達成 (注意: 音訊可能有不同的 取樣頻率),這點就仰賴 Linux 核心的 CONFIG_PREEMPT 組態 [10]。另外,你一定有遇 過在 Android 手機上全螢幕播放 YouTube 影片,享受聲音和影像流暢展現時,突然 LINE 跳出新的訊息,這時 YouTube 的音量會隨之降低,不過 LINE 的提示聲音卻一如 平常,這樣的訊號合成相當自然,但作為系統規劃,卻格外困難,試想以下問題: 「Android 環境下的 YouTube 應用程式事先知道 LINE 的存在嗎?」 「LINE 要觸發新訊息的新視窗和聲響,會知道前景應用程式是 YouTube 嗎?」 這背後的運作機制透過名為 AudioFlinger 的 Android 系統元件,後者仰賴著 Linux 核心的 soft-RT 能力。這過程中還涉及到即時系統的經典議題 -- Priority inversion [11],並在 Android 手機中,還需要正視 SMP 和 futex 實作,有意思吧!請參閱 Android 官方文件的精彩討論: https://source.android.com/devices/audio/avoiding_pi 寫程式要不要懂作業系統核心呢?取決於你對程式行為的要求、人們對你的期許,還有 是否有機會持續精進下去。 (咦?你不小心讀到這裡了嗎?進入廣告時間) 歡迎關注全台灣唯一探討 Linux 最新技術的正式大學課程「Linux 核心設計」,大部分 的教材和講講錄影都可線上免費存取,請見: http://wiki.csie.ncku.edu.tw/linux/schedule 我們從電腦原理 (像是二進位數值系統) 開始探討起,逐步帶領學員「誠實面對自己」, 掌握相關背景知識後,嘗試跟原始程式碼近於兩千八百萬行的 Linux 核心去互動。姐妹 課程包含「你所不知道的 C 語言」: https://hackmd.io/@sysprog/c-prog/ 在大學教了幾年嵌入式系統後,我深深體會到這個事實:與其說學生對嵌入式系統掌握度 不足,不如說為數眾多的人根本只是學 C 程式語言的語法,而從未想過背後的原理、 語言設計者的思維和理念,以及在真實環境中的關聯。 古希臘 Delphi 神殿前,有一則神諭寫道 "Know Thyself",也就是「誠實面對自己」, 我們程式設計師就該從技術、團隊合作、理性思考,以及培養堅忍不拔精神等方面, 找 到自我,從而建立自信。於是,從 2015 年秋季開始,我做了一系列的調整,重新探討 C 語言程式設計,安排了「你所不知道的 C 語言」系列講座,透過實體和線上直播課程, 整理這二十年來程式設計經驗,帶著學員參考第一手的資料 (例如 ISO/IEC 9899 C 語言 規格),並善用系統開發工具 (如 GNU Debugger),屏棄過往臆測為主的學習方式,探究 實際 C 程式的行為並反思箇中原理,讓人得以正視自己的盲點,從而打下穩固的基礎。 [1] 關於紀錄片《Revolution OS》的導讀點評和資訊補充,可參見共筆: https://hackmd.io/@sysprog/revolution-os-note [2] 線上存取: http://pages.cs.wisc.edu/~remzi/OSTEP/ 該書有簡體中文、日本語,及韓語的翻譯: https://github.com/remzi-arpacidusseau/ostep-translations 至於《Operating Systems: Three Easy Pieces》(可簡稱為 OSTEP) 的 "Three Easy Piece" 也有典故,是向已故物理學家費曼致敬,後者著有 《Six Easy Pieces: Essentials Of Physics Explained By Its Most Brilliant Teacher》。用 OSTEP 作者的話說,作業系統只有物理學一半難度,那就折半為 《Three Easy Pieces》,該書的三大主軸: - 虛擬化 (Virtualization); - 並行 (Concurrency); - 持續保存 (Persistence): 主要探討檔案系統; [3] 《The UNIX Time Sharing System》 http://www.cs.berkeley.edu/~brewer/cs262/unix.pdf [4] 新酷音輸入法: http://chewing.im/ [5] TaBE 計畫和相關 CLE (Chinese Linux Extension) 時代的自由軟體: https://www.debian.org/international/Chinese/software.zh-tw.html libTaBE 是 X11 輸入法 xcin 所用的詞庫函式庫. 這個函式庫採用 Berkelay DB 作為資料庫,以 Big5 編碼為主,但該函式庫所用的斷詞演算法跟基本字詞的資料 結構框架仍是自由軟體世界的開創性作品。 [6] mmap, munmap - map or unmap files or devices into memory http://man7.org/linux/man-pages/man2/mmap.2.html [7] 以前我跟公司女同事或客戶公司女性職員搭訕,會說「你現在用的中文輸入法是我 投入開發的」,後來就改說 Android 系統了。這招實在老套,不過竟然結識現在的 老婆,開發自由軟體可引導人走向幸福喔 (*笑*) [8] 相關程式碼: https://github.com/chewing/libchewing/tree/master/src/porting_layer [9] PREEMPT_RT: https://rt.wiki.kernel.org/ [10] 該核心組態決定 kernel preemption (核心搶佔) 的能力,對於作業系統內部有 可觀的變動: https://en.wikipedia.org/wiki/Kernel_preemption [11] Priority inversion https://en.wikipedia.org/wiki/Priority_inversion 可搭配拙作〈Priority Inversion on Mars〉閱讀: http://wiki.csie.ncku.edu.tw/embedded/priority-inversion-on-Mars.pdf -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.246.163 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1587668580.A.099.html

04/24 03:03, 4年前 , 1F
04/24 03:03, 1F

04/24 03:04, 4年前 , 2F
宅瑟夫
04/24 03:04, 2F

04/24 03:04, 4年前 , 3F
04/24 03:04, 3F

04/24 03:04, 4年前 , 4F
04/24 03:04, 4F

04/24 03:05, 4年前 , 5F
文組 寫那麼長 好啦 我認輸
04/24 03:05, 5F

04/24 03:05, 4年前 , 6F
04/24 03:05, 6F

04/24 03:05, 4年前 , 7F
快來推,不然別人會以為我看不懂。
04/24 03:05, 7F

04/24 03:05, 4年前 , 8F
卡前排
04/24 03:05, 8F

04/24 03:06, 4年前 , 9F
看ID先拜
04/24 03:06, 9F

04/24 03:07, 4年前 , 10F
朝聖
04/24 03:07, 10F

04/24 03:08, 4年前 , 11F
看到一半覺得太神 回去看id跪了
04/24 03:08, 11F

04/24 03:08, 4年前 , 12F
網路盛傳的羅志祥「時間管理高端課程」,也能用作業系統的
04/24 03:08, 12F

04/24 03:08, 4年前 , 13F
未看先推
04/24 03:08, 13F

04/24 03:09, 4年前 , 14F
scheduling policy 來解釋,甚至設計實驗來量化
04/24 03:09, 14F

04/24 03:09, 4年前 , 15F
先推 免得別人說我看不懂
04/24 03:09, 15F

04/24 03:09, 4年前 , 16F
jserv大神!!!
04/24 03:09, 16F

04/24 03:09, 4年前 , 17F
其實我本來要寫「跟著羅志祥學習作業系統排程」
04/24 03:09, 17F

04/24 03:09, 4年前 , 18F
哇 輸入法本人耶 跪啦
04/24 03:09, 18F

04/24 03:10, 4年前 , 19F
文獻回顧我也會
04/24 03:10, 19F

04/24 03:10, 4年前 , 20F
神串留名
04/24 03:10, 20F

04/24 03:10, 4年前 , 21F
跟羅志祥學習作業系統,笑死
04/24 03:10, 21F

04/24 03:10, 4年前 , 22F
@nikewang, 我文組,請不要嘲笑我 > <
04/24 03:10, 22F

04/24 03:11, 4年前 , 23F
只能推了
04/24 03:11, 23F

04/24 03:11, 4年前 , 24F
百推留名
04/24 03:11, 24F

04/24 03:12, 4年前 , 25F
我就知道會釣到 老師好
04/24 03:12, 25F

04/24 03:13, 4年前 , 26F
好文給推
04/24 03:13, 26F

04/24 03:14, 4年前 , 27F
太神了
04/24 03:14, 27F

04/24 03:14, 4年前 , 28F
老師你還沒睡喔!?
04/24 03:14, 28F

04/24 03:14, 4年前 , 29F
朝聖
04/24 03:14, 29F

04/24 03:14, 4年前 , 30F
有神快拜
04/24 03:14, 30F

04/24 03:15, 4年前 , 31F
完蛋,一半看不懂,看來要重修OS了
04/24 03:15, 31F

04/24 03:15, 4年前 , 32F
@upeo, 天氣冷不好睡,跟鄉民取暖 (?)
04/24 03:15, 32F

04/24 03:15, 4年前 , 33F
可以寫羅志祥約跑AI嗎?
04/24 03:15, 33F

04/24 03:15, 4年前 , 34F
@oxlittle, 坊間補習班不就先讓你感到焦慮,再推課程嗎?
04/24 03:15, 34F

04/24 03:15, 4年前 , 35F
jserv自稱文組那我們都變成武組了
04/24 03:15, 35F

04/24 03:16, 4年前 , 36F
@upeo, 等我消化完羅志祥的新聞,再來探討事件驅動+排程
04/24 03:16, 36F

04/24 03:17, 4年前 , 37F
甚至是資訊安全的議題,這太有趣啦
04/24 03:17, 37F

04/24 03:18, 4年前 , 38F
@michellehot, 自爆開發輸入法是為了把妹 (咦?)
04/24 03:18, 38F

04/24 03:19, 4年前 , 39F
朝聖
04/24 03:19, 39F
還有 313 則推文
還有 1 段內文
04/24 11:55, 4年前 , 353F
專業推
04/24 11:55, 353F

04/24 11:56, 4年前 , 354F
老師好 先奉上學生的膝蓋XD
04/24 11:56, 354F

04/24 12:13, 4年前 , 355F
這個也要cue羅志祥XD
04/24 12:13, 355F

04/24 12:17, 4年前 , 356F
大神!!
04/24 12:17, 356F

04/24 12:24, 4年前 , 357F
04/24 12:24, 357F

04/24 12:29, 4年前 , 358F
04/24 12:29, 358F

04/24 12:29, 4年前 , 359F
哇 老師好
04/24 12:29, 359F

04/24 12:34, 4年前 , 360F
可以請教怎麼入門Android底層嗎? 好少課本在講這個
04/24 12:34, 360F

04/24 12:35, 4年前 , 361F
有神快拜,我還以為我來錯版
04/24 12:35, 361F

04/24 12:36, 4年前 , 362F
感覺AOSP官網資料也講的零零散散的 苦腦中...
04/24 12:36, 362F

04/24 12:51, 4年前 , 363F
你文組 全台灣大概沒幾個理組了
04/24 12:51, 363F

04/24 13:00, 4年前 , 364F
先拜再說。老師好
04/24 13:00, 364F

04/24 13:00, 4年前 , 365F
04/24 13:00, 365F

04/24 13:06, 4年前 , 366F
04/24 13:06, 366F

04/24 13:10, 4年前 , 367F
有公開課程真好
04/24 13:10, 367F

04/24 13:32, 4年前 , 368F
推老師
04/24 13:32, 368F

04/24 13:34, 4年前 , 369F
老婆快出來看上帝
04/24 13:34, 369F

04/24 13:35, 4年前 , 370F
感恩推
04/24 13:35, 370F

04/24 13:38, 4年前 , 371F
你不要自稱文組啦 這樣我們怎辦
04/24 13:38, 371F

04/24 13:48, 4年前 , 372F
推推
04/24 13:48, 372F

04/24 14:19, 4年前 , 373F
這樣不算文組啦
04/24 14:19, 373F

04/24 14:35, 4年前 , 374F
04/24 14:35, 374F

04/24 14:39, 4年前 , 375F
@prokofieff, 以前只能啃 AOSP 原始程式碼,現在有零散文件
04/24 14:39, 375F

04/24 15:34, 4年前 , 376F
@jserv 好吧 只能慢慢啃ASOP文件 感恩!
04/24 15:34, 376F

04/24 15:38, 4年前 , 377F
04/24 15:38, 377F

04/24 16:33, 4年前 , 378F
04/24 16:33, 378F

04/24 16:49, 4年前 , 379F
推學長 這才是八卦該有的文章水準
04/24 16:49, 379F

04/24 16:57, 4年前 , 380F
04/24 16:57, 380F

04/24 17:50, 4年前 , 381F
朝聖!
04/24 17:50, 381F

04/24 19:57, 4年前 , 382F
有趣
04/24 19:57, 382F

04/24 22:35, 4年前 , 383F
04/24 22:35, 383F

04/25 00:28, 4年前 , 384F
好猛 推
04/25 00:28, 384F

04/25 01:02, 4年前 , 385F
有神快推
04/25 01:02, 385F

04/25 14:11, 4年前 , 386F
朝聖。看到神來推一下
04/25 14:11, 386F

04/25 15:02, 4年前 , 387F
我跪著看完這篇了
04/25 15:02, 387F

04/25 16:22, 4年前 , 388F
果然是文組才打那多字... 工程師只會打 RTFM !
04/25 16:22, 388F

04/26 09:19, 4年前 , 389F
朝聖!跪拜!
04/26 09:19, 389F

04/26 14:34, 4年前 , 390F
誰敢嘴文組的出來 推~
04/26 14:34, 390F

04/28 00:39, 4年前 , 391F
跪了
04/28 00:39, 391F

05/20 21:56, 4年前 , 392F
怕==
05/20 21:56, 392F
文章代碼(AID): #1UeUPa2P (Gossiping)
文章代碼(AID): #1UeUPa2P (Gossiping)