La risposta dipenderà dal fatto che intendi letteralmente senza un file system o se la domanda deve essere interpretata in modo leggermente diverso da come viene effettivamente dichiarata. Le risposte a lievi variazioni nel modo in cui viene interpretata la domanda sono:
- L'esecuzione di Linux senza dispositivi a blocchi è del tutto fattibile e utile per alcuni casi d'uso specializzati.
- L'esecuzione di Linux senza alcun file system richiederà la riscrittura di alcune parti del codice del kernel ed è improbabile che sia uno sforzo utile.
- L'esecuzione di Linux senza l'utilizzo di descrittori di file richiederà molto impegno. Sono abbastanza sicuro che non varrà la pena.
I motivi per cui dovresti riscrivere parti del codice del kernel per creare un sistema funzionante senza un file system sono:
- Ogni thread ha una directory root e una directory di lavoro corrente che deve puntare a un file system.
- I programmi vengono avviati dalla
execve
chiamata di sistema che necessita di un eseguibile da un file system.
- Il kernel crea un file system basato sulla memoria durante il processo di avvio.
Dopo che un programma è stato avviato execve
, è possibile annullare la mappatura dell'eseguibile da cui è stato avviato, anche se per farlo, senza arrestarsi immediatamente, è innanzitutto necessario creare un mapping di memoria eseguibile che non è supportato da un file, e deve inizializzarlo con un po 'di codice utile prima di saltare ad esso e decomprimere l'eseguibile.
Pertanto, un programma in modalità utente in esecuzione può esistere in uno stato in cui non ha mappature di memoria supportate da file e può chiudere tutti i descrittori di file supportati da file. Non può smettere di avere una directory radice e una directory di lavoro corrente, ma può astenersi da quelle.
Quindi anche se in questo stato è possibile implementare il codice del kernel per strappare il file system da sotto il programma e farlo funzionare, non sembra utile. E entrare in quello stato finale senza passare attraverso uno stato intermedio di utilizzo di un file system sarà ancora più lavoro senza alcun vantaggio utile.
Una configurazione utile per alcuni casi d'uso specializzati
Evitare l'uso di dispositivi a blocchi può essere utile. Durante l'avvio il kernel crea un file system di memoria e può anche popolare quel file system con i contenuti di un cpio
archivio prima di eseguirlo init
. In questo modo è possibile eseguire un sistema interamente da un file system basato su memoria senza alcun dispositivo a blocchi per eseguirne il backup.
Ciò può essere utile per i sistemi in cui non si desidera conservare alcuno stato e come il sistema deve iniziare da una lavagna pulita al riavvio.
Naturalmente il kernel e l'archivio cpio devono in qualche modo esistere in memoria prima che al kernel venga dato il controllo. Come sono arrivati c'è un lavoro per il boot loader. Il boot loader avrebbe potuto caricarli da un dispositivo a blocchi anche se il sistema in esecuzione finale non utilizza i dispositivi a blocchi. Ma è anche possibile che il boot loader acquisisca il kernel e l'archivio cpio senza utilizzare un dispositivo a blocchi, ad esempio avviando in rete.
useful exposure to the outside world