Question pilote de périphérique et noyau


Les pilotes de périphériques font-ils partie d'un noyau de système d'exploitation, ou en dehors du noyau, ou font-ils partie du noyau et d'autres du noyau?

Si le troisième est correct, quels pilotes de périphériques font généralement partie du noyau, et quels sont ceux qui sont en dehors du noyau?

Si le système d'exploitation doit être spécifique, je suis intéressé à connaître Linux (Ubuntu) et Windows 7.

Merci!


4
2018-06-03 18:54


origine




Réponses:


Sous Windows, tous les pilotes sont dans des fichiers distincts, distincts du noyau.

Sous Linux, les pilotes sont un type de module. Vous pouvez avoir tous les pilotes de périphériques sous forme de modules, certains intégrés dans le noyau et d'autres sous forme de modules, ou tous intégrés au noyau. Vous pouvez créer un noyau Linux dont le chargement du module est désactivé et, dans ce cas, tout le matériel avec lequel il doit fonctionner doit être inclus dans le noyau.

Pour Linux, vous avez besoin de périphériques qui doivent être accessibles au démarrage pour pouvoir être intégrés au noyau. Cela inclut les pilotes de contrôleur de disque, les pilotes réseau (pour le démarrage réseau), les pilotes de port série ou de console VGA (pour afficher les messages de diagnostic) et les pilotes de bus pour le matériel intermédiaire nécessaire à la CPU (contrôleur USB, PCIe, IDE, etc.). et / ou éventuellement des pilotes de chipset).

Je suis sûr qu'il est possible pour Windows d'inclure des pilotes dans le noyau. Cela peut être fait dans certaines versions intégrées ou personnalisées de Windows, mais pas dans la version standard de Windows, à ma connaissance. Je pense en fait que deux pilotes très élémentaires sont techniquement dans le noyau (comme VgaSave et Beep), mais je peux me tromper.

Windows peut marquer certains pilotes comme des pilotes "Boot Time", qui seraient généralement de la même catégorie que les pilotes identifiés ci-dessus. Si vous accédez au mode sans échec, vous verrez défiler les noms des pilotes, ce sont tous les pilotes de démarrage.


5
2018-06-03 19:07



Quelques remarques, principalement Windows: 0) Les pilotes fonctionnent généralement en mode noyau (x86 ring 0), mais Windows possède une "structure de pilote en mode utilisateur" pour les pilotes ring-3. 1) Bip est externe Beep.sys. 2) Vous pouvez inclure des pilotes supplémentaires dans le support d'installation, mais pas dans le noyau (NTOSKRNL). La même chose s'applique à toutes les versions de Windows, incorporées ou non. - grawity
En plus de grawity: Windows NT a ce n'est pas nécessaire pour les pilotes à faire partie du noyau. Son programme de chargement prend en charge le problème de la poule et de l'œuf avec les pilotes de la classe de démarrage que d'autres systèmes traitent en combinant les pilotes avec le noyau. (C'est le cas pour de nombreux systèmes d'exploitation de PC en mode protégé, de nos jours, en fait.) - JdeBP
@JdeBP: Mais comment se charge-t-il, par exemple, %SystemRoot%\system32\drivers\ntfs.sys? (IIRC, le chargeur de démarrage a le support NTFS intégré pour charger le noyau, mais je ne sais pas ce que fait le noyau.) // La plupart des systèmes Linux utilisent une archive "initrd" pour charger les pilotes requis pour le démarrage; serait-ce le même que Windows "pilotes de classe de démarrage"? - grawity
Vous avez répondu à votre première question dans la phrase entre parenthèses. Votre deuxième question est une question à part entière, à laquelle la réponse courte est "non", et qui est vraiment trop longue pour être traitée dans un commentaire. - JdeBP
... sauf que le processus n'a pas fonctionné à peu près de cette façon depuis Windows NT version 5 (Windows NT 6 fonctionne différemment), le processus ne fonctionne pas du tout comme ça pour ARC et EFI, et les systèmes de reconnaissance de systèmes de fichiers compliquent le mécanisme de chargement des systèmes de fichiers. Comme je l'ai dit, c'est trop long pour les commentaires. Pose une question. - JdeBP


Il y a deux manières d'interpréter «une partie du noyau».

Le noyau démarre (au démarrage) en tant que fichier sur le disque. Si vous posez des questions sur le disque, elles ne font pas partie du noyau, mais séparent les fichiers. Presque tous les systèmes les ont maintenant comme fichiers séparés. Dans les très vieux jours UNIX, l'ajout d'un pilote impliquait d'ajouter des fichiers .o aux fichiers .o du noyau et de relier un noyau.

Si vous vouliez dire "une partie de l'image exécutée par le noyau", cela dépend. Windows peut faire les deux. En fait, le pilote d'affichage ne faisait plus partie du noyau pour faire partie de l'image exécutée par le noyau il y a quelque temps (de la version 3.51 à la version 4.0) pour des raisons de performances.

Il existe deux écoles générales de conception de systèmes d'exploitation:

On s'appelle un macrokernel. Tous les éléments du système d'exploitation sont gérés dans une seule image du noyau. Linux et la plupart des Unix fonctionnent de cette façon. L'avantage est qu'il est rapide, que toutes les parties du noyau peuvent lire d'autres parties du noyau et communiquer en utilisant des lectures et des écritures de mémoire. L'inconvénient est que cela devient désordonné après un certain temps, et maintenant vous devez coordonner l'utilisation. Si vous pouvez faire quelque chose exprès, parfois vous pouvez le faire par accident. Il n'y a pas de protection et vous pouvez avoir une panique du noyau.

L'autre s'appelle un micro-noyau (que Windows NT a commencé à être, et Windows est toujours en quelque sorte). La théorie est que le noyau ne fonctionne pas, mais que les fermes fonctionnent avec un code spécial, mais que le code ne fonctionne pas dans l’espace mémoire du noyau. Cet autre code ne peut pas toucher à la mémoire du noyau, ni à personne d'autre. L'avantage, l'isolement des fautes - le code non-noyau mauvais ne peut pas ruiner le noyau. L'inconvénient - aller et venir en mode noyau ralentit les choses. C'est pourquoi le pilote d'affichage a été déplacé dans le noyau dans NT 4.0, la lenteur.

Ce sont des généralisations bien sûr, je n'ai pas suivi la conception du micro-noyau Windows depuis un moment, bien que je puisse être relativement sûr de la conception de Linux.

MacOSX est en fait techniquement intéressant, utilisant une conception hybride micro-noyau / macro-UNIX-noyau. Il supportait aussi les anciens binaires OS9 - en développant dans MacOS9 des objets non centrés sur le noyau qui étaient des appels du noyau.

DragonFly BSD est une dérivation intéressante de FreeBSD qui est toujours un macrokernel, mais qui utilise le passage de messages comme une sorte de mauvaise isolation du personnel, ce qui facilite le travail du noyau.


5
2018-06-03 20:48



Merci! Je me demandais si "macrokernel" et noyau monolithique (en.wikipedia.org/wiki/Monolithic_kernel) sont le même concept? - Tim
@Tim, @Rich: "Macrokernel" fait ne pas signifie "monolithique" - au lieu de cela, il semble être un autre terme pour noyau hybride. Windows NT est classé comme "hybride". - grawity
Il faut également mentionner GNU Hurd (micro-noyau Mach avec presque tout dans l'espace utilisateur). - grawity
La confusion dans cette réponse provient de l'autre point soulevé par grawity dans un autre commentaire. Il y a une différence entre "exécuter en mode noyau" et "faire partie de l'image du programme du noyau". le Le sous-système graphique Win32 s'exécute en mode noyau de Windows NT version 4 à la version 5 (la version 6 a encore changé les choses), mais cela ne fait pas partie de l'image du programme du noyau. - JdeBP