minos 0 前(廢)言(話)

Rand_CS發表於2024-06-08

- 首發公號:Rand_cs

minos 0 前(廢)言(話)

從今天開始開啟一個新的系列,講述虛擬化的那些事兒。時隔上次發文又隔了好幾個月了,主要是平時工作比較忙,沒太多時間精力維護部落格之類的。

前一個系列 SELinux 沒寫完,但也不算太監,比較重要的基本都介紹了。剩下的就是 Linux 中關於 SELinux 驅動以及 libselinux 中的程式碼,關鍵部分的程式碼我基本捋了一遍,有些多,我也就懶得花時間整理了,我估計這玩意兒也沒多少人感興趣,懂這原理後實際用處也不大,感興趣的可以去瞅瞅這程式碼,有問題的可以找我交流。SELinux 這東西應用是最重要的,就是策略,策略才是核心。這個在 Android 可能用的比較多,新增服務,應用,cts 測試等等可能都會遇到過 SELinux 策略的問題。從接觸到現在,我也解決過許多 SELinux 相容性的問題,簡單的問題網上解決方式一大堆,比較複雜的 case,礙於公司事項,也不好實際拿出來講,所以 SELinux 應用方面也就先不講述了,這個系列就先到此為止,後面有緣再續。

回到虛擬化,虛擬化一直是我感興趣的方向,工作之餘一直有慢慢抽時間去了解學習。從課堂上接觸到作業系統的時候,那是還是一個小菜鳥,對於作業系統課程各種抽象的說辭很是不解,為此去仔細研究了 xv6,基本做到了每行程式碼細細研究,終於對於作業系統有了一個比較直觀的認識。至少說,虛擬記憶體、程序執行緒、上下文切換、shell 程式等等這些當時對我來說特別抽象的名詞有了清晰的認識,並且從硬體到軟體明白了它們是如何工作的。我印象最深的就是 shell 程式,當時書上還有老師給來了一句抽象的解釋,shell,殼兒嘛,包裹著核心,透過 shell 程式我們執行命令程式,進入核心。當時我就直接懵逼了,,,這,這,這,可以這麼解釋的嘛。

又扯了太多,深夜寫文章就是話多哈哈哈哈,再次回到虛擬化。虛擬化的話題也很大,而這個系列主要集中在 type1 型別的虛擬化。對於虛擬化相關的文章,網頁上很多,寫得很好的不計其數,我印象很深的,知乎上有個叫蘭新宇大佬的部落格,寫得很好,推薦:https://www.zhihu.com/people/lan-xin-yu;

但總的來說,還是抽象了,沒有落到實際的程式碼,有些東西終究模糊。原始碼之下,了無秘密,還是得看程式碼去學習虛擬化的一些知識。平時精力有限,一些耳熟能詳的虛擬化方案太複雜,不太適合直接上手閱讀學習。在網上搜尋了一番,終於找到了一款小巧功能完整的 type1 型別的虛擬化方案。

此專案地址:https://github.com/minosproject/minos/tree/master 。看名字應該是一位叫做 樂敏 的大佬的專案,感謝這位大佬的專案,讓我們有機會更加深入的接觸到虛擬化的世界。

此專案的程式碼關鍵部分基本看完了,可以拿出來和大家分享分享。這次講述可能不會像之前 xv6 那樣詳細到每行程式碼,大部分只是捋一下流程,有程式碼的那種比較清晰的流程。主要包括以下幾個方面:

1. 記憶體虛擬化,也就是 hyp 如何對記憶體進行管理的
2. CPU 虛擬化,也就是 hyp 如何對程序進行管理的
3. 中斷虛擬化,捋清楚在有虛擬化的情況下,各種中斷是如何路由與處理的
4. IO 虛擬化,也就是虛擬機器之間,虛擬機器與 hypervisor 之間,虛機與物理硬體之間等等如何進行資料互動的

核心的大概就上面這些,其他的隨緣,後面看時間精力來吧。目前這個系列前半部分——主要講述上述虛擬化流程,基本已經寫完了,這也是為什麼擱了那麼久才發文的一個原因,想著自己對 minos 有個整體把握,相關文章初稿都寫完後,再慢慢發出來。

- 首發公號:Rand_cs

相關文章