91一级特黄大片|婷婷中文字幕在线|av成人无码国产|日韩无码一二三区|久久不射强奸视频|九九九久久久精品|国产免费浮力限制

您申請加入課程:操作系統(tǒng)原理及課程設(shè)計
需要驗證您的身份,請輸入課程密碼:
您的學(xué)號:
班級選擇:
課程密碼:
  • 創(chuàng)建者

    Creator

    李丁丁
  • 活躍度

    Activeness

  • 訪問量

    Visits

    97970

教學(xué)公告

2021級譚宇亮OS國賽心得
[作者: 李丁丁  發(fā)布時間:2025-09-05 14:38:21  瀏覽次數(shù):164次]


我的國賽心得分享:從興趣、折騰到獲獎

----------

學(xué)弟學(xué)妹們好!

我是21級的譚宇亮,很高興丁丁老師給了我一次分享比賽心得(吹牛)的機會,回憶一年前杭電那個難忘的暑假。

----------

一、 興趣是最好的老師

在上大學(xué)之前,我只能用家里老舊性能低下的電子設(shè)備,于是折騰 Linux 和 Android 刷機試圖給老設(shè)備續(xù)命,但是遇到很多問題,當(dāng)時不理解導(dǎo)致沒有足夠能力解決他們。這些困惑和折騰經(jīng)歷構(gòu)成了我對操作系統(tǒng)最初的興趣。

大三上的時候?qū)W院開設(shè)了操作系統(tǒng)課程,但是對于喜歡折騰的我來說,光聽課不動手沒有意思。我在網(wǎng)上看到了 MIT 6.s081 課程,感覺挺有意思的,于是選擇動手做 6.s081 的實驗。大概11月這樣,我就已經(jīng)把課程的實驗做完了(部分類似附加題的題目沒做),雖然實驗很有意思,但我感覺還是不夠折騰。

可生命在于折騰啊,我想做些更折騰的東西。

網(wǎng)上說 6.s081 有個進階一點的課程,但是我感覺經(jīng)過精心設(shè)計的實驗不夠挑戰(zhàn)性,總是差點意思,于是計劃自己找點操作系統(tǒng)相關(guān)的東西折騰。我決定做一個安卓容器(類似手機上的安卓虛擬機)的興趣項目,項目大概持續(xù)了小半年,容器第一次成功進入桌面的時候特別激動,不過可惜現(xiàn)在爛尾了。但我意識到,自己這樣瞎折騰與現(xiàn)實世界比如工業(yè)界的開發(fā)還是有差別的,我想接觸一些更現(xiàn)實世界的東西。

二、 比賽前的選擇與自我評估

----------

也是在做這個項目的過程中,和比賽結(jié)下了緣分。在搜索前人方案的時候,我搜索到了23年一個安卓虛擬化比賽題目的代碼倉庫。我一想這比賽很好啊,很有挑戰(zhàn)性(夠折騰),而且也是接觸真實世界問題的一個很好機會。于是盤算著接著他們的題目參加24年的比賽。

但是后面報名的時候沒有這個題目。我記得當(dāng)時瀏覽了一遍賽題,很多高大上的題目看著有點嚇人,看來真實世界的問題還是不太容易的。不過列表里忽然掃到一個題目:《添加 gVisor 的 kvm 和 ptrace 平臺對 RISC-V 平臺的支持》。

ptrace?這不和我的容器項目有些關(guān)聯(lián)(都使用了 ptrace 進行系統(tǒng)調(diào)用捕獲),相對熟悉;而且比賽題目是做移植,有跡可循。我一想 “穩(wěn)了”,就選定了這個題目。

細節(jié)是魔鬼。 我知道雖然這題目看著不算太難(標(biāo)的中等難度)和安卓容器有相關(guān)的地方,但即使這樣也有很多東西要學(xué),很多坑要踩,不太容易;同時當(dāng)時好不容易找到一份實習(xí),也需要投入時間精力。萬一要是我真堅持不住怎么辦?

不過好在當(dāng)時比賽3月開始報名,5月截止。于是不想爛尾的我決定:先不報名,要是我5月份前能夠跑通 HelloWorld 的話我就報名,不行的話就趁早放棄。 不報名也沒人知道~~(爛尾王就少了一個爛尾項目)~~。

三、 初賽階段:在“大坑”中學(xué)習(xí)

----------

初賽的時候主要是跑通編譯,繁瑣但簡單。5月份按照預(yù)期跑通了一個 Helloworld,很激動,于是果斷報名參賽,起了個隊名就叫 HelloWorld。但是,跑通編譯僅僅只是開始,挑戰(zhàn)才剛剛開始。

第一個遇到的大坑是,為了進度沒有弄明白代碼為什么這么寫,而只是為了跑通編譯而瞎填了代碼,寫了很多 BUG。排除這些 BUG 產(chǎn)生了額外的時間開銷,但是幸運的是,問題是清楚的。這過程也學(xué)到了很多新知識,因為這也是我喜歡的學(xué)習(xí)方式:通過動手做點東西,以問題導(dǎo)向的方式學(xué)習(xí)知識,學(xué)習(xí)并應(yīng)用知識解決問題。 這樣容易獲得正反饋,而且親自動手驗證的知識不容易遺忘。

第二個遇到的大坑是,程序出現(xiàn)了很多并發(fā)的奇怪 BUG:

  • 比如說基于 ptrace 追蹤的容器里的程序有一些 syscall 會有異常;

  • kvm 虛擬機里程序在多個 vcpu 調(diào)度會死鎖,單 vcpu 卻沒問題。

這也是比賽過程最讓人抓狂的地方:瞪眼看項目代碼怎么都沒問題。這時候我想這鍋肯定不是我背,但甩鍋也得講求證據(jù),于是我就化身偵探,去調(diào)查這些 BUG 產(chǎn)生的真正原因。

可惜我對調(diào)試工具~~(放大鏡)~~不太熟悉,也嘗試了一些調(diào)試手段,不過更多的時候還是 “古法查bug”:閱讀涉及到的項目和系統(tǒng)內(nèi)核的相關(guān)代碼,找出代碼路徑,在代碼路徑上一步步手動打印調(diào)試日志,二分查找鎖定,不斷縮小排查范圍解決問題。

  • 比如 syscall 通過打印查看追蹤前后的寄存器上下文,發(fā)現(xiàn) a0 寄存器內(nèi)容有問題,不過在 LKML 上發(fā)現(xiàn)有相關(guān)的 patch,幸運地是問題很快解決了,不幸地是痛失撿漏一個向 Linux kernel 提交 patch 的機會哈哈哈。

  • 通過打印內(nèi)核里 vcpu 調(diào)度的代碼路徑,最終發(fā)現(xiàn)是因為 kvm 遵循 opensbi 規(guī)范默認設(shè)置 vcpu 休眠,導(dǎo)致調(diào)度到休眠的 vcpu 一直等待喚醒而呈現(xiàn)死鎖的狀態(tài)。

雖然解決 bug 很費時間(一個多月),并且不知道 bug 是什么原因的時候很抓狂,但是我始終相信問題的產(chǎn)生是有原因的,找出產(chǎn)生問題的真正原因然后解決他就行。 這些攔路虎 bug 被我干掉之后,我的比賽也有了不少信心。

四、 決賽階段:臨門一腳與答辯技巧

----------

比賽決賽階段是整個比賽過程畫龍點睛的一個重要階段,核心是展示和檢驗初賽階段的工作成果和對比賽項目的進一步打磨~~(內(nèi)卷)~~。

在決賽代碼提交之前,丁丁老師建議我應(yīng)該跑一下項目自帶的單元測試。結(jié)果我第一次跑下來才不過 六成的通過率,修了兩三天也才不過八成,想著準(zhǔn)備放棄了。但是我想著不能爛尾,也許就差這臨門一腳了。幸運的是,經(jīng)過排查找出了很多問題,在決賽代碼提交之前通過率去到了 97%。

丁丁老師在最終的線下答辯和 PPT 方面給了我很多重要的指導(dǎo):答辯抓住重點,吸引評委老師,展現(xiàn)工作量并且講清技術(shù)難點的同時,不過于深入技術(shù)細節(jié)和展示“創(chuàng)新點”。

線下答辯之后自我感覺還不錯,而且因為準(zhǔn)備充分,老師的提問也基本接住了。我覺得這是我的比賽項目雖然在技術(shù)難度和創(chuàng)新上相對薄弱,但最終在比賽能夠獲獎的重要原因之一吧。

五、 比賽之后

----------

比賽心得寫于比賽一年之后,我這一年經(jīng)歷了很多問題和挑戰(zhàn):被現(xiàn)實毒打的秋招,繁瑣的畢業(yè)設(shè)計和當(dāng)下工作的挑戰(zhàn)等等。

但是我相信這些問題和挑戰(zhàn)總會有解決的辦法,就像那次比賽一樣。

我想,這可能是比賽給我?guī)淼淖畲蟮氖斋@吧。


相關(guān)課程

掃一掃二維碼,快速加入本課程!

放大二維碼 查看使用方法
關(guān)閉