Académique Documents
Professionnel Documents
Culture Documents
#include <sched.h>
int sched_setscheduler(pid_t pid, int politique,
const struct sched_param *param);
#include <sched.h>
int sched_yield(void);
permet au processus courant de libérer volontairement le processeur et
d’être placé en fin de file. Le processeur exécute un autre processus s’il
y en a.
#include <sys/resource.h>
int setpriority(int p, int q, int prio);
modifie la priorité d’un processus, d’un groupe de processus ou de tous
les processus de l’utilisateur.
P Q
PRIO_PROCESS getpid()
PRIO_PGRP getgpid()
PRIO_USER getuid()
Exemple de programme :
#include <sched.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/resource.h>
1
int i;
// M A I N
int main (void){
int pidf1, pidf2;
2
if ((pidf1=fork())==0) { // processus fils 1
proc_fils(getpid());
}
/* processus pere*/
sched_rr_get_interval(pidf1,&intervalle);
printf("\nquantum de temps de la file SCHED_RR : %d milli-sec\n",
intervalle.tv_nsec/1000000);
while ( waitpid(-1,NULL, 0) > 0); /* le pere attend la fin de tous ses fils
*/
printf("\nTerminaison de tous les processus\n");
return 0;
}
Exécution
$cc scheduling.c -o sched
$./sched
Les priorites minimale et maximale de la politique SCHED_FIFO sont : 1 et
99
Les priorites minimale et maximale de la politique SCHED_RR sont : 1 et 99
Les priorites minimale et maximale de la politique SCHED_OTHER sont : 0 et
0
3
le processus 1713 reprend son execution apres un sched_yield()
4
Anne xe2 Processus et Threads Windows
1. Les processus
Dans l’API Win32, une application peut créer un nouveau processus en faisant appel
à la fonction CreateProcess.
Syntaxe :
BOOL CreateProcess (
LPCTSTR lpszImageName,
LPCTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION lppiProcInfo);
Le thread principal sert à exécuter le code du processus créé, car les entités
d’exécution (d’ordonnancement) sous Windows sont les threads. En plus du thread
principal créé automatiquement à la création d’un processus, il est possible de créer
explicitement des threads à l’aide de la fonction CreateThread. Tous les threads
appartenant au même processus partagent les ressources du processus.
5
1.3 3ème et 4ème paramètres de la fonction CreateProcess : LPSECURITY_ATTRIBUTES
Ces paramètres correspondent à des structures de données qui définissent des
attributs de sécurité pour le thread ou processus créé. Quand ils ne sont pas vides
(NULL), ces paramètres permettent principalement de fixer l’héritage des objets
créés.
Exemple
Exemple :
…
LPSECURITY_ATTRIBUTES saProcess, saThread ;
STARTUPINFO si;
PROCESS_INFORMATION piProcessB;
…
saProcess.nLength = sizeof(saProcess);
saProcess.lpSecurityDescriptor = NULL;
saProcess.bInheritHandle=TRUE;
saThread.nLength = sizeof(saThread);
saThread.lpSecurityDescriptor = NULL;
saThread.bInheritHandle=FALSE;
6
- Fixer la priorité du processus créé : IDLE_PRIORIY_CLASS ,
NORMAL_PRIORIY_CLASS, HIGH_PRIORIY_CLASS, REALTIME_PRIORIY_CLASS,
- …
Tout processus créé a son propre espace d’adressage et ses propres données, si un
processus fils et un processus père désirent partager des données, ils doivent le faire
à l’aide de mécanismes de communication tels que les canaux (pipe), les fichiers
mappés en mémoire, etc.
2. Les threads
En plus du thread principal qui est créé à la création d’un processus, et permettant
l’exécution du code du processus créé, il est possible de créer explicitement de
nouveaux threads à l’aide de la fonction système CreateThread.
Syntaxe :
HANDLE CreateThread (
LPSECURITY_ATTRIBUTES lpsa,
DWORD cbStack,
LPTHREAD_START_ROUTINE lpStartAddr,
LPVOID lpvThreadParm,
DWORD fdwCreate,
LPDWORD lpIDThread);
7
1. alloue un objet kernel pour le nouveau Thread. La fonction CreateThread
retourne un handle sur cet objet.
2. initialise à 1 le compteur du Thread, qui se trouve dans l’objet kernel du
Thread.
3. alloue une structure CONTEXT au nouveau Thread. Cette structure contient
l’état des registres du processeur ainsi que le pointeur de la pile d’exécution.
4. prépare la pile d’exécution en lui affectant deux pages mémoire.
5. initialise la structure CONTEXT pour pointer sur le sommet de la pile.
Si le 1er paramètre lpsa = TRUE, cela signifie que le handle de l’objet Thread créé
peut être hérité par les processus fils.
Le 2ème paramètre cbStack contient la taille de la pile d’exécution. Le 3ème
paramètre lpStartAddr contient l’adresse de la fonction Thread à exécuter. Le 4ème
paramètre est une valeur sur 32 bits qui peut être passée à la fonction Thread. Le
5ème paramètre lpvThreadParm contient des drapeaux. Le 6ème paramètre
lpIDThread est le TID attribué par le système au Thread créé.