C'est, nous l'avons dit, l'ensemble des informations accessibles au processeur au cours d'une activité ou des activités successives.
Le contexte est formé de deux parties distinctes :
le contexte du processeur,
le contexte en mémoire (le segment procédure et le(s) segment(s) de données).
Le contexte du processeur
Le contexte d'un processeur est constitué de l'ensemble des informations qui définissent son état à un instant donné :
les registres généraux.
Ils sont adressables et modifiables par l'utilisateur (par le programme);
les registres spécialisés.
Ils sont en principe inaccessibles directement à l'utilisateur et sont regroupés dans le Mot d'Etat du Processeur MEP (en anglais Processor Status Word : PSW).
Le MEP contient deux types d'informations :
les informations concernant le processeur lui-même :
l'état d'exécution du processeur (actif ou attente).
Le processeur dans l'état actif peut exécuter et enchaîner les instructions.
Le changement d'état actif ==>attente est réalisé par le processeur lui-même, soit par l'exécution d'une instruction spécialisée, soit par (auto)-modification du MEP.
Le passage attente==>actif ne peut évidemment pas être effectué par le processeur lui-même puisqu'il est en attente.
Il ne peut être obtenu que par un événement extérieur (une
interruption
).
le mode (maître ou esclave).
Nous avons vu dans le chapitre d'introduction que certaines instructions machines ne peuvent pas être exécutées par l'ensemble des utilisateurs, mais au contraire par l' (les) utilisateur(s) privilégiées).
Nous avons appelé ces deux modes le mode utilisateur (ou mode esclave ou mode user) et mode noyau ou mode superviseur (mode maître ou mode kernel).
Les instructions privilégiées comprennent en particulier les instructions d'E/S, celles touchant aux interruptions (armement, désarmement, masquage, démasquage, déclenchement : voir
Etats d'une interruption et transitions), ainsi que celles touchant à la sécurité et à la protection.
le(s) masque(s) d'interruption.
Lorsque les interruptions sont masquées, le processeur ne peut être interrompu, jusqu'à ce qu'il les démasque,
Comme il y a plusieurs sortes d'interruptions, chacune d'entre elles peut être masquée/démasquée.
L'ensemble des états de chaque type d'interruptions constitue un masque d'interruptions.
les informations sur le déroulement de l'activité en cours : le code condition[1]
, le
compteur ordinal.
Le contexte en mémoire, ou espace de travail
Le contexte en mémoire est constitué de la (des) table(s) des segments, des indicateurs de protection.
Les segments procédure peuvent être réentrants (exécutés, par plusieurs processus) sans duplication du code.
Les segments de données peuvent n'appartenir qu'à une seule procédure (ou à un processus) ou au contraire être partagés entre plusieurs.
Un ensemble d'attributs attachés au processus
Cet ensemble spécifie différentes propriétés :
le nom, servant à identifier le processus de façon interne.
C'est habituellement un numéro attribué à sa création et permettant d'accéder à son contexte par l'intermédiaire de la table des processus (voir le
bloc de contrôle d'un processus),
résidente en mémoire principale;
l'état du processus (en attente, bloqué, etc... : voir : les
états d'un processus
),
la priorité du processus, qui permet de les ordonner (ordonnancement) lors de l'attribution du processeur.
En l'absence de priorité (ou toutes priorités égales), c'est le plus ancien processus
en attente qui sera lancé,
les droits : qui spécifient quelles sont les opérations qui lui sont autorisées.
Bloc de contrôle d'un processus
Le bloc de contrôle d'un processus (Process Control Block ou PCB) contient les informations suivantes :
les attributs du processus : nom, état, priorité, droits,
des pointeurs vers la mémoire allouée au processus,
des pointeurs vers les ressources allouées,
une zone de sauvegarde des registres.
Lorsque plusieurs processus sont gérés par le système d'exploitation, celui-ci regroupe les PCB dans une table appelée la table des processus.
[1] Le "Code condition" est un registre du processeur dont chaque bit est un flag qui peut être testé et représente une condition.