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 Architections软件开发人员的手册作为我的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规范