Un système multitâche robuste n'est possible que si le processeur fonctionne en deux modes : un mode utilisateur et un mode superviseur ou système.
Le mode utilisateur est un mode d'exécution protégé. Le processus dans ce mode, ne peut empiéter sur la zone mémoire système. Le processus ne peut en fait qu'accéder à une petite portion de la mémoire disponible. Cela veut dire que lors de débordement de mémoire, ou d'exécution d'instructions illégales, le programme ne pourra pas polluer les structures de
données du noyau et des autres processus et ainsi causer un crash de la machine. Ainsi en cas d'erreur d'exécution, le gestionnaire des tâches interrompra le processus fautif, et nettoiera les structures système, permettant ainsi l'exécution d'autres processus.
Le mode superviseur ou système est un mode d'exécution privilégié. Cela veut dire en particulier que dans ce mode, il est possible d'accéder à toutes les ressources de la machine inconditionnellement. Dans ce mode il est donc possible d'accéder à toutes les zones mémoire de tous les processus. Seul le noyau en règle générale tourne dans ce mode.
Structure d'un processus :
Un processus est un programme qui s'exécute en mémoire de l'ordinateur. Il occupe donc
une partie de la mémoire centrale qui est segmenté en différentes régions selon les besoins du
processus.
· Un contexte d'exécution
· Un segment de code, c'est à dire l'ensemble des instructions machine qui compose le programme en lui-même.
· Un segment de données statiques. ( cette partie correspond aux données initialisées ou non-initialisées déclarées en globales dans un programme C )
· Un segment de données dynamique, permettant d'effectuer des allocations mémoire à la demande. Une pile, est généralement stocké dans cette zone pour permettre de mémoriser les appels de fonctions et de stocker les variables locales.
Le schéma ci dessous montre la structure basique d'un processus.
[...] C'est à dire que toutes les données en mémoire tampon sont écrasées, et les données devant être immédiatement écrites sont mises dans le fichier. Si le paramètre file vaut NULL, tous les fichiers sont flushés. int fseek (FILE * file, long offset, int whence ) Cette fonction permet de positionner la tête de lecture dans un fichier. La position est donnée par le paramètre offset ( entier positif ou négatif). Le paramètre whence permet de savoir à partir de quel endroit on ajoute l'offset pour positionner la tête de lecture. [...]
[...] Arguments passés par la ligne de commande. La partie accessible en mode système seulement est composée de : L'état des registres lorsque le processus n'est pas actif. L'identifiant de l'utilisateur qui a exécuté le processus ( UID et GID Une pile en mode système. On notera également que même s'ils exécutent le même fichier binaire, les processus sont différents et désignés par un numéro propre, unique appelé PID ( comme Process ID ) Mécanisme d'appel système Un appel système généralement permet d'accéder aux périphériques ou aux ressources du système. [...]
[...] On se déplace à partir de la position courante. On se déplace à partir de la fin du fichier. La fonction retourne la position actuelle de la tête de lecture dans le fichier Manipulation des fichiers avec la libC Les fonctions précédentes permettent de lire et écrire un nombre quelconque d'octets dans un fichier. Mais une opération de lecture ou d'écriture coûte un appel système ce qui peut être vite pénalisant pour les grosses application. De plus, la plupart des supports de stockages comme les disques durs utilisent des clusters, ou secteurs de taille fixe. [...]
[...] Ces fonctions de la libc optimisent donc l'utilisation des fichiers. Pour utiliser ces fonctions, il faut inclure le fichier header .Les fonctions de la libc permettant de manipuler les fichiers sont : FILE *fopen ( char *path, char *mode ) La chaîne de caractères path donne le nom du fichier à ouvrir. Le chaîne de caractères mode donne les modes d'ouverture des fichiers. ( par exemple ou ( lecture et écriture) , r ( lecture), w (écriture) Programmation système UNIX Cette fonction retourne un pointeur sur une structure FILE. [...]
[...] On fork les deux processus. Dès lors on choisit arbitrairement l'utilisation des tubes ( soit il servira dans le sens père vers fils, soit dans l'autre sens fils vers père) Ceci peut être résumé ainsi sur ce schéma : Programmation système UNIX pipe() fork() write myPipe[1] read myPipe[0] processus père processus fils Figure 8 Données partagées entre père et fils par tubes Les socketspair ( ou paire de sockets) fonctionnent sur le même principe que les tubes mais sont bidirectionnelles. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture