Je lisais Critical Section Problem from Operating System Concepts de Peter B. Galvin. Selon elle
1) Progress is: Si aucun processus ne s'exécute dans sa section critique et que certains processus souhaitent entrer dans leurs sections critiques, alors seuls les processus qui ne s'exécutent pas dans leur section restante peuvent participer à décider lequel entrera sa section critique suivante, et cette sélection ne peut pas être reportée indéfiniment.
Et
2) L'attente bornée est: Il existe une limite, ou une limite, sur le nombre de fois où d'autres processus sont autorisés à entrer dans leurs sections critiques après qu'un processus a demandé d'entrer dans sa section critique et avant cette demande est accordée.
Je ne comprends pas ce que l'auteur veut dire dans les deux cas.
Pourriez-vous me faire comprendre en donnant un bon exemple lié à cette définition.
Je vous remercie.
Tout d'abord, permettez-moi de vous présenter une terminologie. A section critique (CS) est une séquence d'instructions qui peuvent être exécutées par au plus un processus en même temps. Lorsque vous utilisez des sections critiques, le code peut être décomposé en les sections suivantes:
// Some arbitrary code (such as initialization).
EnterCriticalSection(cs);
// The code that constitutes the CS.
// Only one process can be executing this code at the same time.
LeaveCriticalSection(cs);
// Some arbitrary code. This is called the remainder section.
La première section contient du code tel que le code d'initialisation. Nous n'avons pas de nom pour cette section. La deuxième section est le code qui essaie d'entrer dans le CS. La troisième section est le CS lui-même. La quatrième section est le code qui quitte la section critique. La cinquième et dernière section est appelée la section restante qui peut contenir n'importe quel code. Notez que le CS lui-même peut être différent entre les processus (considérons par exemple un processus qui reçoit des demandes d'un client et les insère dans une file d'attente et un autre processus qui traite ces demandes).
Pour garantir le bon fonctionnement d'une implémentation de sections critiques, trois conditions doivent être remplies. Vous en avez mentionné deux (que j'expliquerai ensuite). Le troisième est l'exclusion mutuelle qui est évidemment vitale. Il convient de noter que l'exclusion mutuelle ne s'applique qu'au CS et à la section des congés. Cependant, les trois autres sections ne sont pas exclusives.
La première condition est progress. Le but de cette condition est de s'assurer qu'un processus est actuellement dans le CS et effectue un travail ou, s'il y avait au moins un processus qui veut entrer dans le CS, il le fera et ensuite effectuera du travail. Dans les deux cas, certains travaux sont en cours et, par conséquent, tous les processus progressent globalement.
Progression: si aucun processus ne s'exécute dans sa section critique et que certains processus souhaitent entrer dans leurs sections critiques, seuls les processus qui ne s'exécutent pas dans leur section restante peuvent participer à la décision qui entrera ensuite dans sa section critique, et cette sélection ne peut pas être reporté indéfiniment.
Comprenons cette définition phrase par phrase.
Si aucun processus ne s'exécute dans sa section critique
S'il y a un processus en cours d'exécution dans sa section critique (même s'il n'est pas indiqué explicitement, cela inclut également la section congé), cela signifie qu'un travail est en cours. Nous progressons donc. Sinon, si ce n'était pas le cas ...
et certains processus souhaitent entrer dans leurs sections critiques
Si aucun processus ne veut entrer dans leurs sections critiques, il n'y a plus de travail à faire. Sinon, s'il y a au moins un processus qui souhaite entrer dans sa section critique ...
alors seuls les processus qui ne s'exécutent pas dans leur section restante
Cela signifie que nous parlons des processus qui s'exécutent dans l'une des deux premières sections (rappelez-vous, aucun processus ne s'exécute dans sa section critique ou la section congé) ...
peut participer à la décision qui entrera ensuite dans sa section critique,
Puisqu'il y a au moins un processus qui souhaite entrer dans son CS, nous devons en quelque sorte choisir l'un d'entre eux pour entrer dans son CS. Mais qui va prendre cette décision? Ceux qui ont déjà demandé la permission d'entrer dans leurs sections critiques ont le droit de participer à la prise de cette décision. De plus, les processus qui peuvent souhaiter entrer leurs CS mais n'ont pas encore demandé l'autorisation de le faire (cela signifie qu'ils sont en cours d'exécution dans le première section) ont également le droit de participer à la prise de cette décision.
et cette sélection ne peut pas être reportée indéfiniment.
Cela indique qu'il faudra un temps limité pour sélectionner un processus pour entrer dans son CS. En particulier, aucun blocage ou livelock ne se produira. Donc, après ce laps de temps limité, un processus entrera dans son CS et fera un certain travail, progressant ainsi.
Je vais maintenant expliquer la dernière condition, à savoir attente limitée. Le but de cette condition est de s'assurer que chaque processus a la chance d'entrer réellement dans sa section critique afin qu'aucun processus affamé pour toujours . Cependant, veuillez noter que ni cette condition ni ces progrès ne garantissent l'équité. Une mise en œuvre d'un CS ne doit pas être juste.
Attente bornée: il existe une limite, ou une limite, au nombre de fois où d'autres processus sont autorisés à entrer dans leurs sections critiques après qu'un processus a demandé d'entrer dans sa section critique et avant que cette demande soit accordée.
Comprenons cette définition phrase par phrase, à partir de la dernière.
après qu'un processus a demandé à entrer dans sa section critique et avant que cette demande soit accordée.
En d'autres termes, s'il existe un processus qui a demandé d'entrer son CS mais ne l'a pas encore entré. Appelons ce processus P.
Il existe une limite, ou une limite, au nombre de fois où d'autres processus sont autorisés à entrer dans leurs sections critiques
Pendant que P attend d'entrer dans son CS, d'autres processus peuvent également attendre et certains processus s'exécutent dans son CS. Lorsqu'il quitte son CS, un autre processus doit être sélectionné pour entrer dans le CS qui peut être ou non P. Supposons qu'un processus autre que P ait été sélectionné. Cette situation pourrait se reproduire encore et encore. Autrement dit, d'autres processus ont la chance d'entrer dans leurs CS, mais jamais P. Notez que des progrès sont en cours, mais par d'autres processus, pas par P. Le problème est que P n'a pas la chance de faire du travail. Pour éviter la famine, il doit y avoir une garantie que P finira par entrer dans son CS. Pour que cela se produise, le nombre de fois où d'autres processus entrent dans leurs CS doit être limité. Dans ce cas, P aura certainement la chance d'entrer dans son CS.
Je voudrais mentionner que la définition d'un CS peut être généralisée de sorte qu'au plus N processus s'exécutent dans leurs sections critiques où N est un entier positif. Il existe également des variantes de sections critiques de lecture-écriture.
Exclusion mutuelle
Aucun processus ne peut être présent simultanément dans une section critique à un moment donné, un seul processus peut entrer dans une section critique à un moment donné.
Image pour le progrès:
Progression
Aucun processus exécuté en dehors de la section critique ne devrait empêcher l'autre processus intéressé d'entrer dans sa section critique alors qu'en fait la section critique est libre.
Attente bornée
Aucun processus ne devrait avoir à attendre indéfiniment pour entrer dans la section critique. il devrait y avoir une limite à l'obtention de chances d'entrer dans la section critique. Si l'attente limitée n'est pas satisfaite, il y a une possibilité de famine.
Remarque
Aucune hypothèse n'est liée à H/W ou à la vitesse de traitement.
Dans l'ensemble, une solution au problème de la section critique doit satisfaire trois conditions:
exclusion mutuelle: accès exclusif de chaque processus à la mémoire partagée. Un seul processus peut être dans sa section critique à un moment donné.
Progress: Si aucun processus n'est dans sa section critique, et si un ou plusieurs threads veulent exécuter leur section critique, l'un de ces threads doit être autorisé à entrer dans sa section critique.
Attente bornée: Après qu'un processus a fait une demande pour entrer dans sa section critique, il y a une limite au nombre d'autres processus qui peuvent entrer dans leur section critique, avant que la demande de ce processus ne soit accordée. Ainsi, une fois la limite atteinte, le système doit accorder au processus l'autorisation d'accéder à sa section critique. Le but de cette condition est de s'assurer que chaque processus a la chance d'entrer réellement dans sa section critique afin qu'aucun processus ne meure de faim pour toujours.
Configuration requise pour indiquer que la solution de synchronisation est correcte ou non
1). Exclusion mutuelle: -à tout moment, un seul processus doit être présent dans la section critique.
2). Progrès: -le processus qui est en dehors de la section critique et qui ne veut pas entrer dans la section critique alors ce processus ne devrait pas empêcher l'autre processus intéressé d'entrer dans sa section critique. Si un processus réussit à arrêter un autre processus intéressé, la progression n'est pas garantie ou bien elle est garantie. La section critique doit être libre.
3). Attente bornée: -le temps d'attente d'un processus en dehors d'une section critique doit être limité.
4). Neutre architectural: -il n'y a aucune hypothèse concernant le matériel