Koncepti i Mutex ne sistemet e shfrytezimit

Mutex është një version i thjeshtë i semaforëve, kur nuk përdoren semaforët e tjerë. Mutex është i mirë vetëm për menaxhim të përjashtimeve të dyanshme për një pjesë kodi të përbashkët. Ata janë të thjeshtë në implementim, gjë kjo që i bën të përdorshëm në thread-ed në zonen e përdoruesit.
Mutex është një variabël që mund të jetë në njërën nga dy gjendjet : i hapur ose i kyçur. Shihet qartë që nevojitet vetëm një bit për të ruajtur vlerën e tij, por shpesh në praktikë përdoret një numër i plotë, për të cilin 0 paraqet gjendjen e hapur dhe një numër tjetër i ndryshëm nga 0 paraqet gjendjen të kyçur. Një proçes thërret proceduren mutex_lock kur i duhet akses në pjesën kritike. Kur mutex është i hapur ( gjë që do të thotë se pjese kritike mund të aksesohet) thirrja ka sukses dhe proçesi mund të hyje në pjesën e tij kritike. Puna ndryshon kur mutex është i kyçur. Në këtë rast proçesi bllokohet derisa proçesi tjetër që është një pjesën kritike del dhe thërret proceduren mutex_unlock.

Figura nga https://os.mbed.com

 

Me paketat e thread-eve në zonë n e përdoruesit nuk është problem që disa thread-e të kenë akses në të njëjtin mutex, përderisa të gjithë thread-ed veprojnë në një zone të përbashkët. Në shumicën e zgjidhjeve të tilla si algoritmi i Peterson ose semaforët ka një supozim që disa proçese kanë akses në një pjesë të përbashkët memorjeje. Nqs proçeset kanë zona të veçuara adresash, siç e kemi thëne ne, atëherë si mund të kenë të përbashkët variablin turn në algoritmin e Peterson, ose semaforët, ose buffer-at?
Për ketë ka dy përgjigje. Së pari, disa nga strukturat e përbashkëta, si psh semaforët, mund të ruhen në kernel dhe mund të aksesohen duke përdorë thirrje të sistemit. Kjo eliminon problemin. E dyta mundësi : shumë sisteme shfrytëzimi moderne, duke përfshirë këtu UNIX dhe Windows, ofrojnë një mundësi që proçeset të kenë të përbashkët një pjesë të zonave të adresave. Në këtë mënyrë buffer-at dhe struktura të tjera mund të jenë të përbashkët për dy ose me shumë proçese. Rasti më i keq, kur asnjëra nga zgjidhjet më lart është e mundur, mund të përdoret një
skedar i përbashkët.
Në rastin kur dy ose me shumë proçese kane të përbashkët një pjese të madhe të zonës së adresave, ose komplet këtë zonë , atëherë nuk bë het i qartë dallimi mes proçeseve dhe thread-eve. Por nuk duhet harruar se gjithsesi dy proçese kanë cilësi të tjera që janë veçanta për dy proçeset, dhe që thread-ed i kanë të përbashkëta. Gjithashtu disa proçese që kanë një pjese të zonës së adresave të përbashkët nuk janë aq eficiente sa thread-ed e përdoruesit.

Bazuar në librin Modern Operating Systems, me autor A.Tanenbaum