Syst `emes temps r ´eel et syst `emes embarqu ´es
Architecture des ordinateurs
Lo¨ıc Cuvillon
Telecom Physique Strasbourg
11 novembre 2015
Sommaire
1 Raspberry
2 Processeur ARM
Architecture ARM : principes
Jeu d’instruction et language assembleur ARM
3 Exceptions et Interruptions D ´efinition
Contr ˆoleur d’interruptions et traitement
4 Gestion de la m ´emoire (pagination)
5 Les entr ´ees-sorties (I/O) I/O par port
I/O mapp ´ees en m ´emoire
6 Le temps : Horloge et Timers L’horloge temps r ´eel Les timers
Bibliographie
Bibliographie
Architecture :
Architecture de l’ordinateur, 5 `eme ´edition, Andrew Tanenbaum, Pearson education, 2005.par le cr ´eateur de l’OS Minix
Documentation technique :
Intel Architecture Software Developer’s Manuel ARM Architecture Reference Manual
Bibliographie
Little/Big Endian
Petit/Gros boutiste( ´etymologie : voyage de Gulliver)
exemple : la valeur 433=0x01B1 n ´ecessitant 2 octets en m ´emoire Big endian : most significant bit (MSB : 01h) en premier
Little Endian : lest significant bit (LSB : B1h) en premier
Little-Endian (x86,arm) adresse m ´emoire 00 01
B1 01
Big-Endian (powerpc,arm,mips) adresse m ´emoire 00 01
01 B1
Protocole IP : big endian (pour tous, interop ´erabilit ´e)
Raspberry
Plan
1 Raspberry
2 Processeur ARM
Architecture ARM : principes
Jeu d’instruction et language assembleur ARM
3 Exceptions et Interruptions D ´efinition
Contr ˆoleur d’interruptions et traitement
4 Gestion de la m ´emoire (pagination)
5 Les entr ´ees-sorties (I/O) I/O par port
I/O mapp ´ees en m ´emoire
6 Le temps : Horloge et Timers L’horloge temps r ´eel Les timers
Raspberry
Hardware
System on chip (Soc) ARM/GPU + SDRAM, DMA, MMU, GPIO, UART
Raspberry
Gpio
GPIO : General Purpose Input Output
configurable en entr ´ee ou sortie niveau binaire : 0 - 3.3 Volt peut produire une interruption pas de CNA/CAN disponible (mais un PWM)
GPIO particuliers
Liaison s ´erie RS232 (RX,TX) I2C (SDA/SCL)
SPI(MOSI, MISO)
Raspberry
RS-232
RS232 :
une norme de liaison s ´erie
3 fils : GND, Transmission (Tx), Reception (Rx)
bit 0 = niveau haut +3 `a +15V bit 1 = niveau bas -15V Communication null-modem : Periph 1 P ´eriph 2
GND ↔GND
TX ↔ RX
RX ↔ TX
utilise un UART baudrate = d ´ebit en symboles/seconde (<bits/seconde)
UART
composant qui serialise les donn ´ees
frame standard : 1 bit de start `a 0 8 bits (l’octet de data) 1 bit de parit ´e (ou non) 1 bit de fin `a 1 (ou 2 bits)
Raspberry
BerrylClip
Carte Berryclip+
Connexion haut-parleur, leds, interrupteurs sur les GPIOs
(Haut−parleur)
Pins
Raspberry
Connexion au RPI via la liaison s ´erie
Un adaptateur USB RS232 3.3V TTL
conversion niveau RS232 vers 0-3.3V du Rpi
+ emulation d’un port s ´erie pour les PC r ´ecents via/dev/ttyUSB0
7 1
13 Berryclip Pins
Raspberry
Connexion au RPI via la liaison s ´erie
le RPi par d ´efaut ouvre un terminal sur son port s ´erie login/passwd : pi/raspberry
Se connecter au RPi
1 Ins ´erer la SD-card (ne pas alimenter le RPi)
2 Connecter le cable s ´erie entre le PC et le RPi
3 la commandescreen /dev/ttyUSB0 115200dans un terminal pour se connecter
115200 est le baudrate cot ´e RPi
sortir de l’utilitairescreen: touches [ctrl-a] puis [k]
4 alimenter le Rpi (les messages du noyau apparaissent, puis le login apr `es les 60s de timeout du DHCP)
Raspberry
Tools : mount
syst `eme de fichier
un syst `eme de fichier = organise le stockage et la r ´ecup ´eration de l’information sous forme de fichiers nomm ´es.
les partitions disques (disques dur, cl ´e USB) sont des p ´eriph ´eriques nomm ´es/dev/sda1,/dev/sda2,/dev/sdd2..
Montage d’un syst `eme de fichier
mount [partition] [dir]
monter unepartitionsur un r ´epertoire umount [partition]ouumount [dir]
d ´emonter une partition df
liste les syst `emes de fichers mont ´es
Raspberry
Tools : mount
/ boot/
lib/
mnt/
Readme.txt
/ /boot /lib /mnt
heros_S2_ep03.avi /ENSPS/
Presentation_R5.ppt
heros_S2_ep03.avi /ENSPS/
Presentation_R5.ppt
Disque dur /dev/sda : Clef USB
mount −t auto /dev/sda/ /mnt/
Raspberry
Tools : divers
Tools
cat [file]
concatener des fichiers
mais ici affiche le contenu sur la sortie standard lessoumore
d ´ecoupe le flux de la sortie standart en page
(touches : [b] page pr ´ecedente, [space] suivante, [q] exit) exemple :cat encyclopedie.txt | less
tar xf [archive]
d ´ecompresser unearchiveau format tar sudo {-s}
ex ´ecute la commande en tant que root, -souvre un shell root
dmesg
messages de debug du noyau linux
Raspberry
Tools : manipulation fichiers
cp [file] [file/dir]
copie le fichier dans un autre fichier ou r ´epertoire cp -r [rep] [rep]
copier un r ´epetoire dans un autre mv [file/dir] [file/dir]
d ´eplacer un fichier/r ´epertoire dans un autre fichier ou r ´epertoire rm [file]
effacer un fichier rm -r [dir]
effacer un r ´epertoire (recursif) mkdir [dir]
cr ´eer un r ´epertoire cd [dir]
changer de r ´epertoire (..le r ´epertoire parent) pwd
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
´ecrire le fichier touche([echap]) :x
sauver et quitter touche([echap]) :q!
forcer quitter
nano
plus classique. Menus via touche[ctrl]+ lettre
Processeur ARM
Plan
1 Raspberry
2 Processeur ARM
Architecture ARM : principes
Jeu d’instruction et language assembleur ARM
3 Exceptions et Interruptions D ´efinition
Contr ˆoleur d’interruptions et traitement
4 Gestion de la m ´emoire (pagination)
5 Les entr ´ees-sorties (I/O) I/O par port
I/O mapp ´ees en m ´emoire
6 Le temps : Horloge et Timers L’horloge temps r ´eel Les timers
Processeur ARM Architecture ARM : principes
Architecture ARM (Advance RISC Machine)
processeur RISC 32 bit
ReducedInstruction Set Computer ; instr. de taille fixe (32bits) architecture ”load and store”
(op ´eration arithm ´etique r ´ealisable uniquement entre registres) avantages : architecture ´epur ´ee et fr ´equence d’ex ´ecution rapide inconv ´enient : programme plus long (2x) que le m ˆeme en CISC populaire dans l’embarqu ´e : lego mindstorm, nintendo DS ; apple ipod,iphone (consommation ´electrique)
la soci ´et ´e ARM
ne fabrique pas de processeurs mais les dessine ! vend des licences et ses dessins `a des fondeurs perc¸oit des royalties sur les processeurs vendus
Processeur ARM Architecture ARM : principes
L’architecture externe du ARM
bus d’adresses 32 bits : 4Go de RAM possible ; bus de donn ´ees
(+ instruction : Archi. Van Neumann)
2 lignes d’interruptions ; nReset : r ´einitialisation ; nRW : s ´election
Processeur ARM Architecture ARM : principes
Fonction d’un processeur (Central Processing Unit)
Ex ´ecution s ´equentielle d’instructions au travers d’un pipeline
Fetch Instruction
Decode
Execute
Etapes du pipeline ARM7 ´
Fetch : R ´ecup ´erer le code de l’instruction `a ex ´ecuter
Decode: D ´ecode instruction et registres `a utiliser
(pr ´eparation des chemins de donn ´ees)
Execute: Ex ´ecution instruction lecture registres ;
op ´eration ;
´ecriture r ´esultat registre ; ...
Processeur ARM Architecture ARM : principes
Architecture Interne d’un processeur
R1 R2 R3
IR
...
PC selection
Bus source
ALU ALU operation mode Address bus
Data bus Memory
C
A B
Single Core CPU
and Control Unit
Decode
Registres : stockage de mots (16, 32, 64 bits suivant architecture) ALU : Unit ´e Arithm ´etique et Logique ;
+,-,*,/,ET,OU,XOR, d ´ecalage,. . .
Unit ´e de d ´ecodage et commande : g ´en ´eration signaux de commande (op ´eration ALU, routage des bus A,B et C).
Bus m ´emoire:
Processeur ARM Architecture ARM : principes
Architecture Interne d’un processeur
R1 R2 R3
IR ...
PC selection
Bus source
ALU ALU operation mode Address bus
Data bus Memory
C
A B
Single Core CPU
and Control Unit
Decode
Registres
PC (R15) : Programme Counter adresse de l’instruction en cours ;
incr ´ement ´e par le CPU ; (ou IP, instruction pointer) IR : mot de l’instruction en cours R1,R2,R3.. R12 : registres `a usages g ´en ´eraux
CPSR : current program status register
Processeur ARM Architecture ARM : principes
CSPR register : Program status
mise `a jour apr `es chaque instruction
bits N, Z et V mis `a jour suivant le r ´esultat de l’instruction pr ´ec ´edente d ´efinit le mode d’op ´eration du processeur
M[0:4]
Data endianness bit IRQ Disable
Mode bits 0 4
I
9 7
28 30 31
zero
negative/less than
E V
Z
N C
overflow carry
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 ´efinit par les concepteurs seul et unique pour un processeur
un code binaire
l’Assembleur (Assembly language) :
repr ´esentation symbolique du langage machine
usage de mn ´emoniques 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
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)
Rd Rn 0 0 0 0 0
0 12
16 20 25
28
31 26 21
1
c o n d 0 0 shift
3
Rm
Assembleur : ADD R3 R2 R3−>Langage machine :0xE0823003
0 0
0 0 100 0000 0000
0 12
16 20 25
28
31 26 21
001 0 0
1 1 1 0 0011 0011
(cond=1110 signifie ”toujours ex ´ecuter”)
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
PC initialis ´e `a 100
initialisation par un autre programme (ou reset du CPU)
...
ALU
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x104 : LDR R3, #2
0x100
0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
Fetch de l’instructionpar l’IFU (Instruction Fetch Unit) adresse de l’instruction donn ´ee par le PC
...
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x104 : LDR R3, #2
0x100
0x100
R
0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204 LDR R2, 0x200
LDR R2, 0x200
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
fin du Fetch : code de l’instruction `a ex ´ecuter dans IR D ´ecodage et pr ´eparation du chemin de donn ´ees
...
ALU
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x100
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
LDR R2,0x200
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
Ex ´ecution de l’instruction LDR
LDR : load dans le registre Rx une donn ´ee r ´ef ´erenc ´ee ou une #constante
...
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
R
Memory
Data bus
Read/Write
0x100 0x0005
0x104 : LDR R3, #2 0x0005
0x200 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
LDR R2,0x200
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
fin de l’instruction
Incr ´ementation du PC de 0x004: pointe sur instruction suivante
...
ALU
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x104 : LDR R3, #2
0x104 0x0005
0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
LDR R2,0x200
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
Fetch de l’instruction suivante
´ecrase le contenu de l’IR
...
ALU
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x0005
0x104 : LDR R3, #2 0x104
0x104 R
LDR R3, #2
LDR R3, #2
0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
D ´ecode et Ex ´ecute l’instruction
LDR : load dans le registre Rx une donn ´ee r ´ef ´erenc ´ee ou une #constante
...
ALU
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x0005
LDR R3, #2
0x104 : LDR R3, #2
0x0002 0x104
0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
fin de l’instruction :Incr ´emente de 0x004 le PC Fetch de l’instruction suivante
...
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3 0x10C : STR R3, 0x204
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x0005
0x104 : LDR R3, #2
0x0002 0x108
0x108
ADD R3, R2, R3
R ADD R3,R2,R3
0x100 : LDR R2, 0x200
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
ex ´ecution de l’instruction
ADD Rdest,Ra,Rb : addition Rdest<=Rb+Ra
...
ALU
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x0005
0x104 : LDR R3, #2
ADD R3,R2,R3 0x108
0x05
+
0x02 0x0007
0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
Fin instruction: incr ´emente le PC Fetch instruction suivante
...
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 0x204 : 0x????
Memory
Data bus
Read/Write
0x0005
0x104 : LDR R3, #2
0x0007 0x10C
0x10C 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204 STR R3,0x204
STR R3,0x204
Processeur ARM Jeu d’instruction et language assembleur ARM
Illustration : R ´ealisation d’une addition
Ex ´ecution de l’instruction
STR Rd Add : sauve contenu de Rd `a l’adresse Add
...
ALU
Single Core CPU
Address bus R1
R2 R3
PC
IR
0x108 : ADD R3, R2, R3
0x200 : 0x0005 Memory
Data bus
Read/Write
0x0005
0x104 : LDR R3, #2
0x0007 0x10C
0x204
W 0x204 :0x0007 0x0007
0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
STR R3,0x204
Processeur ARM Jeu d’instruction et language assembleur ARM
Le pipeline d’ex ´ecution
ex ´ecution en parall `ele d’1Fetch, 1D ´ecodeet 1Ex ´ecution
→ acc ´el ´eration du d ´ebit d’ex ´ecution : 1 ex ´ecution d’instruction/cycle (alors que le traitement d’une instruction : 3 cycles)
Fetch de l’instruction point ´ee par PC+08 pendant ex ´ecution de PC
Execute Execute
Execute temps (Inst.addr: PC)
(Inst.addr: PC−0x08) ADD R3, R3, R1
LDR R2, #6
Fetch Decode Fetch Decode
Fetch Decode ADD R2, R2, R1
...
selection Bus source
ALU ALU operation mode C
A B and Control Unit
Decode
PC IR
R3 R1 R1 R2
R3 Data bus
Address bus PC LDR R2, #6
1 cycle 1 cycle 1 cycle
Exceptions et Interruptions
Plan
1 Raspberry
2 Processeur ARM
Architecture ARM : principes
Jeu d’instruction et language assembleur ARM
3 Exceptions et Interruptions D ´efinition
Contr ˆoleur d’interruptions et traitement
4 Gestion de la m ´emoire (pagination)
5 Les entr ´ees-sorties (I/O) I/O par port
I/O mapp ´ees en m ´emoire
6 Le temps : Horloge et Timers L’horloge temps r ´eel Les timers
Exceptions et Interruptions D ´efinition
Exceptions (et Interruptions)
D ´efinition d’une exception
arr ˆet temporaire du flux normal d’instructions pour r ´epondre `a un
´ev ´enement exceptionnel ou externe
Exception synchrone (”Exception”) : r ´esultat d’une instruction ex ´ecut ´ee par le processeur g ´en ´erant une erreur
arithm ´etique : division par 0, d ´ebordement (overflow)
m ´emoire : erreur d’alignement, m ´emoire insuffisante, erreur manipulation pointeur
appel syst `eme (LINUX) : par l’instruction INT 0x80, une application requiert un service de l’OS.
Exception asynchrone (”Interruption”) : associ ´ee `a un ´ev ´enement issu d’un p ´eriph ´erique
timers : expiration d’un timer ou un tick (p ´eriode) d’horloge syst `eme autres p ´eriph ´eriques : touche clavier, clic souris, paquet ethernet,. . .
Exceptions et Interruptions D ´efinition
Interruption
Interruption mat ´erielle
interruption : un signal sur la broche (INT) du CPU d ´eclenchant l’ex ´ecution d’une routine en r ´eponse (ISR : Interrupt Service Routine)
´economie pour le CPU du temps de scrutation des p ´eriph ´eriques
CPU
RAM CPU
RAM
Entrée−Sortie programmée avec attente de disponibilité Entrée−Sortie programmée avec interruption INT
INT 1 INT 2 PIC
Scrutation périodique par le CPU de l’état du périphèrique
I/O (1)
I/O (2) I/O (2)
I/O (1) controleur
controleur
controleur
controleur
Exceptions et Interruptions D ´efinition
Interruption
Exemple : Clavier PS2
si une touche est enfonc ´ee ou rel ˆach ´ee le contr ˆoleur du clavier :
´ecrit dans un de ses registres le code de la touche g ´en `ere une interruption
le CPU notifi ´e arr ˆete le processus en cours et ex ´ecute une routine d’interruption qui consiste `a 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/interruptspour visualiser
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Contr ˆoleur d’interruptions
Gestion des interruptions
plusieurs p ´eriph ´eriques et interruptions ( ´eventuellement simultan ´ees) le CPU ne peut ex ´ecuter qu’un ISR `a la fois
probl `eme de concurrence
solution : un contr ˆoleur d’interruption
priorit ´es pour les interruptions (arbitrage de la concurrence) interruption pr ´esent ´ee une `a la fois au CPU
masquer les interruptions non-prioritaires mais les m ´emoriser (buffer)
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Contr ˆoleur d’interruptions
Un contr ˆoleur programmable d’interruptions (PIC) : le 8259
utilis ´e par le PC IBM et ses successeurs, peut ˆetre mis en cascade priorit ´e par ordre d ´ecroissant (0(+prioritaire),2,...,7(-))
3 registres :
1 contenant l’interruption actuellement trait ´ee par le CPU
1 contenant les interruptions pas encore trait ´ees (de priorit ´e inf ´erieure) 1 contenant les interruptions `a masquer (celle dont le CPU ne veut pas)
8259A Interrupt controller CPU
D0-D7 CS A0 WR INTA
RD
INT IR0
IR1 IR2 IR3 IR4 IR5 IR6 IR7
+5 v
Keyboard Clock
Disk
Printer
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Vecteur d’interruption
1 exception = 1 routine ISR `a une adresse m ´emoire donn ´ee (cette adresse est appell ´ee le vecteur d’interruption)
le num ´ero d’exception/interruption sert d’indice dansla table des vecteurs d’interruptionpour trouver l’adresse m ´emoire o `u se trouve l’ISR
Exemple sur architecture i386
un registre du processeur IDTR (INT Descriptor Table Register) stocke en permanence l’adresse en m ´emoire de la table des vecteurs d’interruption
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Exception et interruption
Traitement complet
1 sauvegarde du contexte,l’ ´etat actuel du processeur ; (souvent, dans la pile d’ex ´ecution de la tache en cours)
2 chargement du vecteur d’interruption (adresse ISR) dans le registre PC
3 ex ´ecution de l’ISR
4 recharger contexte ant ´erieur ( ´etat du processeur avant INT)
5 reprise ex ´ecution du programme
traitement rapide, changement de contexte minimal effectu ´e par le mat ´eriel
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Traitement de l’interruption
interruption la plus ´elev ´ee pr ´esent ´ee sur broche INT du CPU le traitement d’une exception synchrone est similaire
PIC ...
ALU Single Core CPU
Address bus
Data bus IDTR
IR PC R1, R2, ....
SP 0xFF00
0x108
4 4 7 INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204 LDR R3,#2
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040 0x404
...
Pile du processus en cours
Table des vecteurs d’int ...
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Traitement de l’interruption
PC du processus interrompu pouss ´e sur la pile par le mat ´eriel adresse de sommet de la pile stock ´ee dans registre SP
PIC ...
ALU Single Core CPU
Address bus
Data bus IDTR
IR PC R1, R2, ....
SP 0xFF00
0x108
4 4 7 INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204 LDR R3,#2
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040 0x40
...
Pile du processus en cours
Table des vecteurs d’int SP+0x04: 0x408
PC: 0x108
0x408: 0x108 (PC)...
8
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Traitement de l’interruption
table des vecteurs d’int. stock ´ee `a l’adresse contenue dans IDTR cherche dans la table, l’entr ´ee du num ´ero d’INT (4)
PIC ...
ALU Single Core CPU
Data bus IDTR
IR PC R1, R2, ....
SP 0xFF00
0x108
INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204 LDR R3,#2
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040 0x40
...
Pile du processus en cours
0x408: 0x108 (PC)...
Address bus 0xFF10
0 Table des vecteurs d’int
1 ...
No
0xFF10: 0x64C 8
4 4 7
4 IDTR+(0x4)*4
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Traitement de l’interruption
l’entr ´ee contient le vecteur d’int. (adresse du gestionnaire de l’int.(ISR)) PC<=vecteur d’interruption
PIC ...
ALU Single Core CPU
Data bus IDTR
IR PC R1, R2, ....
SP 0xFF00
INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204 LDR R3,#2
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040 0x40
...
Pile du processus en cours
0x408: 0x108 (PC)...
Address bus
0 Table des vecteurs d’int No 0xFF10
0x64C 0x108
0x64C
0x64C: PUSH R1...
0x670: IRET
x86) (asm 4
4 7 8
le vecteur d’INT:
adresse de l’ISR
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Traitement de l’interruption
ex ´ecution de l’ISR (l’instruction point ´ee par PC)
PIC ...
ALU Single Core CPU
Data bus IDTR
IR PC R1, R2, ....
SP 0xFF00
INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040 0x40
...
Pile du processus en cours
0x408: 0x108 (PC)...
Address bus
4 0 Table des vecteurs d’int
1 ...
No
0xFF10: 0x64C 0x64C: PUSH R1...
0x670: IRET 0x64C
0x64C
PUSH R1
(pile utilisable par ISR)
ISR code x86) (asm PUSH R1
7 8 4
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Traitement de l’interruption
dans l’ISR, acc `es au p ´eriph ´erique pour lever l’INT ISR se finit par l’instruction IRET (x86)
PIC ...
ALU Single Core CPU
Data bus IDTR
IR PC R1, R2, ....
SP 0xFF00
INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040 0x40
...
Pile du processus en cours
0x408: 0x108 (PC)...
Address bus
0 Table des vecteurs d’int No
0x64C: PUSH R1...
0x670: IRET ISR code x86) (asm
0x670 IRET
IRET
7 8
Exceptions et Interruptions Contr ˆoleur d’interruptions et traitement
Traitement de l’interruption
IRET : reprendre le processus initial (PC<=valeur avant l’int.)
le PC initial en m ´emoire au sommet de la pile (adresse contenu dans SP)
PIC ...
ALU Single Core CPU
IDTR IR PC R1, R2, ....
SP 0xFF00
INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040
...
Pile du processus en cours
0x408: 0x108 (PC)...
Address bus
4 0 Table des vecteurs d’int
1 ...
No
0xFF10: 0x64C 0x64C: PUSH R1...
0x670: IRET ISR code x86) (asm Data bus
0x408
0x108 (PC)
0x408 IRET 0x108
7
Exceptions et Interruptions Contr ˆoleur 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 `a traiter)
PIC ...
ALU Single Core CPU
IDTR IR PC R1, R2, ....
SP 0xFF00
INT
Périph.
0x108 : ADD R3, R2, R3 Memory
0x104 : LDR R3, #2 0x100 : LDR R2, 0x200
0x10C : STR R3, 0x204
0xFF00: 0x844 ...
0x204 : 0x200 : 0x0005
...
...
0x400: 0x0003 0x404: 0x040
...
Pile du processus en cours
...
Address bus
0 Table des vecteurs d’int No
0x64C: PUSH R1...
0x670: IRET ISR code x86) (asm Data bus
IRET 0x108
0x404
0x408: 0x108 7
0x108 ?
Gestion de la m ´emoire (pagination)
Plan
1 Raspberry
2 Processeur ARM
Architecture ARM : principes
Jeu d’instruction et language assembleur ARM
3 Exceptions et Interruptions D ´efinition
Contr ˆoleur d’interruptions et traitement
4 Gestion de la m ´emoire (pagination)
5 Les entr ´ees-sorties (I/O) I/O par port
I/O mapp ´ees en m ´emoire
6 Le temps : Horloge et Timers L’horloge temps r ´eel Les timers
Gestion de la m ´emoire (pagination)
Probl ´ematique d’un syst `eme multi-t ˆache
Des processus mais 1 m ´emoire : Et si la place est occup ´ee ?
coded ´ependant de sa position en m ´emoire (adresses absolues des donn ´ees)
Main Memory (RAM)
(Hard Disk Drive) Secondary Memory
./prog
@start_:
section memory addr 0x18 ELF Header
Programm Header .text
07 00 00 00 0e 00 00 00
.data 0x08
0x00
0x10 0x18 0x20 0x28
0x38
0x30
.data addl (%ebx), %eax
movl $0x32, %ebx
addl (%ebx), %eax .text movl $0x32, %ebx compl %edx, $0
jne 0x08 movl $1, %eax movl $2, %ebx subs %eax, %edx 0x30
08 4F E1 C5 4F 23 A3 00
./program2
?
movl , %eax0x30
movl , %eax0x30 0x18
Gestion de la m ´emoire (pagination)
Gestion de la m ´emoire
Probl ´ematique de la r ´eallocation dynamique
comment positionner les processus en m ´emoire ? comment obtenir un bloc contig ¨ue pour un malloc
sans retasser ? d’exploitation Système
d’exploitation Système Processus A
Processus B Processus H
000 10K
100K
280K
900K
1M
Processus H
Processus A
Processus B 000
70K
270K
580K
900K
1M Retassement par réallocation dynamique
Mémoire après un temps de fonctionnement
(libre) (libre)
2 solutions possibles utilisant une translation d’adresse :
la segmentation la pagination
Gestion de la m ´emoire (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 `u il est effectivement en m ´emoire
0x08 0x00
0x10 0x18 0x20 0x28
addl (%ebx), %eax movl $0x32, %ebx
0x30
movl 0x30, %eax
07 00 00 00 0e 00 00 00 Processus
Mémoire Logique/Virtuelle @logique @physique
0x08 0x00
0x10 0x18 0x20 0x28 0x30
0x10 0x14 0x20
0x38 0x3C 0x04 0x0C 0x14 0x1C 0x24 0x2C 0x34 0x38
0x08 0x00
0x10 0x18 0x20 0x28
0x38 0x30
Processus A
Processus B movl 0x30, %eax movl $0x32, %ebx
0e 00 00 00 07 00 00 00 addl (%ebx), %eax Memoire Physique (RAM)
Processus B
0x3C 0x3F
Gestion de la m ´emoire (pagination)
La pagination : Principe
1 Translation d’adresse pour toute lecture/ecriture d’un code/donn ´ee (Exemple : Fetch de la premi `ere instruction du programme)
0x08 0x00
0x10
0x18
0x20
0x28
0x38
0x3F 0x30
0x3C
Processus A
Processus A Processus B
Processus B addl (%ebx), %eax movl 0x30, %eax movl $0x32, %ebx
0e 00 00 00 07 00 00 00
Memoire Physique (RAM)
PC EAX
ECX
0x18
@start_: 0x18
0x10
@physique
@logique
0x08 0x00
0x10
0x18
0x20
0x28
0x30 0x10 0x14 0x20
0x38 0x3C 0x04
0x0C
0x14
0x1C
0x24
0x2C
0x34 0x38 0x3C EBX 0x18
Gestion de la m ´emoire (pagination)
La pagination : Principe
1 Translation d’adresse pour toute lecture/ecriture d’un code/donn ´ee (Exemple : lecture d’un op ´erande)
0x08 0x00
0x10
0x18
0x20
0x28
0x30
Processus A
Processus A Processus B
Processus B addl (%ebx), %eax movl 0x30, %eax movl $0x32, %ebx Memoire Physique (RAM)
PC EAX
0x18
@physique
movl 0x30,%eax
@logique
0x08 0x00
0x10
0x18
0x20
0x28
0x30 0x10 0x14 0x20
0x38 0x3C 0x04
0x0C
0x14
0x1C
0x24
0x2C
0x34 0x38
0x30 0x38
Read EBX
Gestion de la m ´emoire (pagination)
La pagination
D ´eplacement de code/donn ´ee en m ´emoire physique
1 d ´eplacement et mise- `a-jour table
0x08 0x00
0x10
0x18
0x20
0x28
0x38 0x30
0x3C
Processus A
Processus A Processus B
Processus B addl (%ebx), %eax
0e 00 00 00 07 00 00 00
Memoire Physique (RAM)
PC EAX
Read
movl 0x30, %eax movl $0x32, %ebx
@physique
@logique
0x08 0x00
0x10
0x18
0x20
0x28
0x30 0x10 0x14 0x20
0x38 0x3C 0x04
0x0C
0x14
0x1C
0x24
0x2C
0x34 0x38 0x3C
0x08 0x0C EBX
Gestion de la m ´emoire (pagination)
La pagination
Avantage
programme utilise des @virtuelles contig ¨ues
↔ `a des adresses physiques non-contigu ¨e d ´eplacement en RAM du code/donn ´ees
= quelques ligne de la table `a updater.
Inconv ´eniant
la table de correspondance aussi grande que la m ´emoire physique RAM ! (si une adresse=32bits)
gestion lourde de la m ´emoire
Solution
D ´eplacement du code/donn ´ee par paquet de 2, 4, ou 2noctets Table de correspondance entre @logique et @physiquedu paquet
Gestion de la m ´emoire (pagination)
La pagination
Table de pages
blocs (ici de tailles 23octets) sont appell ´espages
0x08 0x00
0x10 0x18 0x20 0x28
0x38
addl (%ebx), %eax movl $0x32, %ebx
0x30
movl 0x30, %eax
07 00 00 00 0e 00 00 00
0x3C Processus
Mémoire Logique/Virtuelle Numéro de page
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 0
1 2 3 4 5 6 7
Page physique virtuelle Page
Table des pages
4 2
7
0x08 0x00
0x10 0x18 0x20 0x28
0x38 0x30
0x3C
Processus A
Processus B
Processus B movl 0x30, %eax movl $0x32, %ebx
0e 00 00 00 07 00 00 00
Numéro de page
addl (%ebx), %eax Memoire Physique (RAM)
Gestion de la m ´emoire (pagination)
La pagination : M ´emoire virtuelle
M ´emoire virtuelle
Possible de ne charger que le d ´ebut du programme si manque de place Un bit indique dans la table si la page est charg ´ee ou non
0 1 2 3 4 5 6 7 0x08
0x00
0x10 0x18 0x20 0x28
0x38
addl (%ebx), %eax movl $0x32, %ebx
0x30
movl 0x30, %eax
07 00 00 00 0e 00 00 00
0x3C Processus
Mémoire Logique/Virtuelle Numéro de page
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
Page physique virtuelle Page
Table des pages
2
7 1
1 0
0x08 0x00
0x10 0x18 0x20 0x28
0x38 0x30
0x3C
Processus A
Processus B movl 0x30, %eax movl $0x32, %ebx
0e 00 00 00 07 00 00 00
Numéro de page Memoire Physique (RAM)
Processus A
Processus A Processus B Processus B 1:page présente
0:page absente
Gestion de la m ´emoire (pagination)
La pagination : M ´emoire virtuelle
M ´emoire virtuelle : besoin de charger la suite ?
la page non charg ´ee mise temporairement sur une m ´emoire secondaire
0 1 2 3 4 5 6 addl (%ebx), %eax 7
(3) 0
1 2 3 4 5 6 7
0x08 0x00
0x10 0x18 0x20 0x28
0x38 0x30
0x3C
Processus A
Processus B movl 0x30, %eax movl $0x32, %ebx
0e 00 00 00 07 00 00 00
Numéro de page Memoire Physique (RAM)
Processus A
Processus A Processus B Processus B 1:page présente
0:page absente Page physique virtuelle Page
2
7 1
1 0 Table des pages
(Disque Dur) Memoire Secondaire
Gestion de la m ´emoire (pagination)
La pagination : M ´emoire virtuelle
M ´emoire virtuelle : besoin de charger la suite ?
un programme demon (kswapd sous linux) lib `ere des pages : si un programme requiert une page non charg ´ee (”d ´efaut de page”) si la m ´emoire est presque pleine (retire vieilles pages)
0 1 2 3 4 5 6
addl (%ebx), %eax (3) 7 0
1 2 3 4 5 6 7
0x08 0x00
0x10 0x18 0x20 0x28
0x38 0x30
0x3C
Processus A
movl 0x30, %eax movl $0x32, %ebx
0e 00 00 00 07 00 00 00
Numéro de page Memoire Physique (RAM)
Processus A
Processus A Processus B Processus B 1:page présente
0:page absente Page physique virtuelle Page
2
7 1
1 0 Table des pages
Processus B
Memoire Secondaire (Disque Dur)
Kswapd