Odpowiedź będzie zależeć od tego, czy masz na myśli dosłownie bez systemu plików, czy też pytanie ma być interpretowane nieco inaczej niż to, co zostało powiedziane. Odpowiedzi na niewielkie różnice w interpretacji pytania są następujące:
- Uruchamianie Linuksa bez żadnych urządzeń blokowych jest całkowicie wykonalne i przydatne w niektórych wyspecjalizowanych przypadkach użycia.
- Uruchamianie Linuksa bez systemu plików wymaga przepisania niektórych części kodu jądra i jest mało prawdopodobne, aby był to użyteczny wysiłek.
- Uruchamianie Linuksa bez deskryptorów plików będzie wymagało dużego wysiłku. Jestem pewien, że to nie będzie warte wysiłku.
Powody, dla których musisz przepisać części kodu jądra, aby działający system bez systemu plików to:
- Każdy wątek ma katalog główny i bieżący katalog roboczy, który musi wskazywać na jakiś system plików.
- Programy są uruchamiane przez
execve
wywołanie systemowe, które wymaga pliku wykonywalnego z systemu plików.
- Jądro tworzy system plików oparty na pamięci podczas procesu uruchamiania.
Po uruchomieniu programu execve
możliwe jest usunięcie mapowania pliku wykonywalnego, z którego został uruchomiony, ale aby to zrobić bez natychmiastowego awarii, najpierw należy utworzyć mapowanie pamięci wykonywalnej, które nie jest zabezpieczone przez plik, i musi zainicjować to pewnym użytecznym kodem przed przejściem do niego i odmapowaniem pliku wykonywalnego.
Tak więc działający program w trybie użytkownika może istnieć w stanie, w którym nie ma mapowań pamięci wspieranych przez pliki i może zamykać wszystkie deskryptory plików wspierane przez pliki. Nie może przestać mieć katalogu głównego i bieżącego katalogu roboczego, ale może się od nich powstrzymać.
Więc chociaż w tym stanie można zaimplementować kod jądra, aby zgrać system plików spod programu i nadal go uruchamiać, nie brzmi to tak, jakby było przydatne. A wejście w ten stan końcowy bez przechodzenia przez stan pośredni korzystania z systemu plików będzie jeszcze więcej pracy bez żadnej pożytecznej korzyści.
Przydatna konfiguracja dla niektórych specjalistycznych przypadków użycia
Przydatne może być unikanie korzystania z urządzeń blokowych. Podczas uruchamiania jądro tworzy system plików pamięci i może również zapełnić ten system plików zawartością cpio
archiwum przed uruchomieniem init
. W ten sposób możesz uruchomić system w całości z systemu plików opartego na pamięci, bez żadnego urządzenia blokującego, które by go wspierało.
Może to być przydatne w systemach, w których nie chcesz zachować żadnego stanu i na przykład, gdy system uruchamia się z czystej listy po ponownym uruchomieniu.
Oczywiście jądro i archiwum cpio muszą jakoś istnieć w pamięci, zanim jądro przejmie kontrolę. Jak się tam dostali, jest zadanie dla modułu ładującego. Program ładujący mógł załadować je z urządzenia blokowego, nawet jeśli końcowy system nie używa urządzeń blokowych. Ale moduł ładujący może również uzyskać jądro i archiwum cpio bez użycia urządzenia blokowego, na przykład poprzez rozruch przez sieć.
useful exposure to the outside world