Syst  350mes d exploitation - Cours no. 12
17 pages
Français

Syst 350mes d'exploitation - Cours no. 12

-

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
17 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

Syst`emes d’exploitationCours no. 12Jean-S´ebastien CoronUniversit´e du LuxembourgNovember 22, 2009Jean-S´ebastien Coron Syst`emes d’exploitationProgrammation en C sous UNIXManipulation de processus.Les commandes fork(),wait().Communication inter-processus.Les signauxJean-S´ebastien Coron Syst`emes d’exploitationLes processusCr´eation d’un processus.Lorsqu’on entre une commande, le shell lance un processuspour l’ex´ecuter.Le shell attend la fin du processus, puis attend la commandesuivante.Arborescence de processus.Chaque processus a un p`ere, celui qui l’a lanc´e.Le num´ero du processus du p`ere est le PPID.Un processus p`ere peut avoir plusieurs processus filsSous UNIX, un premier processus init est cr´e´e avec un PIDde 1. Anc`etre de tous les processus.Jean-S´ebastien Coron Syst`emes d’exploitationCr´eation de processusDuplication d’un processus.Seule fac¸on de cr´eer un processus `a bas niveau.Appel syst`eme fork()Cr´ee une copie complˆete du processus, fils de ce processus.Le fils change de programme en appelant exec().La fonction exec() remplace le code et ses donn´ees par celuid’une nouvelle commande.Jean-S´ebastien Coron Syst`emes d’exploitationEx´ecution d’une commandeEx´ecution d’une commande: tar -zcvf file *Le shell se duplique avec fork(). On a alors deux processusshell identiques.Le shell p`ere attend la fin du processus fils avec wait().Le shell fils remplace son ex´ecutable par celui de la commandetar avec exec()La ...

Informations

Publié par
Nombre de lectures 14
Langue Français

Extrait

Syst`emesdexploitation
Jena-S
Cours no. 12
Jean-S´ebastienCoron
´e
Universite´duLuxembourg
November 22, 2009
bastienCoronyStse`mesdepxloitation
naeJe´S-tsabdsepxoltitaoinienCoronSyst`eme
Manipulation de processus. Les commandes fork(),wait() . Communication inter-processus. Les signaux
ammanoitPrgorXNICsensUou
ecorpseLssusoCneSnorbe´Sitsaexdoiplt`ysesemJean-
Cr´eationdunprocessus. Lorsqu’on entre une commande, le shell lance un processus pourlex´ecuter. Le shell attend la fin du processus, puis attend la commande suivante. Arborescence de processus. Chaque processus a un pere ,celuiquilalance´. ` Lenumeroduprocessusdup`ereestlePPID. ´ Un p ` t ir plusieurs processus fils rocessus pere peu avo Sous UNIX, un premier processus init estcree´avecunPID ´ de1.Anc`etredetouslesprocessus.
ontita
S´n-eaJsySnoroCneitsabe`tmesedxelpioattion
Duplication d’un processus. Seulefa¸condecr´eerunprocessusa`basniveau. Appel t` fork() sys eme Cre´eunecopiecomplˆeteduprocessus,lsdeceprocessus. Le fils change de programme en appelant exec() . La fonction exec() remplace le code et ses donnees par celui ´ d’une nouvelle commande.
ationdeprocessuse´rC
´xceEnduutiommannecoedt`emesdCoronSysitno
´ Execution d’une commande: tar -zcvf file * Le shell se duplique avec fork() . On a alors deux processus shell identiques. Leshellpe`reattendlanduprocessuslsavec wait() . Leshelllsremplacesonexe´cutableparceluidelacommande tar avec exec() La commande tar sexe´cute.Lorsquellesetermine,le processus fils disparait. Leshellp`ereestr´eactive´etattendlacommandesuivante.
xelpioatneitsabe´S-naeJ
oitation
L’appel a fork() duplique le processus. L’execution continue dans les deux processus. ´ Valeurretourne´epar fork() : Dansleprocessusp`ere,retournelePIDduls. Dans le processus fils, retourne 0. Silefork´echoue,renvoie-1. getpid() et getppid() getpid() retourne le PID du processus. getppid() retournelePIDdupe`reduprocessus.
timirpaLfonteiiv()rknSyst`emesdexpl-n´SbesaitneoCoreaJ
evfclpae)ro(kExemJean-Se´abtseiCnronoySsdme`estitloxpe
#include <stdio.h> #include <unistd.h> int main() { int pidfils=fork(); if(pidfils!=0) { printf("Jesuislep`ere."); printf("PID de mon fils:%d\n",pidfils); } else { printf("Je suis le fils."); printf("Mon pid est:%d\n",getpid()); } }
noita
eaplcfveemExro(k)eme`tsySolpxedsstba´e-SonornCieeJnaitation
Re´sultat: $ forksimple Jesuislepe`re.PIDdemonfils:2864 Je suis le fils.Mon PID est:2864 $ Peut aussi apparaˆıtre dans l’ordre inverse.
waetititexae-nJronSenCoastiS´ebxediolp`tsysemetita
La primitive wait permet`aunprocessusdattendrelan d’un de ses fils. Si pas de fils ou erreur, retourne -1. Sinon,retournelePIDdulsquisesttermine´. Doitˆetreappeleavec wait(0) ´ La primitive exit permet de terminer le processus qui l’appelle. void exit(int status) status permetdindiquerauprocessusp`erequuneerreur s’est produite. status=0 si pas d erreur.
on
peivitleesLaimpr´e-SstbaanJetsySeme`Cneinoroitationsdexplo
Similaire`alacommandeshell sleep int sleep(int seconds) Le processus qui appelle sleep estbloqu´ependantlenombre desecondesspe´cie´. Die´renceavec wait() wait() bloquejusqu`alanduls,alorsque sleep() bloque untempssp´ecie´.
ion
if(pidfils!=0) { printf("Jesuislep`ere.\n"); wait(0); printf("monfilsatermine´.\n"); } else { printf("je suis le fils.\n"); sleep(2); printf("arr^etdufils.\n"); exit(0); }
int pidfils=fork();
tatiolpxedseme`stSyonornCiestbaS-e´eJnalexempE
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents