如何評價斯坦福的新操作系統課程CS140e?
Stanford CS140e - Operating Systems
CS140e 作為 Stanford 的一個實驗性的操作系統課程,目前首次開課正在進行中,課程材料還沒有完整放出,暫時無法全面地評價。
根據導論課 slides, 這門課的特點是採用了 Raspberry Pi 3, 代碼將在真實機器上運行,而不是其他操作系統課程採用的虛擬機。(個人認為這會增加完成項目的成就感)其次編程語言選用的是 Rust.
當我看到這門課的時候便決定要跟著材料學習一下。因為首先 Rust 是我目前最喜歡的語言。另外自己對樹莓派也有興趣,只是缺少契機入手。(兩件快樂的事情重合在一起...
就目前而言,本人主要期望能看到的內容是:
- Rust 特性在操作系統中的應用
- ARM 與 x86 OS 實現的異同 // SJTU軟院操作系統課程是 JOS (x86, QEMU)
// TODO 隨課程進度更新
PS:
本人準備寫一系列文章記錄下學習的過程,歡迎關注。
衛星露天咖啡屋zhuanlan.zhihu.com這門課程是Rust Web框架Rocket作者Sergio參與教學的課程,這就保證了在現場的學生可以學到地道的Rust編程概念和技巧(Rokcet源碼寫的很好,它也是充分發揚了Rust特性的Web框架)。作者本人也是斯坦福在校計算機科學的PhD在讀。
當前用Rust寫的操作系統知名的有Redox,本以為是個玩具項目,可是昨天看到又有新的成員加入,參與人數達到20人,看來是無比嚴肅的一個項目。Redox是Rust能力的標杆項目之一。
CS140e這門課程是基於樹莓派和Rust來教學。雖然是實驗課程,但有Redox項目的存在,就保證了這門課程的科學性和完備性,因為Rust確實有實現操作系統的能力。實驗的應該是教學內容,而非用Rust實現操作系統的實驗。
Rust語言有個特性就是非常適合教學(個人觀點),這門課程看了下介紹,應該是用Rust實現一個簡化版的操作系統,重點不在於教你如何實現一個像Redox那樣完整的操作系統,而在於學習操作系統中的概念,比如啟動載入、文件系統、進程、多核並發、安全保障等,與此同時還學習Rust編程語言,包括如何充分利用Rust語言的特性(參考Rocket,Sergio的教學應該能保障這一點)。
可惜的是,不是公開課。不清楚有沒有錄像。
P.S 如果對Redox感興趣可以聽聽這個podcast: The Changelog #280: Building a Secure Operating System (Redox OS) with Rust
今天還看到這樣一句話:
So, you want to write an Operating System in Rust? Because the "Race to Replace C" has already ended… and Rust is the clear winner.
無意挑戰,權當一樂。
不知道是本科生還是研究生的課,只從課程網站的信息來看,需要CS110 Principles of Computer Systems作為先修課,所以應該是默認學生已經掌握了操作系統的基本知識。粗略看了一下CS110的syllabus,基本覆蓋了國內本科操作系統課程的大部分內容,所以這門CS140e應該是針對想進一步學習操作系統知識和動手開發操作系統的學生準備的,適合高年級本科生和研究生。
這門課程的重點看起來在於實驗,和我校已經開過數年的研究生課程Advanced Operating Systems比較相似,都是在真正的硬體上開發幾個操作系統的核心功能,包括spawning,multicore等,但我猜不會涉及太多內核的硬體驅動部分(我們那門課里叫『CPU Driver』)的開發,而是給學生一個基本的內核源代碼,讓學生在它的基礎上實現一些功能。因為開發內核涉及很多硬體細節,比如GPIO,開發板管腳映射等等,這些東西很繁瑣,而且和操作系統核心思想的學習沒有什麼關係。
這門課有四個主要的Assignment,分別是:
- Assignment 1: Shell and Bootloader
- Assignment 2: SD Driver and FAT File System
- Assignment 3: Spawn
- Assignment 4: Multitasking and Multicore
這幾個都是操作系統內核中比較上層的應用,甚至可以放到用戶空間(User Space)來實現。想動手實現OS內核更底層部分(比如內存管理、虛擬內存映射和分頁)的同學會略微失望,可能Stanford的考慮是這些經典的東西已經被做爛了,沒什麼意思,所以只挑現代的(Multicore,針對異構硬體的操作系統研究目前正熱門)、不常見的(Spawn,Unix/Linux的進程模型基於Fork,各種操作系統書已經講爛了,但非Unix系統如Windows都是Spawn)和容易出彩的(Shell,SD Driver and Filesystem,都可以自由發揮出很多有意思的功能)。
題主這學期剛上完我校的AOS,印(tong)象(ku)很深,所以不妨進一步比較一下這兩門課程。
實驗安排上,Stanford CS 140e基本可以說是ETH AOS的子集,我不知道他們設計課程時有沒有參考AOS,但可以說,這兩門課借鑒的源頭都是UNSW這門Advanced Operating Systems(我校教材的引言中有提到)。不知道CS 140e為什麼選取了這麼幾個實驗,感覺不太成體系,未來還是可以再加一些的。不過,從學分、時間和工作量的角度考慮,這幾個實驗足以讓這門課成為一門『神課』了。我校的AOS每一周或兩周就要完成一個類似的group assignment,最後一個月每人還要完成{Shell, Network, File System, Nameserver, Capabilities (Advanced)}中的一個individual project,工作量分分鐘讓人懷疑人生,我的隊友直呼這是他在ETH四年以來上過的最難的課。
授課和考試安排上,可以看出Stanford這門課並不是一門100% Project的課程,上課和考試還是佔了比較大的比重。我認為這種安排是比較科學的,lecture和exam可以起到理論指導的作用,只讓學生一味地去動手,其實是容易跑偏的,而且可能會浪費時間在重複發明idea上面。ETH的AOS並沒有lecture,但有一本自己編的閱讀材料,詳細介紹了操作系統的各個核心組成部分的前世今生和相關研究論文,並且完全避開傳統的以Linux為中心的介紹方式,讓學生從更高的角度去理解各種不同操作系統的設計思想和利弊權衡。然而,在巨大的編程工作量面前,很多閱讀內容都只能一掃而過了,非常可惜。
軟硬體技術上,Stanford這門課使用了現在流行的Raspberry Pi開發板和Rust編程語言,而ETH使用的還是某已倒閉公司的PandaBoard和C語言,可以說Stanford走在了前面。不過實際上,用什麼板子區別並不大,我更感興趣的是Rust和C語言的比較。我絲毫不懂Rust,但看起來,它比C語言更適合教學。不過用C語言也有好處,直接暴露的底層細節和編程複雜度,可以極大地提高學生的系統編程能力。另外因為ETH的AOS是基於他們自己開發的一個真正的開源操作系統(而不是玩具)Barrelfish,以Barrelfish的內核代碼作為基礎,去添加內存管理、開新進程、啟動第二內核、基於RPC的進程間通信、終端、文件系統、網路協議等功能,而Barrelfish的內核使用C語言和彙編寫的,所以我們自然而然也用了C語言。不知道Rust能不能和C聯合編程,但如果Stanford的課程組是用Rust寫了一個基本的driver給學生用,那感覺也是挺酷的。
綜上,推薦對現代操作系統的設計和實現有興趣,或者希望鍛煉系統編程能力的同學選修這門課,但不建議不喜歡密集的編程工作和大量的底層細節的同學選修,CS110涉及的操作系統知識對於研究AI、Theory和比較上層的System領域來說已經足夠,不必自虐。
剛寫了一篇課程推薦,希望更多人來一起刷這門課!
Stanford CS140e: An Experimental Course on Operating Systems課程推薦
跟107e差不多,實際上機操作,接觸的東西相對不加e的對應課程來說更硬體一些
硬體能打包賣嗎。。。
推薦閱讀:
※想在linux上搭建小網站,類似於路由器設置的站點。問題是這種情況下,對於硬體的配置要求是什麼?
※Raspberry Pi 挖 Bitcoin 能有象徵性的收穫嗎?
※如果只是做下載器和高清播放 樹莓派和cubieboard哪個更合適?
※請問有哪些好用的免費物聯網雲視頻平台(類似Yeelink雲平台這種模式)?
※想要玩樹莓派,想要玩極路由,想要玩leap motion,並把它們結合起來,應該掌握哪些知識?
TAG:操作系統 | 斯坦福大學StanfordUniversity | Rust編程語言 | 樹莓派RaspberryPi |