Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Fork intr-un sistem de paginare - UNIX

linux



+ Font mai mare | - Font mai mic



Fork intr-un sistem de paginare - UNIX

Asa cum s-a explicat in paragraful 8.1, nucleul duplica fiecare regiune a procesului parinte pe timpul apelului sistem fork si le ataseaza procesului fiu. De obicei, nucleul unui sistem cu swapping face o copie fizica a spatiului de adresa al parintelui, ceea ce reprezinta o operatie greoaie in majoritatea cazurilor, deoarece procesele apeleaza adesea exec imediat dupa apelul sistem fork si elibereaza imediat memoria pe care tocmai au copiat-o. La sistemul de paginare al System V, nucleul evita copierea paginii prin manipularea tabelelor de regiuni, intrarilor din tabelele de pagini si intrarilor din pfdata: pur si simplu este incrementat contorul de referinta al regiunilor folosite in comun.



Pentru regiunile private, ca cele de date si stiva, acesta aloca totusi o noua intrare in tabela de regiuni si o noua tabela de pagini iar apoi examineaza fiecare intrare din tabela de pagini a procesului parinte: daca o pagina este valida, incrementeaza contorul de referinte in intrarea din tabela pfdata, indicand numarul de procese care folosesc in comun pagina prin intermediul unor regiuni diferite (in opozitie cu numarul care indica folosirea in comun a paginii prin partajarea regiunii). Daca pagina exista pe dispozitivul de swap, nucleul incrementeaza contorul de referinte al tabelei de folosire a dispozitivului de swap pentru pagina respectiva.

Pagina poate fi acum referita din ambele regiuni care o folosesc in comun pana cand un proces scrie in ea. Nucleul copiaza apoi pagina astfel incat fiecare regiune are propria versiune. Pentru aceasta, nucleul seteaza bitul 'copiere la scriere' pentru fiecare intrare a tabelei de pagini din regiunile private ale procesului  parinte si procesului fiu in timpul apelului sistem fork. Daca oricare dintre procese scrie in pagina, se produce o intrerupere de protectie, iar in tratarea acesteia, nucleul face o noua copie a paginii pentru procesul care a generat intreruperea. Copierea fizica a paginii este in acest fel amanata pana cand un proces are intr-adevar nevoie de ea.

Figura 12.4 prezinta structurile de date atunci cand un proces executa apelul sistem fork. Procesele isi impart accesul la tabela de pagini a regiunii de text T folosita in comun, astfel incat contorul de referinte al regiunii este 2 si contorul de referinte al tabelei pfdata pentru paginile din regiunea de text este 1. Nucleul aloca o noua regiune de date pentru procesul fiu, C1, copie a regiunii P1 din procesul parinte. Intrarile din tabela de pagini ale celor doua regiuni sunt identice, asa cum este ilustrat de intrarea pentru adresa virtuala 97.

Intrarile din tabela de pagini pointeaza catre intrarea 613 din tabela pfdata, al carei contor de referinte este 2, indicand faptul ca doua regiuni refera pagina.

Figura 12.4 Structurile de date la executarea apelului sistem fork

Implementarea apelului sistem fork in sistemul BSD face o copie fizica a paginilor procesului parinte.

Admitand inbunatatirea performantelor prin faptul ca nu trebuie sa se faca o copie, totusi, sistemul BSD contine si apelul sistem vfork, care presupune ca orice proces fiu va invoca imediat apelul sistem exec la revenirea din apelul sistem. Acesta vfork nu copiaza tabele de pagini, deci este mai rapid decat apelul sistem fork din implementarea System V.

Vom considera exemplul din figura 12.5 pentru a prezenta unele situatii periculoase care pot aparea la folosirea necorespunzatoare a apelului sistem vfork:

Dupa apelul sistem vfork, procesul-fiu nu apeleaza exec, dar reseteaza variabilele global si local dupa care se termina. Sistemul garanteaza ca procesul parinte este suspendat pana cand procesul fiu apeleaza exec sau se termina. Cand procesul parinte reia in sfarsit executia, gaseste valorile celor doua variabile diferite de cele dinainte de apelul sistem vfork. Pot aparea efecte mai spectaculoase daca procesul fiu revine din functia care a apelat vfork.

int global;

main ( )

printf ('global %d local %dn', global, local );

}

Figura 12.5 Apelul sistem vfork si alterarea memoriei alocate procesului



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 850
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved