Partie 1 : Processus et Thread Exercice 1 :

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

Cours Programmation Système

Programmation système en C/C++

Les processus. Système L3, /39

Cours 6 : Tubes anonymes et nommés

Le langage C. Séance n 4

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

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

Introduction au langage C

Introduction aux Systèmes et aux Réseaux

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


Algorithmique et Programmation, IMA

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Programmation système de commandes en C

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Le prototype de la fonction main()

LEs processus coopèrent souvent pour traiter un même problème. Ces

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

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

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

Simulation d un système de paiement par carte bancaire

Programmation système

Playing with ptrace() for fun and profit

Le système de gestion des fichiers, les entrées/sorties.

Derrière toi Une machine virtuelle!

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Bases de programmation. Cours 5. Structurer les données

Programmation système I Les entrées/sorties

Les processus légers : threads. Système L3, /31

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

as Architecture des Systèmes d Information

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Introduction à la Programmation Parallèle: MPI

Programme Compte bancaire (code)

Cours de Système : Gestion de Fichiers

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Les chaînes de caractères

Communication Interprocessus

GESTION DES FICHIERS C/UNIX

Introduction à la programmation concurrente

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Architecture d un système d exploitation

Les fichiers. Chapitre 4

Chapitre 4 : Outils de communication centralisés entre processus

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Lier Erlang avec d autres langages de programmation

Programmation impérative

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

TP2 : tableaux dynamiques et listes chaînées

Conventions d écriture et outils de mise au point

Java Licence Professionnelle CISII,

I. Introduction aux fonctions : les fonctions standards

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Outils pour la pratique

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Chapitre 1 : La gestion dynamique de la mémoire

Premiers Pas en Programmation Objet : les Classes et les Objets

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

SUPPORT DE COURS. Langage C

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Unix : Programmation Système

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

INITIATION A LA PROGRAMMATION

Exercice sur les Dockers

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Problèmes liés à la concurrence

Travaux Dirigés n 1 : chaînes de caractères

Gestion des processus

Cours d initiation à la programmation en C++ Johann Cuenin

OS Réseaux et Programmation Système - C5

LE LANGAGE C++ ENAC 1997 A. DANCEL

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Programmation Classique en langage C

Une introduction à Java

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Exercices INF5171 : série #3 (Automne 2012)

I00 Éléments d architecture

Initiation. àl algorithmique et à la programmation. en C

ENSP Strasbourg (Edition ) Les Systèmes Temps Réels - Ch. DOIGNON. Chapitre 3. Mise en œuvre : signaux, gestion du temps et multi-activités

Compression de Données - Algorithme de Huffman Document de Conception

INFO-F-404 : Techniques avancées de systèmes d exploitation

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Introduction à C++ et à wxwidgets

Cours de C. Allocation dynamique. Sébastien Paumier

Arguments d un programme

Programmation C. J.-F. Lalande. 15 novembre 2012

Les structures. Chapitre 3

INTRODUCTION À LA PROGRAMMATION CONCURRENTE

Les débordements de tampons et les vulnérabilités de chaîne de format 1

Transcription:

INF3600+INF2610 Automne2006 Partie 1 : Processus et Thread Exercice 1 : 1) Quel est le rôle d un système d exploitation? Les interpréteurs de commandes et les compilateurs font-ils parties du système d exploitation? 2) Qu est ce qu un système multiprogrammé? Un système de traitement par lots? Un système en temps partagé? 3) Dans le système UNIX, les véritables appels système sont effectués à partir : - d un programme utilisateur - d une commande shell - d une procédure de la bibliothèque standard Sont-ils exécutés en mode superviseur ou en mode utilisateur? 4) Comment sont organisés les fichiers dans le système UNIX? Un utilisateur peut-il accéder à un fichier d un autre utilisateur? Si oui, comment? 5) Dans le système UNIX, est-ce que tout processus a un père? Que se passe-t-il lorsqu un processus devient orphelin (mort de son père)? Quand est-ce un processus passe à l état Zambie? 6) Pour lancer en parallèle plusieurs traitements d une même application, vous avez le choix entre les appels système fork( ) et pthread_create( ). Laquelle des deux possibilités choisir? pourquoi? 7) Citez quatre événements qui provoquent l interruption de l exécution d un processus en cours, dans le système UNIX. 8) Quel est le rôle de l ordonnanceur? Décrire brièvement l ordonnanceur du système UNIX? Favorise-t-il les processus interactifs? 9) Pourquoi le partage de données pose des problèmes dans un système multiprogrammé en temps partagé? Le système UNIX permet-il de contrôler les accès aux données partagées? Qu est-ce qu une section critique? 1

Exercice 2 : Que fait chacun des programmes suivants : 1) int main( ) int p=1 ; while(p>0) p=fork() ; execlp( prog, prog, NULL) ; 2) int i=2 ; j=10; int p ; while(i-- && p = fork()) if(p<0) exit(1) ; j += 2; if (p == 0) i *= 3; j *= 3; i *= 2; j *= 2; printf(«i=%d, j=%d», i,j) ; 3) #include <stdio.h> int fd[2], i=2; char ch[100]; while (i) pipe(fd); if( fork()) close(fd[0]); dup2(fd[1],1); close(fd[1]); break; close(fd[1]); 2

4) 5) i--; scanf("%s", ch); printf("%s\n",ch); exit(0); dup2(fd[0],0); close(fd[0]); int i=4, j=10; int p ; p = fork(); if(p<0) exit(1) ; j += 2; if (p == 0) i *= 3; j *= 3; i *= 2; j *= 2; printf( i=%d, j=%d, i,j) ; int p=1 ; for(int i=0 ; i<=4 ; i++) if (p>0) p=fork( ) ; if(p!=-1) execlp( prog, prog, NULL) ; exit(1) ; while( wait(null)!=-1) ; Exercice 3 : 1) Dans le cas d UNIX, la création de processus est réalisée par duplication. a) Citez un avantage et un inconvénient. 3

b) Citez en deux ou trois lignes les avantages des processus légers (threads) par rapport aux processus. 2) Considérez un fichier nommé COURS. Pour accélérer la recherche du mot INF3600 dans le fichier COURS, le processus de départ crée quatre processus. Chaque processus fils créé effectue la recherche dans une des quatre parties du fichier en appelant la fonction Recherche suivante : bool Recherche (char * Fichier, char * Mot, int Partie) où : - Fichier est le nom du fichier, c'est-à-dire COURS, - Mot est le mot recherché, c'est-à-dire INF3600 et - Partie est la partie 1, 2, 3 ou 4 du fichier. Cette fonction retourne 1 en cas de succès et 0 sinon. Au retour de la fonction Recherche, le processus fils transmet, en utilisant l appel système exit, au processus père le résultat de la recherche (exit(0) en cas de succès, exit(1) en cas d échec). Lorsque le processus père est informé du succès de l un de ses fils, il tue tous les autres fils. a) Ecrivez un programme C/C++ qui réalise le traitement ci-dessus. Attention : n écrivez pas le code de la fonction Recherche. Exercice 4 : 1) Expliquez pourquoi, dans UNIX, lorsqu un processus exécute l appel système «exit», ses ressources ne sont pas libérées tout de suite. 2) Expliquez pourquoi les processeurs ont deux modes de fonctionnement (noyau et utilisateur). 3) Écrivez un programme qui lance, l un à la suite de l autre, les fichiers exécutables passés en paramètre. Un fichier exécutable est lancé uniquement si tous ceux qui le précèdent sont terminés. Avant de se terminer, le programme affiche, à l écran, le nombre de lancements de fichiers exécutables qui ont échoués (parce que le fichier n existe pas ou n est pas exécutable). 4

Exercice 5 : Considérez le programme suivant: #include <sys/types.h> #include <stdio.h> #include <sys/wait.h> #include <stdlib.h> pid_t pid; int i, n=3; for (i=0; i<n; i++) /*1*/ while (wait(null) >= 0); return 0; 1. Complétez le code précédent de manière qu il crée l arborescence illustrée ci-dessus : P F1 F2 F3 F4 F5 F6 F7 Les processus fils du dernier niveau se transforment en a (a est un fichier exécutable). Les autres processus fils affichent à l écran le message «je continue» avant de poursuivre la création de processus. 2. Est-ce que le code complété engendre des processus zombies? Justifiez. 5

3. Tracez l arborescence des processus créés par le programme si l on supprime la ligne while (wait(null) >= 0); et à la fin du code des pères l on ajoute les lignes : wait(null); exit(0); Exercice 6 : Considérez le programme C suivant : #include <sys/types.h> #include <sys/wait.h> void main() pid_t p1, p2, p3, p4; if ((p1=fork( ))==0) if ((p2=fork( ))==0) f2( ); f1( ); if ((p3=fork())==0) f3( ); if ((p4=fork())==0) f4( ); sleep(3); while(wait(null)>0) ; 1) Tracez l'arborescence des processus créés par ce programme si les fonctions f1, f2, f3 et f4 se terminent par exit(). 2) Est-ce que ce programme peut produire des processus zombies? Justifiez. Exercice 7 : Considérez le programme suivant : 6

#include <stdlib.h> #include<stdio.h> #include <sys/wait.h> void jouer(int NumJoueur); //NumJoueur est le numéro du joueur 0..MaxJoueurs-1 #define MaxJoueurs 4 /*0*/ int main( ) // créer MaxJoueurs processus fils du processus principal // chaque joueur exécute la fonction jouer puis se termine /*1*/ while(1) // attendre la fin d'un joueur //lorsqu'un joueur se termine, un autre joueur de même numéro est créé /*3*/ return 0; Complétez le programme en ajoutant le code qui réalise exactement les traitements spécifiés sous forme de commentaires. 7