Om deadlock i Linux og Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Antag at du har to processer, P1 og P2. P1 har høj prioritet, P2 har lav prioritet. P1 og P2 har en delt semafor (dvs. de udfører begge ventetider og indlæg på samme semafor). Processerne kan interleaved i enhver vilkårlig rækkefølge (fx P2 kunne startes før P1).


Forklar kort om, hvorvidt processerne kunne blokere, når:


ii. begge processer kører på et Linux-system som tidsdeling af opgaver


iii. begge processer kører på et Windows 7-system som variable opgaver


iv. begge processer kører på et Windows 7-system som realtidsopgaver.


Jeg tror, ​​at P1 og P2 kun kan resultere i prioriteret inversion. I overensstemmelse med et af kravene til deadlock (cirkulær ventetid: der er en cirkelformet kæde af to eller flere processer, der venter på en ressource, der holdes af de andre processer), er prioriteringsinversion ikke lig med deadlock. Desuden har P1 og P2 kun 1 semaphore, hvilket betyder, at der ikke vil være cirkulære, så de aldrig vil medføre dødlås. Derfor vil alle svarene være nej.
Er det korrekt? Hvis ikke, hvad er svaret?

Bedste reference


Du er korrekt, ingen dødlås er mulig med kun en semafor.


Deadlock for to processer kan kun ske, hvis P1 har en ressource, der kræves af P2, og kræver ressource, der holdes af P2. Så P1 kan ikke fortsætte, indtil P2 frigiver ressource og P2 kan ikke fortsætte, indtil P1 frigiver ressource. Således sidder de begge fast og venter på hinanden, men lad ikke hinanden bevæge sig fremad. Som du allerede nævnte, kan cirkulær ventetilstand ikke opfyldes med en semafor. [1]


P1, der venter på P2 for at frigøre ressource, er ikke prioriteret inversion. Prioriteret inversion sker, når Px har prioritet mellem P1 og P2 og P1 venter på P2 for at frigøre ressource, mens P2 venter på Px, fordi den har højere prioritet. Så P1 venter på Px med lavere prioritet til trods for at det ikke var meningen (ingen fælles ressourcer eller noget andet).