6
votes

Comment fonctionner le travail d'assemblage sur un système d'exploitation?

Si le noyau prend le contrôle du système, comment fonctionner la langue d'assemblage?

La langue d'assemblage est introduite comme une collection de mnémoniques qu'un ordinateur "comprend" et diverses macros pour faciliter certaines tâches.

Comment l'assemblage peut-il contrôler la CPU et la mémoire s'il ne peut pas faire cela sans faire des demandes au système d'exploitation?

Par exemple, si je veux faire des instructions MOV AX, # 4 , n'aurais-je pas besoin de mon programme pour envoyer des demandes au système d'exploitation afin de pouvoir le faire?

Je suis vraiment curieux ...

Merci!


3 commentaires

La CPU fait pas Comprenez l'assemblée; C'est une forme intermédiaire. La CPU comprend les instructions de la machine. En outre, qu'est-ce qui vous fait penser que les appels système sont indisponibles pour assembler?


Je comprends que. Cependant, je n'ai jamais vu de demande d'assemblée autorisation d'utiliser des registres, ni de la permission d'accéder à la mémoire, ni de la permission de faire des opérations de la CPU. Toutefois, sur la base de la réponse ci-dessous, il semble que le noyau garantit que les opérations que vous faites sont dans les ressources allouées par le noyau. La nouvelle question est que cela signifie-t-il que toutes les instructions doivent passer par le noyau?


Écrivez un programme C qui effectue tout ce qui est, compilé pour assembler et vous pouvez très facilement «voir un programme d'assemblage» qui accède à tout ce que vous souhaitez accéder. Si elle fonctionne avec les mauvaises autorisations (essayer d'exécuter le code du noyau dans l'espace d'application) ne fonctionnera plus si vous n'aviez plus que vous n'aviez pas "regardé" l'étape de montage entre le compilateur et l'assembleur. (La plupart des compilateurs, GCC, compilent certainement pour assembler l'assemblage, afin que vous puissiez sauvegarder-temps et voir le code de montage pour l'un de vos programmes).


3 Réponses :


5
votes

Votre programme peut exécuter toutes les instructions qu'il souhaite, tant qu'elle n'accumule pas les ressources / la mémoire en dehors de son Bague . Si c'est le cas, cela générera une faute (violation de la segmentation ou protection générale) et être tuée par le noyau.


0 commentaires

1
votes

Le langage de montage n'est qu'un langage de programmation comme C ou Pascal ou quoi que ce soit. Pour que les programmes soient exécutés, quelle que soit votre langue, le programme exécutant sur l'ordinateur doit être en code de machine pour cet ordinateur. Beaucoup / la plupart des langues sont soit assemblées comme dans le cas de la langue d'assemblage ou compilées comme dans le cas des langages de niveau supérieur dans le code de la machine pour le système cible. Certaines langues (Java, Python et dans des cas Pascal) sont compilées dans une langue intermédiaire, qui est également un code de machine, mais est ensuite interprété au moment de l'exécution par un programme écrit dans certaines langues qui sont compilées au code de la machine. Donc, ici encore une fois le code de la machine circule sur la machine.

Cela importe ce que vous parlez, les appels système sont des appels système et des restrictions de mémoire et d'autres restrictions imposées s'appliquent. Donc, ce n'est pas important s'il s'agit d'un langage C ou de montage, vous pouvez appeler un appel d'un système pour ouvrir un fichier ou imprimer des trucs au terminal ou autre.


0 commentaires

10
votes

La CPU a des mécanismes qui aident le système d'exploitation dans la protection des ressources. Utilisons votre exemple d'une puce X86. Les registres "généraux", tels que EAX , ne sont pas protégés. Mais les registres de débogage, tels que dr0 , sont.

Lorsque le système d'exploitation est en cours d'exécution, la CPU est en cours d'exécution dans "Bague 0" ou ce que les gens appellent "mode système" pour utiliser un terme générique. Les programmes sont en cours d'exécution "Bague 3" sur x86, ou ce que les gens appellent "mode utilisateur".

Lorsque l'exécution change de la bague 3 à la sonnerie 0 (plus sur la manière dont cela est fait plus tard), la CPU laisse tomber les protections du mode utilisateur. C'est ce qui permet au système d'exploitation de changer les registres de débogage.

Cependant, la principale chose protégée par le système d'exploitation est des emplacements de mémoire et une entrée / sortie de périphérique. Pour cette raison, les instructions IN et OUT sont privilégiées et ne peuvent pas être exécutées à la sonnerie 3.

La mémoire est protégée via la TLB, qui est également utilisée pour définir la mémoire virtuelle (VM) Adresse Rangers visibles aux processus du mode utilisateur. C'est ce tableau qui contrôle l'espace mémoire visible à chaque processus. La TLB elle-même est stockée en mémoire que seul le système d'exploitation de la bague 0 peut modifier. De même, les vecteurs d'interruption et tous les appareils mail de mémoire sont alloués à des plages de mémoire que seul le système d'exploitation peut accéder.

Lorsque vous exécutez, E.G., MOV [EAG], 3 , l'adresse référencée par EAX est levée dans le TLBS. La CPU détermine des bits d'accès dans la TLB (par exemple, le bit NOEXEC) si l'instruction accède légalement de la mémoire.

Lorsque les processus sont échangés par le planificateur de système d'exploitation, les registres à usage général tel que EAX sont enregistrés dans une zone de mémoire par threads gérée par le système d'exploitation. Le fil étant commuté sur est restauré de son image mémoire de valeurs de registre précédentes.

L'ordinateur serait incroyablement lent si le système d'exploitation interfère à chaque instruction de la machine. En particulier, l'accès aux registres généraux devrait être maintenu aussi vite que possible. Les regards TLB pour les accès à la mémoire sont mis en cache et non plus lents que l'accès à la mémoire elle-même.

Pour passer de la bague 3 à la sonnerie 0, une interruption logicielle est générée. C'est l'interruption "Call System". Les interruptions sont exécutées à la sonnerie 0 et sont configurées avant le début du premier processus, par le système d'exploitation. L'interruption du système interrompt le contrôle des transferts sur le code du système d'exploitation. Lorsque l'exécution revient de la routine de service d'interruption, la CPU est renvoyée à la sonnerie 3.


0 commentaires