Je ne sais pas comment marche le noyau Windows, mais le noyau Linux ne sauvegarde ni la la table des pages mémoires, ni la table des signal handlers lors d'une commutation de processus.
Sur i386, il change le valeur du registre ldtr (qui indique quelle Local Descriptor Table utiliser), ainsi que la valeur du pointer "current" qui contient toutes les données nécessaires pour le processus.
Les étapes les plus longues dans la commutation sont la sauvegarde/restauration des registres (d'ailleurs Linux réalise là aussi une économie en ne s'occupant des registres FPU que lorsqu'ils sont utilisés) et le basculement mode utilisateur/mode noyau (qui se fait pour chaque appel système).
Poru plus d'informations voir le fichier arch/i386/kernel/process.c (fonction __switch_to) et le fichier include/asm-i386/system.h (macro switch_to).
Donc oui, une commutation noyau est sans doute plus coûteuse qu'une commutation en user-space, mais pas tant que ça (sous Linux en tout cas).
[^] # Re: LWPs, my mistake.
Posté par Gaël Le Mignot . En réponse à la dépêche performances MySQL sous OpenBSD. Évalué à 5.
Sur i386, il change le valeur du registre ldtr (qui indique quelle Local Descriptor Table utiliser), ainsi que la valeur du pointer "current" qui contient toutes les données nécessaires pour le processus.
Les étapes les plus longues dans la commutation sont la sauvegarde/restauration des registres (d'ailleurs Linux réalise là aussi une économie en ne s'occupant des registres FPU que lorsqu'ils sont utilisés) et le basculement mode utilisateur/mode noyau (qui se fait pour chaque appel système).
Poru plus d'informations voir le fichier arch/i386/kernel/process.c (fonction __switch_to) et le fichier include/asm-i386/system.h (macro switch_to).
Donc oui, une commutation noyau est sans doute plus coûteuse qu'une commutation en user-space, mais pas tant que ça (sous Linux en tout cas).