SHPORA.net :: PDA

Login:
đćăèńòđàöèÿ

Main
FAQ

ăóìàíèòàđíûć íàóêè
ćńòćńòâćííûć íàóêè
ìàòćìàòèśćńêèć íàóêè
òćőíèśćńêèć íàóêè
Search:
Title: | Body:

c.Crearea.proc

-Când contextul fiului este gata, părintele termină partea sa a apelului fork prin schimbarea stării fiului în "gata de rulare (în memorie)" ?i prin întoarcerea spre utilizator a identificatorului de proces al fiului. Nucleul programează mai târziu procesul fiu pentru execuție cu ajutorul algoritmului normal de planificare ?i procesul fiu î?i termină astfel partea sa de fork. Contextul procesului fiu a fost completat de către procesul tată; în nucleu, procesul fiu pare a fi trezit după a?teptarea unei resurse. Procesul fiu execută porțiunea de cod din apelului sistem fork, în acord cu contorul programului, pe care nucleul l-a refăcut din contextul regi?trilor salvați aflat în nivelul context 2 ?i întoarce un 0 din apelul sistem.
--^algoritm fork
^intrări: niciuna
^ie?iri: la procesul părinte, identificatorul fiului (PID)la procesul fiu, 0
{
verifică resursele disponibile ale nucleului;
^obține o intrare liberă în tabela proceselor, un unic număr pentru PID;
^verifică ca utilizatorul să nu ruleze prea multe procese;
^marchează starea procesului ca "fiind creat";
^copiază datele din intrarea tabela procese corespunzătoare procesului părinte în noua intrare a fiului;
^incrementează contorul i-nodului directorului curent ?i a rădăcinii schimbate(dacă este necesar);
^face o copie a contextului părintelui (u area, text, date, stivă) în memorie;
^depune contextul dummy al nivelului sistem în contextul nivelului sistem al fiului;
^contextul dummy conține date care permit procesului fiu să se recunoască singur ?i să înceapă să ruleze de aici atunci când este programat;
^if (procesul în execuție este procesul părinte)
{
chimbă starea procesului în "gata de rulare";
^întoarce (idetificatorul fiului); /* dinspre sistem către utilizator */
^else /* procesul care se execută este procesul fiu */
{
inițializează câmpurile de timp ale u area;
return (0);
}
^ }