Ce document a été produit par HEVEA.
Votre browser peut avoir a être configuré pour afficher correctement
certains symboles.
Reportez-vous à la documentation d'HEVEA.
void *(*(f[]))(int *);
char *d(int (*[])());
Figure 1 : Gestion de processus. Dans cet exemple on a pris un tableau de NPROC = 8 processus au maximum. ready, waiting et free seront du type P_list. t_proc est un tableau de NPROC enregistrements comportant chacun un identifiant de processus pid, un identifiant de processus parent ppid et une structure struct info.
qui crée et initialise les trois listes pointées par pready, pwaiting et pfree à partir du tableau t_proc1. On créera un unique processus prêt (son nom est init), de pid 1 et de ppid 1, qui sera le père de tous les processus.void Init(P_list *pready, P_list *pwaiting, P_list *pfree, T_proc t_proc)
qui crée un nouveau processus. La création de processus sous Unix se fait par mécanisme de fourchette (fork) qui correspond en fait à un clonage de processus: le processus actif peut par ce mécanisme créer un clone de lui même, la seule différence entre les deux processus clones étant le pid et le ppid. Pour le processus ainsi créé, le ppid sera le pid du processus actif, son pid sera déduit d'une variable globale unsigned int newpid que l'on incrémente à chaque création de processus. Le processus créé sera placé dans la liste des processus prêts en tête de liste, le processus père en fin de liste.void Createprocess(P_list *pready, P_list *pfree, unsigned int ppid)
qui modifie le processus actif courant. Cette procédure est appelée après chaque quantum de temps par le noyau pour attribuer le processeur au processus suivant le processus actif. Ce dernier sera placé à la fin de la liste des processus prêts.void Swicthcontext(P_list *pready)
qui correspond à un appel système réalisé par le processus actif. Cet appel système est en fait une demande d'entrée-sortie: le processus actif doit donc être placé dans la liste des processus en attente.void Syscall(P_list *pready, P_list *pwaiting)
qui correspond à une terminaison d'entrée-sortie pour le processus d'identifiant pid. Ce processus sera ainsi déplacé de la liste des processus en attente vers la liste des processus prêts en second membre de cette liste (si c'est possible).void Sysret(P_list *pready, P_list *pwaiting, unsigned int pid)
qui correspond à la terminaison du processus actif. Ce dernier sera donc inséré dans la liste des cases libres pointée par pfree.void Sysexit(P_list *pready, P_list *pfree)
Ce document a été traduit de LATEX par HEVEA.