Vous êtes sur la page 1sur 147

Systèmes d’exploitation

Prof. Dr. Ing. Abdellah Amine


Génie Informatique
EST_Fkih Ben Salah
2020_2021 1
Plan

I. Introduction

II. Gestion de Processus

III. Système de gestion de fichiers

IV. Gestion de la mémoire

V. Ordonnancement

2
Introduction

• Chapitre 1

 Qu’est ce qu’un système d’exploitation

 Développement historique des SE

3
Concepts importants du Chapitre 1

• Que c’est que un SE


• Évolution historique
•Par lots
•Multiprogrammés – balance de travaux
•À partage de temps (time-sharing)
•Parallèles:
• Fortement couplés
•Symétriques,
• Asymétriques: maître-esclave
•Faiblement couplés:
•Répartis
•Réseaux
• Caractéristiques de matériel et logiciel requises pour cette évolution
• Systèmes à temps réel: durs, souples
4
Système d’exploitation (SE)

Qu’est ce qu’un système d’exploitation?

• Un système peut être définit comme un ensemble de programmes qui contrôle et dirige l’utilisation d’un

ordinateur à travers différentes applications.

• En autres, c’est un système qui exploite les ressources matérielles d’un ordinateur et assure la liaison entre

les utilisateurs et les applications.

• C’est le premier programme exécuté lors du démarrage de l’ordinateur.

• Le système d’exploitation peut être noté SE ou OS (Operating System: traduction en anglais)

• Il optimise l`utilisation des ressources pour maximiser la performance du système

5
Vue abstraite d’un SE

6
Ressources et leur gestion

• Ressources:

•physiques: mémoire, unités E/S, UCT...

•Logiques = virtuelles: fichiers et bases de données partagés, canaux de


communication logiques, virtuels...

•les ressources logiques sont bâties par le logiciel sur les ressources physiques

• Allocation de ressources: gestion de ressources, leur affectation aux usagers qui les
demandent, suivant certains critères

7
Pourquoi étudier les SE?

• Logiciel très important…


•tout programme roule sur un SE
•interface usager-ordinateur
• Les SE utilisent beaucoup d’algorithmes et structures de données
intéressants
•Les techniques utilisées dans les SE sont aussi utilisées dans
nombreuses autres applications informatiques
•il faut les connaître

8
Développement de la théorie des SE

• La théorie des SE a été développée surtout dans les années 1960 (!!)

• A cette époque, il y avait des machines très peu puissantes avec lesquelles on cherchait à faire
des applications comparables à celles d’aujourd’hui (mémoire typique)

• machines devaient parfois desservir des dizaines d’usagers!

• Dont le besoin de développer des principes pour optimiser l’utilisation d’un ordinateur.

• Principes qui sont encore utilisés

9
Évolution historique des SE

1. Aperçu Historique:
• Les débuts (1946-1955): Premiers systèmes, Tubes à vide
• 1955-1965: Systèmes de traitement par lot, transistors
• 1965-1980: Systèmes multiprogrammés et à temps partagé, Circuits intégrés
• 1980-1990: Systèmes des ordinateurs personnels, LSI
• VLSI (1990…) Systèmes « micro-noyau » .

10
Premiers systèmes (1945−1955)

• Machines à tubes à vide volumineuses, très fragiles et très lentes

• Absence de système d’exploitation

• Calculs simples (tables des sinus et cosinus)

• Programmation en langage machine sur des cartes enfichables ou cartes perforées

• Construction, programmation et maintenance effectuées par un seul groupe

• Système mono-usager (réservation)

• Mauvaise utilisation de la CPU

11
Systèmes de traitement par lots (1955−1965)
• Machines à transistors fiables mais coûteuses

• Programmation en Fortran et Assembleur

• Premiers logiciels de base : chargeur et compilateur Fortran

• Distinction entre opérateurs, constructeurs, programmeurs et utilisateurs

• Soumission des travaux

• Enchaînement des travaux par l'opérateur

• Inactivité de la CPU lors de la préparation

• Traitement par lots

12
Systèmes de traitement par lots

• Sont les premiers SE


• L’usager soumet une job à un opérateur
 Programme suivi par données
• L’opérateur place un lot de plusieurs jobs sur le dispositif de lecture
• Un programme, le moniteur, gère l'exécution de chaque programme du lot
• Le moniteur est toujours en mémoire et prêt à être exécuté
• Un seul programme à la fois en mémoire, programmes sont exécutés en
séquence
• La sortie est normalement sur un fichier, imprimante, ruban magnétique…

13
Les cartes perforées

Une ligne de données ou de programme était codée dans des trous qui pouvaient être
lus par la machine

14
Opérateur lisant un paquet de cartes perforées

Source:
http://www.tietokonemuseo.saunalahti.fi/eng/kuva_32_eng.htm
Finnish Data Processing Museum Association
15
• Le chargement successif
• Ralentir le temps d’exécution
• Diminuer et automatiser les chargements
• Traitement par lots
• Moniteur d’enchainement

Prof. Dr. Ing. Abdellah Amine Génie Informatique


16
EST_Fkih Ben Salah 2020_2021
Langage de contrôle des travaux (JCL)
•Utilisé pour contrôler l’exec d’une job $JOB
le compilateur à utiliser $FTN
...
indiquer où sont les données Programme
•Exemple d’une job: FORTRAN
paquet de cartes comme suit: ...
$LOAD
•$JOB début $RUN
•$ FTN charge le compilateur FORTRAN et initie ...
son exécution Données
•$LOAD charge le programme objet (à la place ...
$END
du compilateur) $JOB
•$RUN transfère le contrôle au programme usager ...
•les données sont lues par le moniteur et passées (job suivant)
au progr. usager
17
Langage de contrôle des travaux (JCL)

• L’E/S est déléguée au moniteur

• Chaque instruction d’E/S dans pgm usager invoque une routine d’E/S dans le
moniteur:

• Quand le programme usager se termine, la prochaine ligne de JCL est lue et


exécutée par le moniteur.

18
Le moniteur par lots

• Lecture de cartes perforées


• Interprétation de commandes JCL
• Lecture (load) d’une job (du lecteur de cartes)
• Chargement en mémoire
• Transfère le contrôle au programme usager
• Exécution du programme
• À ce point, le moniteur reprend le contrôle

19
Traitement par lots : Inconvénients

20
Systèmes multiprogrammés et à temps partagé
(1965−1980)

Au lieu d’exécuter les travaux au fur et à mesure qu’ils sont lus,


les stocker sur une mémoire secondaire (disque) , Puis choisir
quels programmes exécuter et quand.

21
Traitement par lots multiprogrammé

• Les opérations E/S sont extrêmement lentes (comparé aux autres instructions)
Même avec peu d’E/S, un programme passe la majorité de son temps à attendre
• Donc: pauvre utilisation de l’UCT lorsqu’un seul pgm usager se trouve en mémoire

22
Traitement par lots multiprogrammé
• Si la mémoire peut contenir plusieurs programmes, l’UCT peut exécuter un
autre programme lorsqu’un programme attend après E/S
• C’est la multiprogrammation

23
Plusieurs programmes en mémoire pour la
multiprogrammation

24
Exigences pour multiprogrammation

• Interruptions
 afin de pouvoir exécuter d’autres jobs lorsqu’un job attend après E/S
• Protection de la mémoire: isole les jobs
• Gestion du matériel
 plusieurs jobs prêts à être exécutées demandent des ressources:
 UCT, mémoire, unités E/S
• Langage pour gérer l’exécution des travaux: interface entre usager et OS
 jadis JCL, maintenant shell, command prompt ou semblables

25
Systèmes à temps partagé (time sharing)

26
Systèmes temps partagé (TSS)

27
Chaque terminal a sa propre partition de mémoire

28
Systèmes à temps partagé (TSS)

• Le traitement par lots multiprogrammé ne supporte pas l’interaction avec les usagers

 excellente utilisation des ressources mais frustration des usagers!

• TSS permet à la multiprogrammation de desservir plusieurs usagers simultanément

• Le temps d’UCT est partagé par plusieurs usagers

• Les usagers accèdent simultanément et interactivement au système à l’aide de


terminaux

• le concept de mémoire virtuelle pour faciliter la gestion de mémoire

29
MULTICS et UNIX

MULTICS a été un système TSS des années 60, très sophistiqué pour son époque

Ne réussit pas à cause de la faiblesse du matériel de son temps

Quelques unes de ses idées furent reprises dans le système UNIX

30
Ordinateurs Personnels ( PCs)

 Au début, les PCs

 étaient aussi simples que les premiers ordinateurs

 Le besoin de gérer plusieurs applications en même temps conduit à redécouvrir la

multiprogrammation

 Le concept de PC isolé évolue maintenant vers le concept d’ordinateur de réseau (network

computer), donc extension des principes des TSS.

31
Aujourd’hui

32
Retour aux concepts de TSS

• Plusieurs PC (clients) peuvent être desservis par un ordi plus puissant (serveur)
pour des services qui sont trop complexes pour eux (clients/serveurs, bases de
données, telecom)
• Les grands serveurs utilisent beaucoup des concepts développés pour les
systèmes TSS

33
Notions de parallélisme, de coopération et de compétition

34
Processus séquentiels

35
Processus séquentiels

36
Exemple1

37
Systèmes de taches et graphes de précédence

38
Systèmes de taches et graphes de précédence

39
Systèmes de taches et graphes de précédence

40
Systèmes de taches et graphes de précédence

41
Comportement d’un systèmes de tâches

42
Comportement d’un systèmes de tâches

43
Comportement d’un systèmes de tâches

44
Déterminisme d’un système de tâches

45
Déterminisme d’un système de tâches

46
Déterminisme d’un système de tâches

47
Parallélisme et langages parallèles

48
Parallélisme et langages parallèles

49
Parallélisme et langages parallèles

La tâche de
Rendez vous

50
Parallélisme et langages parallèles

51
Parallélisme et langages parallèles

• Parbegin/parend est une structure limitée, qui


permet d’expliquer que des séquences de tâches
• L’exigence d’n RDV et parbegin/parend n’a pas de
moyen d’exprimer le RDV entre les tâches

52
Parallélisme et langages parallèles

53
Parallélisme et langages parallèles

54
Parallélisme et langages parallèles

55
Systèmes parallèles (tightly coupled)

• Le petit coût des puces rend possible leur composition dans systèmes multiprocesseurs

• Les ordinateurs partagent mémoire, horloge, etc.

Avantages:

• travail plus fiable:

56
Systèmes parallèles

• Symétriques
•Tous les UCTs exécutent le même SE
•Elles sont fonctionnellement identiques
• Asymétrique
•Les UCT sont des fonctionnalités différentes, par exemple il y a un maître et des esclaves.
• Aujourd’hui, tout ordinateur puissant est un système parallèle.

57
Systèmes des ordinateurs personnels (1980-1990)

58
SE en réseaux et SE répartis

59
Systèmes à temps réel

• Doivent réagir à ou contrôler des événements externes (p.ex. contrôler une usine). Les délais de
réaction doivent être bornés

• systèmes temps réel souples:

•les échéances sont importantes, mais ne sont pas critiques (p.ex. systèmes téléphoniques)

•systèmes temps réel rigides (hard):

• les échéances sont critiques, p.ex.

• contrôle d’une chaîne d`assemblage

• graphiques avec animation 60


Systèmes "micro−noyau" (1990…)

61
Classes des systèmes
Selon les contraintes d'utilisation

62
Classes des systèmes
Selon les services

63
Classes des systèmes
Selon l'architecture matérielle

64
Modes d'exécution

65
Calculs parallèles et Distribués

• Introduction

• Parallélisation sur mémoire distribuée.

• Parallélisation sur mémoire partagée

66
Introduction

• Architectures parallèles Pourquoi?


–Il est très naturel de partager un gros travail parmi plusieurs personnes.
• En informatique, le parallélisme a rapidement considéré comme une option naturelle pour calculer.
• répondre à une forte demande
–En puissance de calcul: simulation, modélisation
–En puissance de traitement: base de données, serveurs multimédia
• Problématique: Calculs trop gros, Calculs trop long

67
Architectures parallèles Pourquoi?

Solutions :
• Approche classique: diminuer le temps de calcul
– Matériels plus rapides: évolution processeurs et mémoire
• En calcul parallèle: Exécution simultané de plusieurs opérations (Tâches).
– Meilleurs algorithmes
– Machines parallèles

68
Architectures parallèles Pourquoi?

• Avantages :
– Amélioration des performances de calcul
– Accroissement de la taille des problèmes à résoudre
– Résolution de nouveaux problèmes
• Problèmes
– La remise en question des concepts d'algorithmique classique basés sur le principe de
la machine séquentielle.
– Diversité des modèles d'architectures parallèles
– Difficulté de la programmation des machines parallèles

69
Algorithmique Parallèle Pourquoi?

• Approches de résolution de problèmes dans un contexte d’exécution parallèle.

• Modèles algorithmiques : contextes d’exécution parallèle simplifiés pour faciliter la conception.

• Analyse théorique de la performance

70
Définitions

• Un programme séquentiel se caractérise par l’exécution de plusieurs tâches l’un après l’autre avec un ordre
prédéfini.
• Un programme parallèle se caractérise par l’exécution de plusieurs tâches distinctes ou non en même temps.
• Un ordinateur parallèle : est une machine composée de plusieurs processeurs qui coopèrent à la solution de
même problème.
• Un système distribué (ou réparti) est un système de plusieurs processeurs impliqués dans la résolution d’un ou
plusieurs problèmes.

71
Définitions

• Qu’est-ce que le parallélisme ?


– Exécution d’un algorithme en utilisant plusieurs processeurs plutôt qu’un seul.
– Division d’un algorithme en tâches pouvant être exécutées en même temps sur des processeurs différents.
• Le but : réduire le temps de résolution d’un problème un utilisant un ordinateur parallèle.
• 3 niveaux d’abstraction
– Architectures
– Algorithmes
– Programmation

72
Définitions

• Le type de parallélisme: physique et logique

– Le parallélisme physique
: Exécution de plusieurs tâches distincts ou égales.

– Le parallélisme logique (pseudo-parallélisme): Exécution de plusieurs tâches par un


seul processeurs qui les traite alternativement

73
Architectures parallèles

• Plusieurs types d’architectures


– Distribuées
– Centralisées
• Modèles d’architecture : simplification du fonctionnement des ordinateurs parallèles
– SIMD
– MIMD
– MIMD

74
Classification de Flynn

• En 1966 : basée sur la multiplicité du flot d'instructions et le flot de données

• SISD : Single Instruction Single Data Stream

• SIMD : Single Instruction Multiple Data Stream

• MISD : Multiple Instruction Single Data Stream

• MIMD : Multiple Instruction Multiple Data Stream.

75
Classification de Flynn : SISD

SISD ou encore single instruction on single data est un terme désignant une architecture matérielle
dans laquelle un seul processeur exécute un seul flot d'instruction sur des données résidant dans une
seule mémoire. De ce fait, il n'y aucune parallélisation. On retrouve là l'architecture de von
Neumann.

76
Classification de Flynn : SIMD

Single Instruction on Multiple Data (signifiant en anglais : « instruction unique, données


multiples »), ou SIMD, désigne un mode de fonctionnement des ordinateurs dotés de capacités
de parallélisme. Dans ce mode, la même instruction est appliquée simultanément à plusieurs
données pour produire plusieurs résultats

77
Classification de Flynn : MISD

Multiple instructions single data (ou MISD) désigne un mode de fonctionnement des ordinateurs dotés de


plusieurs unités arithmétiques et logiques fonctionnant en parallèle.
Dans ce mode, la même donnée est traitée par plusieurs processeurs en parallèle. Il existe peu d'implémentations
en pratique. Cette catégorie peut être utilisée dans le filtrage numérique et la vérification de redondance dans les
systèmes critiques. Cependant, un des exemples d'utilisation de l'architecture MISD sont les ordinateurs de
contrôle de vol de la navette spatiale américaine.
78
Classification de Flynn : MIMD

Multiple Instructions multiple data ou MIMD  désigne les machines multi-processeurs où chaque


processeur exécute son code de manière asynchrone et indépendante. Pour assurer la cohérence des
données, il est souvent nécessaire de synchroniser les processeurs entre eux, les techniques de
synchronisation dépendent de l'organisation de la mémoire.

79
Classification de Flynn : MIMD

Multiple Instructions multiple data ou MIMD  désigne les machines multi-processeurs où chaque


processeur exécute son code de manière asynchrone et indépendante. Pour assurer la cohérence des
données, il est souvent nécessaire de synchroniser les processeurs entre eux, les techniques de
synchronisation dépendent de l'organisation de la mémoire.

80
Parallélisme : Mémoire partagé vs Mémoire Distribuée

• Bas niveau de la programmation des abstractions qui sont utilisés avec certaines types de programmation
parallèle.
• En informatique, le concept d'abstraction identifie et regroupe des caractéristiques et traitements communs
applicables à des entités ou concepts variés ; une représentation abstraite commune de tels objets permet d'en
simplifier et d'en unifier la manipulation.
• Mémoire partagée:
Les systèmes communiquent les uns avec les autres et avec partage de la mémoire principale sur un
bus partagé (UMA: Uniform Memory Access)

81
Parallélisme : Mémoire partagé vs Mémoire Distribuée

L'illustration montre les différences entre une architecture NUMA et UMA.


La configuration NUMA a une mémoire locale attribuée à chaque processeur,
tandis que dans la configuration UMA, plusieurs processeurs partagent la mémoire via un bus.

82
Parallélisme : Mémoire partagé vs Mémoire Distribuée

• Mémoire Distribuée
• La mémoire d'un système informatique multiprocesseur est dite distribuée lorsque la mémoire est répartie en
plusieurs nœuds, chaque portion n'étant accessible qu'à certains processeurs. Un réseau de communication
relie les différents nœuds, et l'échange de données doit se faire explicitement par « passage de messages »

Le modèle de passage de messages (message


passing en anglais) est un modèle de communication
entre ordinateurs ou entre processus à l'intérieur d'un
même ordinateur. Il réalise l’envoi de messages
simples. Il constitue la couche de base
des Middleware Orientés Messages.

83
Parallélisme : Mémoire partagé vs Mémoire Distribuée

84
Programmation parallèle vs Programmation distribuée

• Programmation parallèle

–Programmation dans un langage permettant d’exprimer le parallélisme dans une application réelle

• Différents niveaux d’abstraction possibles

• La parallélisation automatique serait la solution idéale, mais difficile à mettre en œuvre

• La façon de programmer n’est pas indépendante de la machine utilisée

85
Programmation parallèle vs Programmation distribuée

• La programmation distribuée :
– Chaque composant s'exécute sur un matériel interconnecté par un réseau local ou global.
– Les processus envoient entre eux des messages. Exemple :
• un serveur de fichiers dans un réseau ;
• une base de données
• Les serveurs Web
• Le modèle de programmation est souvent celui du client/serveur.
• Souvent les composants distribués sont eux même multi programmés

86
Programmation parallèle vs Programmation distribuée
• Calcul distribué & Calcul parallèle

• Un calcul distribué, ou réparti ou encore partagé, est un calcul ou un traitement réparti sur


plusieurs microprocesseurs et plus généralement sur plusieurs unités centrales informatiques, et on parle alors
d'architecture distribuée ou de système distribué. Le calcul distribué est souvent réalisé sur des clusters de
calcul spécialisés

– Distribué : hétérogénéité, indépendance logique et physique des tâches, client-serveur.

– Parallèle : homogénéité, haut niveau de couplage des tâches.

87
Programmation parallèle vs Programmation distribuée

• – Parallèle : homogénéité, haut niveau de couplage des tâches.

88
Calcul parallèle & Calcul concurrent

• Calcul parallèle & Calcul concurrent

– Parallèle : coopération des processus dans la résolution d’un problème.


– Concurrent : compétition entre processus, partage des ressources.
• L'exécution concurrente c'est quand deux tâches sont exécutées logiquement en même temps et l'exécution
parallèle est un cas particulier d'exécution concurrente où les tâches sont exécutées physiquement en même
temps.

89
Parallélisation sur mémoire distribuée en utilisant MPI

• MPI : Message Passing Interface

• Standard développé en 1993-1994 pour le développement d'applications parallèles portables. En


regroupant les meilleurs aspects des bibliothèques de communications existantes.

• Message Passing Interface (MPI), est une norme pour le passage de messages entre ordinateurs distants


ou dans un ordinateur multiprocesseur. Elle est devenue  un standard de communication pour des nœuds
exécutant des programmes parallèles sur des systèmes à mémoire distribuée. Elle définit
une bibliothèque de fonctions, utilisable avec les langages C, C++ et Fortran.

90
MPI : Objectifs

• Objectifs :
– Portabilité
– Performance
– Fiabilité
– Simplicité
– Spécification indépendante du langage.

91
MPI : Modèle de programmation

• Une application MPI est un ensemble de processus exécutant chacun son propre code (modèle SPMD) et communiquant

via des appels à des sous-programmes de la bibliothèque MPI.

• Le modèle d'exécution d'une application MPI est le SPMD (Single Program Multiple Data), soit l'exécution du même

programme pour tous les processus. Les paramètres et les données sont privés à chaque processus, la synchronisation des

processus MPI est de la responsabilité de l'utilisateur

92
MPI : Modèle de programmation

• groupes et communicateurs.

• communications point à point,

• communications collectives,

• types de données dérivées,

93
Exemple

94
MPI : Communicateur

• Un communicateur désigne un ensemble de processus pouvant communiquer ensemble, et deux processus


ne pourront communiquer que s'ils sont dans un même communicateur. Un communicateur initial englobe
tous les processus (MPI_COMM_WORLD), qu'il est possible de subdiviser en communicateurs plus
petits correspondants à des entités logiques.
• Il existe deux types de communicateurs :
• les intracommunicateurs et les intercommunicateurs.
• Les intracommunicateurs sont les communicateurs standards, alors que les intercommunicateurs servent à
créer un pont entre deux intracommunicateurs.
• MPI-2 améliore grandement l'usage des intercommunicateurs en leur permettant de réaliser des
communications collectives.

95
MPI : Communicateur

• Communicateur constitué :

– D’un groupe de processus,

– d’un contexte de communication,

– une propriété des communicateurs qui permet de partager l'espace de communication, gérer les
communications point-à-point et collectives.

96
Communication Point à point

Les communications point-à-point permettent à deux processus


à l'intérieur d'un même communicateur d'échanger une donnée
(scalaire, tableau ou type dérivé).
Les fonctions correspondantes sont MPI_Send, MPI_Recv et
MPI_Sendrecv.

97
Communication collective

Les communications collectives


impliquent tous les processus d'un
communicateur. Il est possible
d'envoyer une même donnée à tous
les processus (MPI_Bcast), de
découper un tableau entre tous les
processus (MPI_Scatter), ou
d'effectuer une opération (par
exemple addition) où chaque
processus contribuera.

98
Opération collective

Broadcast: Diffusion
• Le modèle de diffusion est utilisé pour distribuer des données d'une unité de traitement à toutes les unités de
traitement, ce qui est souvent nécessaire dans les programmes parallèles SPMD pour distribuer des valeurs
d'entrée ou globales. La diffusion peut être interprétée comme une version inverse du modèle de réduction.
Scatter: La disperssion
• Le modèle de communication dispersé est utilisé pour distribuer des données d'une unité de traitement à
toutes les unités de traitement. Il diffère de la diffusion en ce qu'il n'envoie pas le même message à toutes les
unités de traitement. Au lieu de cela, il divise le message et en délivre une partie à chaque unité de traitement.
Gather: Rassembler
• Le modèle de communication de collecte est utilisé pour stocker les données de toutes les unités de traitement
sur une seule unité de traitement.
All-Gather
• Le modèle de communication tout rassemblé est utilisé pour collecter des données de toutes les unités de
traitement et pour stocker les données collectées sur toutes les unités de traitement

99
Rappels sur l’architecture des ordinateurs

• Représentation symbolique et minimaliste d’un ordinateur


Représentation fonctionnelle d’un ordinateur

l’architecture élémentaire d’un ordinateur se compose d’un microprocesseur, d’une horloge, de contrôleurs de
périphériques, d’une unité de mémoire principale, d’une unité de mémoire cache et de plusieurs bus de

communication.
Le microprocesseur

Le microprocesseur est lui-même composé de nombreux éléments. Nous citerons ici les principaux.
- Les registres : ce sont des éléments de mémorisation temporaire. Ils sont utilisés directement par les
instructions et par les compilateurs pour le calcul des valeurs des expressions et pour la manipulation des
variables.
- L’unité arithmétique et logique : généralement nommée ALU (Arithmetic and Logic Unit), elle effectue
toutes les opérations élémentaires de calcul.
- L’unité de gestion de la mémoire : généralement nommée MMU (Memory Management Unit), elle contrôle
les opérations sur la mémoire et permet d’utiliser des adresses virtuelles pour accéder à une donnée en mémoire
- Le cache primaire : cette unité de mémorisation temporaire fonctionne sur le même principe que le cache
secondaire .
Représentation fonctionnelle d’un ordinateur
Représentation fonctionnelle d’un ordinateur

- Le coprocesseur : le microprocesseur peut contenir plusieurs coprocesseurs comme, par exemple, le


coprocesseur « flottant » qui effectue tous les calculs en nombre non entiers (i.e. de type float). Autrefois
optionnel sur les ordinateurs, il est aujourd’hui systématiquement présent.

- Le bus interne : il permet aux différents éléments du processeur de communiquer entre eux .
Représentation fonctionnelle d’un ordinateur

• L’horloge
• Le processeur est un composant synchrone, c’est-à-dire qu’il a besoin d’une horloge pour contrôler la
cadence des opérations qu’il exécute. L’horloge contraint donc la vitesse de fonctionnement du processeur et
il est fréquent que le processeur fonctionne moins vite qu’il ne le pourrait.
• La mémoire principale
• DRAM
• SRAM
• La mémoire cache
est une zone de mémoire de petite taille, plus rapide que la mémoire principale et située plus près du processeur.
Cette mémoire cache est utilisée comme intermédiaire pour tous les accès à la mémoire principale.
• Les périphériques d entrées et de sorties
Représentation fonctionnelle d’un ordinateur

• Les bus de communication


• Bus de données
• Bus d’adresses
• Bus de commandes

• Le bus système ou FSB (Front Side Bus)


• Le bus de cache ou BSB (Back Side Bus)
• Le bus PCIe (Peripheral Component Interconnect Express)
Les interruptions

Le système d’exploitation reprend régulièrement


la main grâce aux interruptions :
à chaque « tic », l’horloge déclenche une
interruption qui sera traitée par le processeur via
l’exécution d’une routine particulière, située
dans une zone mémoire particulière. Il suffit
donc de placer le système d’exploitation dans
cette zone mémoire pour garantir l’intervention
régulière de celui-ci.
Les interruptions

Le terme d’interruption est à rapprocher du mot interrupteur, car c’est par le biais d’une liaison
électrique que la communication s’établit : lorsqu’un périphérique, par exemple, veut déclencher une
interruption du processeur, il applique une tension sur une ligne électrique les reliant.

Les interruptions sont utilisées pour informer de l’arrivée d’événements importants, comme par
exemple lors d’accès mémoire impossibles ou lorsqu’un périphérique a terminé le travail qui lui était
demandé. Généralement, on distingue les interruptions matérielles, effectivement produites par le
matériel, et les interruptions logicielles que le processeur s’applique à lui-même.

108
Les interruptions
Les interruptions matérielles ne sont habituellement pas
transmises directement au processeur et elles transitent par
divers contrôleurs. Il se peut alors que l’un de ces
contrôleurs décide de ne pas transmettre certaines demandes
d’interruptions (souvent appelées IRQ pour Interruption
ReQuest) et, donc, qu’une demande d’interruption déclenchée
par un périphérique ne provoque pas l’interruption de la tâche
en cours. Le terme d’interruption est donc assez mal choisi, ce
qui explique l’apparition d’autres termes : exceptions, trappes
(trap en anglais). Certains contrôleurs d’interruption
autorisent les utilisateurs à masquer des interruptions, ce qui
Les composants des ordinateurs communiquent
représente une sorte de « programmation bas-niveau » du
en appliquant des tensions sur des lignes
matériel
électriques
Les interruptions

Une interruption peut être ignorée par le processeur (ou par un


des contrôleurs transmettant celle-ci) et n’interrompt donc pas
toujours un traitement en cours.

si une interruption interrompt une tâche et que le processeur


décide de déclencher une routine d’interruption, il est absolument
nécessaire de sauvegarder l’état de la tâche interrompue.

110
Les interruptions

• Un autre problème se pose pour les interruptions : que se passe-t-il si une


interruption intervient alors que le processeur est déjà en train d’exécuter une
routine d’interruption ?

Généralement, des niveaux de priorité différents ont été affectés aux interruptions et le choix
dans de telles situations dépend de la priorité des interruptions traitées.

111
Mode noyau versus mode utilisateur

• Les processeurs récents ont au moins deux modes de fonctionnement :

un mode noyau (ou système ou superviseur) et un mode utilisateur.

• Le système d’exploitation (au moins une partie) d’un ordinateur est généralement exécuté en mode noyau

alors que les autres programmes fonctionnant sur la machine sont exécutés en mode utilisateur.
Le jeu d’instructions
• Le jeu d’instructions est l’ultime frontière entre le logiciel et le matériel. C’est la partie de la machine vue par
le programmeur et c’est le langage dans lequel les compilateurs doivent transformer les codes sources de plus
haut niveau.

La traduction de chaque instruction en action « électrique »


s’effectue par une simple table de correspondance et une instruction
n’est qu’une représentation symbolique de l’application de tensions
sur des contacteurs.
Le jeu d’instructions

• Les instructions sont généralement classées en 5 catégories :


• – arithmétique et logique (addition, soustraction, et, ou) ;
• – flottant (opérations flottantes).
• – transfert de données (de la mémoire principale vers les registres et réciproquement) ;
• – contrôle (appel de procédure, branchement, saut) ;
• – système (trappe, appel au système d’exploitation) .

114
Le passage du mode utilisateur au mode noyau

En fait, il existe une instruction spéciale qui déclenche une interruption logicielle et, donc,
l’exécution de la routine d’interruption correspondante. Cette routine fait généralement partie du
système d’exploitation, c’est-à-dire qu’elle s’exécute en mode noyau, et elle permet donc de
contrôler que rien d’illégal n’est demandé. Lorsque la routine est terminée, le processeur repasse en
mode utilisateur.

115
Le passage du mode utilisateur au mode noyau

Le passage du mode utilisateur au mode noyau fait nécessairement appel au système d’exploitation :
les appels système provoquent une interruption logicielle qui déclenche une routine d’interruption
correspondant au système d’exploitation. Le principe est similaire à celui mis en oeuvre avec les
interruptions de l’horloge.
RISC (Reduced Instruction Set Computer)

• L’instruction comporte au moins cinq étapes:

– la recherche de l’instruction en mémoire (fetch) ;


– le décodage de l’instruction (decode) ;

– la lecture des opérandes (load) ;

– l’exécution proprement dite (execute) ;

– le stockage du résultat (store).

117
RISC (Reduced Instruction Set Computer)

Le principe qui consiste à décomposer une instruction complexe, comme l’addition du modèle

mémoire-mémoire, en une série d’instructions élémentaires, comme l’addition du modèle registre-

registre (aussi appelé chargement-rangement), a donné naissance à des jeux d’instructions appelés

RISC (Reduced Instruction Set Computer). Les autres jeux d’instructions sont alors nommés CISC

(Complex Instruction Set Computer).

118
RISC (Reduced Instruction Set Computer)

A= B+C

– Jeu d’instructions de type mémoire-mémoire :

1. Addition et stockage direct (Add B C A) ;

– Jeu d’instructions de type registre-registre :

1. Chargement de B dans le registre R1 (Load R1 B) ;

2. Chargement de C dans le registre R2 (Load R2 C) ;

3. Addition et stockage du résultat dans le registre R3 (Add R1 R2 R3) ;

4. Stockage du résultat dans A (Store R3 A).

119
Le principe du pipeline

Recouvrements des étapes d’exécution d’une instruction


Rôle de l’unité de gestion de mémoire

• MMU (Memory Management Unit) (couches matérielles de la machine)


• Adresses physiques
• un nombre qu’il suffit de passer au contrôleur de mémoire pour désigner une donnée stockée en mémoire.
• une adresse de 8 bits permet de coder 28 = 256 zones d’un octet, soit 256 octets .
• Protection de la mémoire

• Les données en lots


• Les données entrelacées (difficile)
Le système d’exploitation est une machine virtuelle

• Le système d’exploitation permet un dialogue abstrait entre la machine et l’utilisateur.


Le système d’exploitation est un gestionnaire de ressources

Le système d’exploitation est un gestionnaire de ressources, c’est-à-dire qu’il contrôle l’accès à toutes les

ressources de la machine, l’attribution de ces ressources aux différents utilisateurs de la machine et la libération

de ces ressources quand elles ne sont plus utilisées.

• Mode utilisateur versus mode noyau

Le système d’exploitation peut utiliser cette propriété pour faciliter le contrôle qu’il exerce : il s’exécute en

mode noyau alors que tous les autres programmes sont exécutés en mode utilisateur
Les appels système

• Les appels système sont l’interface proposée par le système d’exploitation pour accéder aux différentes

ressources de la machine.
Interpréteur de commandes

125
Des appels système très nombreux

• Le nombre d’appels système proposés varie suivant les systèmes d’exploitation et, pour un même type de

système d’exploitation (Unix par exemple), ce nombre diffère suivant les versions (4.4BSD, Linux, Irix, etc.).
• Le cas d’Unix
les périphériques sont gérés comme de simples fichiers
• Exécution d’un appel système

Un appel système provoque en fait une interruption logicielle et il suffit alors de programmer la machine pour
que la routine correspondant à l’interruption fasse partie du système d’exploitation
Compilation et édition de liens

• Des programmes écrits dans des langages de haut niveau doivent ensuite être traduits en langage machine :

c’est le but de la compilation.

La compilation permet de passer d’un fichier source à un fichier


exécutable, l’exécution permet de passer d’un fichier exécutable
à une exécutable en cours d’éxécution (c’est-à-dire un
processus)
Vocabulaire et définitions

Les fichiers

• Un fichier est une zone physique de taille limitée contenant des données
• Du point de vue de l’ordinateur, un fichier est un ensemble de 0 et de 1 stockés de façon contigüe.

Un fichier n’est qu’un ensemble de 0 et de 1, stockés selon un


ordre donné, sur un support indéfini. Cette suite de 0 et de 1
peut ensuite être interprétée comme des « objets informatiques
» de taille et de type différents.
Les fichiers texte et les fichiers binaires

Les fichiers sont arbitrairement rangés en deux catégories : les fichiers texte et les fichiers binaires. Un fichier
texte est un fichier contenant des caractères de l’alphabet étendu (comme #, e ou 1) codés sur un octet ou
plusieurs octets. Chaque donnée est en fait un entier (variant entre 0 et 232 pour l’UTF-8 par exemple) et une
table de correspondances permet de faire le lien entre chaque entier et le caractère qu’il représente.

Dans un fichier texte utilisant une représentation simple telle


que le codage ASCII, la suite de 0 et de 1 s’interprête par
paquets de 8, chaque paquet représentant en binaire un nombre
entre 0 et 255.
Vocabulaire et définitions

• Les fichiers exécutables

• Les fichiers exécutables sont des fichiers binaires particuliers qui sont compréhensibles directement par la

machine. Plus exactement, ils sont directement compréhensibles par le système d’exploitation qui saura

comment les traduire en actions concrètes de la machine.

• Les processus
• Un processus est donc un objet actif, contrairement aux fichiers qui sont des objets passifs.
Vocabulaire et définitions

• Les programmes

Le terme de programme regroupe toutes les notions énoncées ci-dessus.

• un programme représente les fichiers ASCII de code « j’écris un programme »

• le terme de programme fait référence au fichier exécutable « j’exécute un programme »

• le terme de programme est parfois employé pour désigner le processus obtenu par l’exécution du
fichier exécutable « mon programme s’est arrêté »
Vocabulaire et définitions

• La compilation

• Un compilateur est un programme qui lit un fichier contenant du code écrit dans un langage donné, appelé
programme source, et qui produit un fichier contenant du code dans un autre langage, appelé programme
cible. Lors de cette traduction, le compilateur indique les erreurs présentes dans le programme source.
Les phases de compilation
• Édition du fichier source : fichier texte contenant le programme — nécessite un éditeur
de texte (emacs, vi).
• Traitement par le préprocesseur : le fichier source est traité par un préprocesseur qui
fait des transformations purement textuelles (remplacement de chaînes de caractères,
inclusion d’autres fichiers source, etc).
• La compilation : le fichier engendré par le préprocesseur est traduit en assembleur i.e. en
une suite d’instructions associées aux fonctionnalités du microprocesseur (faire une
addition, etc).
• L’assemblage : transforme le code assembleur en un fichier objet i.e. compréhensible par
le processeur.
• L’édition de liens : afin d’utiliser des librairies de fonctions déjà écrites, un programme
est séparé en plusieurs fichiers source. Une fois le code source assemblé, il faut lier entre
eux les fichiers objets. L’édition de liens produit un fichier exécutable.

133
La compilation

La phase de compilation proprement dite transforme le


fichier principal.i en un fichier principal.s, écrit en
assembleur. Elle se décompose traditionnellement en
quatre étapes : l’analyse lexicale, qui reconnaît les mots
clés du langage, l’analyse syntaxique, qui définit la
structure du programme, l’analyse sémantique qui permet
la résolution des noms, la vérification des types et
l’affectation puis enfin la phase d’écriture du code en
assembleur.

134
L’édition de liens

• L’édition de liens permet de transformer des fichiers objets en fichier exécutable


• Le travail de l’éditeur de liens concerne essentiellement la résolution des références internes et la résolution
des références externes
• Chaque instruction donne l’adresse à laquelle se rendre une fois son exécution achevée. Un programme peut
contenir des sauts avant et des sauts arrière.

135
Résolution des références internes
Il arrive que des programmes soient obligés de faire des sauts en avant ou des sauts en arrière. Par
exemple, lorsqu’une instruction du type « goto » ou « while » est exécutée, le programme doit
ensuite exécuter une instruction qui n’est pas l’instruction située juste après, mais qui est située avant
ou après dans le texte du programme.

Les sauts en arrière ne posent pas de problème car le compilateur connaît déjà l’endroit où se situe la
prochaine instruction à exécuter.

En revanche, lorsque le compilateur se trouve face à un saut en avant, il ne connaît pas encore la
prochaine instruction à exécuter. Lorsqu’il arrive à l’endroit du fichier où se trouve cette instruction,
il ne peut plus indiquer son adresse à l’instruction effectuant le saut en avant

136
Résolution des références externes
Les références externes sont les références faites à des variables externes ou à des fonctions qui ne
sont pas définies dans le fichier C traité. Par exemple, dans principal.c, myfonc() et printf() sont des
références externes. Même si apparemment, nous n’utilisons pas de variables externes dans
principal.c, il est fort probable que des déclarations de variables externes soient faites dans les
fichiers d’en-tête inclus.

137
Structure des fichiers produits par compilation

• ELF (Executable and Linking Format) pour le stockage des bibliothèques

• Les trois types de fichiers qui nous intéressent ont la même forme et, structurellement, il n’y a pas
de différence entre un fichier objet, un fichier de bibliothèque et un fichier exécutable.

• Les fichiers objet et les fichiers de bibliothèques au format ELF sont donc très proches d’un
exécutable et il ne reste pas grand chose à faire pour les transformer en exécutable.

138
Structure commune
• Les fichiers au format ELF sont constitués d’un en-tête, de plusieurs sections de structure
identique et d’une section contenant des informations optionnelles.

L’en-tête contient de nombreuses informations permettant de


retrouver les données stockées dans le fichier

La section optionnelle contient les informations utiles pour le


débogage des programmes

Structure d’un fichier objet. 139


Les fichiers objet

Les fichiers objet ne contiennent généralement qu’une seule section et prennent donc la forme
suivante :
– un en-tête ;
– la table des symboles connus ;
– la table des symboles inconnus ;
– la table des chaînes de caractères ;
– le segment de texte ;
– le segment des données initialisées ;
– la section optionnelle des informations de débogage. Structure des blocs des fichiers objet

140
Les fichiers exécutables

Les fichiers exécutables contiennent plusieurs sections et, en


fait, chaque section correspond au corps d’un fichier objet :
l’édition de liens se contente donc de concaténer
les différentes sections des fichiers objet et de résoudre les
références internes et externes.

Structure d’un fichier exécutable

141
Les fichiers de bibliothèques

Les fichiers de bibliothèques ressemblent beaucoup aux fichiers exécutables, mais ils ne possèdent

pas de fonction main(). Il se composent de plusieurs sections correspondant aux différents fichiers

objet utilisés pour créer la bibliothèque.

142
Les problèmes d’adresses

• Les processus ne peuvent donc pas savoir quelle partie de la mémoire


physique ils utilisent. Une conséquence de ce principe est qu’il n’est
pas possible pour un fichier exécutable de prédire l’endroit où le code
et les données du programme qu’il contient seront copiés en mémoire.

143
Les problèmes d’adresses

Problématique!!!!

Il ne serait pas très intéressant qu’un fichier exécutable contienne des adresses physiques absolues
pour les différents éléments qu’il faudra copier en mémoire au moment de l’exécution. Supposons,
en effet, qu’un programme pense utiliser une zone mémoire déterminée. D’une part, rien ne lui
assure que cette zone sera libre au moment de l’exécution et, d’autre part, rien ne lui assure que cette

zone existe physiquement dans la machine.

144
Les problèmes d’adresses

• les exécutables ne contiennent pas les adresses physiques du code et des données qu’il faudra copier en
mémoire au moment de l’exécution,

• la prochaine instruction à exécuter ne se trouve pas sur la ligne suivante, il faut disposer d’un moyen pour la
retrouver,

• L’éditeur de liens utilise pour cela des adresses relatives : il suppose qu’effectivement le processus
correspondant dispose de tout l’espace mémoire et que donc il peut commencer à copier le code à l’adresse 0,

• Au moment de l’exécution, il est donc nécessaire d’effectuer une translation d’adresse, c’est-à-dire qu’il faut
ajouter à chaque adresse de l’exécutable l’adresse (physique ou virtuelle) correspondant au début de la zone
mémoire effectivement utilisée.

145
Résolution des symboles inconnus par l’édition de liens

146
II. Gestion des Processus

147

Vous aimerez peut-être aussi