Zarządzane systemy operacyjne są prawdopodobnie jak mikrokernele - poświęcasz wydajność w imię bezpieczeństwa.
Mogą występować podobne problemy, ponieważ wymagają podziału kodu na 2 części:
- Jądro niskiego poziomu napisane w C / asembler
- Jądro wyższego poziomu napisane w języku zarządzanym
W zależności od kosztów bezpiecznego wejścia / wyjścia z języka HL może to powodować podobne problemy jak mikrojądra - być może nieco szybsze (opuszczanie HL jest szybsze niż zmiana pełnego kontekstu, ale na przykład JNI jest dość kosztowny).
Aplikacja użytkownika prawdopodobnie również potrzebuje osobnych kontekstów, ponieważ wiele aplikacji jest pisanych na innych platformach (np. C, Java lub .Net). W tych samych przypadkach aplikacje mogą być związane z procesorem (kompilatory, konwertery muzyki itp.) I wymagają nawet optymalizacji asemblera, aby działać z wystarczającą prędkością. Poza tym - ochrona MMU zaimplementowana w języku HL prawdopodobnie nie będzie tak szybka jak sprzętowa, nawet jeśli może być znacznie bardziej dopracowana.
Również język HL nie jest biegły w operacjach niskiego poziomu. Chociaż oprogramowanie jest zwykle projektowane z zastosowaniem „dobrej” praktyki kodowania, sterowniki nie są konieczne. Nie sądzę, że będą chronić przed co najmniej niektórymi błędami, ponieważ jądra wymagają czasami pamięci do zarządzania ręką.
Wreszcie nie sądzę, aby taki system operacyjny wymagałby pełnej maszyny wirtualnej. Ponieważ system operacyjny nie może być zbudowany z zasadą kompilacji po uruchomieniu, wszędzie języki HL (nawet z GC i spółką) byłyby lepszymi kandydatami.
Na przykład nagle zmienia się arbitralne wskaźniki.
System operacyjny jest z natury niski. Do sprzętu przekazujesz nie tylko „dowolny wskaźnik”, ale prawdopodobnie adres fizyczny, a nie wirtualny. Niektóre DMA mogą obsłużyć tylko pierwsze 16 MB pamięci. Chociaż taki system operacyjny może znacznie uprościć, nie pozbędzie się adresów.
A jeśli dobrze napisane, pozbędziesz się mnóstwo starszej wersji, którą ma obecnie większość współczesnych systemów operacyjnych.
- Istnieje wiele starszych urządzeń. Znacznie więcej niż w oprogramowaniu. Najpierw zaczynasz w trybie rzeczywistym, następnie włącz bramę A20 (nie pytaj), przejdź do trybu chronionego, a następnie do trybu długiego.
- Kompatybilność API / ABI jest dobra. Powiedz, że napisali taki system operacyjny - co byś na nim uruchomił? Firefox - nie (C i C ++ przy użyciu WinAPI). Java - prawdopodobnie musiała zostać przeniesiona lub miała kilka drobnych problemów przez ikvm - chyba że korzystała z JNI. Wydaje mi się, że MSSQL (i na pewno Oracle, MySQL, Postgresql ...) nie jest napisany w języku zarządzanym, więc nie byłby odpowiedni dla serwera.
- Nawet kompatybilność z błędami jest „dobra”. AFAIK MS spędza dużo czasu na testowaniu i sprawdzaniu, czy niektóre oprogramowanie nie korzysta z API w sposób inteligentny (nieprawidłowy odczyt). Podobnie jak problem z użyciem wskaźnika za
free
nim, gdy system Windows faktycznie zaczął zwalniać pamięć.
Myślę, że zyska popularność w tym samym czasie, co mikrojądra.