Mon avis est oui, il le fait, car toute exposition utile au monde extérieur (mode processeur non privilégié) nécessiterait d'abord un processus en cours d'exécution dans le monde extérieur. Cela nécessiterait un système de fichiers, même un système de fichiers temporaire en RAM.
Un autre ingénieur n'est pas d'accord avec moi, mais je n'arrive pas à le prouver au-delà de tous les cas (inconnus de moi).
La réponse à cette question dépend-elle de la définition de «courir»?
filesystems
linux-kernel
Peter L.
la source
la source
useful exposure to the outside world
init
(le premier processus de l'espace utilisateur), et cela échouera.Réponses:
C'est une question plutôt étrange car vous n'exécutez pas le noyau comme vous exécutez un programme. Le noyau est une plate-forme sur laquelle exécuter des programmes. Bien sûr, il existe du code de configuration et d'arrêt, mais il n'est pas possible d'exécuter le noyau seul. Il doit toujours y avoir un processus "init" principal. Et le noyau paniquera s'il n'est pas là. Si init tente de quitter le noyau, il paniquera également.
Ces jours-ci, le processus init est quelque chose comme systemd. Sauf indication contraire, le noyau essaiera d'exécuter un programme à partir d'une liste d'emplacements commençant par
/sbin/init
. Voir le paramètre init ici http://man7.org/linux/man-pages/man7/bootparam.7.html en cas d'urgence avec lequel vous pouvez démarrer Linuxinit=/bin/bash
. Mais remarquez comment vous spécifiez toujours un fichier sur le système de fichiers à exécuter.Ainsi, le noyau paniquera s'il démarre et n'a pas de système de fichiers car sans celui-ci, il n'y a aucun moyen de charger init.
Une certaine confusion peut survenir à cause d'une situation de poule et d'oeuf où le noyau doit charger des pilotes pour accéder à son système de fichiers. Pour contourner cela, un disque virtuel initial est chargé à partir d'une image sur le disque contenant des pilotes vitaux et des scripts de configuration. Ils sont exécutés avant le chargement du système de fichiers. Mais ne vous y trompez pas, le disque virtuel initial est lui-même un système de fichiers. Avec un ramdisk initial
/init
est appelé (qui est stocké sur le ramdisk initial). Dans de nombreuses distributions, c'est finalement ce qui appelle/sbin/init
. Encore une fois sans système de fichiers, cela est impossible.la source
init.$DEV.rc
script.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:
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:
execve
appel système qui a besoin d'un exécutable à partir d'un système de fichiers.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.
la source
Sous Linux, presque chaque périphérique est un fichier , vous devez donc avoir un système de fichiers pour l'exécuter.
la source
eth0
,wlan0
etc.) ne le sont pas, par exemple.Un noyau EST un programme, comme tout autre. Par défaut, le noyau Linux tente d'accéder au système de fichiers, mais ce comportement peut être trivialement éliminé par une modification du noyau (en fait juste un ajout d'une fonction "arch_call_rest_init ()"). Afin d'effectuer un "travail utile", nous nous attendons à ce que le développeur puisse inclure des threads du noyau (kthreads), perhapos dans un pilote personnalisé, pour effectuer l'initialisation et la charge de travail de type d'application souhaitées. Le noyau Linux contient déjà de nombreux kthreads, mais principalement pour effectuer des travaux annexes au noyau ou aux pilotes. Les API disponibles dans le contexte du noyau sont très différentes de celles disponibles dans l'espace utilisateur Linux. Une grande partie de la fonctionnalité d'appel système deviendrait inutile dans un scénario sans système de fichiers.
Oui, Linux attend l'accès aux systèmes de fichiers par défaut. Non, un noyau modifié pourrait certainement être fait pour effectuer un travail utile sans aucun système de fichiers. L'utilisation pratique de Linux sans système de fichiers est IMO assez limitée, mais pas nulle. FWIW, dans le passé, de nombreux noyaux en temps réel étaient intégrés dans le même espace de nom et binaire que les applications RT.
la source