Maestro, jądro i system operacyjny typu Unix napisany od podstaw w Rust

Maestro

Zrzut ekranu mistrza

Rdza zyskała wystarczającą popularność do tego stopnia, że ​​stał się jednym z wybranych do integracji jako język dodatkowy w Linuksie, a także w innych systemach operacyjnych, jak w przypadku Androida, który ma już część kodu w Rust, Windows, który również wyraził zgodę m.in.

Rdza okazał się solidnym językiem i wzbudził takie zaufanie Niektóre systemy operacyjne zostały nawet stworzone przy użyciu tego języka programowania, a żeby wymienić tylko kilka, mamy: Redoks, Mamy również jądra napisane od podstaw, takie jak Kerala lub jądro użyte w satelita wystrzelony niedawno przez Chiny.

Powodem, dla którego o tym wspominam, jest to, że niedawno natknąłem się na wiadomość, która przykuła moją uwagę i tyle Zaprezentowano projekt, w którym rozwijane jest jądro napisane w języku Rust i który jest częściowo kompatybilny z Linuksem.

Nazwa tego projektu to "Nauczyciel" i jak wspomniano, to jądro podobne do Uniksa napisane w Rust, implementujące podzbiór wywołań systemowych z jądra Linuksa wystarczające do stworzenia standardowych środowisk pracy. Jako taki projekt „Maestro” nie jest czymś nowym, ponieważ twórca wspomina, że ​​projekt narodził się w 2018 roku, ale w tamtym czasie był napisany w C i ze względu na różne zalety i cechy Rusta, projekt został przepisany z zero.

Na stronie projektu Opisano przyczyny zmiany:

W tym momencie zdecydowałem się przejść na Rust (mój pierwszy projekt w tym języku), co miało kilka zalet:

  • Rozpocznij projekt od początku, korzystając z wniosków wyciągniętych z poprzednich błędów.
  • Bądź trochę bardziej innowacyjny niż tylko pisanie jądra podobnego do Linuksa w C. W końcu po prostu używaj Linuksa.
  • Wykorzystaj bezpieczeństwo języka Rust, aby wykorzystać pewne trudności w programowaniu jądra. Stosowanie systemu zapisu Rust pozwala na przeniesienie części odpowiedzialności za bezpieczeństwo pamięci z programisty na kompilator.

Podczas tworzenia jądra debugowanie jest bardzo trudne z kilku powodów:

  • Dokumentacja jest często trudna do znalezienia, a implementacje BIOS-u mogą zawierać błędy (częściej niż myślisz).
  • Podczas startu jądro ma pełny dostęp do pamięci i może pisać tam, gdzie nie powinno (na przykład swój własny kod).
  • Rozwiązywanie problemów z wyciekami pamięci nie jest łatwe. Nie można używać narzędzi takich jak valgrind.
  • gdb można używać z QEMU i VMWare, ale jądro może zachowywać się inaczej, gdy jest uruchamiane na innym emulatorze lub maszynie wirtualnej. Ponadto te emulatory mogą nie obsługiwać gdb (np. VirtualBox).
  • Brakuje niektórych funkcji w obsłudze gdb w QEMU lub VMWare, a gdb może czasami nawet ulec awarii

W związku z Charakterystyka projektu wyróżnia się tym, że jądro jest monolityczne i jest obecnie obsługiwany tylko w systemach x86 w trybie 32-bitowym. Baza kodu jądra obejmuje około 49 tysięcy linii i jest wykonywalna zarówno na prawdziwym sprzęcie, jak i w środowiskach zwirtualizowanych, takich jak QEMU czy VirtualBox.

W obecnym rozwoju «Maestro», Wdrożono 31%. (135 z 437) wywołań systemowych Linuksa. To jest wystarczy, aby załadować środowisko konsoli oparte na Bash i standardowej bibliotece C Musl. Dodatkowo środowisko oparte na Maestro może uruchamiać niektóre narzędzia z pakietu GNU coreutils i podstawowe pakiety z dowolnego systemu Unix. Obecnie trwają prace nad wdrożeniem stosu sieciowego oraz prace nad opracowaniem stosu sieciowego

Wśród Dostępne funkcje Maestro wyróżniają się następujące::

  • Kontrolery dla klawiatury i terminala PS/2 z trybem tekstowym i częściową obsługą sekwencji ANSI.
  • System alokacji pamięci z obsługą pamięci wirtualnej.
  • Harmonogram zadań oparty na algorytmie round-robin z obsługą sygnałów POSIX.
  • Definicja urządzeń PCI.
  • Kontroler IDE/PATA.
  • System plików Ext2.
  • Obsługa wirtualnych systemów plików /tmp i /proc.
  • Możliwość montażu partycji dyskowych FS, MBR i GPT.
  • obsługa initramfs.
  • Kontroler RTC do timera i dokładnego czasu.
  • Wsparcie dla ładowania modułów jądra.
  • Możliwość uruchamiania plików wykonywalnych w formacie ELF.

Dla chcą dowiedzieć się więcej o projekcie, możesz sprawdzić szczegóły W poniższym linku.  Jeśli chodzi o osoby zainteresowane kodem projektu, powinny wiedzieć, że tak rozpowszechniane na licencji MIT.