Objectifs. Architecture des Ordinateurs Partie III : Liens avec le système d exploitation. Au sommaire... Schéma général d un compilateur (1/8)



Documents pareils
Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Traduction des Langages : Le Compilateur Micro Java

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Gestion mémoire et Représentation intermédiaire

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Évaluation et implémentation des langages

Compilation (INF 564)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Cours d Algorithmique et de Langage C v 3.0

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours 1 : La compilation

Java Licence Professionnelle CISII,

Programmation assembleur : aperçu

Architecture des ordinateurs

Logiciel de base. Première année ENSIMAG

Architecture des ordinateurs

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Conception de circuits numériques et architecture des ordinateurs

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

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

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

ACTIVITÉ DE PROGRAMMATION

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

Résumé Génération de code Le code intermédiaire

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Rappels d architecture

Structure d un programme

Ordinateurs, Structure et Applications

Vérification formelle de la plate-forme Java Card

Corrigé des exercices sur les références

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Les structures de données. Rajae El Ouazzani

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

SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours Programmation Système

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

Environnements de développement (intégrés)

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

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

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Derrière toi Une machine virtuelle!

Cours de Programmation 2

Machines virtuelles fonctionnelles (suite) Compilation ML Java

TP1 : Initiation à Java et Eclipse

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Une introduction à Java

Conventions d écriture et outils de mise au point

La JVM. La machine virtuelle Java. La JVM. La JVM

Programmation Bas Niveau

Programmer en JAVA. par Tama

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Cours Bases de données

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Objets et Programmation. origine des langages orientés-objet

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

La technologie Java Card TM

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

Java c est quoi? Java pourquoi?

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

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

Virtualisation logicielle De la machine réelle à la machine virtuelle abstraite

Cours 1: Java et les objets

Chapitre I Notions de base et outils de travail

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

Rappels Entrées -Sorties

Module.NET 3 Les Assemblys.NET

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

Remote Method Invocation en Java (RMI)

Arbres binaires de recherche

Remote Method Invocation (RMI)

Machines virtuelles Cours 1 : Introduction

Vulgarisation Java EE Java EE, c est quoi?

Java Licence Professionnelle CISII,

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Java 1.5 : principales nouveautés

Introduction au langage C

Java - la plateforme

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

Introduction aux Machines Virtuelles avec VMKit

Le langage C. Introduction, guide de reference

Le langage C. Séance n 4

INITIATION AU LANGAGE JAVA

Préparation à l examen EFA en Macro

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Chapitre 2. Classes et objets


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

Initiation à l algorithmique

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

as Architecture des Systèmes d Information

Chapitre VI- La validation de la composition.

NFP111 Systèmes et Applications Réparties

Utilisation d objets : String et ArrayList

Nouvelles approches en sécurité de Java

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Transcription:

Architecture des Ordinateurs Partie III : Liens avec le système d exploitation 2. Génération de code David Simplot simplot@fil.univ-lille1.fr Objectifs Voir la génération de code ainsi que les mécanismes implicites utilisés Gestion des données Gestion des appels de fonctions Gestion de l allocatio dynamique D. SIMPLOT - Architecture des Ordinateurs 2 Accès aux noms non locaux Passage de paramètres Techniques pour l allocation dynamique (1/8) Vision simplifiée d un compilateur : Programme source COMPILATEUR erreurs Programme source C, C++, Java, ADA, Cobol, Fortran, Pascal Programme cible Programme «binaire» en langage machine Bytecode (type bytecode Java ou P-Code MS) Programme cible D. SIMPLOT - Architecture des Ordinateurs 3 D. SIMPLOT - Architecture des Ordinateurs 4 (2/8) Squelette de programme source Préprocesseur Assembleur Code machine translatable Programme source Programme cible en assembleur Editeur de liens Compilateur bibliothèques (3/8) Modèle de la compilation par analyse et synthèse Analyse = partitionner le programme et construire une représentation intermédiaire des parties Voir cours d ASC Analyse lexicale = identifier les tokens Analyse syntaxique = déduire les structures structure d arbres abstraits Analyse sémantique = contrôle des types, bon utilisage des opérateurs, etc. Synthèse = contruire le programme cible désiré à partir de la représentation intermédiaire Code machine absolu D. SIMPLOT - Architecture des Ordinateurs 5 D. SIMPLOT - Architecture des Ordinateurs 6

(4/8) (5/8) Programme source Rôle de la table des symboles Gestionnaire de la table des symboles Analyseur lexical Analyseur syntaxique Analyseur sémantique Générateur de code intermédiaire Optimiseur de code Gestionnaire des erreurs Stocker les identificateurs utilisés dans le programme Déterminer leurs types (variables, fonctions, etc) Pour les fonctions : le nombre et le type des arguments Déterminer leurs portées dans le programme Le code intermédiaire est généré à l issue de la phase d analyse sémantique Générateur de code Programme cible en assembleur D. SIMPLOT - Architecture des Ordinateurs 7 D. SIMPLOT - Architecture des Ordinateurs 8 (6/8) Exemple Programme source note = vrai_note * 2 + mini Analyseur lexical id1 id2 * entier + id3 Analyseur syntaxique Table des symboles 1 2 3 note vrai_note mini (7/8) Analyse sémantique id1 + * id3 id1 + id2 int2 2 * id3 id2 entier D. SIMPLOT - Architecture des Ordinateurs 9 D. SIMPLOT - Architecture des Ordinateurs 10 (8/8) Générateur de code intermédiaire tmp1 int2(2) tmp2 id2 * tmp1 tmp3 tmp2 + id3 id1 tmp3 Optimiseur de code tmp1 id2 * 2.0 id1 tmp1 + id3 Générateur de code MOVF R1, id2 MULF R1, %2.0 MOVF R2, id3 ADDF R1, R2 MOVF id1, R1 Accès aux noms non locaux Passage de paramètres Techniques pour l allocation dynamique D. SIMPLOT - Architecture des Ordinateurs 11 D. SIMPLOT - Architecture des Ordinateurs 12

(1/4) Code Données statiques Tas Pile (2/4) Tas Sert pour l allocation dynamique de mémoire E.g. le malloc Pile Sert pour l «appel des fonctions» Idem pour les invocations de méthodes en langage objet À chaque appel de fonction, on se sert de cette pile pour mettre un «enregistrement d activation» Aussi appelé «frame» D. SIMPLOT - Architecture des Ordinateurs 13 D. SIMPLOT - Architecture des Ordinateurs 14 (3/4) Exemple d enregistrement d activation : Temporaires Données locales État machine sauvegardé Paramètres effectifs Valeur de retour appelé appelant État machine sauvegardé Appelant : PC lors de l appel à la sous-routine (CALL/JSR) Appelé : sauvegarde des registres (4/4) La taille de chacun des champs «données» Aussi bien données locales, paramètres que valeur de retour dépend de la représentation en mémoire des types du langage de haut-niveau L accès aux variables locales et au paramètres passent donc par la pile (par le frame). Problème : La taille du programme est limité on majore la taille du tas et de la pile gaspillage d espace mémoire dans la plupart des cas Solution : chaînage de pile et de tas D. SIMPLOT - Architecture des Ordinateurs 15 D. SIMPLOT - Architecture des Ordinateurs 16 Accès aux noms non locaux (1/3) Accès aux noms non locaux Passage de paramètres Techniques pour l allocation dynamique Variables globales ou variables de classes Adresse connue à la compilation ou on a un «adresseur» qui connaît l adresse de réification de la classe Variables de bloc int main() int a=0; int b=3; Bloc 0 b=1.5; Bloc 1 D. SIMPLOT - Architecture des Ordinateurs 17 D. SIMPLOT - Architecture des Ordinateurs 18

Accès aux noms non locaux (2/3) Accès aux noms non locaux (3/3) On renomme les variables int main() int main() int a=0; int a=0; int b=3; int b0=3; b=1.5; b1=1.5; C est à la charge de l optimiseur de déterminer la durée de vie des variables et de réutiliser l espace mémoire si possible D. SIMPLOT - Architecture des Ordinateurs 19 D. SIMPLOT - Architecture des Ordinateurs 20 Accès aux noms non locaux Passage de paramètres Techniques pour l allocation dynamique Passage de paramètres (1/6) Passage par valeur Ce qui est mis dans le frame, c est une copie de la valeur de l argument Passage par référence On met dans le frame l adresse de l argument Il s agit d un pointeur Cette adresse pointe sur une données accessible par la fonction appelante Passage par donnée-résultat Mixe des deux précédents On donne un pointeur et un peut éventuellement utiliser la valeur stockée à l adresse passée en paramètre D. SIMPLOT - Architecture des Ordinateurs 21 D. SIMPLOT - Architecture des Ordinateurs 22 Passage de paramètres (2/6) Exemple Passage de paramètres (3/6) void swap(int *a, int *b) int tmp; tmp = *a; *a = *b *b = *a; void tri(int *a, int *b) if ( *a > *b) swap(a, b) int min(int a, int b) if ( a<b ) return a; return b; main() int x=7, y=5, z; z=min(x, 3); tri(&x, &y); Function main.return none x int y int z int tmp1 db 4 dup(?) x 7 y 5 sp sp + 4 ; réservation ; retour push x ; arg1 tmp1 3 push tmp1 ; arg2 call min sp sp - 8 pop tmp1 ; retour z tmp1 tmp1 @x push tmp1 ; arg1 tmp1 @y push tmp1 ; arg2 call swap end function ; fin main D. SIMPLOT - Architecture des Ordinateurs 23 D. SIMPLOT - Architecture des Ordinateurs 24

Passage de paramètres (4/6) Passage de paramètres (5/6) Function min.return int a int b int tmp1 int tmp2 int tmp1 a tmp2 b cmp tmp1, tmp2 jb min_suite return tmp1 ; retour jmp min_fin min_suite: return tmp2 ; retour min_fin: end function ; fin min Appel de la fonction min D. SIMPLOT - Architecture des Ordinateurs 25 D. SIMPLOT - Architecture des Ordinateurs 26 Passage de paramètres (6/6) Function swap.return none a int* b int* tmp int tmp1 int tmp [a] tmp1 [b] [a] tmp1 [b] tmp End function Accès aux noms non locaux Passage de paramètres Techniques pour l allocation dynamique Exécution de la fonction swap D. SIMPLOT - Architecture des Ordinateurs 27 D. SIMPLOT - Architecture des Ordinateurs 28 Techniques pour l allocation dynamique But : construire des données/objets persistant à la destruction du contexte d une fonction Il s agit de «gérer» le tas Implémentation «bitmap» Implémentation par «chaînage» des emplacements libres On regroupe par «slots» d une taille fixée On chaîne les emplacements vides Conclusion Optimisation du code intermédiaire Durée de vie des variables Génération de code natif Encore une phase d optimisation Pour utiliser les instructions les moins coûteuses du microprocesseur À chaque instruction, on peut attribuer un coût qui est le nombre de cycles nécessaire pour faire l instructions De plus en plus difficile avec les processeurs optimisants Réécriture avec des règles de traductions des instructions du code intermédiaire Cross-compilateur? D. SIMPLOT - Architecture des Ordinateurs 29 D. SIMPLOT - Architecture des Ordinateurs 30