這是我創建的第一個操作系統。它用兩種語言編寫:C語言和彙編。
該項目自2017年12月15日以來已被激活

工作計劃
引導加載程序
風俗
引導部門
階段2
g
核心
內存管理
頁面框架分配器
動態內存分配
建築系統
寫信給VGA
CPU中斷(IDT,ISRS,IRQ等)
從PS/2鍵盤讀取字符
從PS/2鍵盤讀取字符串
虛擬內存(分頁,幀等)
頁面框架分配和分配
動態內存分配(LIBALLOC)
CPU計時器
獲取CPU信息
實時時鐘:所以我們可以知道電影何時開始
內核堆棧跟踪
多任務
用戶模式進程
硬盤驅動器
軟盤驅動器
文件系統
圖形用戶界面
該操作系統使用2階段的引導加載程序。如果第二階段是我們進入受保護模式並調用內核時。
我的軟盤圖像的前512個字節包含引導扇區,該啟動扇區有很多保護模式無法做到的事情。 (例如,從磁盤加載東西)。然後,它跳到以0x7E00 (引導扇區之後)加載的第二階段。
此階段將加載GDT並進入受保護的模式,然後將啟動扇區加載的內核在0x1000到0x100000 (1 MB)。最後跳!
內核的大小總是在增長,但我不能總是增加加載扇區。作為解決方案。我決定使用grub。內核被存儲為ELF圖像( kernel.img ),該CD使用ISO 9660作為其文件系統。 GRUB還支持Multiboot,因此我的操作系統可以與其他人(Windows,Linux等)一起使用。
我們進入了受保護的模式,這意味著我們無法訪問BIOS功能。因此,此內核需要重新實現這些功能來控制硬件。
現在,我已經重新實現了標准設備:屏幕和鍵盤。在進一步的發展中。我將實現磁盤驅動程序。
該操作系統同時使用分段和分頁來提供內存保護。在我的全局描述符表中,我列出了5個段描述符:
空段
內核的代碼段:我的內核代碼屬於的段
內核的數據段:我的內核全局變量屬於的段
用戶的代碼段:當前不使用
用戶的數據段:與4相同
我也啟用了分頁。現在,我故意將第一頁表中的第四頁映射到not-present和read-only內容,因此您可以通過執行輸入我的OS命令行中的bsod來生成頁面故障。

該內核提供了一個頁面框架分配器,因此內存管理將更加方便,我將更容易接近多任務處理。
正如Jamesm的教程所暗示的那樣,我將使用bitset來確定框架是否免費。
1: Allocated 0: Free
v v
frame_bitset: 11110111110101111101111111
^
get_free_frame()
我目前已經實施了一個沒有免費免費的安置malloc ,因為內核使用的所有變量在關閉勢之前都不需要釋放。
Heap Allocation
-----------------------------------------------
Allocated |
Memory | Free.......until the end of memory
|
-----------------------------------------------
因為我很懶惰,所以我移植了一個名為liballoc的第三方內存分配器,它在我的操作系統中只需要很少的功能。
該項目使用GNU製作來構建。因此,構建方法是鍵入make ,如果在構建過程中發生任何問題,請在make之前鍵入make dep 。如果仍然陷入困境,請打開一個問題。
如果您不使用Linux或WSL(用於Linux的Windows子系統),則需要從此處下載交叉編譯器。然後在config.mk中修改CC和LD 。