J'ai récemment commencé à plonger dans la programmation OS de bas niveau. Je travaille (très lentement) actuellement à travers deux livres plus anciens, XINU et Build Your Own 32 Bit OS, ainsi que quelques ressources suggérées par les bons amis de SO dans ma question précédente, How to get started in operating system development. Il se peut que je ne l'ai pas encore rencontré dans l'une de ces ressources, mais c'est probablement parce que la plupart de ces ressources ont été écrites avant les systèmes multicœurs omniprésents, mais je me demande comment les interruptions fonctionnent dans un multicœur Système multiprocesseur Par exemple, disons que le DMA veut signaler qu'une opération de lecture de fichier est terminée. Quel processeur/noyau reconnaît qu'une interruption a été signalée? Est-ce le processeur/noyau qui a initié la lecture du fichier? Est-ce que c'est le processeur/noyau qui y arrive le premier?Comment fonctionnent les interruptions dans les machines multicœurs/multicompu?
Répondre
En regardant dans la fonction IoConnectInterrupt vous pouvez trouver le ProcessorEnableMask qui va sélectionner les processeurs qui ont permis d'exécuter la routine InterruptService (ISR). Sur la base de ces informations, je peux supposer que quelque part dans le bas niveau (voir Adam's post), il est possible de spécifier où router l'interruption.
Sur le côté note le fonctionnement du fichier n'est pas vraiment lié aux interruptions et/ou dma directement. L'opération de fichier est un concept de système de fichiers qui se traduit par quelque chose de bas niveau dépend de quel bus système de fichiers situé il pourrait être IDE ou disque SATA ou il peut être même stockage usb dans ce cas secteur sera traduit en 3 opération logique sur bus usb, il sera interrompu desservi par le pilote du contrôleur hôte USB, mais il n'est pas vraiment lié à l'opération de lecture de fichier d'origine, qui a probablement été divisé en une plus petite transaction de toute façon.
Merci. Je souhaite qu'il y avait un moyen d'accepter plusieurs réponses, mais les exemples de la vie réelle l'ont éclairci pour moi. Merci aussi pour la note sur les lectures de fichiers. –
@IIya Le lien IoConnectInterrupt est rompu. – smwikipedia
Dans l'ancien temps, l'interruption est allée à tous les processeurs. À l'heure actuelle, certains types de matériel peuvent être programmés par un système d'exploitation pour envoyer une interruption à un processeur particulier. Bien sûr, si vous pouviez choisir un processeur dynamiquement plutôt que statiquement, vous ne voudriez pas envoyer l'interruption à n'importe quel processeur qui initierait les E/S, vous voudriez l'envoyer à n'importe quel processeur qui est le moins chargé à l'heure actuelle et démarrer le plus efficacement la prochaine opération d'E/S, et/ou quel processeur est le moins chargé à l'heure actuelle et peut le plus efficacement exécuter le thread qui attendait les résultats.
Merci pour la réponse! Savez-vous si les x86/x86-64 permettent les deux approches? –
cet article http://www.alexonlinux.com/smp-affinity-and-proper-interrupt-handling-in-linux explique comment interrompt dans les machines smp sont gérées par Linux
- 1. Comment les interruptions sont-elles gérées par des machines à double processeur?
- 2. Désactiver les interruptions matérielles et logicielles
- 3. Comment fonctionnent les événements dans Java Swing?
- 4. Comment fonctionnent les classes python?
- 5. Comment fonctionnent les instructions préparées?
- 6. Comment fonctionnent les cartes glissantes?
- 7. Comment fonctionnent les applications Facebook?
- 8. jQuery Cycle Plugin - Interruptions entre les transitions dans IE7
- 9. Traitement des interruptions dans Windows
- 10. Comment fonctionnent les champs du modèle Django?
- 11. comment les modèles fonctionnent sur wordpress?
- 12. Comment fonctionnent les outils d'analyse Web?
- 13. Comment fonctionnent les unités de mesure F #?
- 14. Comment fonctionnent les vidéos en streaming?
- 15. Comment fonctionnent les méthodes de requête d'attribut?
- 16. Comment les redirections .htaccess fonctionnent-elles?
- 17. Comment fonctionnent les constructeurs d'interface graphique?
- 18. Comment fonctionnent les correctifs et les Service Packs?
- 19. Comment les prises Java fonctionnent-elles avec les IP publiques?
- 20. Comment fonctionnent les contextes OpenGL et les contextes de périphériques?
- 21. Comment fonctionnent les logiciels comme les dossiers cachés ou truecrypt?
- 22. Comment fonctionnent les thèmes pour les graphiques ziya?
- 23. Qt question: Comment fonctionnent les signaux et les slots?
- 24. Comment les expressions régulières fonctionnent-elles dans le sélénium?
- 25. Comment les options d'optimisation fonctionnent-elles dans VSC++ 2008?
- 26. Comment les énumérateurs fonctionnent-ils dans Ruby 1.9.1?
- 27. Comment fonctionnent les appels de procédure dans l'assembleur?
- 28. Comment les index de fonction fonctionnent-ils dans SQL?
- 29. Garder les fichiers point synchronisés sur les machines?
- 30. buildly night et les machines virtuelles
Je ne connais pas la réponse à votre question, mais je vous conseille vivement de jeter un oeil à la Intel® 64 and IA-32 Architectures Software Developer's Manual, le volume 3, chapitre 5. C'est gros et détaillé, contenant plus que ce que vous avez toujours voulu savoir sur l'architecture x86. –
@GiovanniGalbo +1 pour avoir mentionné le projet XINU. – smwikipedia