Ini adalah OS hobi kecil untuk bermain -main dengan hal -hal yang belum pernah saya lakukan sebelumnya ... itu tidak dimaksudkan untuk berfungsi, berguna, aman, atau dapat diandalkan. Ini dimaksudkan untuk hampir menyenangkan untuk diterapkan.
Jika Anda ingin melihat hal -hal terbaru yang saya lakukan, lihat cabang dev di repo ini. Secara umum, master harus dikompilasi dan dijalankan.
Mulailah di librs (setara dengan LIBC untuk proyek ini).
user/src/main.rs sebagai contoh program ruang pengguna.cargo xbuild --target target.jsonPaging
memory::paging::map_regionPesan Zero-Copy lulus untuk IPC. Untuk mengirim pesan,
Saya bermain -main dengan gagasan tidak memiliki proses sama sekali, hanya banyak kelanjutan yang mungkin atau mungkin tidak memilih untuk meneruskan kemampuan mereka.
Saat ini sedikit lebih dari 1500 LOC (tidak termasuk komentar + Whitespace + dependensi). Tidak buruk!
Kernel itu sendiri berbasis kelanjutan, daripada menggunakan sesuatu seperti Kthreads. Di pass pertama, saya hanya membuat sesuatu berhasil. Kemudian, saya mungkin kembali dan membuatnya efisien.
Tidak ada preemption berbasis timer di kernelspace atau ruang pengguna (meskipun interupsi timer memang terjadi sehingga timer dapat bekerja). Tidak ada kunci, tidak ada multi-threading di ruang pengguna. Setiap proses berbasis tunggal dan berbasis kelanjutan. Setiap Continuation dapat mengembalikan serangkaian kelanjutan tambahan untuk dijalankan dalam urutan apa pun, kesalahan, atau tidak sama sekali. Kelanjutan juga dapat menunggu acara, seperti I/O atau penghentian proses lain.
Ruang alamat tunggal. Segala sesuatu hidup di ruang alamat yang sama. Bit entri tabel halaman digunakan untuk menonaktifkan bagian tertentu dari ruang alamat untuk beberapa kelanjutan.
Tumpukan kernel kecil untuk alokasi memori dinamis.
Buddy Allocator untuk alokasi bingkai fisik.
Buddy Alocator untuk wilayah ruang alamat virtual.
Sistem kemampuan sederhana untuk mengelola akses ke sumber daya dalam sistem, seperti daerah memori.
Beralih ke Usermode dan Kembali.
Panggilan sistem melalui instruksi syscall dan sysret .
Memuat biner ELF yang tidak tergantung posisi sebagai tugas mode pengguna, menjalankannya, dan keluar melalui syscall.
Sekarang saya memiliki kernel dasar yang sebagian besar berfungsi, saya bisa mulai bermain -main dengan hal -hal!
karat, setiap malam
rustc 1.45.0-nightly (99cb9ccb9 2020-05-11) llvm-tools-preview Rust Distribution Component via rustup component add llvm-tools-preview
cargo xbuild DAN cargo bootimage VIA cargo install cargo-xbuild bootimage
build-essentials dan util standar: gcc , make , ld , objcopy , dd
qemu untuk berlari
Untuk membangun dan menjalankan
$ cd os2/user
$ cargo xbuild --target x86_64-unknown-elf.json --release
$ cd ../kernel
$ bootimage run bootimage dapat disahkan --release untuk build yang dioptimalkan.