清華學霸直博全自主寫CPU、作業系統、編譯器!劉知遠點贊!(附鏈接)

  • 2019 年 10 月 4 日
  • 筆記

來源:知乎、blog.miskcoo等

本文介紹了清華直播學霸實現了全自主寫CPU、作業系統、編譯器的簡歷。

[ 導讀 ]清華大學直博面試的一則簡歷上了知乎熱榜:「實現了在自己寫的CPU上運行自己寫的作業系統,以及自己實現的編譯器生成的程式」。簡歷主人是清華電腦系本科生周聿浩同學,他順利拿到直博名額,清華劉知遠老師也表示讚賞。

最近,一個來自福州的男生突然火了,原因是知乎上一個熱帖《清華大學電腦專業本科的這位同學是什麼水平?》:

https://www.zhihu.com/question/345718537

提問者說,他在微博上看到清華劉知遠教授的一條微博,對劉教授口中這個優秀同學產生了興趣:

我看到微博很多人都說很牛逼,連劉知遠老師都稱讚,但是我好像不怎麼能體會到(估計是我自身水平太低了),能有人做一個形象的比喻嗎?

來源:劉知遠老師微博

這名同學網名Miskcoo,他簡歷中「實現了在自己寫的CPU上運行自己寫的作業系統,以及自己實現的編譯器生成的程式」一句尤其引起討論,很多對 Miskcoo 比較了解的用戶紛紛跟帖回應。

Miskcoo 本名周聿浩,畢業於福州一中,目前在清華大學電腦系就讀。他曾經是一名 OIer,第一次參賽就拿到了省一。在個人部落格簡介上,他描述自己「感興趣的是人工智慧中偏理論方面的內容,以及一部分分析方向的數學。」

而且他本人也非常低調虛心。面對大家的一片讚譽,自己則表示獲得劉知遠教授認可的項目,單靠自己是做不出來的,特別要感謝一起戰鬥的小夥伴,包括陳晟祺、劉曉義等。

除了rCore on MIPS這個項目外,Miskcoo簡歷中另一個受到好評的項目經歷是「NonTrivialMIPS – 十級流水雙發射 MIPS 處理器」,這是清華電腦系團隊在第三屆 「龍芯杯」 全國大學生系統能力培養大賽中獲得特等獎的項目。這是一個系統類的比賽,要求自己設計一個 CPU,在其上設計 SoC,運行作業系統等。在這個項目中,miskcoo 負責寫 CPU(這次稱為 NonTrivialMIPS),劉曉義寫 cache,陳晟祺負責 Vivado 和 CI ,最終成功奪得特等獎!

清華大學電腦系團隊奪得第三屆「龍芯杯」特等獎

清華硬核系統類課程,「奮戰二十天造台電腦」

我們先看引起討論的「在自己寫的CPU上運行自己寫的作業系統」這個項目:

rCore on MIPS – Rust 語言實現的 Linux 兼容作業系統 2019年4月-2019年6月

  • 作業系統課程項目。rCore 是用 rust 編寫的作業系統。支援了x86_64,RISCV,AArch64 三個平台。本項目主要將其移植到 MIPS32上,最終可以在組成原理課程編寫的 MIPS32處理器上運行。
  • 實現了在自己寫的CPU上運行自己寫的作業系統,以及自己實現的編譯器生成的程式。

編譯器、作業系統、CPU是三個幾乎像無底洞一樣大的方向,實現了「在自己寫的CPU上運行自己寫的作業系統,以及自己實現的編譯器生成的程式」究竟有多厲害,知乎用戶霍華德言簡意賅地評價道:

差不多等於下面這四本書融會貫通吧。感興趣的朋友可以買來挑戰一下自己。

miskcoo本人則在知乎回復,強調這些工作離不開與團隊的合作:

我想多說一句,因為劉老師打碼的原因可能大家沒有注意到,這些東西實際上是我和另外幾個同學一起做的。他們都十分厲害,在前面一個龍芯杯的參賽作品的 CPU、SoC、Linux 移植以及其它一些東西裡面我主要做的是 CPU 的部分。如果沒有他們的話一個暑假完成這樣一件事情在我的能力範圍內是不太可能的。

清華大學劉知遠老師補充道:

劉知遠老師提到的另一段項目經歷,即「NonTrivialMIPS」這個項目,在第三屆 「龍芯杯」 全國大學生電腦系統能力培養大賽,陳晟祺、周聿浩、劉曉義和陳嘉傑四位同學組成的清華大學電腦系代表隊(指導教師:電腦系陳康、李山山)以性能分數和綜合成績第一的表現獲大賽唯一的特等獎。

該大賽由龍芯中科公司提供技術支援,參賽隊伍需在龍芯公司提供的 FPGA 開發板上,自行設計 CPU 核心及 SoC,並在上面運行測試程式。清華電腦系學生代表隊設計並實現了雙發射 10 級流水線 CPU,支援運行最新版 Linux 內核,啟動 X11 圖形介面,這在大賽歷史上屬於首次。現場答辯環節上,同學們的優異成果得到專家們的一致好評。

圖來自:清華大學新聞網

清華大學電腦系對系統原理非常重視,從教學到課程項目都非常硬核。而且近期清華電腦系的系統類課程(包括組成原理、網路原理、編譯原理等)都在進行比較大的改革,miskcoo表示,團隊能夠寫出這個項目的部分原因也是由於這些課程的安排較為合理。

下面是清華大學電腦科學與技術專業本科培養方案中的專業主修課程內容:

項目開源:rCore for MIPS32 – Linux 兼容的 rust 編寫的作業系統

rCore for MIPS32這個項目已經在GitHub上開源,感興趣的讀者可以去研究一下:

Github:https://github.com/rcore-os/rCore

rCore for MIPS32 – Linux 兼容的 rust 編寫的作業系統(with:陳晟祺)

這是作業系統的課程項目,rCore 是用 rust 編寫的一個作業系統,也是由清華的同學編寫的。在我們加入之前支援了 x86_64, RISCV32/64, AArch64 三個平台。我們主要將其移植到 MIPS32 上。它最終可以在組成原理課程編寫的 MIPS32 處理器上運行。

環境:

Rust toolchain at nightly-2019-03-05

Cargo tools: cargo-xbuild

QEMU >= 3.1.0

bootimage (for x86_64)

RISCV64 GNU toolchain (for riscv32/64)

AArch64 GNU toolchain (for aarch64)

musl-cross-make (for userland musl, or download prebuilt toolchain from musl.cc)

libfuse-dev (for userland image generation)

See Travis script for details.

如何運行:

$ rustup component add rust-src llvm-tools-preview

$ cargo install cargo-binutils

$ cargo install cargo-xbuild –force

$ cargo install bootimage –version 0.5.7 –force

$ git clone https://github.com/rcore-os/rCore.git –recursive$ cd rCore/user

$ make sfsimg arch={riscv32,riscv64,x86_64,aarch64,mipsel} # requires $(arch)-linux-musl-gcc$ cd ../kernel

$ make run arch={riscv32,riscv64,x86_64,aarch64,mipsel} mode=release

$ make run arch=x86_64 mode=release pci_passthru=0000:00:00.1 # for ixgbe real nic, find its pci (bus, dev, func) first

miskcoo的其他項目還包括:

  • NonTrivialMIPS – 十級雙發射順序 MIPS32 處理器

(with:陳晟祺,劉曉義,陳嘉傑)

這是參加 「龍芯杯」 的作品,獲得特等獎。我們自己實現了一個十級雙發射順序 MIPS32 處理器,包含 32 位浮點單元和一個 AES 加速單元。在其上自行設計了 SoC 同時移植了 Linux 作業系統。可以運行圖形介面(X 服務)以及 Python 等一大類程式,在 OpenSSL 上利用 AES 單元加速後吞吐率大約為 10MBps(CPU 主頻 80MHz,在 i7-8750H 上不利用 AESNI 指令的實現吞吐率大約為 100MBps)。同時浮點單元能夠較快地繪製 Mandelbrot 集的影像,我們還實現了通過變分自編碼器(VAE)生成手寫數字影像等。

Github: https://github.com/miskcoo/nontrivial-mips

  • TrivialMIPS – 五級雙發射順序 MIPS32 處理器

(with:陳晟祺,姚沛然)

這是大三上學期組成原理、軟體工程的聯合實驗,在組成原理的 ThinPad 實驗板上編寫的 MIPS32 處理器。由於僅有 SRAM,處理器不帶有 Cache,和 「龍芯杯」 的相比較為簡陋。不過,加上之後作業系統和編譯原理的成果,還是實現了在自己寫的 CPU 上運行自己寫的作業系統,同時運行自己寫的編譯器生成的程式。

Github: https://github.com/trivialmips/trivialmips

  • FPGA Console – 硬體實現的 VT220 兼容終端

(with:陳晟祺)

這是大二下學期數字邏輯設計的項目,也是我的第一個 FPGA 項目。主要是通過 FPGA 接受鍵盤的輸入,將輸入轉化為控制命令通過串口輸出給電腦。同時也通過串口接受電腦傳回的控制命令名且解析、執行,修改對應位置的字元,再將字元進行渲染通過 VGA 輸出到螢幕。支援 VT220 以及部分 xterm-256color 的控制序列。

Github: https://github.com/Harry-Chen/fpga-virtual-console

  • TrivialDB – 簡易 SQL 資料庫引擎

這是資料庫系統概論的課程項目,用 C++ 實現的一個 SQL 資料庫引擎。實現了大部分常見的 SQL 語句和類型。同時支援多表連接、複雜表達式運算、多主鍵約束、外鍵約束、CHECK 約束、UNIQUE 和 DEFAULT 約束、聚集查詢、利用 B + 樹索引的查詢優化,同時,它支援任意長度的 VARCHAR 類型。

Github: https://github.com/miskcoo/TrivialDB

  • rubik-cube – 快速魔方解算器

大學後的第一個課程項目,利用 Kociemba 演算法實現的三階魔方求解器。大約能夠在 1 秒內通過不多於 32 步復原一個三階魔方。另外,還實現了 Krof 演算法,可以計算最少復原方案,不過這需要很長的時間。同時,我利用 OpenGL 對復原過程進行了動畫展示。

Github: https://github.com/miskcoo/rubik-cube

其它項目(較為簡單,部分沒有公開。有需要程式碼可以聯繫我)

  • Mandelbrot-Render,一個高精度 Mandelbrot 渲染器。
  • SimpleTomasulo – Tomasulo 演算法模擬器。
  • SimilaritySearch – 近似查找 / 近似連接演算法,以及一個 「互聯網打車」 應用。
  • OfficeOnline – 在線審批系統。
  • RIPRouter – 支援 RIP 協議的路由器。
  • TrivialNews – Java 實現的 Android 新聞閱讀器。
  • 數獨 – Qt 編寫的數獨,可生成及求解不同難度數獨。
  • 國際跳棋 – Qt 編寫的雙人國際跳棋遊戲。
  • 人物資訊檢索 – Python 編寫的爬蟲,可以抓取 Wikipedia 的人物資訊並且顯示。

最後,Miskcoo同學的主頁請收好:

Miskcoo』s Space – 一個數學和電腦愛好者的部落格

blog.miskcoo.com

討論地址:

https://www.zhihu.com/question/345718537

編輯:王菁

校對:林亦霖