31 votes

Quand dois-je écrire un module du noyau Linux?

Certaines personnes veulent déplacer le code de l'espace utilisateur vers l'espace noyau sous Linux pour une raison quelconque. Souvent, la raison semble être que le code devrait avoir une priorité particulièrement élevée ou simplement "l'espace du noyau est plus rapide".

Cela me semble étrange. Quand devrais-je envisager d'écrire un module du noyau? Existe-t-il un ensemble de critères?

Comment puis-je motiver la conservation du code dans l'espace utilisateur qui (je crois) y appartient?

21voto

rpj Points 1717

Règle de base: essayez de votre absolue mieux pour garder votre code dans l'espace utilisateur. Si vous ne pensez pas que vous pouvez passer autant de temps à la recherche de solutions de rechange pour le code du noyau, comme vous le feriez de l'écriture du code (c'est à dire: du temps), puis essayez à nouveau de le mettre en œuvre dans l'espace utilisateur. Si vous toujours ne pouvez pas, à la recherche de plus pour vous assurer de faire le bon choix, puis très prudent de se déplacer dans le noyau. Comme d'autres l'ont dit, il y a très peu de circonstances qui dictent la rédaction de modules de noyau et le débogage de code du noyau peut être assez infernal, donc évitez à tout prix.

Autant que les conditions concrètes que vous devriez vérifier lors de l'examen de l'écriture de code en mode noyau, voici quelques-uns: Est-il besoin d'un accès à très faible niveau de ressources, tels que les interruptions? Votre code est la définition d'une nouvelle interface/pilote matériel qui ne peut pas être construit sur le haut de actuellement exportées de la fonctionnalité? Est-ce que votre code d' exiger l'accès à des structures de données ou primitives qui ne sont pas exportés en dehors de l'espace du noyau? Êtes-vous écrit quelque chose qui sera principalement utilisé par d'autres sous-systèmes du noyau, comme un planificateur ou système VM (même ici, il n'est pas nécessaire que le sous-système sera en mode noyau: Mach a un fort soutien pour le mode utilisateur de la mémoire virtuelle téléavertisseurs, de sorte qu'il peut certainement être fait)?

18voto

MattW. Points 4353

Il y a très peu de raisons de mettre des trucs dans le noyau. Si vous êtes à l'écriture de pilotes de périphériques, c'est ok. Toute application standard: jamais.

Les inconvénients sont énormes. Débogage devient plus difficile, les erreurs deviennent de plus en plus fréquentes et difficiles à trouver. Vous pourriez compromettre la sécurité et de la stabilité. Vous pourriez avoir à s'adapter aux changements dans le noyau de plus en plus fréquemment. Il devient impossible de port à d'autres UNIX les systèmes d'exploitation.

Le plus proche que j'ai jamais venu le noyau était une coutume du système de fichiers (avec mysql en arrière-plan) et même pour cela, nous avons utilisé FUSIBLE (où U représente l'espace utilisateur).

8voto

Sec Points 2786

Je ne suis pas sûr que la question soit la bonne. Il devrait y avoir une bonne raison de déplacer les choses vers l'espace noyau. S'il n'y a aucune raison, ne le faites pas.

D'une part, le débogage est rendu plus difficile, et l'effet des bugs est bien pire (crash / panique au lieu d'un simple coredump).

3voto

Alexander Points 4298

Le code exécuté dans le noyau accède à la mémoire, aux périphériques et aux fonctions du système de manière différente du code de l'espace utilisateur et a ainsi la capacité d'être plus efficace. Sans parler des restrictions de sécurité réduites pour le code du noyau. Cependant, tout cela a généralement un coût, comme augmenter la possibilité d'ouvrir le noyau aux menaces de sécurité, verrouiller le système d'exploitation, compliquer le débogage, etc.

3voto

KOkon Points 442

Fondamentalement, je suis d'accord avec rpj. Le Code doit être dans l'espace utilisateur, sauf si c'est VRAIMENT nécessaire.

Mais, pour mettre en valeur votre question, quelle condition?

Certaines personnes prétend que le pilote a être dans le noyau, ce qui n'est pas vrai. Certains pilotes ne sont pas sensibles au temps, en fait, beaucoup de pilotes sont comme ça.

Par exemple, l'encadreur, le CCF de la minuterie, les composants i2c, etc. Ces pilotes peuvent être facilement déplacé vers l'espace utilisateur. Il y a même certains systèmes de fichiers qui sont écrites dans l'espace utilisateur.

Vous devez vous déplacer vers l'espace noyau d'où la surcharge, par exemple. l'utilisateur noyau de swap, devient inacceptable pour votre code fonctionne correctement.

Mais il y a beaucoup de façon de traiter avec cela. Par exemple, /dev/mem fournit un bon moyen d'accéder à la mémoire physique, tout comme vous le faites à partir de l'espace du noyau.

Quand les gens parlent de va RTOS, je suis généralement sceptique. Ces jours-ci, le processeur est si puissant, que la plupart du temps, le temps réel de l'aspect devient négligeable.

Mais même, disons-le, vous avez à traiter avec SONET, et vous avez besoin de faire une protection de commutation à l'intérieur de 50ms (en fait même moins, depuis le 50ms limite s'applique à l'ensemble de l'anneau), vous pouvez toujours faire la commutation très rapide, SI votre matériel le supporte.

Beaucoup de l'encadreur de ces jours peut vous donner un support matériel qui réduit la quantité de écrit que vous devez faire. Votre travail est fondamentalement répond à l'interruption aussi rapidement que possible. Et Linux est pas mal du tout. La latence d'interruption que j'ai eu était de moins en moins de 1 ms, même si j'ai des tonnes d'autres interruptions en cours d'exécution (par exemple. IDE, ethernet, etc.).

Et si cela ne suffit toujours pas, alors peut-être votre conception du matériel est mauvais. Certaines choses sont mieux gauche sur le matériel. Et quand j'ai dit que le matériel, je veux dire l'ASIC, FPGA, Processeur Réseau, ou d'autres fonctions de la logique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X