Comment un programme compilé interagit-il avec le système d'exploitation?

Quand un programme est compilé, il est converti en code machine qui peut être "compris" par la machine. Comment ce code machine interagit-il avec le système d'exploitation afin de faire des choses comme obtenir une entrée à partir du clavier ? Pour moi, il semble que le code machine devrait fonctionner à un niveau inférieur au système d'exploitation et, par conséquent, je ne peux pas comprendre comment le système d'exploitation peut agir comme un intermédiaire entre l'application compilée et le matériel.

PS: je viens de commencer la programmation C ++ et j'essaie de comprendre comment cin et cout fonctionnent

21
demandé sur mahela007 2012-10-10 07:00:47

2 réponses

C'est une très bonne question (mieux que vous ne le savez), et il y a beaucoup à apprendre. BEAUCOUP.

Je vais essayer de faire court. Le système d'exploitation agit comme un niveau d'abstraction entre logiciel et matériel:

   Software
       .
      /|\    
       |   communicates with
      \|/
       '
Operating System
       .
      /|\    
       |   communicates with
      \|/
       '
   Hardware

Le système d'exploitation communique avec le matériel via des programmes appelés pilotes (terme largement utilisé), et le système d'exploitation communique avec le logiciel via des procédures appelées appels système (terme peu utilisé).

Essentiellement, lorsque vous créez un système appel, vous quittez votre programme et entrez le code du système d'exploitation. Les appels système sont le seul moyen pour les programmeurs de communiquer avec les ressources.


Maintenant, je voudrais arrêter là, mais vous avez aussi dit:

Pour moi, il semble que le code machine devrait fonctionner à un niveau inférieur à le système d'exploitation et donc, je ne peux pas comprendre comment le système d'exploitation peut agir en tant qu'intermédiaire entre la demande compilée et le matériel.

C'est délicat, mais simple une fois que vous comprenez quelques bases.

Tout d'abord, tout le code est juste du code machine fonctionnant sur le CPU. Aucun code n'est supérieur ou inférieur à un autre code (à l'exception de certaines commandes qui ne peuvent être exécutées qu'en mode noyau privilégié). Donc, la question Est, comment le système d'exploitation peut-il être en contrôle même s'il abandonne le contrôle du CPU à l'utilisateur?

Lorsque le code est en cours d'exécution sur un processeur, il existe un concept appelé interruption. Ceci est un signal envoyé à la CPU qui provoque l'arrêt du code en cours d'exécution et sa désactivation avec un autre morceau de code, appelé gestionnaire d'interruption .

Les exemples d'interruptions incluent le clavier, la souris et, surtout, l'horloge.

L'interruption de L'horloge est élevée sur une base régulière provoque l'horloge du système d'exploitation gestionnaire d'interruption à exécuter. Dans ce gestionnaire d'interruption d'horloge est le code du système d'exploitation qui examine quel code est en cours d'exécution détermine quel code doit être exécuté prochain. Cela peut être plus de code du système d'exploitation ou plus de code utilisateur.

Parce que l'horloge est toujours et que le système d'exploitation obtient toujours cette chance périodique de s'exécuter sur le CPU, il est capable d'orchestrer tout ce qui se trouve dans l'ordinateur, même s'il s'exécute en utilisant le même ensemble de commandes CPU que n'importe quel programme normal.

24
répondu riwalk 2018-03-01 17:24:05

Le système d'exploitation fournit appels système que les programmes peuvent appeler pour accéder aux services de niveau inférieur.

Notez que les appels système sont différents de la fonction system() que vous avez probablement utilisée pour exécuter des programmes externes.

Les appels système sont utilisés pour accéder à des fichiers, communiquer sur le réseau, demander de la mémoire de tas,etc.

5
répondu Geoff Montee 2012-10-10 03:08:13