《os2atc-學生會場-張藝楓.pdf》由會員分享,可在線閱讀,更多相關《os2atc-學生會場-張藝楓.pdf(23頁珍藏版)》請在三個皮匠報告上搜索。
1、OopS:用Rust編寫的RISC-V操作系統開發經驗與體會張藝楓學校:哈爾濱工業大學(深圳)開發人員:李諾舟、劉嘉琛、張藝楓指導老師:夏文、仇潔婷01.OopS介紹02.03.04.OopS開發歷程為什么使用Rust心得與體會AgendaCSCC大賽要求各參賽隊綜合運用各種知識構思并實現一個綜合性的操作系統。大賽鼓勵各參賽隊充分了解所使用的編程語言及目標硬件平臺特點,使設計實現的操作系統能夠盡可能發揮目標硬件平臺能力以支持評測用例并提高應用的運行效率。各參賽隊可自行決定操作系統體系結構、內部功能規范、具體實現細節等。內核賽說明(摘自官網)OopS介紹:Rust編寫、RISC-V、宏內核操作系
2、統 開發人員:3個本科生;時間:6個月;代碼量:約15000 能夠在K210/QEMU上運行 支持84個系統調用,能運行:vi、gcc、rustc.還算OK的性能李諾舟內存模塊應用支持張藝楓進程模塊文件系統劉嘉琛文件系統驅動PART 02開發歷程TimelineQ1.開始學習Rust與rCore Tutorial以rCore Tutorial為藍本開發十余條系統調用,無文件系統Q2.完善(4-7月)VFS和FAT32 多核多線程 Busybox和sh 信號 Futex.Q3.優化 節約內存:lazy alloc、COW等 頁面置換 動態鏈接 VFS優化Q4.應用支持(8月)gcc、rustc、
3、sh、vi、binutils.6Q2.功能Q4.應用支持TimelineQ1.開始學習Rust與rCore Tutorial以rCore Tutorial為藍本開發十余條系統調用,無文件系統Q2.完善(4-7月)VFS和FAT32 多核多線程 Busybox和sh 信號 Futex.Q3.優化 節約內存:lazy alloc、COW等 頁面置換 動態鏈接 VFS優化Q4.應用支持(8月)gcc、rustc、sh、vi、binutils.7Q2.功能Q4.應用支持文件系統抽象:虛擬文件系統+“一切皆文件”劃分職責:VFS:掛載、路徑解析、訪問控制FAT32:具體I/O的實現Dirent Cach
4、e:加快路徑解析FileIndex:(FileSystemID,FileID)與 掛載表 實現掛載文件系統沿用Unix“一切皆文件”的思想利用Rust的trait實現了文件的多態和文件類型的繼承e.g.e.g.多核多線程 為了實現多核多線程,對進程模型進行重構。將各種數據結構(資源)從任務控制塊中剝離,由獨占變成可共享 資源的共享由clone系統調用的CloneFlag指定 如果CloneFlag包含CLONE_THREAD,則父子進程處于同一線程組。TimelineQ1.開始學習Rust與rCore Tutorial以rCore Tutorial為藍本開發十余條系統調用,無文件系統Q2.完善
5、(4-7月)VFS和FAT32 多核多線程 Busybox和sh 信號 Futex.Q3.優化 節約內存:lazy alloc、COW等 頁面置換 動態鏈接 VFS優化Q4.應用支持(8月)gcc、rustc、sh、vi、binutils.11Q2.功能Q4.應用支持內存優化背景:k210內存大小只有8M 但是 需要運行1-96個lmbench程序需要:節省內存+頁面置換1,Lazy Allocation用戶堆、用戶棧、mmap區域在用到的時候才分配物理內存2,Copy on Write父子進程共享物理頁,寫時復制。內存優化Exec:Copy MapExec將文件映射到程序的虛擬地址空間,而不
6、是將文件內容拷貝到物理內存優化前只能同時跑8個lmbench,優化后能跑64個,但是還不夠。頁面置換實現頁面置換后,成功在QEMU上運行96個lmbench。但是由于K210的內存特性引發了一個難以排查的bug,導致在K210運行失敗。近似LRU的局部頁面置換算法hash table記錄(被置換的VPN、換出的文件位置)TimelineQ1.開始學習Rust與rCore Tutorial以rCore Tutorial為藍本開發十余條系統調用,無文件系統Q2.完善(4-7月)VFS和FAT32 多核多線程 Busybox和sh 信號 Futex.Q3.優化 節約內存:lazy alloc、COW
7、等 頁面置換 動態鏈接 VFS優化Q4.應用支持(8月)gcc、rustc、sh、vi、binutils.15Q2.功能Q4.應用支持應用1,支持了busybox的大部分功能,包括了busybox的sh和vi2,移植了binutils,支持objdump和readelf等重要工具應用3,以musl-libc作為標準庫的gcc編譯工具鏈4,移植了rustc,能夠編譯使用std庫的rust程序應用在OopS內核中編輯、編譯、并執行rust和C程序PART 03為什么使用Rust?Why Rust?剛開始是因為好奇,在開發過程中切實體會到了Rust帶來的好處 優秀的工具:rustc cargo ru
8、stup 優秀的社區:crates.io,包含大量有用的Package。節省開發時間:完善的core庫,避免重復造輪子。節省運行時間:零成本抽象;速度堪比C/C+。節省找bug時間:強制的內存安全+并發安全+錯誤處理,有效解決data race和懸垂指針等未定義行為,讓編譯器幫開發者找出低級的bug。Why Rust?由開發人員管理ref_count在對象結束時,由開發者顯示調用所有權+生命周期+drop實現RAII:將釋放資源的時機交給編譯器,減少開發人員的心智負擔。用Arc管理ref_count由編譯器負責釋放資源的時機PART 04心得與體會體會 擁抱開源,從互相競爭轉變為互相學習 站在前人的肩膀上,更進一步 開發OS與參賽的過程也是學習的過程 感謝謝謝!