Lihat https://github.com/zhengruohuang/toddler-ng untuk balita generasi berikutnya!
Balita awalnya adalah proyek setengah-hobby dan setengah penelitian yang dikembangkan selama liburan musim panas dan musim dingin ketika saya masih kuliah. Balita asli dirancang untuk sistem multi-prosesor skala kecil IA32. Fitur yang paling menonjol adalah teknik bebas-kunci praktis yang digunakan untuk sinkronisasi. Namun, balita lama itu terlalu dirancang untuk komponen OS yang berhubungan dengan perangkat keras dan reguler. Kemudian akhirnya menjadi tidak praktis untuk melanjutkan pengembangan. Balita terakhir dapat membuat dan menjalankan proses dan utas pengguna, serta menerima input keyboard, meskipun shell tidak diimplementasikan atau porting.
Balita yang baru, di sisi lain, dirancang dengan tujuan yang sama sekali berbeda. Alghough itu masih merupakan proyek hobi, ini bertujuan untuk menyediakan microkernel yang sepenuhnya dapat digunakan dan lingkungan OS yang lengkap untuk berbagai arsitektur dan platform. Gagasan bebas kunci ditinggalkan karena menciptakan terlalu banyak kompleksitas yang tidak perlu.
Balita memiliki sistem bangunannya sendiri yang ditulis dalam Python: Tmake . TMake menangani ketergantungan file dan menyediakan serangkaian primitif seperti kompilasi , tautan , build , dan dll. Tmake skrip (juga dalam Python) kemudian menggunakan primitif untuk membangun prosedur bangunan.
Python diperlukan untuk semua target; GCC dan binutil diperlukan untuk arsitektur host dan target; NASM diperlukan untuk target x86 (IA32 dan AMD64). Emulator default (qemu/simh/ski) juga diperlukan jika Anda ingin menguji balita.
Setelah semua paket diinstal, ambil kode sumber.
git clone https://github.com/zhengruohuang/toddler.git
cd toddler Ketik ./tmake build untuk membangun balita. Setelah selesai, ini menghasilkan gambar disk di target/ direktori. Jika QEMU diinstal untuk arsitektur target, cukup ketik ./tmake qemu untuk memulai QEMU dengan parameter default.
Dua langkah dapat dikombinasikan dengan mengetik ./tmake all , atau hanya ./tmake .
Tmake mendukung tindakan . Untuk menentukan Tindakan, gunakan ./tmake <actions> . Misalnya, ./tmake clean build akan membersihkan objek dan file biner yang ada, lalu mulai build baru.
TMake mendukung beberapa target. Untuk membangun untuk target tertentu, gunakan ./tmake target=<arch-machine>[-suffix] . Perhatikan bahwa bidang lengkungan dan mesin diperlukan oleh Tmake, dan akhiran adalah opsional. Namun, implementasi aktual dari target tertentu mungkin mengharuskan pengguna menyediakan nilai untuk akhiran .
Misalnya, ./tmake target=ia32-pc-bios akan membangun balita untuk sistem PC IA32 berbasis BIOS; ./tmake target=armv7-rpi2 akan membangun balita untuk Raspberry Pi 2.
Perhatikan juga bahwa Anda tidak boleh mencampur bidang lengkung dan mesin secara sewenang -wenang. Misalnya, target=ia32-rpi2 tidak valid. Kombinasi bidang yang tidak valid mungkin gagal menyusun atau bahkan merusak perangkat Anda.
Lapisan abstraksi perangkat keras (HAL) memberikan abstraksi dari setiap model prosesor dan perangkat IO dasar. Ini mengekspor serangkaian fungsi dan konstanta ke kernel. HAL dipetakan ke 4MB tertinggi dari semua proses termasuk proses kernel.
Tidak seperti sistem operasi konvensional, kernel balita adalah proses nyata . Kernel tidak dipetakan ke ruang alamat proses pengguna. Namun, tata letak ruang alamat virtual kernel sedikit berbeda dari proses lain. Kernel memiliki pemetaan satu-ke-satu berkat ukuran HAL yang kecil. Akibatnya, manajemen memori fisik jauh lebih mudah dan lebih bersih.
Meskipun balita adalah OS mikro-kernel, menjadi banyak server mungkin bukan ide yang bagus. Sebaliknya, banyak fungsi tingkat sistem disediakan dalam satu server - sistem. Proses sistem mengimplementasikan Universal Resource Manager (URS), User Account Manager (UAM), dan beberapa sistem file.
Proses driver menyediakan beberapa driver perangkat penting, termasuk keyboard, konsol, dan disk.
| Arsitektur | Lebar | Mesin target | Status |
|---|---|---|---|
| Ia32 | 32 | PC berbasis netburst | Saat ini |
| ARMV7 | 32 | Raspberry Pi 2, Qemu Raspi2 | Saat ini |
| MIPS32 | 32 | Pencipta CI20, Qemu Malta | Saat ini |
| PPC32 | 32 | Mac Mini G4, PowerMac G4, Qemu G3Beige, Qemu Mac99 | Saat ini |
| SPARCV8 | 32 | Qemu Sum4m Sparcstation 10, Qemu Leon-3 | Aktif |
| RISCV32 | 32 | Paku | Berencana |
| M68K | 32 | QEMU MCF5208EVB | Berencana |
| Sh4 | 32 | QEMU SHIX | Berencana |
| Vax | 32 | Simh Vax | Berencana |
| or1k | 32 | QEMU OR1K-SIM | Berencana |
| AMD64 | 64 | PC berbasis Skylake | Berencana |
| ARMV8 | 64 | Raspberry Pi 3, qemu virt | Aktif |
| PPC64 | 64 | PowerMac G5, Qemu Mac99 | Berencana |
| MIPS64 | 64 | Loongson 3 Desktop, Qemu Malta | Saat ini |
| sparcv9 | 64 | QEMU SUN4U | Awal |
| alfa | 64 | Qemu clipper | Awal |
| riscv64 | 64 | Paku | Berencana |
| S390 | 64 | QEMU S390X | Berencana |
| Ia64 | 64 | Main ski | Berencana |
| hppa | 64 | HP 9000 PA-RISC Workstation, Qemu HPPA-Generic | Berencana |