janvier
2012
Bonjour,
Dans ce billet, qui est le premier de ce blog, je souhaitais vous présenter mon projet. Je suis passionné par la programmation en C, et plus particulièrement par l’aspect « bas niveau » de celle-ci. Le C a été créé pour développer le système d’exploitation UNIX, sur lequel sont basés la plupart des OS couramment usés.
La programmation système consiste au développement d’applications qui font partie intégrante du système d’exploitation. C’est ce type de programmation, opposée aux programmes utilisateurs, que je voulais vous faire découvrir dans ce blog.
Ce premier billet commence par la pratique, et avec la création des processus. Les processus représentent l’image d’un programme à un instant donné (état des registres entres autres).
Chaque processus possède un espace d’adressage donné, dans lequel il peut lire et écrire. Cet espace est divisé en trois grandes parties (segment texte, segment données, pile).
En C et sous un système d’exploitation basé sur UNIX, il est possible de créer un processus grâce à la fonction conforme POSIX.1 :
pid_t fork(void);
Le type pid_t (déclaré dans sys/types.h) représente l’identificateur d’un processus (appelé PID pour Process IDentifier). En l’occurrence, la fonction renvoie trois valeurs, suivant ce qui s’est passé lors de l’exécution de cet appel-système :
- -1 en cas d’erreur, et errno est positionnée pour contenir le code de l’erreur (à savoir EAGAIN ou ENOMEM) ;
- 0 si on est dans le processus père ;
- une autre valeur, positive, indiquant le PID du processus créé (appelé processus fils).
Premier exemple pratique :
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(void) {
pid_t p;
p = fork();
switch (p) {
case -1:
perror("fork");
break;
case 0:
fprintf(stdout, "I'm father process.\n");
break;
default:
fprintf(stdout, "I'm child process, PID = #%u", (unsigned)p);
break;
}
return EXIT_SUCCESS;
}
Le résultat peut varier selon l’ordre d’exécution des processus sur votre machine. Notez que la synchronisation des processus pourrait permettre une certaine unité, et ce sera l’objectif d’un des prochains articles !