Menulis OS Anda sendiri yang bisa diterapkan selama enam bulan

gambar

Latar belakang


Halo Saya dengan senang hati menyambut semua orang, hari ini saya ingin memberi tahu Anda tentang pengalaman saya menulis OS yang bisa diterapkan untuk arsitektur x86.

Suatu malam di musim semi, saya memiliki ide cemerlang - untuk mencoba menulis OS Anda sendiri, yang dapat memungkinkan Anda untuk menjalankan program, bekerja dengan perangkat, dan, secara umum, memeras semua kekuatan dari arsitektur Intel dalam kebutuhan Anda: misalnya, untuk pabrik Anda atau yang lainnya. Tujuan saya adalah menulis OS yang memungkinkan kinerja maksimum untuk beberapa tugas tertentu tanpa membuang waktu CPU untuk segala macam kelebihan. Pada dasarnya, saya hanya mengejar minat olahraga, mendapatkan pengalaman untuk diri saya sendiri dalam pemrograman sistem dan menulis driver untuk perangkat yang digunakan di mana-mana. Terserah Anda untuk memutuskan apa yang terjadi, saya akan katakan segera bahwa Anda tidak perlu menulis komentar tentang membuat distribusi Linux Anda sendiri, dan saya tertarik untuk menulis segalanya "Dari awal" - dari awal, untuk menyelami tema OSdev. Saya ingin menyampaikan terima kasih yang mendalam kepada Benjamin Lunt dan forum OSDev, serta Wiki mereka. Ben membantu saya menangani EHCI, yang tidak diragukan lagi membuat kontribusi besar untuk OS saya - perangkat USB, mereka ada di mana-mana! Saya juga memiliki tugas untuk menciptakan arsitektur saya sendiri, nyaman bagi saya, tidak termasuk penggunaan standar file ELF. Baiklah, mari kita langsung ke intinya.
UPD: semua info dapat ditemukan di grup tyk , ada juga pos dengan dok dan gambar (lama, sekarang saya menambahkan dok untuk versi stabil)

Apa yang dilakukan


Sekarang OS saya dapat bekerja dengan USB flash drive, mouse, keyboard, AHCI disk, PCI IDE controller, APIC dan ACPI, menggantikan multitasking diimplementasikan, program diluncurkan, streaming bekerja dengan file, driver SVGA, yang bekerja pada mode VBE 0x118, DNS, DHCP, TCP, UPD, IPv4, HTTP, driver FAT32 lengkap, driver RTL8139 (69) dan Intel Gigabit Ethernet berfungsi.

Sistem jendela, bersama dengan implementasi saya SVGA, memungkinkan untuk menghasilkan sebanyak 120 FPS dengan redraw lengkap layar. Mari kita beralih ke bagaimana ini semua diterapkan dan secara umum dapat bekerja.

Bagaimana cara kerjanya?


Untuk memulainya, saya menulis bootloader yang membaca bootloader sekunder dengan kernel dengan FAT32. Bootloader kedua memasuki mode terlindungi dan melompat ke kernel, tempat saya memuat dan mengkonfigurasi IDT, setelah itu saya menginisialisasi perangkat PCI, mulai kernel dan mulai CMD.

Seseorang akan bertanya, bagaimana Anda mencapai kinerja seperti itu dengan SVGA? Jawabannya sederhana: assembler, assembler dan assembler lagi. Bukan tanpa instruksi SSE, yang sangat mempercepat penyalinan memori. Misalnya, berikut adalah kode untuk menyalin buffer video di LFB (Linear Frame Buffer):

.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/id426525/


All Articles