Chengcheng OS(CCO)是一個愛好64位操作系統。我在x86上寫它,因為我喜歡悲傷和痛苦。這個項目仍在開發中。我是操作系統設計的初學者。我實施的許多設計概念都受到Windows NT的啟發,例如CCLDR(CCLEDER的OS加載器)和內存管理器。而且,在整個幾個月中,我需要學習更多課程。因此,我不會經常更新項目。

UEFI
CCO使用UEFI來引導CCOSKRNL。 UEFI極大地促進了OS裝載機的開發。開發人員可以直接調用UEFI提供的接口(使用C語言而不是彙編)。這裡有一件事要注意,CCOS仍然需要CCLDR(另一個二進制可執行文件)來加載CCOSKRNL。這有點像“第二階段啟動加載器”。但是實際上,bootx64.EFI只是簡單地將內核空間劃分,並為CCOSKRNL圖像加載尋找合適的物理內存空間。然後,CCLDR將將內核空間映射到虛擬地址空間的高地址並設置GDT(全局描述符表,X86體系結構的重要結構。)。
多處理器
對我來說,多處理器的支持是一個巨大的挑戰。我不能保證良好的多處理器系統實施。目前,CCO可以正確活躍其他應用程序處理器。與其他操作系統演示一樣,CCO將應用程序處理器初始化例程放在孤立的二進製文件處,並將其加載到第一個1 MIB的物理內存中,並分別構造存儲空間的頁面表。在運行應用程序處理器之前,CCO將修復二進製程序的相對地址的引用。我必須承認,這是一個愚蠢的設計。
APIC
APIC(高級可編程中斷控制器)是現代計算機系統中的關鍵組件。它提供了多處理器系統的可能性,並支持硬件級別的多級中斷優先級。不幸的是,APIC很複雜。由於充分了解APIC需要計算機系統的合理知識,因此我僅實現了APIC的基本驅動力。
trueType
CCO通過渲染TrueType字體在屏幕上顯示字符(CCOS中的默認字體為Adobe Source Han Sans SC VF )。使用TrueType渲染輸出字符不值得。對於早期的OS開發,使用Bitmap字體是字符輸出的推薦方法。
概述可能只需要每個字符的大綱即可生產該角色OS的所有尺寸,可能只需要一個大綱。可以將單個輪廓縮放到不同尺寸的巨大範圍,其中一些如下所示。這使得可以在不同分辨率的監視器上顯示相同的字符,並以大量不同的尺寸打印出來。縮放角色大綱是一個簡單的數學操作,就像其他轉換一樣,例如旋轉和反射。
TrueType的結構很複雜,我僅在不暗示TRUETYPE的情況下實現了字體rasterizer。暗示是TrueType的核心。它的發明者註意到“正確”提示類型的意見多樣性,認為沒有單一的暗示範式對類型開發人員強加於這種範式。取而代之的是,他們將相對簡單的柵格器與新的解釋的編程語言聯繫起來。但是,對於字體可讀性,這足夠了。
這是這裡的cirtical issus,即CCO的文本輸出的預性是非常池。表現不佳將嚴重降低CCO的運行。我不知道如何優化函數,因為字體圖是一個相對複雜的過程。另一種方法是使用bitmap字體將其用於TRUETYPE字體。
寬字符
CCO提供兩種字符類型,“ char”和“ wch_t”(寬字符,4個字),用於存儲所有字符。不管字符類型如何,CCO始終首先轉換WCH_T,然後輸出寬字符串。實際上,CCOS中的TrueType解析器僅使用“ Unicode 2.0及以上語義”,該平台ID = 0,並在CMAP中編碼ID = 3(CMAP-字符 - 字符到Glyph索引映射表,TrueType中的曲線。)。因此,它僅支持Unicode基本多語言平面字符(u+0000到U+FFFF)。
內存管理器
內存管理的設計思想是受Window NT的啟發,其中包含PFN數據庫,Lookside,Page-directory自映射方案,層壓內存池管理等,但不是全部。
具有多窗口的圖形輸出
CCO支持多窗口,這意味著它可以在屏幕上的不同窗口中輸出文本。通過向每個處理器打開文本輸出窗口來調試多處理器,這是非常有利的。即使沒有鼠標驅動程序,用戶也可以使用鍵盤選擇要輸入字符的窗口。
錯誤修復:添加自旋鎖以防止多個Windows輸出的衝突
帶有內存洩漏檢測的動態內存管理器
系統PTE管理
PCIE管理
NVME驅動程序
鍵盤驅動器(不緊急)
QEMU,帶2 GIB RAM或更高
我只是大致劃分了內存空間,以便內核空間僅使用availabe ram的四分之一。但是問題需要注意到getMemorymap()例程在嘗試為QEMU分配較高的RAM(大於2 GIB)時,返回了錯誤的內存映射信息。我不是嘗試其他OVMF固件,所以我想可能源於我的OVMF。
X86_64 CPU(Intel或AMD)帶有AVX指令集
Intel 64和AMD64之間的X86_64體系結構編程存在略有差異。我正在基於AMD CPU開發CCO,但使用Intel®64和IA-32 Architectures軟件開發人員的手冊作為我的X86_64 Architechure參考手冊。但是,無論CPU供應商如何。
要安裝,請參考CCOSKRNL構建
數學庫(Reflibs/libm.a)由@Ettrella提供
沒有許可證。
電子郵件:[email protected]
Chengcheng OS:https://github.com/ccoskrnl/ccoskrnl
Intel®64和IA-32體系結構軟件開發人員手冊
AMD64架構程序員手冊2:系統編程
C編程語言
OSDEV WIKI
ACPI規範
UEFI規範