2010-12-04 48 views
2

Désolé, je ne savais pas si c'était un endroit approprié pour poser cette question, mais j'espère que c'est acceptable, des excuses si ce n'est pas! :)Quelqu'un peut m'aider s'il vous plaît avec certains concepts de système d'exploitation Je ne sais pas - re Interruptions

Je suis actuellement en train de faire un module sur la théorie des systèmes d'exploitation et j'ai quelques concepts que je suis incapable de saisir. Serait-ce le bon endroit pour poser des questions?

Ma question principale concerne les interruptions. Lorsque la CPU détecte qu'il y a eu une interruption, je comprends qu'elle doit savoir d'où provient cette interruption. Ma compréhension est la suivante, quelqu'un pourrait-il me dire si c'est correct, et expliquer quelques lacunes dans mes connaissances? Pour que la CPU détecte l'origine de l'interruption, elle peut interroger tous les objets pour identifier la source, mais ces questions basées sur les E/S prendront beaucoup de temps. Au lieu de cela, il utilise le cycle d'interruption et attend un identificateur d'interruption sur le bus de données. S'il s'agit d'un bus de données de 8 bits, il existe 256 niveaux d'interruption (c'est-à-dire 2^8). (Pourquoi est-ce?)

Ainsi, un sous-programme de service d'interruption (ISR) est écrit pour chaque niveau d'interruption possible et stocké dans une table à un emplacement fixe (vecteur d'interruption) qui est standardisé par le processeur. Dans mes notes, il est dit "L'emplacement doit être connu avant d'obtenir l'adresse" (Qu'est-ce que cela signifie?)

L'identificateur de niveau d'interruption reçu dans le cadre du cycle d'interruption est utilisé comme un index dans le vecteur d'interruption (Quelqu'un peut-il casser ce bas un peu s'il vous plaît?). Ma compréhension est qu'une valeur, l'identificateur de niveau d'interruption est passé à la CPU et utilisé pour pointer sur le vecteur d'interruption.

En outre, qu'est-ce que cela signifie quand on dit qu'une interruption est "desservie"?

Merci beaucoup, et désolé pour les longs paragraphes, je suis juste un peu confus par de nombreux aspects de cela!

Répondre

3

Une grande partie du travail des interruptions est de permettre à la CPU d'être interrompue par d'autres périphériques (comme une carte réseau qui a reçu un paquet). Je trouve qu'il est plus facile de comprendre ce cas d'utilisation en premier.

Lorsque la carte réseau doit indiquer à la CPU qui a reçu des données, elle envoie un nombre à la "broche d'interruption" sur la CPU. Typiquement, ce serait un nombre de 8 bits. Le numéro est appelé le "niveau d'interruption".

La CPU est construite de manière à lui permettre de passer à un code pour gérer l'interruption, puis revenir à ce qu'elle faisait. C'est un matériel intégré, donc il doit être simple: il y a une table qui correspond à chaque niveau d'interruption à l'adresse de la fonction à appeler. Cette fonction est appelée "routine de service d'interruption". L'emplacement de cette table est standardisé, comme vous le dites, puisque c'est le matériel qui regarde dans la table (donc son adresse est codée en dur dans la puce).

Le service d'une interruption consiste simplement à exécuter le code associé à l'interruption: dans le cas de la carte réseau, cela signifierait lire le paquet de la carte réseau et le copier en mémoire (vraisemblablement, le la mémoire sur la carte réseau elle-même est limitée). Vous posez la question de savoir "l'identificateur de niveau d'interruption reçu dans le cadre du cycle d'interruption est utilisé comme index dans le vecteur d'interruption". C'est juste une autre façon de dire ce que nous venons de faire: le signal de la carte (le niveau d'interruption) est utilisé par le CPU comme un index dans une table ("le vecteur d'interruption"). Là, il trouve l'adresse du code à exécuter; ce code a été mis là par le pilote de périphérique pour votre carte réseau (ou peut-être par le système d'exploitation).Lorsque la fonction ISR est rétablie, la CPU replace les registres comme ils l'étaient lors de la réception de l'interruption, de sorte que l'exécution peut reprendre comme si rien ne s'était passé. Une façon de penser à cela est que les interruptions sont un mécanisme qui permet à la CPU d'exécuter plusieurs programmes à la fois (votre programme et le pilote de la carte réseau).

Le même concept d'interruptions peut également être utilisé pour les "interruptions logicielles", où au lieu du signal provenant de l'extérieur de la CPU, il vient de l'intérieur.

0

Eh bien, il y a certainement beaucoup de questions dans votre question. Laissez-moi aborder l'un d'entre eux.

Une interruption est dit être serv, OH HANG ON, je dois laisser le chien OUT., Glacé lorsque le «travail» que l'interruption est terminée.

Dans mon cas stupide, j'ai été interrompu par le chien qui grattait à la porte. J'ai arrêté ce que je faisais (en train de taper le mot service), j'ai laissé sortir le chien, puis j'ai recommencé à taper.

J'ai «entretenu» la demande d'interruption des chiens.