noyau, shell, appel système - Moodle

publicité
Systèmes d’exploitation
Introduction: shell, noyau, syscalls
Guillaume Salagnac
Insa de Lyon – Informatique
2016–2017
IF-3-SYS: Systèmes d’Exploitation
Équipe pédagogique
• Guillaume Beslon, Florent de Dinechin, Stefan Duffner,
Lionel Morel, Mohammad Rmayti, Guillaume Salagnac
Objectifs
• Comprendre les «concepts clés» des systèmes d’exploitation
• quel est le problème ? pourquoi se pose-t-il ?
• quelle est la solution ? pourquoi ça marche ?
• Pratiquer leur usage
• TP de programmation C sous linux (6×2h)
• TD sur papier (2×2h)
Ressources
• http://moodle.insa-lyon.fr > Informatique > IF3
• transparents de cours ; sujets de TD et de TP
2/44
S
O
RT
e
Fre
Contiki
RIOT
Vous avez dit «Système d’exploitation» ?
Android s
Ub
un
tu
w ux
o
d Lin
n
i /
W U Linux
GNMacOS
Debian
X
iOS
User
Application
Operating System
OS
Tiny
Hardware
3/44
Quelques définitions
Utilisateur = l’humain devant la machine
• suivant le contexte: utilisateur final, ou
développeur
• interagit directement... avec le matériel !
Applications = les logiciels avec lesquels
veut interagir l’utilisateur final
Applications
Operating System
• messagerie, traitement de texte, lecteur de
musique, etc
Hardware
Matériel = la machine physique
Et donc: Operating System = tout le reste
• logiciel d’infrastructure: «noyau», «pilotes»,
User
«services», etc
• «entre le matériel et les applications»
4/44
Rôle de l’OS: les deux fonctions essentielles
et largement interdépendantes !
Machine virtuelle
• cacher la complexité sous une interface «plus jolie»
• fournir certains services de base aux applications
• IHM, stockage persistant, accès internet, gestion du temps
• permettre la portabilité des programmes
• faculté d’exécuter un même binaire sur des architectures
(plus ou moins) différentes
Gestionnaire de ressources
• partager chaque ressource entre les applications
• exploiter «au mieux» les ressources disponibles
• assurer la protection des applications (et du système)
5/44
Plan
1. Introduction: définition du terme «Système d’exploitation»
2. Interface entre OS et utilisateur: le shell
3. Interface entre logiciel et matériel: l’architecture
4. Isolation entre noyau et applications: les syscalls
5. Quelques syscalls UNIX incontournables
6/44
Interface entre OS et utilisateur: le shell
Les services offerts par un shell:
• exécution de programmes
• charger un programme en mémoire, le lancer, l’arrêter
• choisir quel programme est au premier-plan
• exploration et administration des espaces de stockage
• naviguer dans les fichiers, copier, supprimer
• confort et ergonomie
• presse-papiers, drag-and-drop, corbeille
• ...
7/44
Différents types de shell: l’interpréteur de commandes
Attention: terminal (ou émulateur de terminal) 6= shell !
Interface textuelle = Command-Line Interface = CLI
exemples: Bourne shell (1977), bash, zsh...
8/44
Différents types de shell: le bureau graphique
Interface graphique = Graphical User Interface = GUI
exemples: Gnome, bureau de Windows, Aqua (Mac OSX)...
9/44
et encore: l’écran d’accueil du smartphone
exemples: Android Launcher, Google Now, Facebook home...
10/44
Conclusion: le shell
différents types de shell: CLI vs GUI à souris vs GUI tactile
I fonctionnalités similaires
I pour l’OS: une «application» comme les autres !
votre OS contient volontiers des applications pré-installées...
• shell, navigateur web, explorateur de fichiers, messagerie,
lecteur multimedia, app store, etc
... et aussi plein de «programmes système»:
• développement: compilateur, assembleur, linker, etc
• sécurité: antivirus, pare-feu, sauvegarde
• maintenance: mise à jour OS, panneau de configuration
• services réseau: web, base de données, accès distant
Remarque:
dorénavant je vais appeler tous ces programmes des applications
11/44
Positionnement de l’OS
Application 1
Application 2
OS Kernel
Hardware
Définition: Noyau, ou en VO kernel
Le noyau c’est la partie de l’OS qui n’est pas une application
12/44
Plan
1. Introduction: définition du terme «Système d’exploitation»
2. Interface entre OS et utilisateur: le shell
3. Interface entre logiciel et matériel: l’architecture
4. Isolation entre noyau et applications: les syscalls
5. Quelques syscalls UNIX incontournables
13/44
Vous avez dit «une interface plus jolie» ?
et c’est vraiment cette formule qui est donnée dans les livres:
source: Tanenbaum. Modern Operating Systems (4th ed, 2014). page 5
14/44
L’architecture de von Neumann
CPU
memory
principe de fonctionnement: le cycle de Von Neumann
while True do:
charger une instruction depuis la «mémoire»
décoder ses bits: quelle opération, quelles opérandes, etc
exécuter l’opération et enregistrer le résultat
repeat
15/44
Architecture d’une machine typique
CPU1
CPU2
CPU3
System bus
main
memory
I/O bridge
I/O bus
USB bus
USB
controller
mouse keyboard
disk
controller
disk
network
adapter
network
L’architecture d’une machine est définie par:
• son jeu d’instructions: MSP430, x86, ARMv8...
• son organisation mémoire: addresse ↔ coupleur
• sa structure de bus: AMBA, PCIe, SATA, USB...
16/44
Zoom sur: le processeur
register file
ALU
/
FPU
PC
SR
...
cache
memory
bus interface
System bus
À l’intérieur d’un CPU, on trouve:
• des registres génériques interchangeables: R1..Rn
• des registres spécialisés uniques:
• Program Counter, Instruction Register, Status Register
• une unité de calcul: addition, soustraction...
• une interface mémoire connectée au monde extérieur
• et à une mémoire interne rapide: le cache
17/44
Le processeur: remarques
Cycle de von Neumann = fetch / decode / execute
• se déroule de part et d’autre du trait pointillé
• exécution d’une instruction = atomique (indivisible)
I pas d’état intermédiaire visible depuis l’extérieur
• fréquence d’horloge = cadence (maximum) de ce cycle
• vitesse de pointe 6= vitesse de croisière
Rôle du composant «bus interface»:
• communiquer avec les mémoires: cache, mem principale
• faire attendre le processeur lorsque nécessaire
• recevoir les requêtes d’interruption (mais on y reviendra)
• servir de MMU/TLB (on y reviendra mais un autre jour)
18/44
Zoom sur: les bus
Pourquoi une telle hiérarchie de bus ?
• compatibilité historique
• accumulation des standards
• différences de vitesse
• pb de la cohabitation
• distance à parcourir
• c ≈ 30cm / nanosec
I débit ≤ latence
• temps d’accès
• taille des messages
I communications asynchrones
• le CPU doit parfois attendre
l’arrivée d’une donnée (ou
d’une instruction)
19/44
La hiérarchie «mémoire»
Plus on s’éloigne, plus le temps d’accès augmente
×103
cache memory (SRAM)
main memory (DRAM)
t
bi
×103
CPU
registers
er
×106
te
la
×10
p
st
co
ce
ac
ss
y
nc
fast storage (SSD)
large storage (disk)
Compromis technologique: temps d’accès VS capacité VS coût
20/44
Zoom sur: les périphériques
ou en VO
périphérique
6= coupleur
6= pilote
device
6= device controller
6= device driver
Interaction logiciel I matériel
• instructions spéciales dédiées aux entrées-sorties
• port-mapped input/output = PMIO
• écriture «mémoire» aux adresses du coupleur
• memory-mapped input/output = MMIO
Interaction matériel I logiciel
• scrutation constante des registres du coupleur
• ou en VO polling
• inefficace à l’exécution, et compliqué à programmer
• interruption de l’exécution par les évènements extérieurs
• il faut le support ad hoc dans le processeur
• tous les processeurs ont ce mécanisme
21/44
Un processeur avec support des interruptions
Le cycle de Von Neumann avec support des interruptions
while True do:
charger une instruction depuis la mémoire
décoder ses bits: quelle opération, quelles opérandes, etc
exécuter l’opération et enregistrer le résultat
if interruption demandée then:
sauvegarder les registres du processeur: PC, SR, etc
déterminer l’adresse de la routine de traitement
sauter à la routine = charger cette adresse dans PC
endif
repeat
22/44
Mécanisme d’interruptions: déroulement
Programme
principal
requête
d’interruption
Routine de
traitement
d’interruption
sauvegarder
les registres
charger dans PC
l’adresse de début
de la routine
ISR: ...
...
...
...
...
RETI
restauration
des registres
instruction
”retour
d’interruption”
23/44
Mécanisme d’interruptions: vocabulaire
• IRQ = Interrupt Request
• un «message» envoyé au processeur
• ISR = Interrupt Service Routine
• un programme (= séquence d’instructions en mémoire)
• placé à une adresse «bien connue»
• termine toujours par une instruction RETI
• notion de masquage des interruptions
• interruptions masquées ⇔ le CPU ignore les IRQ
• nouvelles IRQ reçues sont mises en attente
• implémentation: drapeau (booléen) dans le registre d’état
• les IRQ sont automatiquement masquées pendant une ISR
• permet au programmeur d’être «seul au monde»
• instruction RETI démasque les interruptions
Définition: Noyau, ou en VO kernel
Le noyau c’est (seulement) l’ensemble des ISR de la machine
24/44
Différentes sources d’interruptions
• Minuteur système, ou en VO System Timer
• interruptions périodiques, typiquement 100Hz ou 1000Hz
• permet à l’OS de percevoir le passage du temps
• permet au noyau de reprendre la main sur les applications
• Périphériques d’entrées-sorties
• clavier, souris, disque, réseau, etc
• Pannes matérielles
• température excessive, coupure de courant, etc
• Évènements logiciels exceptionnels
• erreurs fatales: division par zéro, instruction invalide, etc
• trappes volontaires: (mais on y reviendra plus tard)
25/44
Plan
1. Introduction: définition du terme «Système d’exploitation»
2. Interface entre OS et utilisateur: le shell
3. Interface entre logiciel et matériel: l’architecture
4. Isolation entre noyau et applications: les syscalls
5. Quelques syscalls UNIX incontournables
26/44
Interruptions et jeu d’instructions
Pour intégrer les interruptions dans le cycle de von neumann,
on a été obligé d’ajouter des instructions spécifiques:
• RETI: retourner au programme interrompu
(x86: IRET)
• DINT: masquer (=désactiver) les interruptions
(x86: CLI)
• EINT: démasquer (=activer) les interruptions
(x86: STI)
Problème
Comment empêcher une application de faire des bêtises avec ?
exemple:
main: ...
...
DINT
loop: JMP loop
...
27/44
Solution: “dual-mode operation”
un processeur moderne offre deux modes d’exécution :
supervisor mode = ring 0 = master mode = kernel mode
• accès direct au matériel: machine réelle
• mode par défaut au démarrage de la machine
• nécessaire lorsqu’on exécute du code OS
VS
user mode = ring 3 = slave mode
• architecture restreinte: machine virtuelle
• certaines instructions interdites: EINT/DINT, RETI...
• utile pour exécuter sereinement du code applicatif
implémentation: un drapeau (booléen) dans le registre d’état
I ce bit de mode conditionne le comportement du CPU
bien sûr: changer ce drapeau est une instruction privilégiée !
28/44
user mode 6= userland
Les applications sont exécutées sur la «VM userland»:
• jeu d’instructions restreint (CPU en mode utilisateur)
• pas de mécanisme d’interruptions
• accès interdit à certaines adresses
• ex: code et données du noyau, périphériques matériels
• implémentation: dans le composant «Bus interface»
(c’est magique pour l’instant mais on y reviendra)
Sandboxing: une instance de cette VM par application
• CPU virtuel, mémoire virtuelle
• périphériques: accessibles seulement au travers de l’OS
I c’est la notion de processus (ou en VO process)
Système d’exploitation = illustioniste (VM) + sous-traitant (HW)
29/44
Changement de mode d’exécution: interruptions
Problème: les ISR ont besoin de pouvoir accéder au matériel
Solution: le processeur change de mode lors du saut
Le cycle de Von Neumann, le retour
while True do:
fetch, decode, execute
if (IRQ reçue) and (interruptions non masquées) then:
sauvegarder les registres
déterminer l’adresse de l’ISR
passer en mode superviseur
sauter à la routine = charger cette adresse dans PC
endif
repeat
Remarque: RETI repasse le processeur en mode utilisateur
30/44
Changement de mode d’exécution: trappes
Problème: comment une application peut-elle invoquer une
méthode du noyau ?
Mauvaise solution: autoriser les applications à sauter vers les
fonctions situées dans le noyau
• destination arbitraire = failles de sécurité
• passage en mode superviseur: quand ? comment ?
Solution: se donner une instruction spécialisée pour cet usage
• noms variés: TRAP (68k), SYSENTER (x86), SVC (ARM)
• interruption logicielle = trappe = exception
• fonctionnement: similaire aux autres types d’interruption
• sauvegarde du contexte CPU
• bascule en mode superviseur
• branchement à une adresse bien connue, dans le noyau
31/44
Appel système: principe
Appel système, ou en VO system call = syscall
(Unique) interface avec le noyau pour les programmes userland
Côté utilisateur:
• l’appel est invoqué avec une instruction TRAP
• indifférent au langage de programmation utilisé
• encapsulation dans des fonctions de bibliothèque (ex: libc)
Côté noyau:
• on passe à chaque fois par l’ISR de TRAP
• qui appelle la bonne fonction dans le noyau,
• puis qui rend la main à l’application avec RETI
Exemples:
• read(), write(), fork(), gettimeofday()...
• plusieurs centaines en tout sous Linux
32/44
Appel système: déroulement
Application
Bibliothèque C
”syscall
printf("hello world") wrapper”
”syscall
interface”
write(1,"hello world",11)
TRAP
emballage des
arguments et du
numéro de syscall
Noyau
”syscall
dispatcher”
déballage des arguments
décodage du numéro de syscall
réemballage des arguments
ISR TRAP: appel de la bonne procédure
...
...
...
sys write(1,"hello world",11)
”syscall
implementation”
RET
RETI
RET
RET
33/44
Une courte page de publicité: ltrace et strace
à faire chez vous:
hello.c
#include <stdio.h>
void main()
{
printf("hello linux world !\n");
}
• gcc -o ./hello ./hello.c
• ltrace ./hello
• strace ./hello
et ensuite: man ltrace et man strace
34/44
Positionnement de l’OS
Application 1
Application 2
VM1
VM2
OS Kernel
Architecture
Hardware
• chaque application qui s’exécute est un processus userland
• le noyau virtualise et arbitre les accès au matériel
35/44
Plan
1. Introduction: définition du terme «Système d’exploitation»
2. Interface entre OS et utilisateur: le shell
3. Interface entre logiciel et matériel: l’architecture
4. Isolation entre noyau et applications: les syscalls
5. Quelques syscalls UNIX incontournables
36/44
Appels système: exemples
source: Silberschatz. Operating Systems Concepts Essentials (2011). p 59
37/44
Une fonction qui cache un syscall: gettimeofday()
38/44
Appels système: Remarques
system call 6= library call
• un même nom de fonction peut avoir des implémentations
différentes sur différentes plates-formes
• Windows vs Linux vs OSX vs etc
RTFM: man gettimeofday = man 2 gettimeofday
Sections des pages de manuel:
1
commandes shell
2
appels système
3
fonctions de bibliothèque
4
fichiers spéciaux et drivers
... etc
39/44
Une fonction qui cache un syscall: exit()
40/44
Une fonction qui cache un appel système: fork()
41/44
Appel système fork: remarques
Unique interface permettant de créer un processus Unix
• duplique le processus appelant
Paradigme «Call once, return twice»
• dans le nouveau processus fork() retourne 0
• dans le processus appelant fork() retourne le pid du fils
42/44
Plan
1. Introduction: définition du terme «Système d’exploitation»
2. Interface entre OS et utilisateur: le shell
3. Interface entre logiciel et matériel: l’architecture
4. Isolation entre noyau et applications: les syscalls
5. Quelques syscalls UNIX incontournables
43/44
À retenir
Architecture
• cycle de Von Neumann avec interruptions
• dual-mode operation: supervisor mode vs slave mode
• instruction TRAP pour lever une interruption
Noyau
• l’ensemble des routines de traitement d’interruption (ISR)
• y compris le syscall dispatcher
Userland
• «machine virtuelle» offerte aux applications
• vue simplifiée et restreinte de l’architecture
Appels système
• interface entre les applications et le noyau
• accessibles via des fonctions de bibliothèque
OS = noyau + bibliothèques + programmes système
44/44
Téléchargement