2008-11-19 6 views
21

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?

+0

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. –

+0

@GiovanniGalbo +1 pour avoir mentionné le projet XINU. – smwikipedia

Répondre

6

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.

+0

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. –

+0

@IIya Le lien IoConnectInterrupt est rompu. – smwikipedia

2

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.

+0

Merci pour la réponse! Savez-vous si les x86/x86-64 permettent les deux approches? –

Questions connexes