编写自己可行的操作系统六个月

图片

背景知识


你好 我绝对欢迎大家,今天我想向您介绍我为x86架构编写可行的OS的经验。

在一个春夜里,我有一个绝妙的主意-尝试编写自己的操作系统,该操作系统可以让您运行程序,与设备一起使用,并且通常根据需要从Intel的架构中挤出所有功能:例如,为您的工厂或其他。 我的目标是并且正在编写一种这样的操作系统,它可以为某些特定任务提供最佳性能,而不会在各种过多的事情上浪费CPU时间。 我主要追求运动兴趣,在系统编程方面为自己积累了经验,并为无所不在的设备编写了驱动程序。 由您决定结果是什么,我将立即说您不必编写有关创建自己的Linux发行版的评论,而我有兴趣编写“从头开始”的所有内容-从头开始,以便深入研究OSdev主题。 我要对本杰明·伦特(Benjamin Lunt)和OSDev论坛以及他们的Wiki表示深深的谢意。 Ben帮助我处理了EHCI,这无疑为我的操作系统做出了巨大贡献-USB设备无处不在! 我还承担了创建自己的体系结构(对我来说很方便)的任务,这并不排除使用ELF文件标准。 好吧,让我们说清楚。
UPD:所有信息都可以在tyk组中找到,还有一则贴有停靠和图片的帖子(旧的,现在我要为稳定版添加停靠

怎么办


现在,我的操作系统可以使用USB闪存驱动器,鼠标,键盘,AHCI磁盘,PCI IDE控制器,APIC和ACPI,实现了多任务处理,程序启动,文件流传输,SVGA驱动程序在0x118 VBE模式下工作, DNS,DHCP,TCP,UPD,IPv4,HTTP,完整的FAT32驱动程序,RTL8139(69)驱动程序和Intel千兆以太网工作。

窗口系统与我的SVGA实施一起,可以产生多达120 FPS的图像,并且可以完全重绘屏幕。 让我们继续介绍如何实现所有这些以及通常如何工作。

如何运作?


首先,我编写了一个引导加载程序,该加载程序读取带有FAT32内核的辅助引导加载程序。 第二个引导程序进入保护模式并跳转到内核,在该内核中我加载并配置IDT,然后初始化PCI设备,启动内核并启动CMD。

有人会问,您如何通过SVGA达到这样的性能? 答案很简单:汇编程序,汇编程序和再次汇编程序。 并非没有SSE指令,这将大大加速内存复制。 例如,以下是用于在LFB(线性帧缓冲区)中复制视频缓冲区的代码:

.byte 0x60#Save registers in stack
mov %2,%%ecx 	#Repeat count to ecx
mov %0,%%edi 	#Video memory start to edi
mov %1,%%esi 	#Video buffer start to esi
ww1sse2:
	movaps  (%%esi),%%xmm0 #Copy 16 bytes to xmm0 from buffer
	movaps 	%%xmm0,(%%edi) #Copy from xmm0 to video memory
	movaps  16(%%esi),%%xmm0	#16 again, but + 16 from current
	movaps 	%%xmm0,16(%%edi)	#16 again, but + 16 from current
	movaps  32(%%esi),%%xmm0	#16 again, but + 32 from current
	movaps 	%%xmm0,32(%%edi)	#16 again, but + 32 from current
	movaps  48(%%esi),%%xmm0	#16 again, but + 48 from current
	movaps 	%%xmm0,48(%%edi)	#16 again, but + 48 from current
	add 	$64,%%edi	#Add 64 bytes to edi
	add 	$64,%%esi	#Add 64 bytes to esi
	dec%%ecx#Decrement count
	#test 	%%ecx,%%ecx #Compare ecx with zero
	jnz 	ww1sse2 	#If not zero, repeat again
.byte 0x61	#Restore registers from stack

, , , .

— «Watermark Allocator». , , , ..

-, .
MS-DOS: — . MBR , GPT .


— - , — .

, , — , , : , VIM.

, : , , return , - . , , - , .


: , , , , . — , , — — return'.


, , -, .

— - , - - , , ( , ) — , , .

!

Source: https://habr.com/ru/post/zh-CN426525/


All Articles