Allons-y pour la relecture :mouarf:
*
Citation:
Tandis que la plupart des petites et moyennes applications réalisent une tâche unique du début à la fin, chaque module du noyau se déclare lui-même dans le but d'exécuter des requêtes futures, et sa fonction d'initialisation se finit immédiatement. En d'autres termes, la tâche de la fonction d'initialisation du module est de le préparer à une utilisation ultérieure des fonctions du module; c'est comme si le module disait : "Je suis présent, voici ce que je peux faire". La fonction de fin du module (hello_exit dans l'exemple) est appelée juste avant que le module soit déchargé. Il pourrait dire au noyau : "Je ne suis plus là, ce n'est plus la peine de me demander quoi que ce soit". Cette approche de programmation est similaire à la programmation événementielle, mais tandis que toutes les applications ne sont pas événementielles, chaque module du noyau l'est. Une autre différence majeure entre les application événementielles et du code noyau se trouve dans la fonction de fin : alors qu'une application qui se termine peut ne pas libérer les ressources ou ne nettoie pas tout à fait, la fonction de fin d'un module doit soigneusement défaire tout ce que la fonction d'initialisation a fait, sinon des morceaux resteront jusqu'à ce que le système soit redémarré.
Parfois je suis en apné :aie:
Citation:
La plupart des petites et moyennes applications réalisent une tâche unique du début à la fin, alors que chaque module du noyau se déclare lui-même dans le but d'exécuter des requêtes futures; sa fonction d'initialisation se finit immédiatement. Autrement dit, la tâche de la fonction d'initialisation du module est de le préparer à une utilisation ultérieure des fonctions du module; c'est comme si le module disait : "Je suis présent, voici ce que je peux faire". La fonction de fin du module (hello_exit dans l'exemple) est appelée juste avant que le module soit déchargé. Il pourrait dire au noyau : "Je ne suis plus là, ce n'est plus la peine de me demander quoi que ce soit".
Cette approche de programmation est similaire à la programmation événementielle. Toutes les applications ne sont pas événementielles, tandis que chaque module du noyau l'est. Une autre différence majeure entre les applications événementielles et le code noyau se trouve dans la fonction de fin : une application qui se termine peut ne pas libérer les ressources ou ne nettoie pas complètement contrairement à la fonction de fin d'un module. Cette dernière doit soigneusement défaire tout ce que la fonction d'initialisation a fait, sinon des morceaux resteront jusqu'à ce que le système soit redémarré.
Je me demandais même si ce ne serait pas mieux de tout organiser dans un pitit tableau de comparaison. Le pragraphe est énorme et chaque ligne est super importante, mais je n'arrive pas à trouver un moyen de le rendre facilement digeste :oops:
*
Citation:
Par ailleurs, la possibilité de décharger un module est une des fonctionnalités de la modularisation que vous allez le plus apprécier parce qu'elle aide à réduire les temps de développement; vous pouvez tester des versions successives de votre nouveau pilote sans avoir à passer par un cycle d'arrêt/redémarrage lent à chaque fois.
deviendrait :
Citation:
Par ailleurs, la possibilité de décharger un module est une des fonctionnalités de la modularisation que vous allez le plus apprécier : elle aide à réduire les temps de développement. Vous pouvez donc tester des versions successives de votre nouveau pilote sans avoir à passer par un cycle d'arrêt/redémarrage lent à chaque fois.
*
Citation:
printf est une des fonctions appelable et déclarée dans la libc. D'un autre côté, un module est uniquement lié avec le noyau, et les seules fonctions qu'il peut appeler sont celles exportées par le noyau; il n'y a aucune bibliothèque à lier. La fonction printk utilisée précédemment dans hello.c, par exemple, est la version de printf définie dans le noyau et exportée aux modules. Elle se comporte comme la fonction d'origine mais avec quelques différences mineures, la principale étant le manque du support des nombres à virgule flottante.
deviendrait :
Citation:
printf est une des fonctions appelables et déclarées dans la libc. D'un autre côté, un module est uniquement lié avec le noyau. Les seules fonctions qu'il peut appeler sont celles exportées par le noyau; il n'y a aucune bibliothèque à lier. La fonction printk utilisée précédemment, dans hello.c par exemple, est la version de printf définie dans le noyau et exportée aux modules. Elle se comporte comme la fonction d'origine mais avec quelques différences mineures, la principale étant le manque de support des nombres à virgule flottante.
*
Citation:
L'illustration 2-1 montre comment les appels de fonction et les pointeurs de fonction sont utilisés dans un module afin d'ajouter des nouvelles fonctionnalités au noyau
deviendrait :
*
Citation:
L'illustration 2-1 montre comment les appels de fonction et les pointeurs de fonction sont utilisés dans un module afin d'ajouter de nouvelles fonctionnalités au noyau.
*
Citation:
ATTENTION IL Y A UNE IMAGE ICI A TRADUIRE !!!! CONTACTEZ MICHAEL SI VOUS N'ARRIVEZ PAS A LA CREER. Figure 2-1. Linking a module to the kernel
Ton mail se trouvera en "Annexe Liens Utiles" du livre fini? :P
*
Citation:
Étant donné qu'aucune bibliothèque est liée aux modules, les fichiers sources ne devraient jamais inclure les entêtes courants, <stdarg.h> et certaines situations spécifiques sont les seules exceptions. Seules les fonctions faisant réellement partie du noyau lui-même peuvent être utilisées dans les modules. Tout ce qui est relatif au noyau est déclaré dans les entêtes que l'on peut trouver dans l'arborescence des sources du noyau que vous avez installée et configurée. La plupart des entêtes courants sont situés dans include/linux et include/asm, mais d'autres sous-répertoires spécifiques aux matériels peuvent avoir été créés.
deviendrait :
Citation:
Étant donné qu'aucune bibliothèque n'est liée aux modules, les fichiers sources ne devraient jamais inclure les en-têtes/entête courants. Les seules exceptions sont <stdarg.h> et certaines situations spécifiques. Uniquement les fonctions faisant réellement partie du noyau lui-même peuvent être utilisées dans les modules. Tout ce qui est relatif au noyau est déclaré dans les en-têtes/entête que l'on peut trouver dans l'arborescence des sources du noyau que vous avez installée et configurée. La plupart des en-têtes/entête courants sont situés dans include/linux et include/asm, mais d'autres sous-répertoires spécifiques aux matériels peuvent avoir été créés.
Je sais qu'on peut utiliser "entête" au même titre que "en-tête", mais... Si on utilise le mot en entier, on ne devrait pas mettre de "s" pour le pluriel (s'pas moi, c'est le Littré qui discute de ça); c'est d'ailleurs logique vu la formation de l'expression. Bref :mouarf:
*
Citation:
Le rôle de chaque entête du noyau est expliqué à travers le livre quand on a besoin d'une entête en particulier.
Je ne comprends pas trop là : le rôle de chaque en-tête est expliqué ou seulement les rôles des particuliers dont on a besoin?
*
Citation:
Une autre différence importante entre la programmation du noyau et la programmation des applications réside sur comment chaque environnement gère les erreurs : alors qu'une erreur de segmentation est inoffensive dans le développement d'applications et un débugger peut toujours être utilisé pour tracer l'erreur jusqu'au problème dans le code source, une erreur du noyau tue le processus courant si ce n'est pas le système entier. Nous verrons comment tracer les erreurs du noyau dans le chapitre 4.
deviendrait :
Citation:
Une autre différence importante entre la programmation des applications et la programmation du noyau est la manière dont chaque environnement gère les erreurs. Une erreur de segmentation est inoffensive dans le développement d'applications et un débugger peut toujours être utilisé pour tracer l'erreur jusqu'au problème dans le code source. En revanche, une erreur du noyau tue le processus courant si ce n'est pas le système entier. Nous verrons comment tracer les erreurs du noyau dans le chapitre 4.
J'ai fait des phrases plus courtes en agençant l'ordre des choses abordées. Je sais, je suis c***** avec mes phrases courtes, mais on nous apprend à faire ça en bio "parce que c'est nettement plus clair quand on est concis, n'oubliez pas, s'il vous plaît" :oops:
*
Citation:
Cet tâche difficile est possible uniquement si le processeur impose la protection des logiciels systèmes vis à vis des applications.
C'est vis-à-vis :P
*
Citation:
Les niveaux ont différents rôles, et quelques opérations sont interdites aux niveaux inférieurs; le code d'un programme peut passer d'un niveau à un autre seulement à travers un nombre limité de portes. Les systèmes UNIX sont conçus pour tirer partie de cette fonctionnalité du matériel en utilisant deux de ces niveaux. Tous les processeurs actuels ont au moins deux niveaux de protection, et quelques uns, comme la famille des x86, ont plus de niveaux; quand plusieurs niveaux existent, les plus haut et bas niveaux sont utilisés. Sous Unix, le noyau s'exécute dans le niveau le plus haut (aussi appelé mode superviseur), où tout est autorisé, alors que les applications s'exécutent dans le niveau le plus bas (aussi appelé mode utilisateur), où le processeur régule les accès directs au matériel et les accès non autorisés à la mémoire.
deviendrait :
Citation:
Les niveaux ont différents rôles et quelques opérations sont interdites aux niveaux inférieurs. Le code d'un programme peut passer d'un niveau à un autre seulement à travers un nombre limité de portes. Les systèmes UNIX sont conçus pour tirer partie de cette fonctionnalité du matériel en utilisant deux de ces niveaux. Tous les processeurs actuels ont au moins deux niveaux de protection et quelques-uns, comme la famille des x86, ont plus de niveaux. Quand plusieurs niveaux existent, les plus haut et bas niveaux sont utilisés. Sous Unix, le noyau s'exécute dans le niveau le plus haut (aussi appelé mode superviseur) où tout est autorisé. Au contraire, les applications s'exécutent dans le niveau le plus bas (aussi appelé mode utilisateur) où le processeur régule les accès directs au matériel et les accès non autorisés à la mémoire.
*
Citation:
Unix transfère l'exécution de l'espace utilisateur vers l'espace noyau à chaque fois qu'une application fait un appel système ou elle est suspendue par une interruption matérielle. Le code du noyau exécutant un appel système travaille dans le contexte d'un processus - il fonctionne au nom du processus appelant et il est capable d'accéder aux données de l'espace d'adresses du processus. Le code qui gère les interruptions, d'un autre côté, est asynchrone en ce qui concerne les processus et n'est pas lié à un processus particulier.
deviendrait :
Citation:
Unix transfère l'exécution de l'espace utilisateur vers l'espace noyau à chaque fois qu'une application fait un appel système ou est suspendue par une interruption matérielle. Le code du noyau exécutant un appel système travaille dans le contexte d'un processus : il fonctionne au nom du processus appelant et est capable d'accéder aux données de l'espace d'adresses du processus. Par ailleurs, le code qui gère les interruptions, est asynchrone en ce qui concerne les processus et n'est pas lié à un processus particulier.
J'ai remplacé "d'un autre côté" par "par ailleurs" parce que la 1re expression donne l'impression qu'on va introduire une notion complémentaire et qu'on la développera, or je n'ai pas l'impression que ce soit le cas ;) Du coup, avec "par ailleurs" on fait juste un complément presque "en passant".
*
Citation:
Le rôle d'un module est d'étendre les fonctionnalités du noyau; le code modularisé s'exécute dans l'espace du noyau. Habituellement, un pilote réalise les deux tâches présentées précédemment : quelques fonctions dans le module sont exécutées en tant qu'appels système, et quelques unes ont la charge de la gestion des interruptions.
deviendrait :
Citation:
Le rôle d'un module est d'étendre les fonctionnalités du noyau; le code modularisé s'exécute dans l'espace du noyau. Habituellement, un pilote réalise les deux tâches présentées précédemment : quelques fonctions dans le module sont exécutées en tant qu'appels système et quelques-unes ont la charge de la gestion des interruptions.
La suite au prochain épisode :mrgreen: