Dans un fichier «counter.c» (attention c'est du pseudo C) int count = 0; int exit = 0;



Documents pareils
Cours Programmation Système

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

Le système GNU/Linux IUP NTIC /11/05

Introduction aux Systèmes et aux Réseaux

3IS - Système d'exploitation linux - Programmation système

Environnements informatiques

Projet Administration Réseaux

TP1 - Prise en main de l environnement Unix.

Formation Technicien Supérieur de Support en Informatique T2SI. Le module LINUX. Session J04 Version 01

Concept de machine virtuelle

«Astrophysique et instrumentations associées» Cours UNIX Benoît Semelin

Unix/Linux I. 1 ere année DUT. Université marne la vallée

INTRODUCTION A JAVA. Fichier en langage machine Exécutable


Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Outils pour la pratique


VD Négoce. Description de l'installation, et procédures d'intervention

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Guide d'installation. Release Management pour Visual Studio 2013

Télécom Nancy Année

Programmation système I Les entrées/sorties

Cours de Systèmes d Exploitation

Programmation système en C/C++

Initiation à la programmation en Python

et Groupe Eyrolles, 2006, ISBN :

Commandes Linux. Gestion des fichiers et des répertoires. Gestion des droits. Gestion des imprimantes. Formation Use-IT

Table des matières Hakim Benameurlaine 1

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

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Service Informatique et Télématique (SITEL), Emile-Argand 11, 2009 Neuchâtel, Tél ,

Titre: Version: Dernière modification: Auteur: Statut: Licence:

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

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

Service Déposant: Procédure d installation. Page 1. Service déposant. Procédure d installation Version 2.3

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

CH.3 SYSTÈMES D'EXPLOITATION

Premiers pas en Linux

Qu'est-ce qu'un processus: Définitions

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Pour valider les pré-requis nécessaires, avant d'aborder le TP, répondez aux questions ciaprès

Chapitre 4 : Outils de communication centralisés entre processus

Installation du client Cisco VPN 5 (Windows)

Introduction au langage C

Guide d utilisation. Table des matières. Mutualisé : guide utilisation FileZilla

Installation du client Cisco VPN 5 (Windows)

Installation du client Cisco VPN 5 (Windows)

Algorithmique et Programmation, IMA

IFT Systèmes d exploitation - TP n 1-20%

Aide-Mémoire unix. 9 février 2009

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Systèmes d exploitation Gestion de processus

ésylog, direction technique Esylog_PeerBackup outil de sauvegarde individuelle mails & fichiers personnels documentation technique

Exercice sur les Dockers

Bon ben voilà c est fait!

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Systèmes d exploitation

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

ACTIVITÉ DE PROGRAMMATION

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Shell Bash Niveau débutant

Préconisations Techniques & Installation de Gestimum ERP

L informatique en BCPST

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Onglet sécurité de Windows XP Pro et XP Home

SQL Server 2012 Administrez une base de données : Exercices et corrigés

Licence Sciences et Technologies Examen janvier 2010

Direction des Systèmes d'information

MODULE I1. Plan. Introduction. Introduction. Historique. Historique avant R&T 1ère année. Sylvain MERCHEZ

Serveur de sauvegardes incrémental

PHP 5.4 Développez un site web dynamique et interactif

Introduction au Système d Exploitation Unix/Linux

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

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

TUTORIEL: INSTALLATION D'UN SERVEUR LOCAL SOUS WINDOWS 7 POUR APPINVENTOR version du 06/04/2013

Année Cours Unix-Shell. par. Karam ALLALI. Ecole Spéciale d Informatique

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Java Licence Professionnelle CISII,

Guide d'installation de la base de données ORACLE 10g ( ) pour linux FEDORA CORE 4.

Le meilleur de l'open source dans votre cyber cafe

Introduction à Windows Script Host DescoDev

Programmation Internet Cours 4

Programmation C++ (débutant)/instructions for, while et do...while

INFO-F-309 Administration des Systèmes. TP7: NFS et NIS. Sébastien Collette Résumé

TAI049 Utiliser la virtualisation en assistance et en dépannage informatique TABLE DES MATIERES

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Résolution des problèmes de connexion XDMCP aux hôtes UNIX et Linux

Conventions d écriture et outils de mise au point

//////////////////////////////////////////////////////////////////// Administration bases de données

Les processus 2/54. Qu est-ce qu un processus? 3(6)/54. Se souvenir 1(1)/54. Le système de fichiers (exemple du disque dur)

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

La Comptabilité UNIX System V Acctcom

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

TP LINUX : MISE EN RÉSEAU D UN SERVEUR LINUX

TP 1 Prise en main de l environnement Unix

2011 Hakim Benameurlaine 1

Transcription:

Plan Unix et Programmation Web Cours 2 kn@lri.fr http://www.lri.fr/~kn 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 2.1 Gestion des processus 2.2 Écriture de script shell 2.3 Programmes non interactifs 2/37 Définitions Exemple: programme Dans un fichier «counter.c» (attention c'est du pseu C) 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 : Processus : plus petite unité de traitement ( séquence d'instructions) pouvant être ornnancée par le système d'exploitation. instance d'un programme ( «un programme en cours d'exécution»). Un processus est constitué de un ou plusieurs threads. 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; } 3/37 4/37

Compilation Exemple: programme 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. attente d'un évènement clavier changement de thread 3. listen 4. attente de connexion changement de thread 5. display (affiche 0 à l'écran) 6. attente pendant 3s (les 3 threads attendent un évènement externe) nouvelle connexion sur le port 80 réveil du thread listen 7. listen (incrémente count) attente de connexion fin des 3s réveil du thread display 8. display (affiche 1 à l'écran) Les threads partagent leur mémoire (variables communes) 5/37 6/37 Exemple: processus Proccess Control Block (différence: les processus ne partagent pas leur espace mémoire) 1. Exécution de counter.exe pendant 50μs 2. Exécution de firefox.exe pendant 50μs 3. Exécution du processus qui dessine le bureau pendant 50 μs 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). Le PCB contient: l'identificateur du processus (pid) l'état du processus (en attente, en exécution, bloqué, ) le compteur d'instructions (i.e. où on en est dans le programme) le contexte courant (état des registres, ) position dans la file d'attente de priorité globale informations mémoire (zones allouées, zones accessibles, zones partagées) listes des fichiers ouverts (en lecture, en écriture), liste des connexions ouvertes, 7/37 8/37

Opérations sur les processus États d'un processus Un processus change d'état au cours de son exécution création et destruction de processus suspension et reprise duplication (fork) modification de la priorité modification des permissions Nouveau : Exécution : En attente : Prêt : terminé : le processus est en cours de création le processus s'exécute le processus attend un évènement particulier (saisie au clavier, écriture sur le disque, ) le processus est prêt à reprendre son exécution et attend que l'os lui rende la main le processus a fini son exécution 9/37 10/37 États d'un processus États d'un processus L'OS détermine et modifie l'état d'un processus: En fonction d'évènements internes au processus: lecture d'un fichier (si le contenu n'est pas disponible, le processus passe de «prêt» à «en attente») le processus attends volontairement pendant x secondes En fonction d'évènements externes au processus: un fichier devient disponible un timer arrive à 0 le matériel déclenche une interruption Nouveau Prêt mise en route par l'ornnanceur interruption par l'ornnanceur fin E/S int. traitée terminaison anormale En attente En exécution attente E/S interruption terminaison normale Terminé 11/37 12/37

La commande ps États des processus (sous Linux) 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 R : S : D : T : Z : Running (en cours d'exécution) Interruptible sleep (en attente, interruptible) Uninterruptible sleep (en attente, non-interruptible) Stopped (interrompu) Zombie (terminé mais toujours listé par le système) 13/37 14/37 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). 15/37 16/37

Processus et terminal Processus et entrées/sorties 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 & Le terminal et le processus sont liés par trois fichiers spéciaux: 1. L'entrée standard (stdin), reliée au clavier 2. La sortie standard (stut), reliée à l'affichage 3. La sortie d'erreur (stderr), reliée à l'affichage Dans le shell, on peut utiliser les opérateurs <, > et 2> pour récupérer le contenu de stdin, stut et stderr: On peut envoyer un signal à un processus avec la commande «kill pid» $ kill -9 2345 [-signal] $ sort < toto.txt $ ls -l > liste_fichiers.txt $ ls -l * 2> erreurs.txt 17/37 18/37 Processus et entrées/sorties Plan 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. trie (et affiche) l'entrée standard par ordre numérique décroissant selon le 5ème champ 3. affiche la première ligne de l'entrée standard 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 2.1 Gestion des processus 2.2 Écriture de script shell 2.3 Programmes non interactifs -rw-rw-r 1 kim kim 1048576 Sep 24 09:20 large.txt 19/37 20/37

Script shell Mentalité Unix beaucoup de petits programmes spécifiques, que l'on combine au moyen de scripts pour réaliser des actions complexes. Exemple de fichier script: Rendre un script exécutable #!/bin/bash for i in img_*.jpg base=$(echo "$i" cut -f 2- -d '_') nouveau=photo_"$base" if test -f "$nouveau" then echo "Attention, le fichier $nouveau existe déjà" continue Si un fichier texte (quel que soit son extension), commence par les caractères #!/chemin/vers/un/programme, on peut rendre ce fichier exécutable (chmod +x). Si on l'exécute, le contenu du fichier est passé comme argument à programme (qui est généralement un interpréteur) #!/bin/bash signifie que le corps du fichier est passé au programme bash qui est l'interprète de commande (le shell). else echo "Renommage de $i en $nouveau" mv "$i" "$nouveau" fi ne 21/37 22/37 Que mettre dans un script Définitions de variables On peut définir des variables au moyen de la notation VARIABLE=contenu et on peut utiliser la variable avec la notation $VARIABLE des commandes (comme si on les entrait dans le terminal) des structures de contrôle (boucles for, if then else) des définitions de variables Attention, pas d'espace autour du = nom de variable en majuscule ou minuscule contenu est une chaine de caractères. Si elle contient des espaces, utiliser "... " exemple de définition : i=123 j="ma super chaine" TOTO=titi echo $TOTO exemple d'utilisation: echo $j $i $TOTO affiche «Ma super chaine 123 titi» 23/37 24/37

Boucles for Conditionnelle Les boucles for ont la syntaxe: for VARIABLE in elem 1... elem n... ne chaque elem i est expansé (comme une ligne de commande) avant l'évaluation de la boucle: for i in *.txt echo $i est un fichier texte ne On peut quitter une boucle prématurément en utilisant break et passer directement au tour suivant avec continue La syntaxe est : if commande then else fi...... commande est évaluée. Si elle se termine avec succès, la branche then est prise. Si elle se termine avec un code d'erreur, la branche else est prise. On peut utiliser la commande test qui permet de tester plusieurs conditions (existance d'un fichier, égalités de deux nombres,...) et se termine par un succès si le teste est vrai et par un code d'erreur dans le cas contraire Conditionnelle (exemple) 25/37 Sous-commandes et chaines Il est pratique de pouvoir mettre l'affichage d'une commande dans une variable. On utilise $( commande... ): 26/37 MESFICHIER=$(ls *.txt) On regarde tour à tour si fichier1.txt, fichier2.txt,... existent : for i in 1 2 3 4 5 6 if test -f "fichier$i".txt then for i in $MESFICHIER echo Fichier: $i ne Attention à la présence de guillemets autour des variables. S'il y a f1.txt et f2.txt dans le répertoire courant: fi ne echo le fichier "fichier$i".txt existe MESFICHIER=$(ls *.txt) for i in $MESFICHIER echo Fichier: $i ne affiche: Fichier: f1.txt Fichier: f2.txt MESFICHIER=$(ls *.txt) for i in "$MESFICHIER" echo Fichier: $i ne affiche: Fichier: f1.txt f2.txt 27/37 28/37

Expressions arithmétiques Variables spéciales On peut effectuer des calculs arithmétiques au moyen de : $(( expression )) Par exemple : echo $(( 1 + 2 + 9 + 10 + 20)) affiche 42 sur la sortie standard. Il est possible d'utiliser les opérations +, -, *, / et % sur les entiers. Les entiers sont signés et leur taille dépend de l'architecture de la machine (32 ou 64 bits). On peut bien-sûr réutiliser des variables dans les expressions. X=3 Y=4 Z=$(( $X + $Y )) echo $(( $Z * 2 )) affiche 14 sur la sortie standard. Certaines variables sont prédéfinies par le shell : $1, $2,, $n : valeur du n ième argument du script courant $? : code de retour de la dernière commande (0 si succès, n > 0 en cas d'échec) $HOME : répertoire utilisateur de l'utilisateur courant $PWD : répertoire courant dans lequel s'exécute le script $USER : login de l'utilisateur courant $SHELL : chemin vers le shell courant $PATH : liste des répertoires dans lesquels sont cherchés les exécutables Portée des variables 29/37 Commandes utiles 30/37 Une variable non-définie est automatiquent remplacée par la chaîne de caractères vide sans provoquer d'erreur. Un script hérite d'une copie de toutes les variables du shell dans lequel il est lancé. Une variable définie dans un script ne survit pas à ce dernier La directive export permet de définir des variables qui survivent à un script ou de modifier des variables du shell depuis un script. seq m n : affiche la liste de tous les nombres entre m n echo... affiche ses arguments sur la sortie standard printf "chaine"... affiche ses arguments au moyen d'une chaine de format (comme le printf de C) date : affiche la date courante cut : découpe une chaine selon des caractères de séparations ou des positions 31/37 32/37

Plan Processus de type daemon 1 Systèmes d'exploitation (1/2) 2 Systèmes d'exploitation (2/2) 2.1 Gestion des processus 2.2 Écriture de script shell 2.3 Programmes non interactifs 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 ivent interagir avec le matériel. L'accès au matériel demande des droits administrateur.» Solution 1 : tout le monde est administrateur (DOS, Win XP, ) Solution 2 : on crée un programme particulier qui a les privilèges suffisants pour la tâche en question. Les utilisateurs communiquent avec ce programme 33/37 34/37 Quelques daemons sous Linux Architecture client-serveur Client Client Nom sshd crond cupsd pulseaudio udevd nfsd smtpd httpd Description shell distant sécurisé exécution périodique de programmes serveur d'impressions serveur de son (mixe les sons des différentes applications) détection de matériel hotplug serveur de fichier réseau livraison des e-mail serveur de pages Web Client Serveur 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! 35/37 36/37

Architecture client-serveur Le serveur attend des connexions entrantes Les clients peuvent se connecter à tout moment L'application client est généralement légère, envoie une requête au serveur et attend un résultat Le serveur est une application plus lourde qui: effectue des calculs trop coûteux pour le client gère l'accès à une ressource distante partagée Exemples: serveur de bases de nnées, serveur mail, serveur Web, terminal de carte bancaire, 37/37