X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=prog_internet%2Fprog_internet_02.xhtml;fp=prog_internet%2Fprog_internet_02.xhtml;h=33002195e40b64578ef6145326a7fb8b9ce235a3;hb=7cce5c3a37a866072108aedf85ee3b06272dac81;hp=0000000000000000000000000000000000000000;hpb=9262e1c26fe53f5c68167eadbda074c5ddbb2658;p=hacks%2FsimpleWebSlides.git diff --git a/prog_internet/prog_internet_02.xhtml b/prog_internet/prog_internet_02.xhtml new file mode 100644 index 0000000..3300219 --- /dev/null +++ b/prog_internet/prog_internet_02.xhtml @@ -0,0 +1,1119 @@ + + + + + Programmation Internet + + + + + + + + + + + + + + + + + + + + +
+

Programmation Internet

+

Cours 2

+ kn@lri.fr
+ http://www.lri.fr/~kn +
+ +
+

Plan

+
    +
  1. Systèmes d'exploitation +
      +
    • 1.1 Principes des systèmes + d'exploitation ✔
    • +
    • 1.2 Système de gestion de fichiers ✔
    • +
    • 1.3 Système de gestion de processus
    • +
    +
  2. +
+
+ +
+

Définitions

+ + + + + + + + + + + + + + + +
Programme séquences d'instructions effectuant + une tâche sur un ordinateur
Exécutable fichier binaire contenant des + instructions machines interprétables par le + microprocesseur
Thread plus petite unité de traitement (≡ + séquence d'instructions) pouvant être ordonnancée par + l'OS +
Processus instance d'un programme (≡ « un + programme en cours d'exécution »). Un processus est constitué + de un ou plusieurs threads.
+
+ +
+

Exemple: programme

+

Dans un fichier « counter.c » + (attention c'est du pseudo + C)

+
+ int count = 0; + int exit = 0; + void display() { + while (exit == 0) { + sleep (3); + printf("%i\n", count); + } + } + void listen() { + while (exit == 0) { + wait_connect(80); + count++; + } + } +
+ void main () { + run_function(display); + run_function(listen); + while (getc () != '\n') { }; + exit = 1; + return; + } +
+
+
+

Exemple: programme

+

Compilation
+ + gcc -o counter.exe counter.c +
+ Le fichier « counter.exe » est un + exécutable (fichier binaire contenant du code machine)
+ + ./counter.exe ← il faut la permission +x sur le fichier + +
+ Le contenu de l'exécutable est copié en mémoire et le processeur + commence à exécuter la première instruction du programme. +

+
+
+

Exemple: threads

+
    +
  1. main
  2. +
  3. attente d'un évènement clavier + →←changement de thread +
  4. +
  5. listen
  6. +
  7. attente de connexion →←changement de thread +
  8. +
  9. display (affiche + 0 à l'écran)
  10. +
  11. attente pendant 3s → (les + 3 threads attendent un évènement externe)
    + nouvelle connexion sur le port 80 ← + réveil du thread listen +
  12. +
  13. listen + (incrémente count)
    + attente de connexion →
    + … fin des 3s
    + ← + réveil du thread display +
  14. +
  15. display (affiche + 1 à l'écran)
  16. +
+

Les threads partagent leur mémoire (variables communes)

+
+
+

Exemple: processus

+

(différence: les processus + ne partagent pas leur espace mémoire)

+
    +
  1. Exécution de counter.exe pendant 50㎲ +
  2. +
  3. Exécution + de firefox.exe + pendant 50㎲
  4. +
  5. Exécution du processus qui dessine le bureau pendant 50 + ㎲
    …
  6. + +
+

C'est le gestionnaire de processus qui décide quel + programme a la main et pour combien de temps (priorité aux + tâches critiques par exemple)
+ Le système d'exploitation stocke pour chaque processus un + ensemble d'informations, le PCB (Process Control Block). +

+
+
+

Proccess Control Block

+

Le PCB contient:

+ +
+
+

Opérations sur les processus

+ +
+
+

États d'un processus

+

Un processus change d'état au cours de son exécution

+ + + + + + +
Nouveau le processus est en cours de création
Exécution le processus s'exécute
En attente le processus attend un évènement + particulier (saisie au clavier, écriture sur le disque, + …)
Prêt le processus est prêt à reprendre son + exécution et attend que l'OS lui rende la main
terminé le processus a fini son exécution
+
+
+

États d'un processus

+

L'OS détermine et modifie l'état d'un processus:

+ +
+
+

États d'un processus

+ + + + + + + + + Nouveau + Prêt + En exécution + En attente + + + + + + + + + + Terminé + + + + + mise en routepar l'ordonnanceur + interruptionpar l'ordonnanceur + attente E/Sinterruption + fin E/Sint. traitée… + terminaisonnormale + terminaisonanormale + + + +
+
+

La commande ps

+

Permet d'avoir des informations sur les processus en cours + d'exécution (voir « man ps » pour les + options):
+ $ ps -o user,pid,state,cmd x + USER PID S CMD + … + kim 27030 Z [chrome] <defunct> + kim 27072 S /opt/google/chrome/chrome --type=renderer + kim 29146 S bash + kim 29834 S evince + kim 29858 S emacs cours.xhtml + kim 29869 R ps -o user,pid,state,cmd x +
+

+ +
+
+

États des processus (sous Linux)

+ + + + + + +
R Running (en cours d'exécution)
S Interruptible sleep (en attente, + interruptible)
D Uninterruptible sleep (en attente, + non-interruptible)
T Stopped (interrompu)
Z Zombie (terminé mais toujours + listé par le système)
+
+ +
+

Signaux

+

L'OS peut envoyer des signaux à un processus. Sur réception + d'un signal, un processus peut interrompre son comportement normal + et exécuter son gestionnaire de signal. Quelques signaux: +

+ + + + + + + + + +
Nom Code Description
HUP 1 demande au processus de + s'interrompre
INT 2 demande au processus de se + terminer
ABRT 2 interrompt le processus et produit + un dump
KILL 9 interrompt le processus immédiatement +
SEGV 11 signale au processus une erreur mémoire +
STOP 24 suspend l'exécution du processus +
CONT 28 reprend l'exécution d'un processus suspendu +
+
+
+

Processus et terminal

+

Un processus est lié au terminal dans lequel il est + lancé. Si on exécute un programme dans un terminal et que le + processus ne rend pas la main, le terminal est bloqué + + + $ gedit + + + On peut envoyer au processus le signal STOP en + tapant ctrl-Z dans le terminal: + + + $ gedit + ^Z + [1]+ Stopped gedit + + + Le processus est suspendu, la fenêtre est gelée (ne répond plus). +

+
+
+

Processus et terminal

+

On peut reprendre l'exécution du programme de deux + manières:
+ $ fg
+ Reprend l'exécution du processus et le remet en avant plan (terminal + bloqué)

+ $ bg
+ Reprend l'exécution du processus et le remet en arrière plan (terminal +libre)

+ On peut lancer un programme + directement en arrière plan en faisant:
+ $ gedit &
+ On peut envoyer un signal à un + processus avec la commande « kill [-signal] pid Â»
+ $ kill -9 2345
+

+
+
+

Processus et entrées/sorties

+

Le terminal et le processus sont liés par trois fichiers + spéciaux:

+
    +
  1. L'entrée standard (stdin), reliée + au clavier
  2. +
  3. La sortie standard (stdout), reliée + à l'affichage
  4. +
  5. La sortie d'erreur (stderr), reliée + à l'affichage
  6. +
+

Dans le shell, on peut utiliser les + opérateurs <, > + et 2> pour récupérer le contenu + de stdin, stdout + et stderr:
+ +$ sort < toto.txt +$ ls -l > liste_fichiers.txt +$ ls -l * 2> erreurs.txt + +

+
+
+

Processus et entrées/sorties

+

Dans le shell, l'opérateur | permet + d'enchaîner la sortie d'un programme avec l'entrée d'un + autre:
+ $ ls -l *.txt | sort -n -r -k 5 | head -n 1 +

+
    +
  1. affiche la liste détaillée des + fichiers textes
  2. +
  3. trie (et affiche) l'entrée standard par ordre + numérique décroissant selon le 5ème champ
  4. +
  5. affiche la première ligne de + l'entrée standard
  6. +
+
+ -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt + -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt + -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt + -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt + -rw-rw-r 1 kim kim 471 Sep 14 16:25 bd.txt + -rw-rw-r 1 kim kim 234 Sep 15 17:46 foo.txt + + -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt + +
+ +
+
+

Processus de type daemon

+

+ Un daemon (prononcé démon) est un processus + qui non-interactif qui tourne en tâche de fond (pas + d'entrée/sortie sur le terminal, pas d'interface graphique, …). On + communique avec ce processus via des signaux ou en lisant + ou écrivant dans des fichiers ou connexions réseau. Le plus souvent, + leur but est de fournir un service +

+

Exemple de scénario: « Les utilisateurs doivent interagir avec + le matériel. L'accès au matériel demande des droits + administrateur. » +

+ +
+
+

Quelques daemons sous Linux

+ + + + + + + + + + +
Nom Description
sshd shell distant sécurisé
crond exécution périodique de programmes
cupsd serveur d'impressions
pulseaudio serveur de son (mixe les sons des + différentes applications)
udevd détection de matériel hotplug
nfsd serveur de fichier réseau
smtpd livraison des e-mail
httpd serveur de pages Web
+
+
+

Architecture client-serveur

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Client + + + + + Serveur + + + + + + + + + Client + + + + + + + + + + + + + + Client + + + + + + Client + + + + + + + + + + Client + + + + + + Client + + + + + + + + + + + + + +

+

+ Des processus clients communiquent + avec le serveur à travers le + réseau. Les clients sont indépendant et ne communiquent pas entre + eux. Attention plusieurs clients peuvent se trouver su la + même machine physique! +

+
+
+

Architecture client-serveur

+ +

Exemples: serveur de bases de données, serveur mail, serveur Web, + terminal de carte bancaire, …

+
+ +