La réponse dépendra de savoir si vous entendez littéralement sans système de fichiers ou si la question est destinée à être interprétée un peu différemment de la façon dont elle est effectivement formulée. Les réponses pour de légères variations dans l'interprétation de la question sont:
- Exécuter Linux sans aucun périphérique bloc est entièrement réalisable et utile pour certains cas d'utilisation spécialisés.
- Exécuter Linux sans aucun système de fichiers va nécessiter la réécriture de certaines parties du code du noyau et il est peu probable que ce soit un effort utile.
- L'exécution de Linux sans utiliser aucun descripteur de fichier exigera beaucoup d'efforts. Je suis sûr que cela ne vaudra pas l'effort.
Les raisons pour lesquelles vous auriez à réécrire des parties du code du noyau pour créer un système fonctionnel sans système de fichiers sont les suivantes:
- Chaque thread a un répertoire racine et un répertoire de travail actuel qui doit pointer vers un système de fichiers.
- Les programmes sont lancés par le
execve
appel système qui a besoin d'un exécutable à partir d'un système de fichiers.
- Le noyau crée un système de fichiers basé sur la mémoire pendant le processus de démarrage.
Après le démarrage d'un programme à l'aide de execve
il est possible pour lui de démapper l'exécutable à partir duquel il a été démarré, mais pour le faire sans le bloquer immédiatement, il faut d'abord créer un mappage de mémoire exécutable qui ne soit pas soutenu par un fichier, et il doit l'initialiser avec du code utile avant de sauter dessus et de démapper l'exécutable.
Ainsi, un programme en mode utilisateur en cours d'exécution peut exister dans un état où il n'a aucun mappage de mémoire sauvegardé par des fichiers et il peut fermer tous les descripteurs de fichiers sauvegardés par des fichiers. Il ne peut pas arrêter d'avoir un répertoire racine et un répertoire de travail actuel, mais il peut s'abstenir de ceux-ci.
Donc, bien que dans cet état, vous puissiez implémenter du code du noyau pour extraire le système de fichiers du programme et le faire continuer, cela ne semble pas utile. Et entrer dans cet état final sans passer par un état intermédiaire d'utilisation d'un système de fichiers va être encore plus de travail sans aucun avantage utile.
Une configuration utile pour certains cas d'utilisation spécialisés
Il peut être utile d'éviter l'utilisation de périphériques bloc. Pendant le démarrage, le noyau crée un système de fichiers mémoire et peut également remplir ce système de fichiers avec le contenu d'une cpio
archive avant de l'exécuterinit
. De cette façon, vous pouvez exécuter un système entièrement à partir d'un système de fichiers basé sur la mémoire sans aucun périphérique de bloc pour le sauvegarder.
Cela peut être utile pour les systèmes où vous ne souhaitez conserver aucun état et souhaitez que le système démarre à partir d'une table rase lors du redémarrage.
Bien sûr, le noyau et l'archive cpio doivent en quelque sorte exister en mémoire avant que le noyau ne reçoive le contrôle. Comment ils y sont arrivés est un travail pour le chargeur de démarrage. Le chargeur de démarrage aurait pu charger ceux-ci à partir d'un périphérique bloc même si le système en cours d'exécution n'utilise pas de périphériques bloc. Mais il est également possible pour le chargeur de démarrage d'acquérir le noyau et l'archive cpio sans utiliser un périphérique bloc, par exemple en démarrant sur le réseau.
useful exposure to the outside world