JSIX adalah sistem operasi multi-core x64 khusus yang saya bangun dari awal. Jauh dari selesai, atau bahkan dapat digunakan (lihat bagian status dan peta jalan , di bawah) tetapi semua fitur kernel utama yang saat ini direncanakan sekarang diimplementasikan untuk setidaknya tingkat yang lumayan.
Tujuan desain proyek adalah:
Modernitas - Saya tidak tertarik merancang sistem warisan, atau menjalankan semua perangkat keras di luar sana. Target saya hanya arsitektur 64 bit, dan perangkat keras komoditas modern. Saat ini itu berarti sistem x64 dengan nehalem atau firmware CPU dan UEFI yang lebih baru. ;
Modularitas - Saya ingin menarik sebanyak mungkin sistem ke dalam proses yang terpisah, dengan cara microkernel. Sub-tujuan ini adalah untuk mengeksplorasi di mana hambatan microkernel seperti itu sekarang, dan apakah menghindari perangkat keras warisan akan memungkinkan saya merancang sistem yang kurang macet oleh masalah microkernel tradisional.
Eksplorasi - Saya benar -benar kebanyakan melakukan ini untuk bersenang -senang belajar dan mengeksplorasi pengembangan OS modern. Implementasi fitur awal dapat sementara membuang desain modular untuk memungkinkan eksplorasi perangkat keras terkait.
Catatan tentang nama: Kernel ini awalnya bernama Popcorn, tetapi sejak itu saya menemukan bahwa proyek Popcorn Linux juga mengembangkan kernel dengan nama itu, dimulai sekitar waktu yang sama dengan proyek ini. Jadi saya telah mengganti nama kernel ini (selalu ditata JSIX atau j6 , tidak pernah dikapitalisasi) sebagai penghormatan kepada L4, xv6, dan istri saya yang luar biasa.
Area fitur utama berikut adalah target untuk pengembangan JSIX:
Selesai. Bootloader memuat kernel dan program ruang pengguna awal, dan mengatur argumen kernel yang diperlukan tentang peta memori dan EFI GOP Framebuffer. Gagasan masa depan yang mungkin:
Memori virtual: Cukup. Kernel mengelola memori virtual dengan sejumlah jenis objek vm_area yang mewakili area yang dipetakan, yang dapat dimiliki oleh satu atau lebih objek vm_space yang mewakili seluruh ruang memori virtual. (Setiap proses memiliki vm_space , dan begitu pula kernel itu sendiri.)
Tersisa untuk dilakukan:
Alokasi halaman fisik: Cukup. Implementasi alokasi halaman fisik saat ini menggunakan sekelompok blok yang mewakili area terbaru dari memori yang dapat digunakan sebagaimana didefinisikan oleh bootloader. Setiap blok memiliki bitmap tiga tingkat yang menunjukkan halaman gratis/bekas.
Pekerjaan di masa depan:
Memadai. Objek Penjadwal Global menyimpan daftar siap/diblokir yang terpisah per inti. Core secara berkala berusaha menyeimbangkan beban melalui pencurian kerja.
Tugas ruang pengguna dapat membuat utas serta proses lainnya.
SYSCALL: Cukup. Tugas ruang pengguna dapat membuat syscall ke kernel melalui instruksi Syscall/Sysret cepat. Syscall yang dibuat melalui libj6 tampilan ke callee dan penelepon seperti panggilan fungsi SYSV ABI standar. Implementasi dibungkus dalam fungsi pembungkus yang dihasilkan yang memvalidasi permintaan, memeriksa kemampuan, dan menemukan objek atau pegangan kernel yang sesuai sebelum memanggil fungsi implementasi.
IPC: Bekerja, perlu optimasi. Primitif IPC saat ini adalah:
JSIX menggunakan alat pembuatan ninja, dan menghasilkan file build untuk itu dengan skrip configure . Build juga bergantung pada Sysroot toolchain khusus, yang dapat diunduh atau dibangun menggunakan skrip di JSIX-OS/Toolchain.
Ketergantungan bangunan lainnya:
Skrip configure memiliki beberapa dependensi Python - ini dapat diinstal melalui pip , meskipun melakukannya di lingkungan virtual Python direkomendasikan. Menginstal melalui pip juga akan menginstal ninja .
Sistem Debian 11 (Bullseye) dapat dikonfigurasi dengan dependensi build yang diperlukan dengan menjalankan perintah berikut dari root repositori JSIX:
sudo apt install clang lld nasm mtools python3-pip python3-venv
python3 -m venv ./venv
source venv/bin/activate
pip install -r requirements.txt
peru sync Bangun atau unduh Sysroot Toolchain seperti yang disebutkan di atas dengan JSIX-OS/Toolchain, dan Symlink Direktori Toolchain yang Dibangun sebagai sysroot pada akar proyek ini.
# Example if both the toolchain and this project are cloned under ~/src
ln -s ~ /src/toolchain/toolchains/llvm-13 ~ /src/jsix/sysroot Setelah toolchain telah diatur, menjalankan skrip ./configure (lihat ./configure --help untuk opsi yang tersedia) akan mengatur konfigurasi build, dan ninja -C build (atau di mana pun Anda meletakkan direktori build) akan benar -benar menjalankan build. Jika Anda telah menginstal qemu-system-x86_64 , skrip qemu.sh akan menjalankan JSIX dalam mode qemu -nographic .
Saya pribadi menjalankan ini baik dari mesin bullseye AMD64 Debian asli atau instalasi Windows WSL Debian Bullseye. Jarak tempuh Anda dapat bervariasi dengan pengaturan dan distro lainnya.
JSIX sekarang memiliki program Userspace test_runner yang menjalankan berbagai tes otomatis. Ini tidak termasuk dalam build default, tetapi jika Anda menggunakan test.yml manifest itu akan dibangun, dan dapat dijalankan dengan skrip test.sh atau skrip qemu.sh
./configure --manifest=assets/manifests/test.yml
if ./test.sh ; then echo " All tests passed! " ; else echo " Failed. " ; fi