Chengcheng OS (CCOS) adalah sistem operasi hobi 64 bit. Saya menulisnya di x86, karena saya suka kesedihan dan kesengsaraan. Proyek ini masih berkembang. Saya seorang pemula untuk desain sistem operasi. Banyak konsep desain yang telah saya terapkan terinspirasi oleh Windows NT seperti CCLDR (OS Loader untuk Chengcheng OS) dan memori Manajer. Dan, ada lebih banyak kursus yang perlu saya pelajari di bulan -bulan yang datang. Jadi, saya tidak akan sering memperbarui proyek.

Uefi
CCO menggunakan UEFI untuk bootstrap ccoskrnl. UEFI sangat memfasilitasi pengembangan Loader OS. Pengembang dapat secara langsung memanggil antarmuka yang disediakan oleh UEFI (gunakan bahasa C alih -alih perakitan). Ada satu hal yang perlu diperhatikan di sini, bahwa CCO masih membutuhkan CCLDR (file biner lain yang dapat dieksekusi) untuk memuat ccoskrnl. Ini agak seperti "loader boot tahap kedua". Namun pada kenyataannya, bootx64.efi hanya membagi ruang kernel dan mencari ruang memori fisik yang cocok untuk pemuatan gambar ccoskrnl. Kemudian CCLDR akan memetakan ruang kernel ke dalam alamat tinggi ruang alamat virtual dan mengatur GDT (tabel deskriptor global, struktur yang signifikan untuk arsitektur x86.)
Multi-prosesor
Dukungan multi-prosesor adalah tantangan besar bagi saya. Saya tidak menjamin implementasi sistem multi-prosesor yang baik. Untuk saat ini, CCO dapat dengan benar aktif prosesor aplikasi lainnya. Tidak seperti demo sistem operasi lainnya, CCOS menempatkan inisialisasi prosesor aplikasi rutin pada file biner yang terisolasi dan memuatnya ke dalam 1 MIB memori fisik pertama dan membangun secara terpisah tabel halaman untuk ruang memori. Sebelum prosesor aplikasi berjalan, CCO akan memperbaiki kutipan alamat relatif dari program biner. Saya harus mengakui, ini adalah desain yang bodoh.
Apik
APIC (canggih yang dapat diprogram interupsi) adalah komponen penting dalam sistem komputer modern. Ini memberikan kemungkinan untuk sistem multi-prosesor dan mendukung prioritas interupsi bertingkat pada tingkat perangkat keras. Sayangnya, APIC rumit. Karena untuk sepenuhnya memahami kebutuhan APIC yang sehat tentang sistem komputer, saya hanya menerapkan driver dasar APIC.
Truetype
CCOS menampilkan karakter di layar melalui rendering truetype font (font default di CCOS adalah adobe source han sans sc vf ). Tidak ada gunanya menampilkan karakter menggunakan rendering truetype. Untuk pengembangan OS awal, menggunakan font bitmap lebih disarankan metode output karakter.
Mungkin hal terbesar tentang menyimpan karakter sebagai garis besar adalah bahwa hanya satu garis besar yang diperlukan untuk menghasilkan semua ukuran karakter yang dibutuhkan OS. Garis tunggal dapat diskalakan ke berbagai ukuran yang berbeda, beberapa di antaranya diilustrasikan di bawah ini. Ini memungkinkan karakter yang sama ditampilkan pada monitor dari resolusi yang berbeda, dan dicetak pada sejumlah besar ukuran yang berbeda. Untuk skala garis besar karakter adalah operasi matematika yang sederhana, karena memang transformasi lain seperti rotasi dan refleksi.
Struktur truetype itu kompleks, saya hanya menerapkan rasterizer font tanpa mengisyaratkan truetype. Mengisyaratkan adalah jantung dari truetype. Penemunya, sadar akan keragaman pendapat tentang cara "benar" untuk mengisyaratkan tipe, memutuskan tidak ada satu pun paradigma yang mengisyaratkan yang akan mereka lakukan pada pengembang tipe. Sebaliknya, mereka mengaitkan rasterizer yang relatif sederhana dengan bahasa pemrograman baru yang ditafsirkan. Namun, untuk keterbacaan font, ini sudah cukup.
Ini adalah issus cirtikal di sini, yaitu preformensi output teks CCO sangat sangat kumpulan. Kinerja buruk akan secara serius memperlambat menjalankan CCO. Saya tidak tahu bagaimana mengoptimalkan fungsi karena gambar font adalah proses yang relatif kompleks. Metode lain adalah menggunakan font bitmap untuk sebagai gantinya font truetype.
Char lebar
CCOS menawarkan dua jenis karakter, "char" dan "wch_t" (wide char, 4-bytes), untuk menyimpan semua karakter. Terlepas dari jenis karakternya, CCO selalu mengonversi WCH_T terlebih dahulu, kemudian mengeluarkan string lebar. Faktanya, parser truetype di CCO hanya menggunakan "unicode 2.0 dan seterwards semantik", platform id = 0 dan encoding id = 3 dalam cmap (cmap - karakter ke tabel pemetaan indeks glyph, struture in truetype.). Oleh karena itu, secara eksklusif mendukung karakter bidang multibahasa unicode dasar (U+0000 ke U+FFFF).
Manajer Memori
Ide-ide desain manajemen memori terinspirasi oleh Window NT, yang berisi database PFN, lookside, skema pemetaan diri-direktori halaman, manajemen kumpulan memori laminasi dan sebagainya, tetapi tidak semua.
Output grafis dengan multi-windows
CCOS mendukung multi-windows, yang berarti dapat mengeluarkan teks di layar yang berbeda di layar. Ini adalah debug multi-prosesor melalui membuka jendela teks-output untuk setiap prosesor. Bahkan jika tidak memiliki driver mouse, pengguna juga dapat menggunakan keyboard untuk memilih jendela mana yang perlu dimasukkan karakter.
Perbaikan Bug: Tambahkan Spinlock untuk mencegah konflik output beberapa windows
Manajer Memori Dinamis dengan Deteksi Kebocoran Memori
Manajemen Sistem PTE
Manajemen PCIE
Driver NVME
Driver keyboard (tidak mendesak)
Qemu dengan 2 gib ram atau lebih tinggi
Saya baru saja membagi ruang memori sedemikian rupa sehingga ruang kernel hanya menggunakan seperempat dari Availalbe Ram. Tetapi masalah perlu memperhatikan bahwa getMemoryMap () rutin mengembalikan informasi peta memori yang salah ketika mencoba mengalokasikan RAM yang lebih tinggi (lebih besar dari 2 GIB) untuk QEMU. Saya tidak mencoba firmware OVMF lainnya, jadi saya kira kesalahan seperti itu mungkin berasal dari OVMF saya.
x86_64 CPU (Intel atau AMD) dengan set instruksi AVX
Ada sedikit perbedaan pada pemrograman arsitektur x86_64 antara Intel 64 dan AMD64. Saya sedang mengembangkan CCO berdasarkan AMD CPU tetapi menggunakan Manual Pengembang Perangkat Lunak Intel® 64 dan IA-32 sebagai manual referensi arsitecure x86_64 saya. Namun, untuk saat ini, apa pun vendor CPU.
Untuk instalasi, silakan merujuk ke ccoskrnl build
Perpustakaan Matematika (reflibs/libm.a) disediakan oleh @estrella
Tidak ada lisensi.
E-mail: [email protected]
Chengcheng OS: https://github.com/ccoskrnl/ccoskrnl
Intel® 64 dan IA-32 Architectures Software Developer's Manuals
AMD64 Arsitektur Manual Programmer Volume 2: Pemrograman Sistem
Bahasa pemrograman C
Osdev Wiki
Spesifikasi ACPI
Spesifikasi UEFI