Processus§
Systèmes d’exploitation
auteur: | Pierre-Antoine Champin |
---|---|
adresse: | Département Informatique - IUT - Lyon1 |
licence: | ![]() |
Systèmes d’exploitation
auteur: | Pierre-Antoine Champin |
---|---|
adresse: | Département Informatique - IUT - Lyon1 |
licence: | ![]() |
Programme : séquence d’instructions en langage machine stocké en RAM
« le compteur de programme »
Image : fichier contenant l’image mémoire d’un programme
« je copie l’image sur ma clé USB »
Source : fichier en langage évolué servant à produire une image
« mon source ne compile pas »
Processus : exécution d’un programme
« j’ai 3 processus qui s’exécutent … »
« … un lecteur de musique, et 2 éditeurs de texte »
→ plusieurs processus peuvent exécuter le même programme
Métaphore :
Source, image, programme : notions statiques
Processus : notion dynamique
NB: les commandes UNIX ps
et top
, et le gestionnaire de tâches de Windows (onglet « Processus »), donnent des informations sur les processus en cours
Plusieurs processus indépendants doivent pouvoir s’exécuter sans interférence :
À l’inverse, les processus doivent pouvoir communiquer si leur programme le demande
IPC (communication inter-processus)
→ cf. chapitre correspondant et TPs
Process Control Block (PCB)
Structure de données du SE contenant les informations sur un processus.
Ces informations sont dans une zone mémoire accessible uniquement par le noyau du SE.
Pour obtenir des informations sur les processus, il est donc nécessaire de passer par des appels systèmes :
getpid
, getppid
, getuid
, geteuid
, setuid
…
Identificateur de processus (PID)
→ numéro unique (à un instant t, mais réutilisable)
Informations de généalogie
→ processus parent (PPID)
→ processus enfants
Information de droits
→ utilisateur propriétaire du processus
→ utilisateur effectif (augmentation ou diminution de droits)
État du processus
→ cf. transparents suivants
Contexte processeur
→ état des registres du processeur pour ce processus
Autres informations d’ordonnancement
→ exemple : priorité:ref pour l”ordonnancement
Informations sur la mémoire utilisée / utilisable
→ tables de pages (cf. séances sur la gestion de la mémoire)
Informations sur le temps passé
→ temps réel, temps utilisateur
Liste des fichiers ouverts
→ « fichiers » au sens large (cf. chapitre Entrées-sorties)
Autres ressources utilisées…
Selon les systèmes, le nombre et le nom des états peut varier. Mais la base commune est :
- Élu:
- en train de s’exécuter sur un processeur
- Éligible:
- en attente d’un processeur pour s’exécuter
- Bloqué:
- en attente d’un événement (ex: interruption) ; ne peut donc pas s’exécuter pour l’instant
Intérêt de séparer l’utilisateur propriétaire de l’utilisateur effectif :
Droits d’administration « locale » :
certaines commandes, au comportement connu et circonscrit, s’exécutent avec des droits supérieurs à l’utilisateur qui les lancent.
exemple : sudo
, crontab -e
…
Services lancés par l’administrateur :
pour limiter les risques en cas d’exploitation de faille, ils s’éxécutent avec des droits limités.
example : httpd
, ftpd
Appel système CreateProcess
: crée un processus dont les caractéristiques sont données en paramètres de l’appel système.
Exemple :
STARTUPINFO si; // à renseigner
PROCESS_INFORMATION pi; // utilisé en sortie
bool succes = CreateProcess( 0, "mon_prog.exe", 0,
0, FALSE, 0, 0, 0,
&si, &pi);
Appel système fork
: crée un processus dont les caractéristiques sont identiques à celles du processus courant (seuls le PID et le PPID changent).
→ retourne une valeur différente dans le processus père et le processur fils
Exemple :
int pid_fils = fork();
if (pid_fils == 0) return fonction_fils();
else return fonction_père();
Si on souhaite que le fils exécute un autre programme que le père, on utilise une variante de exec
(qui remplace le programme courant par un autre programme).
Exemple :
int pid_fils = fork();
if (pid_fils == 0) execlp("mon_prog", "mon_prog");
// seul le père exécute la suite
main
)wait
)