Systèmes temps réel et systèmes embarqués Architecture des ordinateurs Loı̈c Cuvillon Telecom Physique Strasbourg 11 novembre 2015 Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 1 / 84 Sommaire 1 Raspberry 2 Processeur ARM Architecture ARM : principes Jeu d’instruction et language assembleur ARM 3 Exceptions et Interruptions Définition Contrôleur d’interruptions et traitement 4 Gestion de la mémoire (pagination) 5 Les entrées-sorties (I/O) I/O par port I/O mappées en mémoire 6 Le temps : Horloge et Timers L’horloge temps réel Les timers Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 2 / 84 Bibliographie Bibliographie Architecture : Architecture de l’ordinateur, 5ème édition, Andrew Tanenbaum, Pearson education, 2005. par le créateur de l’OS Minix Documentation technique : Intel Architecture Software Developer’s Manuel ARM Architecture Reference Manual Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 3 / 84 Bibliographie Little/Big Endian Petit/Gros boutiste (étymologie : voyage de Gulliver) exemple : la valeur 433=0x01B1 nécessitant 2 octets en mémoire Big endian : most significant bit (MSB : 01h) en premier Little Endian : lest significant bit (LSB : B1h) en premier Little-Endian (x86,arm) adresse mémoire 00 01 B1 01 Big-Endian (powerpc,arm,mips) adresse mémoire 00 01 01 B1 Protocole IP : big endian (pour tous, interopérabilité) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 4 / 84 Raspberry Plan 1 Raspberry 2 Processeur ARM Architecture ARM : principes Jeu d’instruction et language assembleur ARM 3 Exceptions et Interruptions Définition Contrôleur d’interruptions et traitement 4 Gestion de la mémoire (pagination) 5 Les entrées-sorties (I/O) I/O par port I/O mappées en mémoire 6 Le temps : Horloge et Timers L’horloge temps réel Les timers Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 5 / 84 Raspberry Hardware System on chip (Soc) ARM/GPU + SDRAM, DMA, MMU, GPIO, UART Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 6 / 84 Raspberry Gpio GPIO : General Purpose Input Output configurable en entrée ou sortie niveau binaire : 0 - 3.3 Volt peut produire une interruption pas de CNA/CAN disponible (mais un PWM) GPIO particuliers Liaison série RS232 (RX,TX) I2C (SDA/SCL) SPI(MOSI, MISO) PWM Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 7 / 84 Raspberry RS-232 RS232 : une norme de liaison série 3 fils : GND, Transmission (Tx), Reception (Rx) bit 0 = niveau haut +3 à +15V bit 1 = niveau bas -15V Communication null-modem : Periph 1 Périph 2 GND ↔ GND TX ↔ RX RX ↔ TX utilise un UART UART composant qui serialise les données frame standard : 1 bit de start à 0 8 bits (l’octet de data) 1 bit de parité (ou non) 1 bit de fin à 1 (ou 2 bits) baudrate = débit en symboles/seconde (<bits/seconde) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 8 / 84 Raspberry BerrylClip Carte Berryclip+ Connexion haut-parleur, leds, interrupteurs sur les GPIOs (Haut−parleur) Pins Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 9 / 84 Raspberry Connexion au RPI via la liaison série Un adaptateur USB RS232 3.3V TTL conversion niveau RS232 vers 0-3.3V du Rpi + emulation d’un port série pour les PC récents via /dev/ttyUSB0 Berryclip Pins 1 7 13 Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 10 / 84 Raspberry Connexion au RPI via la liaison série le RPi par défaut ouvre un terminal sur son port série login/passwd : pi/raspberry Se connecter au RPi 1 Insérer la SD-card (ne pas alimenter le RPi) 2 Connecter le cable série entre le PC et le RPi la commande screen /dev/ttyUSB0 115200 dans un terminal pour se connecter 3 115200 est le baudrate coté RPi sortir de l’utilitaire screen : touches [ctrl-a] puis [k] 4 alimenter le Rpi (les messages du noyau apparaissent, puis le login après les 60s de timeout du DHCP) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 11 / 84 Raspberry Tools : mount système de fichier un système de fichier = organise le stockage et la récupération de l’information sous forme de fichiers nommés. les partitions disques (disques dur, clé USB) sont des périphériques nommés /dev/sda1, /dev/sda2, /dev/sdd2 .. Montage d’un système de fichier mount [partition] [dir] monter une partition sur un répertoire umount [partition] ou umount [dir] démonter une partition df liste les systèmes de fichers montés Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 12 / 84 Raspberry Tools : mount / boot/ lib/ heros_S2_ep03.avi /ENSPS/ Presentation_R5.ppt mnt/ Readme.txt /dev/sda : Clef USB Disque dur mount −t auto /dev/sda/ /mnt/ / /boot /lib /mnt heros_S2_ep03.avi /ENSPS/ Presentation_R5.ppt Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 13 / 84 Raspberry Tools : divers Tools cat [file] concatener des fichiers mais ici affiche le contenu sur la sortie standard less ou more découpe le flux de la sortie standart en page (touches : [b] page précedente, [space] suivante, [q] exit) exemple : cat encyclopedie.txt | less tar xf [archive] décompresser une archive au format tar sudo {-s} exécute la commande en tant que root, -s ouvre un shell root dmesg messages de debug du noyau linux Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 14 / 84 Raspberry Tools : manipulation fichiers cp [file] [file/dir] copie le fichier dans un autre fichier ou répertoire cp -r [rep] [rep] copier un répetoire dans un autre mv [file/dir] [file/dir] déplacer un fichier/répertoire dans un autre fichier ou répertoire rm [file] effacer un fichier rm -r [dir] effacer un répertoire (recursif) mkdir [dir] créer un répertoire cd [dir] changer de répertoire (.. le répertoire parent) pwd affiche le répertoire courant Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 15 / 84 Raspberry Tools : editeur de texte Vi (vim) : vi filemame touche [echap] sortir du mode courant touche [i] ou touche [R] mode insertion ou remplcement touche([echap]) :w écrire le fichier touche ([echap]) :x sauver et quitter touche ([echap]) :q! forcer quitter nano plus classique. Menus via touche [ctrl] + lettre Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 16 / 84 Processeur ARM Plan 1 Raspberry 2 Processeur ARM Architecture ARM : principes Jeu d’instruction et language assembleur ARM 3 Exceptions et Interruptions Définition Contrôleur d’interruptions et traitement 4 Gestion de la mémoire (pagination) 5 Les entrées-sorties (I/O) I/O par port I/O mappées en mémoire 6 Le temps : Horloge et Timers L’horloge temps réel Les timers Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 17 / 84 Processeur ARM Architecture ARM : principes Architecture ARM (Advance RISC Machine) processeur RISC 32 bit Reduced Instruction Set Computer ; instr. de taille fixe (32bits) architecture ”load and store” (opération arithmétique réalisable uniquement entre registres) avantages : architecture épurée et fréquence d’exécution rapide inconvénient : programme plus long (2x) que le même en CISC populaire dans l’embarqué : lego mindstorm, nintendo DS ; apple ipod,iphone (consommation électrique) la société ARM ne fabrique pas de processeurs mais les dessine ! vend des licences et ses dessins à des fondeurs perçoit des royalties sur les processeurs vendus Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 18 / 84 Processeur ARM Architecture ARM : principes L’architecture externe du ARM bus d’adresses 32 bits : 4Go de RAM possible ; bus de données (+ instruction : Archi. Van Neumann) 2 lignes d’interruptions ; nReset : réinitialisation ; nRW : sélection écriture/lecture Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 19 / 84 Processeur ARM Architecture ARM : principes Fonction d’un processeur (Central Processing Unit) Exécution séquentielle d’instructions au travers d’un pipeline Étapes du pipeline ARM7 Fetch Instruction Decode Execute Loı̈c Cuvillon (TPS) Fetch : Récupérer le code de l’instruction à exécuter Decode : Décode instruction et registres à utiliser (préparation des chemins de données) Execute : Exécution instruction lecture registres ; opération ; écriture résultat registre ; ... Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 20 / 84 Processeur ARM Architecture ARM : principes Architecture Interne d’un processeur Single Core CPU Address bus R1 Data bus R2 Memory R3 Decode IR ... A and Control Unit Bus source selection PC B ALU ALU operation mode C Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Registres : stockage de mots (16, 32, 64 bits suivant architecture) ALU : Unité Arithmétique et Logique ; +,-,*,/,ET,OU,XOR, décalage,. . . Unité de décodage et commande : génération signaux de commande (opération ALU, routage des bus A,B et C). Bus mémoire : Année scolaire 2010-2015 21 / 84 Processeur ARM Architecture ARM : principes Architecture Interne d’un processeur Single Core CPU Registres Address bus PC (R15) : Programme Counter R1 R2 Data bus R3 Decode IR ... A B ALU ALU operation mode C Loı̈c Cuvillon (TPS) and Control Unit Bus source selection PC Memory adresse de l’instruction en cours ; incrémenté par le CPU ; (ou IP, instruction pointer) IR : mot de l’instruction en cours R1,R2,R3.. R12 : registres à usages généraux CPSR : current program status register Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 22 / 84 Processeur ARM Architecture ARM : principes CSPR register : Program status mise à jour après chaque instruction bits N, Z et V mis à jour suivant le résultat de l’instruction précédente définit le mode d’opération du processeur 31 30 28 9 7 NZ CV E I overflow carry zero negative/less than Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués 4 0 M[0:4] Mode bits IRQ Disable Data endianness bit Année scolaire 2010-2015 23 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM ISA : Instruction Set Architecture Jeu d’instructions d’un CPU Langage machine langage natif du processeur définit par les concepteurs seul et unique pour un processeur un code binaire l’Assembleur (Assembly language) : représentation symbolique du langage machine usage de mnémoniques pour faciliter la vie du programmeur → non-portable (6= langage haut-niveau (C,java)) Exemple : Saut d’adresse, ”branching” : B chez ARM et JMP chez INTEL Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 24 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM ISA : Instruction Set Architecture Instruction d’addition sur processeur ARM doc technique : ADD Rd Rn Rm Rd=Rn+Rm (Rd : registre destination) 31 28 26 25 21 20 c o n d 0 00 0 1 0 0 0 16 Rn 12 Rd 3 shift 0 Rm Assembleur : ADD R3 R2 R3 − > Langage machine :0xE0823003 31 28 26 25 21 20 16 12 0 1 11 0 0 00 0 1 0 0 0 0 0 1 0 0 0 1 1 0 00 0 0 00 0 0 0 1 1 (cond=1110 signifie ”toujours exécuter”) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 25 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition PC initialisé à 100 initialisation par un autre programme (ou reset du CPU) Memory Single Core CPU R1 Address bus R2 R3 PC 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus 0x100 Read/Write IR 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 26 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition Fetch de l’instruction par l’IFU (Instruction Fetch Unit) adresse de l’instruction donnée par le PC Memory Single Core CPU 0x100 R1 Address bus R2 LDR R2, 0x200 R3 PC 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus 0x100 IR LDR R2, 0x200 R Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 27 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition fin du Fetch : code de l’instruction à exécuter dans IR Décodage et préparation du chemin de données Memory Single Core CPU R1 Address bus R2 R3 PC 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus 0x100 IR LDR R2,0x200 Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 28 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition Exécution de l’instruction LDR LDR : load dans le registre Rx une donnée référencée ou une #constante Single Core CPU Memory 0x200 R1 R2 Address bus 0x0005 R3 PC 0x0005 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus 0x100 IR LDR R2,0x200 R Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 29 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition fin de l’instruction Incrémentation du PC de 0x004 : pointe sur instruction suivante Memory Single Core CPU R1 R2 Address bus 0x0005 R3 PC 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus 0x104 IR LDR R2,0x200 Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 30 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition Fetch de l’instruction suivante écrase le contenu de l’IR Single Core CPU Memory 0x104 R1 R2 Address bus 0x0005 R3 PC LDR R3, #2 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus 0x104 IR LDR R3, #2 R Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 31 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition Décode et Exécute l’instruction LDR : load dans le registre Rx une donnée référencée ou une #constante Memory Single Core CPU R1 Address bus R2 0x0005 R3 0x0002 PC 0x104 IR LDR R3, #2 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 32 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition fin de l’instruction : Incrémente de 0x004 le PC Fetch de l’instruction suivante Memory Single Core CPU 0x108 R1 Address bus R2 0x0005 R3 0x0002 PC 0x108 IR ADD R3,R2,R3 ADD R3, R2, R3 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus R Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 33 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition exécution de l’instruction ADD Rdest,Ra,Rb : addition Rdest<=Rb+Ra Memory Single Core CPU R1 Address bus R2 0x0005 R3 0x000 7 PC 0x108 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus Read/Write IR ADD R3,R2,R3 0x200 : 0x0005 0x204 : 0x???? ... 0x05 0x02 ALU Loı̈c Cuvillon (TPS) + Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 34 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition Fin instruction : incrémente le PC Fetch instruction suivante Memory Single Core CPU 0x10C R1 Address bus R2 0x0005 R3 0x0007 PC 0x10C IR R3,0x204 STR STR R3,0x204 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus Read/Write 0x200 : 0x0005 0x204 : 0x???? ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 35 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Illustration : Réalisation d’une addition Exécution de l’instruction STR Rd Add : sauve contenu de Rd à l’adresse Add Memory Single Core CPU 0x204 R1 Address bus R2 0x0005 R3 0x0007 PC 0x10C IR R3,0x204 STR 0x0007 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Data bus W Read/Write 0x200 : 0x0005 0x204 : 0x0007 ... ALU Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 36 / 84 Processeur ARM Jeu d’instruction et language assembleur ARM Le pipeline d’exécution exécution en parallèle d’1 Fetch, 1 Décode et 1 Exécution → accélération du débit d’exécution : 1 exécution d’instruction/cycle (alors que le traitement d’une instruction : 3 cycles) Fetch de l’instruction pointée par PC+08 pendant exécution de PC R1 Address bus PC R2 Data bus LDR R2, #6 R3 Bus source selection PC Decode ... A B R3 R1 ALU and Control Unit (Inst.addr: PC−0x08) IR ADD R3, R3, R1 ADD R2, R2, R1 Fetch Decode Execute Fetch Decode Execute Fetch Decode LDR R2, #6 ALU operation mode (Inst.addr: PC) C 1 cycle Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Execute temps 1 cycle 1 cycle Année scolaire 2010-2015 37 / 84 Exceptions et Interruptions Plan 1 Raspberry 2 Processeur ARM Architecture ARM : principes Jeu d’instruction et language assembleur ARM 3 Exceptions et Interruptions Définition Contrôleur d’interruptions et traitement 4 Gestion de la mémoire (pagination) 5 Les entrées-sorties (I/O) I/O par port I/O mappées en mémoire 6 Le temps : Horloge et Timers L’horloge temps réel Les timers Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 38 / 84 Exceptions et Interruptions Définition Exceptions (et Interruptions) Définition d’une exception arrêt temporaire du flux normal d’instructions pour répondre à un événement exceptionnel ou externe Exception synchrone (”Exception”) : résultat d’une instruction exécutée par le processeur générant une erreur arithmétique : division par 0, débordement (overflow) mémoire : erreur d’alignement, mémoire insuffisante, erreur manipulation pointeur appel système (LINUX) : par l’instruction INT 0x80, une application requiert un service de l’OS. Exception asynchrone (”Interruption”) : associée à un événement issu d’un périphérique timers : expiration d’un timer ou un tick (période) d’horloge système autres périphériques : touche clavier, clic souris, paquet ethernet,. . . Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 39 / 84 Exceptions et Interruptions Définition Interruption Interruption matérielle interruption : un signal sur la broche (INT) du CPU déclenchant l’exécution d’une routine en réponse (ISR : Interrupt Service Routine) économie pour le CPU du temps de scrutation des périphériques Scrutation périodique par le CPU de l’état du périphèrique INT CPU CPU RAM PIC I/O (1) INT 1 RAM controleur I/O (1) I/O (2) controleur I/O (2) INT 2 controleur controleur Entrée−Sortie programmée avec attente de disponibilité Loı̈c Cuvillon (TPS) Entrée−Sortie programmée avec interruption Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 40 / 84 Exceptions et Interruptions Définition Interruption Exemple : Clavier PS2 si une touche est enfoncée ou relâchée le contrôleur du clavier : écrit dans un de ses registres le code de la touche génère une interruption le CPU notifié arrête le processus en cours et exécute une routine d’interruption qui consiste à venir lire la valeur de la touche dans le registre interrupteur sur GPIO Activation interrupt GPIO 7 : echo 07 > /sys/class/gpio/export echo rising > /sys/class/gpio/gpio7/edge cat /proc/interrupts pour visualiser Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 41 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Contrôleur d’interruptions Gestion des interruptions plusieurs périphériques et interruptions (éventuellement simultanées) le CPU ne peut exécuter qu’un ISR à la fois problème de concurrence solution : un contrôleur d’interruption priorités pour les interruptions (arbitrage de la concurrence) interruption présentée une à la fois au CPU masquer les interruptions non-prioritaires mais les mémoriser (buffer) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 42 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Contrôleur d’interruptions Un contrôleur programmable d’interruptions (PIC) : le 8259 utilisé par le PC IBM et ses successeurs, peut être mis en cascade priorité par ordre décroissant (0(+prioritaire),2,...,7(-)) 3 registres : 1 contenant l’interruption actuellement traitée par le CPU 1 contenant les interruptions pas encore traitées (de priorité inférieure) 1 contenant les interruptions à masquer (celle dont le CPU ne veut pas) INT INTA CPU RD WR A0 CS 8259A Interrupt controller D0-D7 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 Clock Keyboard Disk Printer +5 v Source : Architecture des ordinateurs, Tanenbaum Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 43 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Vecteur d’interruption 1 exception = 1 routine ISR à une adresse mémoire donnée (cette adresse est appellée le vecteur d’interruption) le numéro d’exception/interruption sert d’indice dans la table des vecteurs d’interruption pour trouver l’adresse mémoire où se trouve l’ISR Exemple sur architecture i386 un registre du processeur IDTR (INT Descriptor Table Register) stocke en permanence l’adresse en mémoire de la table des vecteurs d’interruption Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 44 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Exception et interruption Traitement complet 1 2 3 4 5 sauvegarde du contexte,l’état actuel du processeur ; (souvent, dans la pile d’exécution de la tache en cours) chargement du vecteur d’interruption (adresse ISR) dans le registre PC exécution de l’ISR recharger contexte antérieur (état du processeur avant INT) reprise exécution du programme traitement rapide, changement de contexte minimal effectué par le matériel Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 45 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption interruption la plus élevée présentée sur broche INT du CPU le traitement d’une exception synchrone est similaire Single Core CPU R1, R2, .... PC Memory 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Address bus 0x108 ... IR LDR R3,#2 Data bus 0x200 : 0x0005 0x204 : IDTR 0xFF00 SP 0x404 ... INT ... 4 PIC 4 7 Périph. Pile du processus en cours 0x400: 0x0003 0x404: 0x040 ... ALU ... Table des vecteurs d’int 0xFF00: 0x844 ... Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 46 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption PC du processus interrompu poussé sur la pile par le matériel adresse de sommet de la pile stockée dans registre SP Single Core CPU Memory SP+0x04: 0x408 R1, R2, .... PC Address bus 0x108 PC: 0x108 ... IR LDR R3,#2 Data bus 0x200 : 0x0005 0x204 : IDTR 0xFF00 SP 0x40 8 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 ... INT ... 4 PIC 4 7 Périph. Pile du processus en cours 0x400: 0x0003 0x404: 0x040 0x408: 0x108 (PC) ... ALU ... Table des vecteurs d’int 0xFF00: 0x844 ... Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 47 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption table des vecteurs d’int. stockée à l’adresse contenue dans IDTR cherche dans la table, l’entrée du numéro d’INT (4) Single Core CPU Memory IDTR+(0x4)* 4 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 0xFF10 R1, R2, .... PC Address bus 0x108 ... IR LDR R3,#2 Data bus 0x200 : 0x0005 0x204 : IDTR 0xFF00 SP 0x40 8 ... INT ... 4 PIC 4 7 Périph. Pile du processus en cours 0x400: 0x0003 0x404: 0x040 0x408: 0x108 (PC) ... ALU Table ... des vecteurs d’int 0xFF00: 0x844 ... 0xFF10: 0x64C Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués No 0 1 ... 4 Année scolaire 2010-2015 48 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption l’entrée contient le vecteur d’int. (adresse du gestionnaire de l’int.(ISR)) PC <= vecteur d’interruption Single Core CPU Memory 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 0xFF10 R1, R2, .... Address bus PC 0x1080x64C 0x64C ... IR LDR R3,#2 Data bus le vecteur d’INT: adresse de l’ISR IDTR 0xFF00 SP 0x40 8 INT ... 4 PIC 4 7 Périph. 0x200 : 0x0005 0x204 : ... Pile du processus en cours 0x400: 0x0003 0x404: 0x040 0x408: 0x108 (PC) ... 0x64C: PUSH R1 ALU ... (asm x86) 0x670: IRET Table ... des vecteurs d’int 0xFF00: 0x844 ... 0xFF10: 0x64C Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués No 0 1 ... 4 Année scolaire 2010-2015 49 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption exécution de l’ISR (l’instruction pointée par PC) Single Core CPU Memory 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 0x64C R1, R2, .... PC Address bus 0x64C IR PUSH R1 PUSH R1 ... Data bus 0x200 : 0x0005 0x204 : IDTR 0xFF00 SP 0x40 8 ... ... INT 4 PIC Périph. 7 Pile du processus en cours 0x400: 0x0003 0x404: 0x040 0x408: 0x108 (PC) ... (pile utilisable par ISR) 0x64C: PUSH R1 ALU ... 0x670: IRET Table ... des vecteurs d’int 0xFF00: 0x844 ... 0xFF10: 0x64C Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués (asm x86) ISR code No 0 1 ... 4 Année scolaire 2010-2015 50 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption dans l’ISR, accès au périphérique pour lever l’INT ISR se finit par l’instruction IRET (x86) Single Core CPU R1, R2, .... PC 0x670 IR IRET Memory 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 Address bus IRET ... Data bus 0x200 : 0x0005 0x204 : IDTR 0xFF00 SP 0x40 8 ... ... INT PIC Périph. 7 Pile du processus en cours 0x400: 0x0003 0x404: 0x040 0x408: 0x108 (PC) ... 0x64C: PUSH R1 ALU ... 0x670: IRET Table ... des vecteurs d’int 0xFF00: 0x844 ... 0xFF10: 0x64C Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués (asm x86) ISR code No 0 1 ... 4 Année scolaire 2010-2015 51 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption IRET : reprendre le processus initial (PC<= valeur avant l’int.) le PC initial en mémoire au sommet de la pile (adresse contenu dans SP) Single Core CPU Memory 0x408 R1, R2, .... PC 0x108 IR IRET Address bus 0x108 (PC) ... Data bus 0x200 : 0x0005 0x204 : IDTR 0xFF00 SP 0x408 ... 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 ... INT PIC Périph. 7 Pile du processus en cours 0x400: 0x0003 0x404: 0x040 0x408: 0x108 (PC) ... 0x64C: PUSH R1 ALU ... 0x670: IRET Table ... des vecteurs d’int 0xFF00: 0x844 ... 0xFF10: 0x64C Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués (asm x86) ISR code No 0 1 ... 4 Année scolaire 2010-2015 52 / 84 Exceptions et Interruptions Contrôleur d’interruptions et traitement Traitement de l’interruption SP pointe vers le nouveau sommet de la pile le processus peut reprendre (mais il reste l’int 7 à traiter) Single Core CPU Memory 0x100 : LDR R2, 0x200 0x104 : LDR R3, #2 0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204 0x108 ? R1, R2, .... PC 0x108 IR IRET Address bus ... Data bus 0x200 : 0x0005 0x204 : IDTR 0xFF00 SP 0x40 4 ... ... INT PIC Périph. 7 Pile du processus en cours 0x400: 0x0003 0x404: 0x040 0x408: 0x108 ... 0x64C: PUSH R1 ALU ... 0x670: IRET Table ... des vecteurs d’int 0xFF00: 0x844 ... 0xFF10: 0x64C Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués (asm x86) ISR code No 0 1 ... 4 Année scolaire 2010-2015 53 / 84 Gestion de la mémoire (pagination) Plan 1 Raspberry 2 Processeur ARM Architecture ARM : principes Jeu d’instruction et language assembleur ARM 3 Exceptions et Interruptions Définition Contrôleur d’interruptions et traitement 4 Gestion de la mémoire (pagination) 5 Les entrées-sorties (I/O) I/O par port I/O mappées en mémoire 6 Le temps : Horloge et Timers L’horloge temps réel Les timers Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 54 / 84 Gestion de la mémoire (pagination) Problématique d’un système multi-tâche Des processus mais 1 mémoire : Et si la place est occupée ? code dépendant de sa position en mémoire (adresses absolues des données) Main Memory (RAM) Secondary Memory (Hard Disk Drive) 0x00 0x08 ./prog ELF Header 08 4F E1 C5 @start_: 0x18 4F 23 A3 00 Programm Header 0x10 section memory addr 0x18 movl 0x30 , %eax .text 0x18 .data 0x30 0x20 movl $0x32, %ebx addl (%ebx), %eax 0x28 0x30 0x38 movl 0x30, %eax movl $0x32, %ebx compl %edx, $0 jne 0x08 movl $1, %eax movl $2, %ebx subs %eax, %edx addl (%ebx), %eax ? 0e 00 00 00 07 00 00 00 0x3F .text .data ./program2 ./program3 Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 55 / 84 Gestion de la mémoire (pagination) Gestion de la mémoire 000 000 10K Processus H 70K Processus H Problématique de la réallocation dynamique comment positionner les processus en mémoire ? comment obtenir un bloc contigüe pour un malloc sans retasser ? (libre) Processus A 270K 100K Processus A Processus B 580K 280K Processus B (libre) 900K 900K Système d’exploitation Système d’exploitation 1M 1M Mémoire après un temps de fonctionnement Retassement par réallocation dynamique 2 solutions possibles utilisant une translation d’adresse : la segmentation la pagination Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 56 / 84 Gestion de la mémoire (pagination) La pagination :Principe 1 1 table de correspondance entre : adresse logique (@logique/virtuelle) du Code/Data dans l’executable ELF adresse physique (@physique) où il est effectivement en mémoire Memoire Physique (RAM) Processus Mémoire Logique/Virtuelle @logique @physique 0x00 0x04 0x00 0x00 Processus A 0x08 0x08 0x08 0x10 0x14 0x18 0x18 movl 0x30, %eax 0x20 movl $0x32, %ebx addl (%ebx), %eax 0x1C 0x20 0x2C 0x30 0x34 0x38 0x3C 0e 00 00 00 07 00 00 00 0x38 0x3C Loı̈c Cuvillon (TPS) 0x18 0x3F movl 0x30, %eax movl $0x32, %ebx Processus B 0x10 0x14 0x20 0x20 addl (%ebx), %eax 0x28 0x24 0x28 0x28 0x30 0x10 0x0C 0x10 Processus B 0x30 0x38 0x3C 0x38 0e 00 00 00 0x3C 07 00 00 00 0x3F Chargmement du programme et céation table correspondance Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 57 / 84 Gestion de la mémoire (pagination) La pagination : Principe 1 Translation d’adresse pour toute lecture/ecriture d’un code/donnée (Exemple : Fetch de la première instruction du programme) @logique Memoire Physique (RAM) @physique 0x00 0x04 EAX Processus A 0x08 EBX 0x18 ECX PC 0x00 0x18 @start_: 0x18 0x08 0x0C 0x10 0x10 0x10 0x14 0x18 0x10 0x1C 0x20 0x14 0x20 0x24 0x28 0x2C 0x30 0x34 0x38 0x3C Loı̈c Cuvillon (TPS) 0x18 0x20 0x28 0x38 0x3C 0x30 movl 0x30, %eax movl $0x32, %ebx Processus B addl (%ebx), %eax Processus A Processus B 0x38 0e 00 00 00 0x3C 07 00 00 00 Systèmes temps réel et systèmes embarqués 0x3F Année scolaire 2010-2015 58 / 84 Gestion de la mémoire (pagination) La pagination : Principe 1 Translation d’adresse pour toute lecture/ecriture d’un code/donnée (Exemple : lecture d’un opérande) @logique Memoire Physique (RAM) @physique 0x00 0x04 EAX Processus A 0x08 EBX 0x30 movl 0x30,%eax PC 0x00 0x18 0x08 0x0C 0x10 0x38 0x10 0x14 0x18 0x10 0x1C 0x20 0x14 0x20 0x18 0x20 0x24 0x28 0x2C 0x30 0x34 0x38 0x3C Loı̈c Cuvillon (TPS) Read 0x38 0x3C 0x28 0x30 movl 0x30, %eax movl $0x32, %ebx Processus B addl (%ebx), %eax Processus A Processus B 0x38 0e 00 00 00 0x3C 07 00 00 00 Systèmes temps réel et systèmes embarqués 0x3F Année scolaire 2010-2015 59 / 84 Gestion de la mémoire (pagination) La pagination Déplacement de code/donnée en mémoire physique 1 déplacement et mise-à-jour table @logique EAX EBX PC Memoire Physique (RAM) @physique 0x00 0x04 0x00 0x08 0x08 0x0C 0x10 0x10 Processus A 0x14 0x18 0x10 0x08 0x1C 0x20 0x14 0x20 0x0C 0x18 0x20 0x24 0x28 0x2C 0x30 0x34 0x38 0x3C Loı̈c Cuvillon (TPS) Read 0x38 0x3C 0x28 0x30 movl 0x30, %eax movl $0x32, %ebx Processus B addl (%ebx), %eax Processus A Processus B 0x38 0e 00 00 00 0x3C 07 00 00 00 Systèmes temps réel et systèmes embarqués 0x3F Année scolaire 2010-2015 60 / 84 Gestion de la mémoire (pagination) La pagination Avantage programme utilise des @virtuelles contigües ↔ à des adresses physiques non-contiguë déplacement en RAM du code/données = quelques ligne de la table à updater. Inconvéniant la table de correspondance aussi grande que la mémoire physique RAM ! (si une adresse=32bits) gestion lourde de la mémoire Solution Déplacement du code/donnée par paquet de 2, 4, ou 2n octets Table de correspondance entre @logique et @physique du paquet Taille de la Table divisée par 2, 4 ou 2n → gestion plus légère Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 61 / 84 Gestion de la mémoire (pagination) La pagination Table de pages blocs (ici de tailles 23 octets) sont appellés pages Processus Mémoire Logique/Virtuelle Numéro de page Memoire Physique (RAM) 0x00 0x00 0 0x08 1 Page virtuelle 2 0 1 2 3 4 5 6 7 0x10 0x18 movl 0x30, %eax 0x20 movl $0x32, %ebx addl (%ebx), %eax 0x28 0x30 3 4 5 0e 00 00 00 07 00 00 00 6 0x38 0x3C Loı̈c Cuvillon (TPS) 7 Processus A Table des pages Page physique 0x08 0x10 0x18 2 4 7 0x20 movl 0x30, %eax movl $0x32, %ebx Processus B addl (%ebx), %eax 2 3 4 5 Processus B 0x38 0e 00 00 00 0x3C 07 00 00 00 Systèmes temps réel et systèmes embarqués 0 1 0x28 0x30 Numéro de page 6 7 Année scolaire 2010-2015 62 / 84 Gestion de la mémoire (pagination) La pagination : Mémoire virtuelle Mémoire virtuelle Possible de ne charger que le début du programme si manque de place Un bit indique dans la table si la page est chargée ou non Processus Mémoire Logique/Virtuelle Numéro de page 0x00 0 0x08 1 0x10 2 0x18 movl 0x30, %eax 0x20 movl $0x32, %ebx addl (%ebx), %eax 0x28 0x30 3 4 5 0e 00 00 00 07 00 00 00 6 0x38 0x3C Loı̈c Cuvillon (TPS) 7 Memoire Physique (RAM) Table des pages Page virtuelle 0 1 2 3 4 5 6 7 Page physique 0x00 0x08 0x10 0x18 2 7 1 0 1 1:page présente 0:page absente 0x20 0x28 0x30 Processus A 0 Processus A 1 movl 0x30, %eax movl $0x32, %ebx 2 Processus B 3 Processus A 4 Processus B 5 Processus B 6 0x38 0e 00 00 00 0x3C 07 00 00 00 Systèmes temps réel et systèmes embarqués Numéro de page 7 Année scolaire 2010-2015 63 / 84 Gestion de la mémoire (pagination) La pagination : Mémoire virtuelle Mémoire virtuelle : besoin de charger la suite ? la page non chargée mise temporairement sur une mémoire secondaire Table des pages Page virtuelle Memoire Physique (RAM) Page physique 0x00 0 1 0x08 2 3 4 5 6 0x10 2 7 1 0 0x18 1 0x20 7 1:page présente 0:page absente addl (%ebx), %eax Loı̈c Cuvillon (TPS) (3) Processus A 0 Processus A 1 movl 0x30, %eax movl $0x32, %ebx 0x28 Memoire Secondaire (Disque Dur) 0x30 2 Processus B 3 Processus A 4 Processus B 5 Processus B 6 0x38 0e 00 00 00 0x3C 07 00 00 00 Systèmes temps réel et systèmes embarqués Numéro de page 7 Année scolaire 2010-2015 64 / 84 Gestion de la mémoire (pagination) La pagination : Mémoire virtuelle Mémoire virtuelle : besoin de charger la suite ? un programme demon (kswapd sous linux) libère des pages : si un programme requiert une page non chargée (”défaut de page”) si la mémoire est presque pleine (retire vieilles pages) Table des pages Page virtuelle Memoire Physique (RAM) Page physique 0x00 0 1 0x08 2 3 4 5 6 0x10 2 7 1 0 0x18 0x20 1 7 1:page présente 0:page absente addl (%ebx), %eax Memoire Secondaire (Disque Dur) 0x28 Numéro de page Processus A 0 Processus A 1 movl 0x30, %eax movl $0x32, %ebx 2 Processus B 3 Processus A 4 Processus B 5 Processus B 6 Kswapd 0x30 (3) 0x38 0e 00 00 00 0x3C 07 00 00 00 7 swap area Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 65 / 84 Gestion de la mémoire (pagination) La pagination : Mémoire virtuelle Mémoire virtuelle : besoin de charger la suite ? chaque processus a sa table de pages on met à jour les 2 pages de tables Table des pages de B Table des pages Page virtuelle Page physique Page virtuelle Memoire Physique (RAM) Page physique 0x00 0 1 0 1 5 2 2 6 1 1 1 3 4 3 0 1 5 6 3 4 5 6 2 3 7 1 0x08 7 7 1:page présente 0:page absente 1:page présente 0:page absente Memoire Secondaire (Disque Dur) Processus A 0 Processus A 1 0x10 movl 0x30, %eax movl $0x32, %ebx 0x18 addl (%ebx), %eax 0x20 0x28 0x30 Numéro de page 2 3 Processus A 4 Processus B 5 Processus B 6 0x38 0e 00 00 00 0x3C 07 00 00 00 7 Processus B swap area Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 66 / 84 Gestion de la mémoire (pagination) La pagination : Mémoire virtuelle Avantages Code et Données du programme dynamiquement relogeables en mémoire Mémoire virtuelle : Taille des programmes en cours > taille de la mémoire Utilisation du disque comme stockage secondaire Inconvéniants Une architecture plus complexe : nécessite une unité spécifique pour gérer la table de pages et faire les calculs d’adresses Temps d’accès non déterministe à la mémoire : si la page requise n’est pas en mémoire mais sur le disque (page default) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 67 / 84 Gestion de la mémoire (pagination) Unité de Gestion de la mémoire (MMU) circuit imprimé distinct ou inclus dans le processeur dédié aux traductions d’adresse par segmentation ou pagination une logique importante (jusqu’à 30% de la surface du processeur) au niveau matériel, elle contient : logique de conversion des adresses virtuelles en adresses physiques logique de vérification de la validité de l’adresse (sinon segfault) ou disponibilité de la page en RAM. mémoire cache associative TLB (Translation Lookaside Buffer) contenant la portion la + utilisée de la table des pages (réduit les accès plus lent à la table de pages en RAM.) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 68 / 84 Les entrées-sorties (I/O) Plan 1 Raspberry 2 Processeur ARM Architecture ARM : principes Jeu d’instruction et language assembleur ARM 3 Exceptions et Interruptions Définition Contrôleur d’interruptions et traitement 4 Gestion de la mémoire (pagination) 5 Les entrées-sorties (I/O) I/O par port I/O mappées en mémoire 6 Le temps : Horloge et Timers L’horloge temps réel Les timers Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 69 / 84 Les entrées-sorties (I/O) Rappel : Architecture des cartes-mères Northbridge contrôleur mémoire (rafraı̂chissement, sélection,.) bande passante élevée compatibilité limité avec 1 type de mémoire et 1 CPU terminologie Intel : Graphics and Memory Controller Hub (GMCH) Southbridge dédié aux bus de moindres débits peut inclure : DMA, RTC, PIC terminologie Intel : I/O Controller Hub (ICH). Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 70 / 84 Les entrées-sorties (I/O) Entrées-sorties interaction entre CPU et périphériques (monde externe) entre registres du contrôleur d’un périph. et le CPU 2 stratégies : adressage par port dédié ou par mappage en mémoire 0xFFFF 0xFFFF mémoire mémoire 0xF140 Plage réservée I/O physique physique 0 I/O ports I/O registres par adresse de port Loı̈c Cuvillon (TPS) 0xF400 0x6E 0 0 I/O registres mappées en mémoire Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 71 / 84 Les entrées-sorties (I/O) I/O par port I/O par port broche I/O du CPU active − > @ sur le bus = @ d’un port (et non mémoire) instructions lecture/écriture : IN, OUT (asm) ou inb,outb (en C) adresses de ports liées à la conception de la carte mère cat /proc/ioport permet de lister les ports existants CPU Address Bus 0x3F8 NorthBridge IO/M Memory I/O S I/O controller Serial Port Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 72 / 84 Les entrées-sorties (I/O) I/O par port I/O par port Exemple : port parallèle 12 broches sortie et 5 broches en entrée le niveau électrique de la broche = la valeur du bit du registre (source : linux device drivers, 3eme edition) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 73 / 84 Les entrées-sorties (I/O) I/O par port I/O par port #define PORT 0x378 main{ ioperm(PORT,2,1); //demande accès (1=accès on) //à 2 octets à partir // de l’@ de port PORT 0 0 0 0 0 0 0 1 2 outb(0x1,PORT); //ecriture sur port //de la valeur 1 + − } (source : linux device drivers, 3eme edition) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 74 / 84 Les entrées-sorties (I/O) I/O mappées en mémoire I/O mapping des @ mémoires physiques sont détournées par la carte mère vers des registres des périphériques mémoire pas accessible sur ces adresses sur architecture intel 32 bits : la plage ≈ 3.5Go − >4Go réservée pour I/O si plus de 3.5 Go installés, cette RAM est inutilisable (non adressable) TOLUD<0xFF4A<0xFFFF CPU Address Bus 0xFFFF 0xFF4A NorthBridge Memory Data Bus 0x0000 PCI device controller South bridge Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 75 / 84 Les entrées-sorties (I/O) I/O mappées en mémoire I/O mapping adresses physiques réservés aux I/O voir la documentation de la carte-mère ou du Soc. cat /proc/iomem : liste les zones mémoires réservées lspci -v : liste périphériques pci et adresses physiques des registres mappés (et port) accès et lecture/ecriture (Drivers Linux) Le noyau et les processus utilisent des @ virtuelles et non physiques ! (void*)add_virtuel ioremap( (void*)add_phys, length) demande une @ virtuelle mappée/correspondant à l’@ physique lecture écriture ensuite avec : ioread((void*)add_virtuel) et iowrite(value,(void*)) Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 76 / 84 Les entrées-sorties (I/O) I/O mappées en mémoire I/O mapping accès et lecture/ecriture (Process utilisateur) Le périhérique /dev/mem est une image de la mémoire physique (RAM) (void*) mmap(NULL, length, , ,fd, offset) demande une @ virtuelle mappée/correspondant à l’@ offset de la mémoire/fichier fd lecture et écriture via le pointeur dans mémoire/registre du périphérique length et offset doivent être des multiples de la taille des pages avantage : accès direct à la mémoire (mémoire périphérique) risque : accès non protégé et concurrent possible. Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 77 / 84 Les entrées-sorties (I/O) I/O mappées en mémoire I/O mapping Exemple avec les gpios du RPi D’après /proc/iomem et la doc du Soc : Adresse phy 0x20200000 0x2020001C 0x20200028 0x20200034 Description GPIO function select0 GPIO Pin Output Set 0 GPIO Pin Output Clear 0 GPIO Pin Level 0 Size 32 32 32 32 RW RW W W R GPIO Pin Output Set : chaque bit représente un GIPO, un bit écrit à 1 allume le GPIO GPIO Pin Output Clear : idem mais met à 0 le GPIO voir exemple gpio_direct.c Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 78 / 84 Les entrées-sorties (I/O) I/O mappées en mémoire I/O par ports et mappées en mémoire Comparatif I/O port + adressage séparé : plage d’adresses mémoires complète + si CPU a 1 petit bus d’adresses + instruction spécifique : lisibilité code - hardware supplémentaire (logique + broche CPU) Loı̈c Cuvillon (TPS) I/O mappée en mémoire +pas de logique pour les ports sur CPU (prix,simplicité) +même instruction qu’un accès mémoire (RISC) -occupe des adresses mémoires (où il peut y avoir de la RAM) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 79 / 84 Le temps : Horloge et Timers Plan 1 Raspberry 2 Processeur ARM Architecture ARM : principes Jeu d’instruction et language assembleur ARM 3 Exceptions et Interruptions Définition Contrôleur d’interruptions et traitement 4 Gestion de la mémoire (pagination) 5 Les entrées-sorties (I/O) I/O par port I/O mappées en mémoire 6 Le temps : Horloge et Timers L’horloge temps réel Les timers Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 80 / 84 Le temps : Horloge et Timers La gestion du temps Planification d’actions dans le futur travaux périodiques (réordonnancement des tâches, pooling) travaux à échéances (timer décrémenté jusque 0) Timers matériels : composant électronique (quartz), générateur d’INT, µs. logiciels : registres décrémentés, réduction charge processeur Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 81 / 84 Le temps : Horloge et Timers L’horloge temps réel L’horloge temps réel ou Real-time Clock (RTC) quartz 32.768 kHz (maximum≈30MHz) alimentation : batterie lithium ou supercondensateur avantages : indépendante du reste du système (1 utilisation : réveil programmé) sauvegarde de l’heure et du jour en absence d’alimentation inconvénients : consultation lente (I/O) résolution faible (ms : milliseconde) Circuit intégré RTC Loı̈c Cuvillon (TPS) Puce southbridge (RTC inclus) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 82 / 84 Le temps : Horloge et Timers Les timers Les timers Programmable Interrupt Timer (PIT) compteurs programmables en mode one-shot ou périodique résolution temporelle : µs un des compteur est utilisé comme ”timer système” le timer système génère l’INT de plus haute priorité : l’INT timer (IRQ 0) Ex : puce intel 825x, inclus dans le southbridge à l’adresse I/O : 0x40-43 Time Stamp Counter (TSC) compteur (registre) 64 bits interne au CPU ix86 incrémentation de 1 à chaque signal d’horloge CPU 190 ans pour le remplir à 3GHz, résolution : nanosecondes (ns) accessible par une instruction processeur (asm) ”RDTSC” Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 83 / 84 Le temps : Horloge et Timers Les timers Timers Linux : usage des timers variable kernel jiffies variable 32 bits incrémentée à chaque interruption timer (pour linux, à défini à la compilation du kernel) utilisée par le noyau et pour la fréquence de réordonnancement des threads usage noyau : void init timer (struct timer list* timer) et scheduler tick() usage user : clock gettime() registre TSC la meilleur résolution (ns) usage : rtdsc(low,high), lecture en 2 variable 32 bits du TSC utilisé par le Linux temps réel Xenomai sur architecture intel386 Loı̈c Cuvillon (TPS) Systèmes temps réel et systèmes embarqués Année scolaire 2010-2015 84 / 84