La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1.1 Processus Introduction à la programmation système …de l'exécution de code aux processus...

Présentations similaires


Présentation au sujet: "1.1 Processus Introduction à la programmation système …de l'exécution de code aux processus..."— Transcription de la présentation:

1 1.1 Processus Introduction à la programmation système …de l'exécution de code aux processus...

2 1.2 Processus Environnement d'exécution Processeur processeur Bus système mémoire entrées/ sorties

3 1.3 Processus fonctionnement de la pile Consiste en un pointeur (registre du processeur) et une zone de mémoire 2 instructions pour la manipuler : –push copie le contenu du registre au sommet de la pile, puis ajuste (ex: décrémente) le pointeur de pile –pop copie le sommet de la pile dans le registre utilisée par le processeur lors des appels de fonction –pour stocker l'adresse de retour utilisée par le compilateur –pour les variables locales aux fonctions –pour sauvegarder le contenu des registres avant de les utiliser

4 1.4 Processus Contenu de la mémoire pile code données 0x0000 0x7FFF 0x8000 0xBFFF 0xC000 0xFFFF mémoire processeur Pointeur pile Pointeur pgm. 0x3FFF 0x4000

5 1.5 Processus Interruptions Processeur processeur Bus système mémoire entrées/ sorties horloge

6 1.6 Processus Systèmes Multiprogrammés "Batch" Plusieurs "jobs" sont présent simultanément en mémoire et se partage le processeur

7 1.7 Processus système en multiprogrammation Fonctions d'Entrée/Sortie fournies par le système Système de gestion de la mémoire (allocation à différents jobs) partage du CPU – Le système doit choisir entre tous les travaux prêts Allocation des périphériques (bandes magnétiques).

8 1.8 Processus Système d'exploitation Matériel cpu, mémoire, E/S processus Système d'exploitation processus Ensemble de fonctions et de structures de données destiné à optimiser l'utilisation du système

9 1.9 Processus Creation dun Processus code source : #include int i=0; int j; main() { char c; printf("Hello World\n"); }

10 1.10 Processus Production de l'Executable Compilation : > ls hello.c > cc -c hello.c > ls hello.c hello.o Edition de liens : > cc -o hello hello.o > ls hello hello.c hello.o Execution : > hello Hello World >

11 1.11 Processus Etapes de la compilation [ os]$ cc -o hello -v hello.c Reading specs from /usr/lib/gcc-lib/ia64-redhat-linux/2.96/specs gcc version (Red Hat Linux ) /usr/lib/gcc-lib/ia64-redhat-linux/2.96/cpp0 -lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=96 - D__GNUC_PATCHLEVEL__=0 -D__linux -D_LONGLONG -D__LP64__ -D__ELF__ -D__ia64__ -D__unix__ - D__linux -D__unix -Asystem(linux) -Acpu(ia64) -Amachine(ia64) -D__NO_INLINE__ - D__LONG_MAX__= L hello.c /tmp/ccVEo6LF.i GNU CPP version (Red Hat Linux ) (cpplib) (IA-64) #include "..." search starts here: #include search starts here: /usr/local/include /usr/include /usr/lib/gcc-lib/ia64-redhat-linux/2.96/cc1 /tmp/ccVEo6LF.i -mb-step -quiet -dumpbase hello.c -version -o /tmp/ccYMqMGb.s GNU C version (Red Hat Linux ) (ia64-redhat-linux) compiled by GNU C version (Red Hat Linux ). as -x -o /tmp/ccD85dDL.o /tmp/ccYMqMGb.s /usr/lib/gcc-lib/ia64-redhat-linux/2.96/collect2 -dynamic-linker /lib/ld-linux-ia64.so.2 -o hello /usr/lib/gcc-lib/ia64-redhat-linux/2.96/../../../crt1.o /usr/lib/gcc-lib/ia64-redhat- linux/2.96/../../../crti.o /usr/lib/gcc-lib/ia64-redhat-linux/2.96/crtbegin.o -L/usr/lib/gcc- lib/ia64-redhat-linux/2.96 -L/usr/lib/gcc-lib/ia64 -redhat-linux/2.96/../../../tmp/ccD85dDL.o -lgcc -lc -lgcc /usr/lib/gcc-lib/ia64-redhat-linux/2.96/crtend.o /usr/lib/gcc-lib/ia64- redhat-linux/2.96/../../../crtn.o

12 1.12 Processus Espace d'adressage du processus Pile d'exécution Données non initialisées Code Données initialisées Segment TEXT Segment DATA Segment BSS Segment STACK Mémoire centrale 0x x x xFFFFF000

13 1.13 Processus Les processus vus par le système Le système identifie chaque processus par un numéro unique : le PID Chaque processus est géré par le système au moyen de structures de donnée –sur LINUX : "task_struct" et "mm_struct" Les processus ont des relations de parenté : PPID

14 1.14 Processus structure task_struct (LINUX) struct task_struct { volatile long state;/* -1 unrunnable, 0 runnable, >0 stopped */... pid_t pid;... struct task_struct *parent;/* parent process */ struct list_head children;/* list of my children */ struct list_head sibling;/* linkage in my parent's children list */... /* process credentials */ uid_t uid,euid,suid,fsuid; gid_t gid,egid,sgid,fsgid;... struct mm_struct *mm; struct rlimit rlim[RLIM_NLIMITS];... char comm[16];...};

15 1.15 Processus Structure mm_struct (LINUX) struct mm_struct {... unsigned long start_code, end_code, start_data, end_data; unsigned long start_brk, brk, start_stack; unsigned long arg_start, arg_end, env_start, env_end;...};

16 1.16 Processus appels système PID = fork(); –création d'un nouveau processus par clonage du processus appelant –1 processus appelle le service noyau –2 processus recoivent le code de retour de fork(); pour le processus qui a fait l'appel : PID du processus crée pour le processus qui vient d'être créé : 0 rc = exec (" "); –chargement dans le contexte du processus courant d'un nouvel executable exit(code-retour); –destruction du processus courant PID = wait(); –attente de la mort d'un processus fils

17 1.17 Processus FORK() - exemple 1 #include main() { int pid, rc=0; char c; c = getchar(); pid = fork(); if (pid == 0) { /* je suis le fils */ printf("Je suis le fils : pid = %d\n", pid); exit(10); } else { /* je suis le pere */ c = getchar(); printf("Je suis le pere : pid = %d\n", pid); pid = wait(&rc); c = getchar(); printf("Mon fils %d m'a rendu %d\n", pid, WEXITSTATUS(rc)); }

18 1.18 Processus Resultat Exemple 1 neptune.couveep$ prog Je suis le fils : pid = 0 Je suis le pere : pid = Mon fils m'a rendu 10 neptune.couveep$

19 1.19 Processus Commande ps 86 A2 41JX -- AIX 4.3 Commands Reference -- Copyright Bull March 1999 ps Command Purpose Shows current status of processes. Syntax ps [ -A ] [ -N ] [ -a ] [ -d ] [ -e ] [ -f ] [ -k ] [ -l ] [ -F format] [ -o Format ] [ -G Glist ] [ -g Glist ][ -m ] [ -n NameList ] [ -p Plist ] [ -t Tlist ] [ - U Ulist ] [ -u Ulist ] Description The ps command writes the current status of active processes and (if the -m flag is given) associated kernel threads to standard output. Note that while the -m flag displays threads associated with processes using extra lines, you must use the -o flag with the THREAD field specifier to display extra thread-related columns. Without flags, the ps command displays information about the current workstation. The -f, -o, l, -l, s, u, and v flags only determine how much information is provided about a process; they do not determine which processes are listed. The l, s, u, and v flags are mutually exclusive....

20 1.20 Processus Resultats de ps Après lancement du programme : neptune.couveep$ ps -f -ucouveep UID PID PPID C STIME TTY TIME CMD couveep :07:47 pts/117 0:00 prog couveep :24:35 pts/118 0:00 -ksh couveep :14:15 pts/118 0:00 ps -f -ucouveep couveep :15:25 - 0:00 /usr/bin/X11/xterm couveep :24:33 - 0:01 /usr/bin/X11/xterm couveep :15:27 pts/117 0:00 -ksh

21 1.21 Processus Resultats de ps Après premier getchar() : neptune.couveep$ ps -f -ucouveep UID PID PPID C STIME TTY TIME CMD couveep :00 couveep :07:47 pts/117 0:00 prog couveep :24:35 pts/118 0:00 -ksh couveep :28:21 pts/118 0:00 ps -f -ucouveep couveep :15:25 - 0:00 /usr/bin/X11/xterm couveep :24:33 - 0:01 /usr/bin/X11/xterm couveep :15:27 pts/117 0:00 -ksh neptune.couveep$

22 1.22 Processus Resultats de ps Après second getchar() : neptune.couveep$ps -f -ucouveep UID PID PPID C STIME TTY TIME CMD couveep :24:35 pts/118 0:00 -ksh couveep :07:47 pts/117 0:00 prog couveep :15:25 - 0:00 /usr/bin/X11/xterm couveep :34:26 pts/118 0:00 ps -f -ucouveep couveep :24:33 - 0:01 /usr/bin/X11/xterm couveep :15:27 pts/117 0:00 -ksh

23 1.23 Processus FORK() - exemple 2 #include main() { int pid, rc=0; char c; c = getchar(); pid = fork(); if (pid == 0) { /* je suis le fils */ printf("Je suis le fils : pid = %d\n", pid); execlp("/usr/bin/ls", "ls", 0); } else { /* je suis le pere */ c = getchar(); printf("Je suis le pere : pid = %d\n", pid); c = getchar(); pid = wait(&rc); printf("Mon fils %d m'a rendu %d\n", pid, WEXITSTATUS(rc)); }

24 1.24 Processus Resultat Exemple 2 neptune.couveep$ prog2 Je suis le fils : pid = WPS books bulldrv.tar.Z io prog.c LP2 atf bulldrv fc.h legato prog2 SB book1.ps bulldrv.tar hostinfo prog prog2.c Je suis le pere : pid = Mon fils m'a rendu 0 neptune.couveep$

25 1.25 Processus Connexion au système Connecting to host "pegtst2"......success. Red Hat Linux release 7.2 (Enigma) Kernel on an ia64 login: couveep Password: Last login: Tue Feb 11 08:52:04 from pccouvee couveep]$ ps -f UID PID PPID C STIME TTY TIME CMD couveep :54 pts/97 00:00:00 -bash couveep :55 pts/97 00:00:00 ps -f couveep]$id uid=10523(couveep) gid=64(ia64) groups=64(ia64) couveep]$


Télécharger ppt "1.1 Processus Introduction à la programmation système …de l'exécution de code aux processus..."

Présentations similaires


Annonces Google