avril
2013
Une récursion pour les gouverner tous Voilà quelques temps que je n’avais plus utilisé ce média ; j’avais posté un article similaire sur une plateforme perdue, mais, n’ayant pas reçu réellement de retour, je me suis dit qu’il serait intéressant de centraliser tous mes petits articles ici, de manière à renvoyer uniformément les visiteurs sur cette page. Au départ, il s’agissait ici de parler uniquement de programmation système ; le sort en a décidé autrement. […]
janvier
2012
Le système d’exploitation dispose d’une table de processus, permettant de gérer de manière globale chaque processus. Chaque processus possède une entrée, appelée bloc de contrôle de processus. Il contient diverses informations, comme : – son PID ; – son PPID ; – son état ; – son contexte processeur (état des registres) et mémoire (adresses de l’espace d’adressage) ; – ses critères d’ordonnancement ; – les fichiers ouverts.
janvier
2012
Un processus Unix peut-être caractérisé par son état. Il existe communément trois états : – élu ; – bloqué ; – prêt. Un processus est dans l’état élu lorsqu’il s’exécute, après avoir obtenu le processeur. Il est bloqué lorsqu’il est en attente, par exemple d’une lecture de disque. Il est dans l’état prêt lorsqu’il est n’est pas en attente, mais qu’il n’a pas le processeur. Il attend simplement que ce soit son tour. Le passage […]
janvier
2012
La programmation système vise au développement de programmes systèmes, qui sont relativement bas niveaux : interface avec le noyau et les bibliothèques systèmes sont donc des points en faisant partie. UNIX est un terrain parfait pour la programmation système, puisque créé à cet effet à l’origine. Deux ypes de fonction permettent la programmation système : – les fonctions de la bibliothèque standard de C (libc) ; – les appels-systèmes, fonctions d’interface entre le noyau et […]
janvier
2012
La fonction fork() peut paraître un peu surprenante au premier abord. La question que vous pouvez légitimement vous poser est : que fait un fork() ? Cet appel-système alloue un bloc de contrôle dans la table des processus, copie certaines des informations du bloc du père (fichiers ouverts, répertoire courant, etc.) dans le bloc du fils. Il alloue un PID au processus fils. Le noyau alloue le segment texte du processus, dans lequel il place […]
janvier
2012
Un processus peut se terminer suite à l’appel de la fonction : void exit(int status); de stdlib.h. status est un entier, qui permet d’indiquer la valeur de retour du processus. Conventionnellement, on utilise la valeur de 0 pour indiquer une sortie correcte, ou une autre valeur pour indiquer l’erreur. Exemple : #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> void task(void) { puts("Child process… end."); exit(0); } int main(void) { […]
janvier
2012
Une application peut s’exécuter dans des contextes très différents. Le répertoire courant, le répertoire personnel de l’utilisateur, le type de terminal, entres autres, sont indiqués par des variables d’environnement. En pratique, les variables d’environnement sont des chaînes de caractère sous la forme NOM=VALEUR. Elles sont modifiées par les fichiers d’initialisation du shell par exemple. Pour accéder aux variables d’environnement d’un processus dans un programme codé en C, il suffit d’utiliser le tableau environ, une variable […]
janvier
2012
Bonjour, Après avoir introduit la création des processus, je souhaitais vous présenter quelques fonctions qui sont utiles, notamment lors du débogage de votre application. Je cite : pid_t getpid(void); qui retourne le PID du processus courant. pid_t getppid(void); qui retourne le PID du processus père du processus courant. uid_t getuid(void); qui retourne l’UID (identificateur de l’utilisateur qui a créé le processus) du processus courant. gid_t getgid(void); qui retourne le GID (identificateur du groupe auquel appartient […]
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 […]