session typique de compilation :
1) chargement du compilateur en mémoire (1ière passe)
2) chargement du code source en mémoire
3) exécution de la première passe de compilation
4) perforation du résultat intermédiaire
5) chargement du compilateur en mémoire (2ième passe)
6) chargement du code intermédiaire en mémoire
7) exécution de la deuxième passe de compilation
8) perforation du résultat final (programme exécutable)
9) chargement du programme
10) chargement des données
11) exécution du programme
12) perforation du resultat
Les machines étaient allouées aux utilisateurs pour "un certain temps", pendant lequel ils
faisaient tout... pas optimisé => pupitreurs
Les pupitreurs : un "humain" optimise l'utilisation de la machine (ex : compilations en série),
mais travail manuel...
Puis invention du traitement par lots "BATCH" : Pour automatiser le travail des pupitreurs :
les "control cards" permettent de décrire le job à exécuter sur une carte spéciale.
l'enchaînement des travaux est piloté par un "moniteur" = ancetre des systèmes d'exploitation
modernes.
optimisation suivante = diminuer le temps perdu en attente active... Off Line Operations :
les E/S se font sur bandes magnétiques, qui sont traitées ensuite (ex impressions)
le job suivant est chargé en mémoire pendant l'exécution du job courant
Le chargement en mémoire de plusieurs travaux simultanément est assez complexe. il faut :
●être capable de charger en mémoire des programmes à des adresses non connues à
l'avance : mécanismes de code relogeable, d'adressage indirect...
●offrir des mécanismes de protection qui empêchent un programme "faux" d'aller écraser la
mémoire du programme d'à côté, ainsi que le code du système d'exploitation : mécanismes
de protection mémoire.
Pour optimiser encore le temps d'utilisation des processeurs : invention des interruptions. le
CPU peut être interrompu de façon asynchrone et se mettre à exécuter du code ailleurs en
mémoire (code du système d'exploitation). Ce code va sauvegarder le contexte du processus
interrompu, puis restaurer le contexte d'un autre job et lui "rendre la main". Ce mécanisme
permet de partager le CPU entre plusieurs programmes en cours d'exécution.
Ces systèmes en multiprogrammation sont toujours des systèmes "batch". les travaux sont
soumis dans une "liste" et exécutés sans interaction avec un utilisateur.
Viennent plus tard les systèmes interactifs :