La chaîne de production de programmes : compilation, éditions des liens et chargement

Documents pareils
TP 1. Prise en main du langage Python

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Conception de circuits numériques et architecture des ordinateurs


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours 1 : Qu est-ce que la programmation?

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Algorithmique et Programmation, IMA

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

La mémoire. Un ordinateur. L'octet. Le bit

Bases de programmation. Cours 5. Structurer les données

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours d Algorithmique et de Langage C v 3.0

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

L informatique en BCPST

Structurer ses données : les tableaux. Introduction à la programmation

Informatique Générale

Les chaînes de caractères

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Traduction des Langages : Le Compilateur Micro Java

Algorithmique, Structures de données et langage C

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Analyse de sécurité de logiciels système par typage statique

Python - introduction à la programmation et calcul scientifique

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Cours 1 : La compilation

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Logiciel de Base. I. Représentation des nombres

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

16H Cours / 18H TD / 20H TP

Structure d un programme

Initiation. àl algorithmique et à la programmation. en C

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

I00 Éléments d architecture

Introduction à NetCDF

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Plan du cours. Historique du langage Nouveautés de Java 7

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Langages et Concepts de Programmation Introduction à la programmation en langage C

2 Comment fonctionne un ordinateur, dans les grandes lignes

Initiation à la programmation en Python

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1. Structure d'un programme FORTRAN 95

UE Programmation Impérative Licence 2ème Année

Compilation (INF 564)

Génie Logiciel avec Ada. 4 février 2013

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Indications pour une progression au CM1 et au CM2

Chapitre 10 Arithmétique réelle

ACTIVITÉ DE PROGRAMMATION

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Cours Informatique 1. Monsieur SADOUNI Salheddine

Introduction au langage C

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

IV- Comment fonctionne un ordinateur?

Introduction à l algorithmique et à la programmation M1102 CM n 3

Maple: premiers calculs et premières applications

Évaluation et implémentation des langages

Représentation d un entier en base b

ALGORITHMIQUE ET PROGRAMMATION En C

Cours de Programmation 2

programmation S initier à la la Avec des exemples en C, C++, C#, Java et PHP Avec des exemples en C, C++, C#, Java et PHP Claude Delannoy

SUPPORT DE COURS. Langage C

I. Introduction aux fonctions : les fonctions standards

Recherche dans un tableau

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Programmation assembleur : aperçu

Rappels d architecture

Langage Java. Classe de première SI

Calcul Formel et Numérique, Partie I

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Rappels Entrées -Sorties

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

TP, première séquence d exercices.

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation en langage C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Explications des items d'obii pour la validation du B2I

Utilisation d objets : String et ArrayList

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Chap III : Les tableaux

Conservation des documents numériques

Vers l'ordinateur quantique

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

Cours d Informatique

Le codage informatique

LES CARTES À POINTS : POUR UNE MEILLEURE PERCEPTION

Arbres binaires de recherche

Notions fondamentales du langage C# Version 1.0

Architecture matérielle des systèmes informatiques

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

UE C avancé cours 1: introduction et révisions

Transcription:

FONCTION D EXECUTION Du programme exécutable au processus La chaîne de production de programmes : compilation, éditions des liens et chargement NFA003-2012-2013 1

La chaîne de production de programmes Cette chaîne désigne l ensemble des étapes nécessaires à la construction d un programme exécutable à partir d un programme dit source : Compilation Edition des liens Chargement Editeur de texte prog.c source prog.exe Exécutable en mémoire Compilateur prog.o objet Editeur de liens Bibliothèques prog.exe : programme Exécutable sur disque Chargeur NFA003-2012-2013 2

La chaîne de production de programmes : compilation Cette chaîne désigne l ensemble des étapes nécessaires à la construction d un programme exécutable à partir d un programme dit source : Compilation Edition des liens Chargement Editeur de texte prog.c source prog.exe Exécutable en mémoire Compilateur prog.o objet Editeur de liens Bibliothèques prog.exe : programme Exécutable sur disque Chargeur NFA003-2012-2013 3

Les niveaux de langage de programmation Programme en langage haut niveau (indépendant machine physique) While (x > 0) do y := y + 1; x := x - 1; done; COMPILATEUR Programme en langage d'assemblage (très proche du langage machine) loop : add R1, 1 sub R2, 1 jmpp loop ASSEMBLEUR Programme en binaire (langage machine) 1000 : 000001100001000000000001 000011100010000000000001 011000000000000000001000 NFA003-2012-2013 4

Les niveaux de langage de programmation Chaque processeur possède son propre jeu d instructions machine (chaîne binaire). Seul es ces instructions sont exécutables par le processeur. 00000101 0000 0001 00000000000000000000 ADDIm R1 0 Le langage d assemblage est l équivalent du langage machine. Chaque champ binaire de l instruction machine est remplacé par un mnémonique alphanumérique. Codeop Opérandes Le langage de haut niveau est indépendant de la machine physique. Pour pouvoir être exécuté, un programme en langage de haut niveau doit être traduit vers son équivalent machine : c est le rôle du compilateur. NFA003-2012-2013 5

Le codage d'un problème... Programme en langage de haut niveau instructions de haut niveau Programme en langage d assemblage Compilateur Niveau utilisateur Machine physique "matérielle" Assembleur processeur Bus 01101110111110011 01111010001011100 10111101110111111 00111011110111011 00111111000111101 Mémoire centrale Programme à exécuter : instructions machine et valeurs en binaire traduction NFA003-2012-2013 6

ROLE DU COMPILATEUR Un compilateur traduit un programme source écrit en langage de haut niveau en un programme objet en langage de bas niveau. Le compilateur est lui-même un programme important et volumineux. Le travail du compilateur se divise en plusieurs phases : analyse lexicale (recherche des mots-clés) analyse syntaxique (vérification de la syntaxe) analyse sémantique (vérification de la sémantique) génération du code objet NFA003-2012-2013 7

Structure d'un langage de haut niveau Un langage de haut niveau s'appuie sur un alphabet : symboles élémentaires disponibles (caractères, chiffres, ponctuations) des identificateurs : groupe de symboles de l'alphabet (A1) des phrases ou instructions : séquences de noms et de symboles formés selon la syntaxe du langage (A1 = 3;) Un programme est une suite de phrases du langage, respectant la syntaxe du langage. NFA003-2012-2013 8

Structure d'un langage de haut niveau Il faut exprimer la syntaxe du langage. On utilise pour cela la notation de BACKUS-NAUR (BNF) < objet du langage > ::= <objet du langage> symbole représente une alternative < > entoure les objets du langage <nombre> ::= <chiffre> <chiffre><nombre> <chiffre> ::= 0 1 2 3 4 5 6 7 8 9 124 <chiffre><nombre> 1 24 <chiffre><chiffre> 2 4 NFA003-2012-2013 9

EXEMPLE PROGRAM Z INT A INT B DEBUT A := 5 B := A / 2 FIN <programme> ::= PROGRAM <identificateur><corps de programme> <corps de programme> ::= <suite de declarations> DEBUT <suite d'affectations> FIN <suite de declarations> ::= <declaration> <declaration><suite de declarations> <declaration> ::= INT <identificateur> <suite d'affectations> ::= <affectation> <affectation><suite d'affectations> <affectation> ::= <identificateur > := <terme> <terme> <operateur><terme> <terme> ::= <entier> <identificateur> <operateur> ::= + - * / <identificateur> ::= <lettre> <lettre><chiffre> <entier> ::= <chiffre> <chiffre><entier> <lettre> ::= A B C D E... X Y Z <chiffre> ::= 0 1 2 3 4... 9 NFA003-2012-2013 10

ANALYSE LEXICALE objets du langage Programme Suite de caractères BTNIATNIZMARGORP ANALYSEUR LEXICAL Suite de symboles B INT A INT Z PROGRAM Rôle de l'analyse lexicale erreurs (identificateurs incorrects symboles non reconnus) reconnaître dans la suite de caractères que constitue un programme les objets du langage éliminer le "superflu" (espaces, commentaires) NFA003-2012-2013 11

l'analyse LEXICALE : Exemple PROGRAM Z INT A INT B DEBUT A := 5 B := A / 2 FIN entier Mot clé identificateur opérateur NFA003-2012-2013 12

ANALYSE SYNTAXIQUE BNF erreurs de syntaxe ANALYSEUR LEXICAL Suite de symboles ANALYSEUR SYNTAXIQUE arbres syntaxiques Rôle de l'analyse syntaxique reconnaître si la suite de symboles issue de l'analyse lexicale respecte la syntaxe du langage construction à partir des BNF de l'arbre syntaxique correspondant au programme analysé NFA003-2012-2013 13

Arbre Syntaxique : Exemple PROGRAM <programme> <identificateur> Z <corps de programme> PROGRAM Z INT A INT B <suite de declarations> <declaration> <suite de declaration> INT <identificateur> A <declaration> INT <identificateur> B <programme> ::= PROGRAM <identicateur><corps de programme> <corps de programme> ::= <suite de declarations> DEBUT <suite d'affectations> FIN <suite de declarations> ::= <declaration> <declaration><suite de declarations> <declaration> ::= INT <identificateur> NFA003-2012-2013 14

Arbre Syntaxique : Exemple <corps de programme> <suite de declarations> DEBUT <suite d'affectations> DEBUT A := 5 <affectation> <identificateur> A := <terme> <entier> 5 <corps de programme> ::= <suite de declarations> DEBUT <suite d'affectations> FIN <suite d'affectations> ::= <affectation> <affectation><suite d'affectations> <affectation> ::= <identificateur > := <terme> <terme> <operateur><terme> <terme> ::= <entier> <identificateur> <operateur> ::= + - * / NFA003-2012-2013 15

Arbre Syntaxique : Exemple <corps de programme> <suite de declarations> DEBUT <suite d'affectations> FIN <suite d'affectations> <affectation> B := A / 2 FIN <affectation> A := 5 <identificateur> B := <terme> <identificateur> A <terme> <operateur> / <entier> 2 <corps de programme> ::= <suite de declarations> DEBUT <suite d'affectations> FIN <suite d'affectations> ::= <affectation> <affectation><suite d'affectations> <affectation> ::= <identificateur > := <terme> <terme> <operateur><terme> <terme> ::= <entier> <identificateur> <operateur> ::= + - * / NFA003-2012-2013 16

ANALYSE SEMANTIQUE Rôle de l'analyse sémantique trouver le sens et la signification des différentes phrases du langage quels sont les objets manipulés et leurs propriétés? type, durée de vie, taille, adresse contrôler la cohérence dans l'utilisation des objets : erreur de type, absence de déclarations, déclarations multiples, déclarations inutiles, expressions incohérentes NFA003-2012-2013 17

ANALYSE SEMANTIQUE exemple : signalisation d'une erreur sémantique float i; -- i, indice de parcours de tableau réel for (i=1 to 5) loop tab(i)=valeur; end loop int A int B A := 5 B := A/2 résultat réel affecté à un entier NFA003-2012-2013 18

Table des symboles ou dictionnaire des variables Le compilateur manipule une table des symboles qui contient toutes les informations sur les propriétés des objets du programme La table est construite durant les 3 phases d'analyse lexicale, analyse syntaxique et analyse sémantique. nom type taille adresse A entier 4 octets (0) H B entier 4 octets (4) H NFA003-2012-2013 19

GENERATION DU CODE Programme haut niveau Suite de caractères Analyse lexicale Analyse syntaxique Analyse sémantique Génération du code Programme machine Table des symboles (0) H (4) H (8) 00000 000 0001 (4) H H (C) 00000 000 0001 (4) H H La génération de code est l'étape ultime de la compilation. Elle consiste à produire le code machine équivalent du code en langage haut niveau. Ce code machine est qualifié de relogeable car les adresses dans ce code sont calculées à partir de 0 (10) H 00001 001 0001 (0) H (14) H 00000 000 0001 (2) H (18) H 00001 001 0001 (4) H (1C) H 00000 000 0001 (6) H (20) H 00001 000 0001 (8) H NFA003-2012-2013 20

COMPILATEUR / INTERPRETEUR Interprétation : conversion et exécution de chaque instruction les unes derrière les autres Compilation : traduction de toutes les instructions puis exécution de la traduction traduction I1 I2 Conversion exécution Conversion exécution I1 I2 I1' I2' exécution I3 Conversion exécution I3 I3' NFA003-2012-2013 21

La chaîne de production de programmes : éditions des liens et chargement Cette chaîne désigne l ensemble des étapes nécessaires à la construction d un programme exécutable à partir d un programme dit source : Compilation Edition des liens Chargement Editeur de texte prog.exe prog.c source Exécutable en mémoire Compilateur prog.o objet Editeur de liens Bibliothèques prog.exe : programme Exécutable sur disque Chargeur NFA003-2012-2013 22

Le Développement d'un "gros programme" gros programme modules utilisateurs COMPILATEUR Compilation séparée des modules programme objet modules bibliothèques modules objets utilisateurs EDITEUR DE LIENS programme exécutable programme exécutable NFA003-2012-2013 23

ROLE DE L'EDITEUR DE LIENS Un éditeur de liens est un logiciel qui permet de combiner plusieurs modules objet obtenus par compilation séparée pour construire un seul programme exécutable modules objets utilisateur modules objets prédéfinis dans des bibliothèques fonctions interfaces des appels systèmes fonctions mathématiques fonctions graphiques etc... NFA003-2012-2013 24

Notion de bibliothèques (librairie) Une bibliothèque logicielle est un ensemble de fonctions compilées regroupées dans un fichier. Regroupées par thème (mathématiques, graphiques, fonctions systèmes) Prédéfinies et usuelles : le programmeur n a pas à réécrire le code; il utilise la fonction fournie (par exemple, SQRT(), Line() ) API sqrt (entier x) Cos (entier x) Sin (entier x) Code fonction sqrt(x) Code fonction sin(x) Code fonction cos(x) interface corps NFA003-2012-2013 25

Exemple PROGRAM Z INT A INT B INT C DEBUT A := 5 B := A / 2 C := SQRT(B) EMPILER(C) IMPRIMER (C) FIN Module principal utilisateur Code fonction cos(x) Module Gestion_Pile INT Pile[10]; INT haut := 0; Export EMPILER, DEPILER procedure EMPILER(x) debut Pile(haut):=x; haut := haut + 1; fin procedure DEPILER(x) debut haut :=haut - 1; x := Pile(haut); fin Module Pile utilisateur Code fonction sin(x) Code fonction SQRT(X) Bibliothèque mathématique Code fonction IMPRIMER(X) Code fonction LIRE(X) Bibliothèque système entrées-sorties NFA003-2012-2013 26

Les types d objets des modules Un module comprend trois catégories d objets : objet interne au module, inaccessible de l'extérieur objet interne au module mais accessible de l'extérieur (objet exporté ou public) objet n'appartenant pas au module, mais utilisé par le module (objet importé ou externe) PROGRAM Z INT A INT B INT C DEBUT A := 5 B := A / 2 C := SQRT(B) EMPILER(C) IMPRIMER (C) FIN Objet interne ou privé Objet public ou exporté Objet importé ou externe Module Gestion_Pile INT Pile[10]; INT haut := 0; Export EMPILER, DEPILER procedure EMPILER(x) debut Pile(haut):=x; haut := haut + 1; fin procedure DEPILER(x) debut haut :=haut - 1; x := Pile(haut); fin NFA003-2012-2013 27

NOTION DE LIENS Le compilateur recense dans chaque module les objets privés, les objets exportés et les objets importés. Pour chaque objet rencontré, selon sa catégorie : si l objet est interne et privé, il associe une adresse à l objet dans la table des symboles si l objet est interne et exporté, il lui associe une adresse à l objet dans la table des symboles et publie cette adresse sous forme d un lien utilisable <LU, nom_objet, adresse dans le module>. si l objet est externe (importé), il ne connaît pas l adresse à l objet. Il demande à obtenir cette adresse sous forme d un lien à satisfaire <LAS, nom_objet, adresse_inconnue>. NFA003-2012-2013 28

Exemple PROGRAM Z INT A INT B INT C DEBUT A := 5 B := A / 2 C := SQRT(B) EMPILER(C) IMPRIMER (C) FIN Module principal utilisateur compilation Nom type A entier B entier C entier SQRT EMPILER IMPRIMER taille 4 4 4 <LAS SQRT> <LAS EMPILER> <LAS IMPRIMER> Code objet Principal.o 40 octets adress e(0) (4) (8)??? NFA003-2012-2013 29

Exemple Module Gestion_Pile INT Pile[10]; INT haut := 0; Export EMPILER, DEPILER procedure EMPILER(x) debut Pile(haut):=x; haut := haut + 1; fin procedure DEPILER(x) debut haut :=haut - 1; x := Pile(haut); fin Module Pile utilisateur compilation nom Pile haut EMPILE R DEPILE R type entier entier taille 40 4 16 16 <LU EMPILER 44 > <LU DEPILER 60> Code objet pile.o 76 octets adresse (0) (40) (44) (60) NFA003-2012-2013 30

ROLE DE L EDITEUR DE LIENS lien à satisfaire variable =... lien utilisable export variable lien utilisable export procedure lien à satisfaire appel procedure Module M1 Module M2 L'éditeur de liens doit construire le programme exécutable final à partir des modules objet entrant dans sa composition. Il procède en trois étapes : 1. Construction de la carte d'implantation du programme 2. Construction de la table des liens utilisables 3. Construction du programme exécutable final NFA003-2012-2013 31

Construction de la carte d'implantation Détermination des adresses d'implantation de chaque module utilisateur du programme, placés les uns derrière les autres Compilation : modules relogeables Carte d'implantation Module A Taille(A) Module B Module C Module A 0 0 Module B 0 Taille(B) Taille(B) Taille (B) + Taille (C) Module C Taille(C) 0 NFA003-2012-2013 32

Construction de la table des liens Recenser l'ensemble des liens existants et leur associer leur adresse dans la carte d'implantation Pour chaque lien <nom de lien> dans chaque module Si (<nom de lien> n'est pas dans la table) Alors Nom de lien Adresse sinon créer une entrée <nom de lien> si (le lien est un lien utilisable) alors associer à <nom de lien> son adresse selon la carte fsi si (le lien est un lien à satisfaire) alors associer à <nom de lien> <adresse indefinie> fsi si (le lien est un lien utilisable) et l entrée existante dans la table est <adresse indefinie> alors associer à <nom de lien> son adresse selon la carte (résolution LAS / LU) Fsi fsi fin pour NFA003-2012-2013 33

Edition des liens : exemple Pour chaque lien <nom de lien> dans chaque module Si (<nom de lien> n'est pas dans la table) Alors <LAS SQRT> <LAS EMPILER> <LAS IMPRIMER> Code objet Principal.o <LU EMPILER 44 > <LU DEPILER 60> Code objet Pile.o créer une entrée <nom de lien> si (le lien est un lien utilisable) alors associer à <nom de lien> son adresse selon la carte fsi si (le lien est un lien à satisfaire) alors associer à <nom de lien> <adresse indefinie> fsi 0 Taille principal.o 40 octets 40 Taille pile.o 76 octets 116 sinon si (le lien est un lien utilisable) et l entrée existante dans la table est <adresse indefinie> alors associer à <nom de lien> son adresse selon la carte (résolution LAS / LU) fsi Fsi fin pour Nom de lien SQRT EMPILER IMPRIMER DEPILER Adresse /carte? Bib math? 44 + 40? Bib E/S 60 + 40 NFA003-2012-2013 34

Construction du programme exécutable final <LAS SQRT> <LAS EMPILER> <LAS IMPRIMER> Code objet Principal.o <LU EMPILER 44 > <LU DEPILER 60> Code objet Pile.o Nom de lien SQRT EMPILER Adresse /carte Bib math 44 + 40 0 Taille principal.o 40 octets 40 Taille pile.o 76 octets 116 IMPRIMER DEPILER Bib E/S 60 + 40 L éditeur de liens construit le code exécutable : 1. Il remplace les occurrences des objets figurant dans les LAS par leur adresse dans la table des liens 2. Il translate les adresses des objets dans les modules de la valeur de l adresse d implantation du module dans la carte. Code exécutable Appel à SQRT ()? Appel à Imprimer ()? NFA003-2012-2013 35

Construction du programme exécutable final Bibliothèque et chargement Mémoire centrale Chargement du programme en mémoire centrale Code SQRT() Code Cos(X) Code Sin (X) Code Imprimer(X) Code Lire (X) Code exécutable Appel à SQRT () Appel à Imprimer () Bibliothèque mathématique Bibliothèque Entrées-sorties Adr_imp L outil chargeur place le programme exécutable en mémoire centrale ainsi que les bibliothèques qui lui sont utiles. 1. Il résout les liens vers les bibliothèques; 2. Il translate les adresses des objets dans le programme exécutable de la valeur de l adresse d implantation en mémoire centrale Adr_imp. NFA003-2012-2013 36

FIN Questions? Cours suivant : processus et ordonnancement NFA003-2012-2013 37