--- title: 2025 年 Linux 核心設計課程作業 —— kxo (F) image: https://hackmd.io/_uploads/r1ob8RIaa.png description: 藉由改寫井字遊戲來熟悉數值系統和核心程式設計 tags: linux2025 --- # N04: kxo > 主講人: [jserv](https://wiki.csie.ncku.edu.tw/User/jserv) / 課程討論區: [2025 年系統軟體課程](https://www.facebook.com/groups/system.software2025/) :mega: 返回「[Linux 核心設計](https://wiki.csie.ncku.edu.tw/linux/schedule)」課程進度表 ## :penguin: 作業要求 * 自 GitHub [kxo](https://github.com/sysprog21/kxo) 進行 fork,你的任務是縮減使用者和核心層級的通訊成本,並允許並行的對奕 * 參照〈[並行程式設計:排程器原理](https://hackmd.io/@sysprog/concurrency-sched)〉,引入若干 coroutine (注意:不得使用 POSIX Thread,採取教材提到的實作方式),分別對應到 AI~1~, AI~2~ (具備玩井字遊戲的人工智慧程式,採取不同的演算法,可指定運作於使用者/核心層級) 和鍵盤事件處理,意味著使用者可連續觀看**多場**「電腦 vs. 電腦」的對弈,當按下 Ctrl-P 時暫停或回復棋盤畫面更新 (但運算仍持續)、當按下 Ctrl-Q 時離開「電腦 vs. 電腦」的對弈,注意不該使用 (n)curses 函式庫。當離開「電腦 vs. 電腦」的對弈時,`ttt` 應顯示多場對弈的過程,亦即類似 `Moves: B2 -> C2 -> C3 -> D3 -> D4` 的輸出,儘量重用現有的結構體和程式碼。 > 關於鍵盤事件和終端機畫面的處理機制,可參見 [mazu-editor](https://github.com/jserv/mazu-editor) 原始程式碼和〈[Build Your Own Text Editor](https://viewsourcecode.org/snaptoken/kilo/)〉。 * 在「電腦 vs. 電腦」的對弈模式,比照前述 load average 的計算方式,規範針對下棋 AI 的 load 機制,並運用定點數來統計不同 AI 實作機制對系統負載的使用率,整合到畫面輸出,開發過程中應有對應的數學分析和羅列實作考量因素。 * 對弈的過程中,要在螢幕顯示當下的時間 (含秒數),並持續更新。 * 原本 [kxo](https://github.com/sysprog21/kxo) 棋盤繪製在核心模式,你應該修改程式碼,使畫面呈現的部分全部在使用者層級,且善用 bitops,降低核心和使用者層級之間的通訊成本,應給予相關量化 * 自 [jserv/ttt](https://github.com/jserv/ttt) 移植 reinforcement learning (RL) 到 [kxo](https://github.com/sysprog21/kxo) 核心模組,使其得以動態切換。 * * 填寫 [Google 表單](https://docs.google.com/forms/d/e/1FAIpQLScc1dcM1LETKO3mCIyr3hPjbfECRc4IXhBKKnqvJpajdqj8tQ/viewform?usp=dialog),提交開發紀錄,當系統檢查完畢時,預期將在 :rocket: [作業區](https://hackmd.io/@sysprog/linux2025-homework3)見到登記的 HackMD 超連結 * 截止日期: Apr 11, 2025
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up