Myślałem o napisaniu hobby systemu operacyjnego dla niektórych procesorów ARM. Istnieje wiele popularnych komputerów jednopłytkowych z ARM MPU, więc po prostu chciałem kupić jeden z nich (wybierając jeden z bardziej otwartą dokumentacją). Byłem zaskoczony, gdy dowiedziałem się, że nawet płyty z naprawdę wystarczającą pamięcią nie mają MPU z modułem zarządzania pamięcią.
Ponieważ zawsze pracowałem z procesorami i386 + i nigdy niczym innym (oprócz niektórych PIC Microchip), jestem teraz zdezorientowany i nie jestem pewien, czy można napisać działający system operacyjny, którego funkcjonalność nie byłaby ograniczona w porównaniu do napisanych systemów operacyjnych dla MPU z MMU.
Mógłbym wymyślić kilka rozwiązań dla „zastępowania” lub „symulowania” MMU i mam kilka pytań:
- W procesorach Intel w trybach 16 i 32-bitowym istnieje sposób użycia segmentów i selektorów segmentów do wykorzystania różnych bloków pamięci do różnych zadań. Oznacza to, że mogłem zmienić przestrzeń pamięci, zmieniając zawartość rejestrów segmentów podczas przełączania zadań na x86. Czy istnieją jakieś ogólne koncepcje segmentacji pamięci, które można by zastosować w architekturze ARM?
- Wczytując plik obiektu połączonego zamiast pliku wykonywalnego, mogłem używać relokacji (poprawek) lub pozycjonować niezależny kod do wskazywania zadań na fragmentach pamięci w taki sam sposób, jakbym mapował pamięć za pomocą struktur stronicowania. Czy byłoby to wystarczająco skuteczne?
- Przeczytałem też coś o modułach ochrony pamięci na procesorach ARM. Czy mogą być pomocne?
Czy są jakieś „zwykłe” sposoby zarządzania zadaniami w systemach bez MMU?