b,Comunic:
^intrгri: (1)descriptorul regiunii comune de memorie
(2)adresa virtuala la care sa se faca atasarea
(3)indicatori (flags)
^ie?iri: adresa virtuala la care s-a atasat zona comuna de memorie
{
verifica validitatea descriptorului si a drepturilor de acces;
^if (adresa virtuala specificata de utilizator [nu este egal] 0)
{
trunchiaza adresa virtuala conform specificatiilor indicatorilor;
verifica validitatea adresei virtuale si a dimensiunii regiunii;
}
^else /*utilizatorul doreste ca nucleul sa gaseasca o adresa*/
^nucleul alege o adresa virtuala (daca nu este nici una la dispozitie, atunci eroare);
ataseaza regiunea la spatiul de adrese al procesului(alg. attachreg)
^if (regiunea este atasata pentru prima data)
aloca tabele de pagini, memorie pentru regiune (alg. Growreg);
^return(adresa virtuala la care s-a facut atasarea);
}
Zona comunг de memorie nu trebuie sг se оntindг peste alte regiuni din cadrul spaюiului virtual de adrese al procesului, deci atвt amplasarea cвt ?i dimensiunea ei trebuie alese judicios pentru ca, оn cazul unor modificгri ulterioare de dimensiune, alte regiuni sг nu se extindг peste zona comunг de memorie. De exemplu, un proces poate mгri dimensiunea regiunii sale de date prin apelul sistem brk, noua regiune de date fiind virtual contiguг vechii regiuni de date оn consecinюг nucleul nu trebuie sг plaseze zona de memorie comunг оn apropierea regiunii de date. Similar, nucleul nu trebuie sг plaseze zona de memorie comunг оn apropierea vвrfului stivei, pentru a preveni astfel fenomenul de cre?tere a stivei оn interiorul zonei de memorie comunг. De exemplu, dacг stiva cre?te cгtre valorile mari ale adreselor, cel mai bun loc de amplasare a zonei de memorie comunг ar putea fi imediat оnaintea adresei de оnceput a regiunii de stivг.
Nucleul verificг dacг regiunea de memorie comunг оncape оn spaюiul de adrese al procesului ?i o ata?eazг, utilizвnd algoritmul attachreg.