Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
G
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
E ’ L /-
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
V
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
V
Appel système: malloc()
• Syntaxe:
i n c l u d e s t d l i b . h
void * malloc ( s i z e _ t s i z e ) ;
• Retourne un pointeur sur l’espace
mémoire alloué, ou NULL en cas
d’erreur
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
V
Appel système: malloc()
• Syntaxe:
i n c l u d e s t d l i b . h
void * malloc ( s i z e _ t s i z e ) ;
• Retourne un pointeur sur l’espace
mémoire alloué, ou NULL en cas
d’erreur
Appel système: free()
• Syntaxe:
i n c l u d e s t d l i b . h
void f r e e ( void * p t r ) ;
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
V
Appel système: calloc()
• Syntaxe:
i n c l u d e s t d l i b . h
void * c a l l o c ( s i z e _ t numitems , s i z e _ t s i z e ) ;
• Retourne un pointeur sur l’espace mémoire alloué, ou NULL en cas
d’erreur
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
V
Appel système: calloc()
• Syntaxe:
i n c l u d e s t d l i b . h
void * c a l l o c ( s i z e _ t numitems , s i z e _ t s i z e ) ;
• Retourne un pointeur sur l’espace mémoire alloué, ou NULL en cas
d’erreur
Appel système: realloc()
• Syntaxe:
i n c l u d e s t d l i b . h
void * r e a l l o c ( void * ptr , s i z e _ t s i z e ) ;
• Retourne un pointeur sur l’espace mémoire alloué, ou NULL en cas
d’erreur
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
A mmap()
Appel système: mmap()
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
A mmap()
Appel système: mmap()
• Syntaxe:
i n c l u d e sys / types . h
i n c l u d e sys /mman. h
void *mmap( void * addr , s i z e _ t len , i n t prot , i n t f l a g s , i n t
fd , o f f _ t o f f s e t ) ;
• Retourne un pointeur sur le début d’adresse de mapping, ou MAP_FAILED
en cas d’erreur
Valeur Description
PROT_NONE La région ne doit pas être accédée
PROT_READ Le contenu de la région peut-être lu
PROT_WRITE Le contenu de la région peut-être modié
PROT_EXEC Le contenu de la région peut-être exécuté
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
A mmap()
Appel système: mmap()
• Exemple :
i n c l u d e sys /mman. h
i n c l u d e sys / s t a t . h
i n c l u d e f c n t l . h
i n t main ( i n t argc , char * argv [ ] )
{
char * addr ;
i n t fd ;
s t r u c t s t a t sb ;
fd open ( argv [ ] , O_RDONLY ) ;
i f ( f s t a t ( fd , &sb ) −)
errExit ( " fstat " ) ;
addr mmap( NULL , sb . s t _ s i z e , PROT_READ , MAP_PRIVATE , fd , ) ;
i f ( addr MAP_FAILED )
e r r E x i t ( "mmap" ) ;
i f ( w r i t e ( STDOUT_FILENO , addr , sb . s t _ s i z e ) ! sb . s t _ s i z e )
p r i n t f ( " p a r t i a l / f a i l e d w r i t e \n " ) ;
e x i t ( EXIT_SUCCESS ) ;
}
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
A mmap()
Appel système: mmap()
• Exemple :
// . . .
fd open ( " /dev/ zero " , O_RDWR) ;
i f ( fd −)
e r r E x i t ( " open " ) ;
addr mmap( NULL , length , PROT_READ | PROT_WRITE ,
MAP_PRIVATE , fd , ) ;
i f ( addr MAP_FAILED )
e r r E x i t ( "mmap" ) ;
// . . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
A munmap()
Appel système: munmap()
• Syntaxe:
i n c l u d e sys /mman. h
i n t munmap( void * addr , s i z e _ t l e n g t h ) ;
• Retourne en cas de succès, ou - en cas d’erreur
• Exemple:
// . . .
addr mmap( NULL , length , PROT_READ | PROT_WRITE , MAP_PRIVATE , fd , ) ;
i f ( addr MAP_FAILED )
e r r E x i t ( "mmap" ) ;
/* Code f o r working with mapped r e g i o n */
i f (munmap( addr , l e n g t h ) −)
f p r i n t f ( s t d e r r , "munmap \n " ) ;
// . . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
A
Deux processus accèdent à une région partagée
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
M
Appel système: shmget()
Description: Permet la création d’une zone mémoire partagée, ou l’accès à
une zone déjà existante.
Syntaxe:
i n c l u d e sys / types . h
i n c l u d e sys /shm . h
i n t shmget ( key_t key , s i z e _ t s i z e , i n t shmflg ) ;
Retourne l’ID du segment de la mémoire partagée, ou - en cas d’erreur
Exemple:
// . . .
i n t shmid ;
s t r u c t shmseg *shmp ;
shmid shmget ( SHM_KEY , s i z e o f ( s t r u c t shmseg ) , IPC_CREAT | SHM_R | tSHM_W ) ;
i f ( shmid −)
e r r E x i t ( " shmget " ) ;
// . . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
M
Appel système: shmget()
Description: Permet la création d’une zone mémoire partagée, ou l’accès à
une zone déjà existante.
Syntaxe:
i n c l u d e sys / types . h
i n c l u d e sys /shm . h
i n t shmget ( key_t key , s i z e _ t s i z e , i n t shmflg ) ;
Retourne l’ID du segment de la mémoire partagée, ou - en cas d’erreur
Exemple:
// . . .
i n t shmid ;
s t r u c t shmseg *shmp ;
shmid shmget ( SHM_KEY , s i z e o f ( s t r u c t shmseg ) , IPC_CREAT | SHM_W ) ;
i f ( shmid −)
e r r E x i t ( " shmget " ) ;
// . . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
M
Appel système: shmat()
Description: Permet d’attacher la mémoire référencée à l’adresse virtuelle
spéciée en argument.
Syntaxe:
i n c l u d e sys / types . h
i n c l u d e sys /shm . h
void * shmat ( i n t shmid , const void * shmaddr , i n t shmflg ) ;
Retourne l’adresse attachée à la mémoire partagée, ou (void *)- en cas
d’erreur
Exemple:
// . . .
shmid shmget ( SHM_KEY , s i z e o f ( s t r u c t shmseg ) , IPC_CREAT | OBJ_PERMS ) ;
i f ( shmid −)
e r r E x i t ( " shmget " ) ;
shmp shmat ( shmid , NULL , ) ;
i f ( shmp ( void * ) −)
e r r E x i t ( " shmat " ) ;
// . . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
M
Appel système: shmdt()
Description: Détachement d’une zone partagée de l’espace virtuel du
processus.
Syntaxe:
i n c l u d e sys / types . h
i n c l u d e sys /shm . h
i n t shmdt ( const void * shmaddr ) ;
Retourne en cas de succès, ou (void *)- en cas d’erreur
Exemple:
// . . .
shmp shmat ( shmid , NULL , SHM_RDONLY ) ;
i f ( shmp ( void * ) −)
e r r E x i t ( " shmat " ) ;
i f ( shmdt ( shmp ) −)
e r r E x i t ( " shmdt " ) ;
// . . .
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système
E
M
Appel système: shmctl()
Description: Permet de consulter ou de modier les caractéristiques d’un
segment mémoire ainsi que de le supprimer.
Syntaxe:
i n c l u d e sys / types . h
i n c l u d e sys /shm . h
i n t shmctl ( i n t shmid , i n t cmd , s t r u c t shmid_ds * buf ) ;
Retourne en cas de succès, ou - en cas d’erreur
Exemple:
// . . .
// shmat to a t t a c h to shared memory
char * s t r ( char * ) shmat ( shmid , ( void * ) , ) ;
p r i n t f ( " Data read from memory : s \n " , s t r ) ;
// detach from shared memory
shmdt ( s t r ) ;
// destroy the shared memory
shmctl ( shmid , IPC_RMID , NULL ) ;
// . . .