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

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

    Creator

    李丁丁
  • 活躍度

    Activeness

  • 訪問量

    Visits

    97970

教學(xué)公告

2022級(jí)周晟OS國(guó)賽心得
[作者: 李丁丁  發(fā)布時(shí)間:2025-09-05 14:32:41  瀏覽次數(shù):188次]


我的國(guó)賽OS比賽經(jīng)驗(yàn)分享:從選題到?jīng)Q賽

----------

一、選題

我認(rèn)為一個(gè)科班出身的程序員,最重要的能力就是 “知道自己不知道”,換言之就是能夠清晰地評(píng)價(jià)的自己的技術(shù)儲(chǔ)備和代碼水平。在選題前,需要根據(jù)自己以及隊(duì)友的能力選擇一條合適的賽道。

內(nèi)核賽道的優(yōu)勢(shì)是參賽隊(duì)伍較少,但對(duì)應(yīng)的難度較高,且賽題難度是逐年遞增的(25屆的初賽已經(jīng)出現(xiàn)了24屆的決賽賽題)。內(nèi)核賽道的基本比賽形式是選擇一個(gè) base OS,在這個(gè)基礎(chǔ)上逐漸添加功能,通過賽題給出的測(cè)例即可。這個(gè)過程不是一蹴而就的,而是需要選擇并學(xué)習(xí)一個(gè)合適的OS項(xiàng)目,充分理解項(xiàng)目之后再進(jìn)行工作。

一開始,我選擇的是內(nèi)核賽道,我以 rcore-osrisc-v 版本為基礎(chǔ)開始了大約3個(gè)月左右的學(xué)習(xí)。但是在4月份左右我意識(shí)到,以我當(dāng)前的進(jìn)度和人手儲(chǔ)備可能不足以完成內(nèi)核賽道的開發(fā)任務(wù)。幸好我及時(shí)和李老師溝通,最終決定換成了 功能賽道。

但學(xué)習(xí) rcore-os 的過程并沒有白費(fèi),我在這個(gè)過程中完整學(xué)習(xí)了 Rust 語言如何進(jìn)行系統(tǒng)級(jí)開發(fā),包括 no-std 的配置,一些基礎(chǔ)的宏(比如 println)的手工實(shí)現(xiàn)乃至 bootloader 的原理,這為我后續(xù)在功能賽道的開發(fā)節(jié)省了大量時(shí)間。

與內(nèi)核賽道的統(tǒng)一標(biāo)準(zhǔn)不同,功能賽道由各種各樣的單一賽題組成,選手只需要選擇一個(gè)賽題完成即可,其中也包括像“xv6教學(xué)課程”這種技術(shù)含量較低的賽題。因此參與人數(shù)比內(nèi)核賽道更多,25屆初賽有400多支隊(duì)伍報(bào)名功能賽道。

雖然功能賽道賽題多樣,但我還是希望能找到內(nèi)核相關(guān)的賽題。也巧,proj-278 就是一個(gè)對(duì)我胃口的題目:開發(fā)一個(gè)基于 x86-64 架構(gòu)的 Rust 內(nèi)核。結(jié)合我的技術(shù)儲(chǔ)備,我在聯(lián)系了賽題老師(這點(diǎn)很重要,一定要先聯(lián)系老師確定標(biāo)準(zhǔn))后選擇了這個(gè)賽題。

----------

二、開發(fā)

我選擇了 blog_os 為基礎(chǔ)進(jìn)行開發(fā),這是一個(gè)非常經(jīng)典的OS內(nèi)核項(xiàng)目,同樣是基于 x86-64 架構(gòu)。這個(gè)項(xiàng)目其實(shí)已經(jīng)實(shí)現(xiàn)了很多賽題278的要求:內(nèi)存管理、中斷處理等等,但整體過于簡(jiǎn)單了,而且很多技術(shù)已經(jīng)過時(shí):比如VGA顯示以及PIC8259實(shí)現(xiàn)外部中斷。

在初賽階段,我的工作主要是:

  1. 實(shí)現(xiàn)了以 PIC8259 為基礎(chǔ)的鼠標(biāo)中斷。

  2. 修改了內(nèi)存管理的部分,增加了一個(gè) 池化分配 的策略:在內(nèi)核初始化時(shí),提取分配一部分物理內(nèi)存到一個(gè)內(nèi)存池,分配時(shí)直接從池子取而無需調(diào)用內(nèi)存分配。

  3. 增加任務(wù)模塊,基于定時(shí)器中斷實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 時(shí)間片輪轉(zhuǎn)調(diào)度 的任務(wù)模塊。

  4. 將VGA文字模式升級(jí)為 VGA圖形模式,重構(gòu) printprintln 等輸出宏。

  5. 在第4點(diǎn)的基礎(chǔ)上,實(shí)現(xiàn)了一個(gè) 簡(jiǎn)單的圖形界面,包括一系列圖形繪制函數(shù)、窗口管理器以及事件管理器,通過事件循環(huán)模型不斷捕獲鼠標(biāo)、鍵盤中斷觸發(fā)的對(duì)應(yīng)事件做出行為。

我的項(xiàng)目叫 Rix-os,起這個(gè)名字一是致敬我第三喜歡的 Linux 發(fā)行版 NixOs,二是簡(jiǎn)短好記。新生的 Rix-os 非常簡(jiǎn)陋,一堆過時(shí)的 crate,沒有文件系統(tǒng),系統(tǒng)調(diào)用只實(shí)現(xiàn)了基本的 sys_exit 之類的,甚至有1/3左右的代碼來自別人。但幸好它幫我通過了初賽,總分36分取得了31分的成績(jī)。

進(jìn)入決賽后,我開始思考 “能讓我的項(xiàng)目和其他隊(duì)伍的項(xiàng)目區(qū)分開的東西是什么?”

最終我把重點(diǎn)放在了 圖形界面的優(yōu)化 上,出于以下考慮:

  1. 相較于其他模塊,圖形界面的優(yōu)化更容易 直觀對(duì)比 出來(主要是VGA圖形模式只有324*200的顯示率,過于模糊了)。

  2. 中斷、內(nèi)存這些模塊,一直都是OS方向的主題,功能賽道甚至有不少專門針對(duì)這方面的賽題,如果重點(diǎn)更新這里,可能會(huì)失去賽題本身的優(yōu)勢(shì)。

因此,我選擇了以更新圖形界面為主。更新圖形界面是個(gè)牽一發(fā)而動(dòng)全身的工程,我的具體升級(jí)路線大概是:

更新 bootloader,升級(jí)為用 UEFI 引導(dǎo)啟動(dòng)磁盤鏡像 → 更新內(nèi)存管理等模塊,使用新的 bootloader_api → 更新輸出方式,使用線性幀緩沖來作為輸出。

順便把中斷系統(tǒng)也更新為現(xiàn)代化的 APIC 實(shí)現(xiàn),拋棄了老舊的 8259pic 芯片。

----------

一些感想與祝福

復(fù)盤進(jìn)入決賽后的開發(fā),其實(shí)我個(gè)人認(rèn)為主要是開發(fā)時(shí)間不太夠,這點(diǎn)必須承認(rèn)。因?yàn)闆Q賽前的開發(fā)主要是在7-8月份,由于要準(zhǔn)備考研,其實(shí)留給開發(fā)的時(shí)間并不多。

當(dāng)然也和我本人的心態(tài)有關(guān),因?yàn)槲移鋵?shí)并沒有對(duì)決賽拿成績(jī)抱有特別大的期望,只要能夠去決賽的現(xiàn)場(chǎng)就已經(jīng)讓我非常滿足,后面拿到獎(jiǎng)項(xiàng)屬于是意外之喜。

所以希望大家能夠想清楚 這個(gè)比賽對(duì)自己意味著什么?需要付出多少來對(duì)待? 這是我認(rèn)為需要好好考慮的。

夏天是努力的季節(jié),希望大家在人生的每一個(gè)夏天都能做出對(duì)得起自己、對(duì)得起人生的決定,祝好!


相關(guān)課程

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

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