Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:meta:examen [2018/04/04 20:51]
maria.mihailescu [Lucrare 2] Add questions and answers
so:meta:examen [2021/03/04 15:33] (current)
maria.mihailescu
Line 1: Line 1:
 ====== Examen ====== ====== Examen ======
  
-Urmăriți precizările din [[:so:meta:notare|pagina de reguli]].+{{section>​so:meta:examen:​2020-2021&​noheader&​nofooter&​noindent}}
  
 +<​spoiler>​
 +<​hidden>​
 +====== Template pentru anii următori ======
 ===== Examen final ===== ===== Examen final =====
  
 Puteți participa la **un singur** examen final. Puteți participa la **un singur** examen final.
  
-Datele de examen de SO sunt: +Datele de examen de SO pentru sesiunea iunie 2020 sunt: 
-  * TODO 2018 +  * TODO 
-  *  +  * TODO 
-Studenții ​de anul 4 care refac disciplina ​pot veni și la examenul de sâmbătă, TODo 2018Sesiunea de examene pentru anul 4 se încheie pe 9 iunie 2017. Studenții de anul 3 pot veni în alte zile față de cea aferentă grupei/​seriei lor. Studenții în alte situații (de exemplu transferați de la IS) pot veni oricând. Cei care doresc să vină în altă zi față de cele alocate ​(inclusiv studenții de anul 4 care vor să vină sâmbătă, 3 iunie 2017), să trimită un e-mail către [[TODO|TODO]] cu subiectul ''​[SO][Examen] Transfer: Prenume NUME, grupă'',​ de exemplu ''​[SO][Examen] Transfer: Ana POPESCU, 332CB''​.+  * TODO 
 + 
 +Datele de examen de SO pentru sesiunea septembrie 2019 sunt: 
 +  * TODO 
 + 
 +Puteți veni o singură dată la examen. ​Studenții care refac materia ​pot veni doar în primele două date de examen (TODO și TODO)Pentru ei sesiunea este mai scurtă (TODO - TODO). 
 + 
 +Studenții de anul 3 pot veni în alte zile față de cea aferentă grupei/​seriei lor. Studenții în alte situații (de exemplu transferați de la IS) pot veni oricând. Cei care doresc să vină în altă zi față de cele alocate, să trimită un e-mail către [[elenamihailescu22@gmail.com|Elena]] cu subiectul ''​[SO][Examen] Transfer: Prenume NUME, grupă'',​ de exemplu ''​[SO][Examen] Transfer: Ana POPESCU, 332CB''​.
  
 Informații despre desfășurătorul și conținutul examenului găsiți în [[:​so:​meta:​notare#​examen_4_puncte|secțiunea aferentă din pagina de notare]]. În pregătirea examenului recomandăm să parcurgeți [[:​so:​meta:​examen#​examene_anterioare|subiectele de examen anterioare]]. Informații despre desfășurătorul și conținutul examenului găsiți în [[:​so:​meta:​notare#​examen_4_puncte|secțiunea aferentă din pagina de notare]]. În pregătirea examenului recomandăm să parcurgeți [[:​so:​meta:​examen#​examene_anterioare|subiectele de examen anterioare]].
 +
 +Urmăriți precizările din [[:​so:​meta:​notare|pagina de reguli]].
 +
 +=== Foi de examen ===
 +
 +  * TODO ( TODO )
  
 ===== Lucrări ===== ===== Lucrări =====
  
-  * Dacă nu puteți participa la seria fiecăruia, puteți veni la cealaltă serie. Pentru aceasta trimiteți un e-mail catre [[mailto:​rotarualexandruandrei94@gmail.com | Alexandru Rotaru]] cu subiectul ''​[SO][Lucrare X] Transfer Prenume Nume, Grupa''​ unde:+  * Dacă nu puteți participa la seria fiecăruia, puteți veni la cealaltă serie. Pentru aceasta trimiteți un e-mail catre [[elenamihailescu22@gmail.com|Elena]] cu subiectul ''​[SO][Lucrare X] Transfer Prenume Nume, Grupa''​ unde:
     * ''​X''​ este indexul lucrării (1, 2, 3 sau 4)     * ''​X''​ este indexul lucrării (1, 2, 3 sau 4)
     * ''​Prenume''​ este prenumele.     * ''​Prenume''​ este prenumele.
     * ''​Nume''​ este numa.     * ''​Nume''​ este numa.
     * ''​Grupa''​ este grupa.     * ''​Grupa''​ este grupa.
-  * Nu există sesiune de contestații propriu-zisă;​ dacă sunteți de părere că nu a fost corectată corespunzător lucrarea, trimiteți un e-mail (solicitare de recorectare) către [[mailto:​vladimir.olteanu@cs.pub.ro | Vladimir Olteanu]]. Cererile de recorectare se vor trimite după publicarea soluțiilor pe această pagină, până la data limită anunțată pe lista de discuții.+  * Nu există sesiune de contestații propriu-zisă;​ dacă sunteți de părere că nu a fost corectată corespunzător lucrarea, trimiteți un e-mail (solicitare de recorectare) către [[costin.carabas@cs.pub.ro | Costin Carabaș]]. Cererile de recorectare se vor trimite după publicarea soluțiilor pe această pagină, până la data limită anunțată pe lista de discuții.
     * Folosiți subiectul ''​[SO][Lucrare X] Prenume NUME - grupa'';​ de exemplu ''​[SO][Lucrare 1] Andreea POPESCU - 332CA''​.     * Folosiți subiectul ''​[SO][Lucrare X] Prenume NUME - grupa'';​ de exemplu ''​[SO][Lucrare 1] Andreea POPESCU - 332CA''​.
   * Pentru a fi punctat, răspunsul la o întrebare trebuie să fie **justificat**.   * Pentru a fi punctat, răspunsul la o întrebare trebuie să fie **justificat**.
Line 27: Line 43:
 ==== Lucrare 1 ==== ==== Lucrare 1 ====
  
-  * La începutul cursului ​4+  * La începutul cursului ​TBA
-    * 12 martie 2018, seria CA +    * TBA, seria CA 
-    * 14 martie 2018, seria CB +    * TBA, seria CB 
-    * 14 martie 2018, seria CC+    * TBA, seria CC
  
 === 3CA, varianta 1 === === 3CA, varianta 1 ===
  
-  - Explicați diferența dintre descriptorii rezultați din două apeluri de open către acelasi fisier, și un apel de open urmat de un apel dup pe descriptorul rezultat. +  - TODO 
-    * **Răspuns**: ​Descriptorii rezultați din două apeluri de open către același fișier vor indica spre două structuri de fișier deschis diferite, pe când în cazul unui apel ''​open()''​ urmat de un apel ''​dup()''​ descriptorii vor indica spre aceeași structură. +    * **Răspuns**: ​TODO 
-  - Ce va afișa la rulare următorul cod, presupunând că fork este executat cu succes? <code C>  +  -  TODO 
-   int i = fork(); +    * **Răspuns**: ​TODO 
-   if (i==0) +  - TODO 
-     i = getppid();​ +    * **Răspuns**: ​TODO
-   ​else +
-     ​sleep(1);​ +
-    +
-   ​printf(“%d\n”,​ i); +
-</​code>​ +
-    * **Răspuns**: ​La rularea codului se va afișa: \\ <pid-ul procesului părinte>​ \\ <pid-ul procesului copil> \\ \\ Fork returnează 0 în cadrul procesului copil și pid-ul procesului copil în cadrul procesului părinte. Astfel, procesul copil va afla pid-ul procesului părinte și își va continua execuția prin printarea acestuia în timp ce procesul parinte face sleep de 1 secundă. +
-  - Scrieți secvența de cod care implementează comanda <​nowiki>​ls > /​dev/​null</​nowiki>​. +
-    * **Răspuns**: ​<code C> +
-    pid_t pid = fork(); +
-    switch(pid) { +
-    case 0: +
-      fd = open(“/​dev/​null”,​ O_WRONLY | O_TRUNC | O_CREAT, 0644); +
-      dup2(fd, STDOUT_FINENO);​ +
-      close(fd);​ +
-      execlp(“ls”,​ “ls”, NULL); +
-    default: +
-      waitpid(pid,​ NULL, 0); +
-    } +
-</​code>​ \\ De asemenea, au fost punctate și variantele care conțin variante în pseudocod ale apelurilor precum: ''​open("/​dev/​null"​)'',​ ''​exec("​ls"​)''​ etc.+
  
  
 === 3CA, varianta 2 === === 3CA, varianta 2 ===
  
-  - Dați un exemplu de funcție I/O care permite transmiterea de date către disk, rețea și dispozitive de tip caracter. +  - TODO 
-    * **Răspuns**: ​O funcție de I/O care permite transmiterea de date către disk, rețea și dispozitive de tip caracter este apelul de sistem write(). +    * **Răspuns**: ​TODO 
-  - Ce va afișa la rulare următorul cod, presupunând că fork este executat cu succes? <code C> +  -  TODO 
-    int i = fork(); +    * **Răspuns**: ​TODO 
-     +  - TODO 
-    if (i==0) +    * **Răspuns**: ​TODO 
-      i++; +
-    else +
-      sleep(1); +
- +
-    printf(“%d\n”,​ i); +
-</​code>​ +
-    * **Răspuns**: ​La rularea codului se va afișa: \\ 1 \\ <pid-ul procesului copil> \\ \\ Fork returnează 0 în cadrul procesului copil și pid-ul procesului copil în cadrul procesului părinte. Astfel, procesul copil va afla va incrementa variabila i, și o va afișa. Părintele va face sleep de 1 secundă și va afișa pid-ul procesului copil. +
-  - Scrieți secvența de cod care lansează în execuție ''​ls | wc -l''​. +
-    * **Răspuns**: ​O variantă de răspuns posibilă: <code C> +
-    fd_redirect;​+
  
-    fd = fork(); 
-    ​ 
-    if (fd == 0) { //child 
-      close(STDOUT);​ 
-      dup2(STDOUT,​ fd_redirect);​ 
-      exec("​ls"​);​ 
-    } else if (fd > 0) { //parent 
-      close(STDIN);​ 
-      dup2(STDIN, fd_redirect);​ 
-      wait(); //for child 
-      exec("​wc -l"); 
-    } else { 
-      //error 
-    } 
-</​code>​ 
  
 === 3CB, varianta 1 === === 3CB, varianta 1 ===
  
-  - Când este necesară execuția unui apel de sistem? +  - TODO 
-    * **Răspuns**: ​Execuția unui apel de sistem este necesară în momentul în care se interacționează cu hardware-ul. +    * **Răspuns**: ​TODO 
-  - Cum ați implementa redirectarea pentru următoarea comandă bash ''​ls %%>>​%% test.out''​ (este de interes implementarea redirectării,​ în locul comenzii ls putea fi orice alta comandă)? +  -  TODO 
-    * **Răspuns**: ​Variantă de răspuns: <​code>​ +    * **Răspuns**: ​TODO 
-    int fd = open("​test.out"​);​ +  - TODO 
-    close (STDOUT_FILENO);​ +    * **Răspuns**: ​TODO 
-    dup(fd); +
-    close(fd);​ +
-    lseek(STDOUT_FILENO,​0,​ SEEK_END);​ +
-</​code>​ +
-  - Câte procese se pot afla în starea RUNNING la un moment dat? +
-    * **Răspuns**: ​În starea RUNNING, se pot afla la un moment dat un număr de procese egal cu numărul de core-uri ale sistemului de calcul.+
  
 === 3CB, varianta 2 === === 3CB, varianta 2 ===
  
-  - Indicați cel puțin un rol al nucleului (kernel-ului) într-un sistem de calcul. +  - TODO 
-    * **Răspuns**: ​Variante de răspuns: Nucleul are rolul de a abstractiza hardware-ului SAU rol de interfațare a hardware-ului SAU Nucleul oferă controlul accesului la resurse. +    * **Răspuns**: ​TODO 
-  - Ce apeluri de sistem sunt necesare pentru a porni două procese care comunică prin intermediul unui pipe (ex ''​ls | grep test''​)?​ +  -  TODO 
-    * **Răspuns**: ​O variantă de răspuns: Apelurile de sistem necesare pentru a porni două procese care comunică prin intermediul unui pipe sunt ''​fork()''​ pentru crearea celor două procese, ''​pipe()''​ pentru deschiderea unor pipe-urilor folosite de cele două procese, ''​close()''​ pentru închiderea unuia din capetele pipe-urilor create înainte, ''​dup2()''​ pentru redirectarea capetelor pipe-ului și ''​execve()''​ pentru execuție. +    * **Răspuns**: ​TODO 
-  - Care este cauza principală pentru care un proces este în starea WAITING? +  - TODO 
-    * **Răspuns**: ​În general un proces ajunge în starea de WAITING în urma efectuării unei operații blocante.+    * **Răspuns**: ​TODO
  
 === 3CC, varianta 1 === === 3CC, varianta 1 ===
  
-  - Stiva de rețea a unui sistem de operare poate fi implementată în user space sau în kernel space. De ce se preferă implementarea în kernel space? +  - TODO 
-    * **Răspuns**: ​Preferăm implementarea stivei de rețea în kernel space din rațiuni de performanță. Prelucrarea pachetelor se întâmplă în kernel space iar tranziția (costisitoare) către și din user space are loc doar pentru payload-ul pachetelor. +    * **Răspuns**: ​TODO 
-  - Dați un exemplu de apel de bibliotecă/​sistem,​ altul decât ''​open()/​fopen()''​ care duce la ocuparea unei intrări din tabela de descriptori de fișier a unui proces. +  -  TODO 
-    * **Răspuns**: ​Popularea unei intrări în tabela de file descriptori se poate face cu apelul ''​dup()''​ (sau ''​dup2()''​) pentru duplicarea unei intrări existente sau cu apeluri precum ''​socket()''​ sau ''​pipe()''​ pentru crearea unui socket sau a unui pipe care ocupă, respectiv, o intrare și două intrări. +    * **Răspuns**: ​TODO 
-  - Un proces execută apelul ''​getppid()''​ în două situații diferite. În prima situație apelul întoarce valoarea 2832, iar în a doua situație apelul întoarce valoarea 1. Cum explicați? +  - TODO 
-    * **Răspuns**: ​''​getppid()''​ întoarce pid-ul procesului părinte. În prima situație valoarea returnată este diferită de 1 deoarece procesul are un părinte (creator) care încă rulează. În cea de-a doua situație procesul a fost adoptat de init deoarece părintele creator al procesului și-a terminat execuția și nu l-a așteptat. +    * **Răspuns**: ​TODO
  
 === 3CC, varianta 2 === === 3CC, varianta 2 ===
  
-  - Oferiți un motiv pentru care este necesară existența modului privilegiat (supervisor/​kernel mode) într-un sistem de calcul. +  - TODO 
-    * **Răspuns**: ​Este nevoie de modul privilegiat pentru a asigura integritatea sistemului, izolarea între procese și accesul mediat la resurse. În absența modului privilegiat (kernel/​supervisor mode), un proces ar putea scrie în memoria altui proces, ar putea corupe resurse sau ar putea citi informații de la resursele I/O fără să știe dacă sunt ale sale sau alte altcuiva. +    * **Răspuns**: ​TODO 
-  - Care este un avantaj și un dezavantaj al folosirii apelului ''​printf()''​ în locul apelului ''​write()''​ pentru afișarea unui mesaj la ieșirea standard a unui proces? +  -  TODO 
-    * **Răspuns**: ​Avantajele folosirii ''​printf()''​ sunt: formatare, portabilitate,​ mai puține apeluri de sistem (când mesajul este buffered). Dezavantaje:​ buffer-ul ocupă memorie, nu se afișează instant mesajul (este buffered). +    * **Răspuns**: ​TODO 
-  - Unui proces îi expiră cuanta de rulare (time slice) în momentul în care rulează pe un procesor (se află în starea RUNNING). Ce se întâmplă cu procesul? +  - TODO 
-    * **Răspuns**: ​La expirarea cuantei de timp, un proces este mutat din starea RUNNING în starea READY, unde va rămâne până va fi din nou planificat: adică până atunci când va primi o altă cuantă de rulare și va fi lăsat să ruleze pe procesor.+    * **Răspuns**: ​TODO
  
  
 === Greșeli frecvente === === Greșeli frecvente ===
- 
  
 === Lucrări foarte bune === === Lucrări foarte bune ===
Line 149: Line 114:
  
  
-  * La începutul cursului ​7+  * La începutul cursului ​TBA
-    * 2 aprilie 2018, seria CA +    * TBA, seria CA 
-    * 4 aprilie 2018, seria CB +    * TBA, seria CB 
-    * 4 aprilie 2018, seria CC+    * TBA, seria CC
  
 === 3CA, varianta 1 === === 3CA, varianta 1 ===
  
-  - Presupunând un sistem cu timp de access la RAM de 100ns, ​ ̧si  ̧stiind că un +  - TODO 
-context conține zece valori ale regiștrilor,​ estimați timpul necesar pentru o schimbare +    * **Răspuns**: ​TODO 
-de context. +  -  ​TODO 
-    * **Răspuns**: ​Worst case: 10 read * 100ns, 10 write * 100ns = 2 microsecunde. Dacă sunt în cache, timpul poate fi mai mic. +    * **Răspuns**: ​TODO 
-  - Un proces execută următorul cod: <code C> +  - TODO 
-for (i=0; i<​100000;​ i++) +    * **Răspuns**: ​TODO 
-  if (fork() == 0) +
-    exit(1); +
-</​code>​ Care este consumul total de memorie fizică folosită de toate procesele copil în plus față de procesul părinte, exceptând structurile de date din kernel? +
-    * **Răspuns**: ​Variantă răspuns: ​ Fiecare proces copil va aloca o pagină pentru stivă prin mecanismul copy-on-write (care va fi scrisă atunci când funcția exit își inițializează stack-frame-ul,​ salvând base pointer). Consumul total va fi 400MB. Variantă de răspuns acceptată: nu se va aloca nici o pagină în copil din cauza copy-on-write,​ pentru că nu se modifică nici o variabilă. +
-  -  Dați un exemplu de algoritm de înlocuire de pagini pentru care creșterea memoriei fizice nu garantează reducerea numărului de major page faults. +
-    * **Răspuns**: ​FIFO.+
  
 === 3CA, varianta 2 === === 3CA, varianta 2 ===
  
-  -  ​Într-un sistem preemptiv cu planificator round-robin,​ explicați dacă este posibil ca două procese ce sunt planificate alternativ pe același procesor să primească timp de procesor diferit. +  - TODO 
-    * **Răspuns**: ​Procesele sunt I/O bound. +    * **Răspuns**: ​TODO 
-  - Dați un exemplu de situație în care unei pagini din procesul părinte nu i se aplică mecanismul copy-on-write după apelul ''​fork()'',​ deși pagina respectivă este scrisă atât de copil cât și de părinte. +  -  TODO 
-    * **Răspuns**: ​Pagina a fost mapată cu ''​mmap (..., MAP_SHARED,​...)'';​ +    * **Răspuns**: ​TODO 
-  - Dați avantaj și un dezavantaj al memory-mapped IO comparativ cu standard I/O. +  - TODO 
-    * **Răspuns**: ​Memory mapped I/O este mult mai rapid în general pentru că nu implică syscalls la fiecare acces; deasemenea mecanismul de paging nu încarcă în memorie decât paginile efectiv accesate. Orice eroare de I/O, de exemplu disk removed, este transmisă procesului prin semnale de genul SIGSEGV sau SIGBUF - iar programele trebuie să prindă și să trateze aceste semnale explicit. În cazul standard IO tratarea astfel de erori e mult mai simplă (-1, look at errno). +    * **Răspuns**: ​TODO 
  
 === 3CB, varianta 1 === === 3CB, varianta 1 ===
  
-  - Într-un sistem doar cu procese I/O intensive, cuanta de rulare pe procesor ar trebui să fie mai mică sau mai mare decât în mod obișnuit pentru a eficientiza per ansamblu sistemul? Explicați. +  - TODO 
-    * **Răspuns**: ​Cuanta de rulare trebuie să fie mai mică întrucât subsistemele I/O sunt mult mai încete ca procesorul iar o cuantă de rulare mai mare nu ar face decât să blocheze procesorul fără ca acesta să execute nimic util. +    * **Răspuns**: ​TODO 
-  - Câte operații sunt necesare într-o arhitectură load/store pentru a copia o valoare între 2 locații de memorie RAM? +  -  TODO 
-    * **Răspuns**: ​2 operații (încărcare din memorie în registru și salvare din registru în memorie). +    * **Răspuns**: ​TODO 
-  - Alocăm un spațiu contiguu de 128MB folosind apelul mmap. Presupunând că dimensiunea paginii este de 4K, care este numărul maxim de page-fault-uri ce vor putea fi generate? +  - TODO 
-    * **Răspuns**: ​128MB / 4k = 32K page fault-uri. +    * **Răspuns**: ​TODO
  
 === 3CB, varianta 2 === === 3CB, varianta 2 ===
  
-  - Într-un sistem doar cu procese CPU intensive, cuanta de rulare pe procesor ar trebui să fie mai mică sau mai mare decât în mod obișnuit pentru a eficientiza per ansamblu sistemul? Explicați. +  - TODO 
-    * **Răspuns**: ​ ​Cuanta de rulare trebuie să fie mai mare întrucât la un context switch se pierde o perioadă importantă de timp, iar dacă cuanta ar fi prea mică, mai mult am sta în schimbarea de context decât să procesăm volumul mare de date pe procesor. +    * **Răspuns**: ​TODO 
-  - Precizați un avantaj și un dezavantaj al paginării. +  -  TODO 
-    * **Răspuns**: ​Avantaje: memoria ocupată per proces, un proces are acces la tot spațiul virtual de memorie propriu, etc; Dezavantaje:​ mai multe accese la memoria fizică, prezența hardware-ului specializat (MMU, TLB), etc +    * **Răspuns**: ​TODO 
-  - Precizați 2 cazuri care generează un page fault atunci când accesăm o adresă validă de memorie. +  - TODO 
-    * **Răspuns**: ​Swapping, Demand paging.+    * **Răspuns**: ​TODO
  
 === 3CC, varianta 1 === === 3CC, varianta 1 ===
  
-  - De ce este important ca prioritățile proceselor să fie dinamice, nu statice, în contextul planificării proceselor? +  - TODO 
-    * **Răspuns**: ​Dacă prioritățile sunt statice, atunci procesele prioritare vor rula întotdeauna în fața celor mai puțin prioritare. Dacă sunt CPU bound, atunci acestea vor ocupa foarte mult procesorul și procesele mai puțin prioritare vor avea puțin timp să ruleze, ducând la starvation. +    * **Răspuns**: ​TODO 
-  - La ce este folosit PTBR (Page Table Base Register)? De ce sistemul nu ar putea funcționa fără un PTBR? +  -  TODO 
-    * **Răspuns**: ​PTBR este folosit pentru a referi adresa fizică a tabelei de pagini a procesului curent. În abența PTBR-ului, nu am avea un mod prin care să identificăm tabele de pagini a unui proces și deci nici un mod prin care să putem face translatarea de adrese când folosim memorie virtuală. +    * **Răspuns**: ​TODO 
-  - Apelul de mai jos este efectuat cu succes. În ce situație duce apelul la două page fault-uri? <​code>​ +  - TODO 
-       ​memset(a,​ 0, 8); /* fill a with 8 bytes of 0 */ </​code>​ +    * **Răspuns**: ​TODO 
-    * **Răspuns**: ​ ​Scrisul de 8 octeți poate genera două page fault-uri atunci când sunt “atinse” două pagini de memorie care fie sunt în demand paging fie swappate. Dacă avem, de exemplu, 4 octeți pe o pagină (la sfârșit) și 4 octeți în pagina următoare (la început) vor rezulta două page fault-uri.+
  
 === 3CC, varianta 2 === === 3CC, varianta 2 ===
  
-  -  De ce procesele I/O bound primesc, ​ în general, o cuantă de timp de rulare mai mare? +  - TODO 
-    * **Răspuns**: ​ ​Procesele I/O bound sunt procese care se blochează des (și generează schimbări de context voluntare). Le alocăm o cuantă de timp mai mare pentru că nu vor apuca să o consume, se vor bloca. La următoarea planificare va consuma din restul de cuantă. Un proces CPU bound primește o cuantă mai mică pentru a fi forțat să iasă de pe proces (schimbare de context nevoluntară) atunci când îi expiră cuanta. +    * **Răspuns**: ​TODO 
-  - De ce este utilă prezența unei zone dedicate pentru kernel în spațiul virtual de adrese al fiecărui proces, față de un spațiu virtual de adrese dedicat pentru kernel? +  -  TODO 
-    * **Răspuns**: ​La un apel de sistem se schimbă nivelul de privilegiu al procesorului dar nu se schimbă tabela de pagini, pentru că nu se schimbă spațiul de adresă. În felul acesta nu mai facem flush la TLB și avem overhead mai redus. În cazul în care kernel-ul ar avea un spațiu virtual de adrese propriu ar trebui făcută schimbarea tabelei de pagini (și flush la TLB). +    * **Răspuns**: ​TODO 
-  - De ce zona de text/cod a bibliotecii standard C poate fi partajată între mai multe procese, dar nu și zona de date? +  - TODO 
-    * **Răspuns**: ​Zona text este o zona read-only, pe când zona de date e modificabilă. Întrucât modificările trebuie să fie vizibile doar la nivelul procesului curent, zona de date e unică per proces (și nepartajate). Zona text nu se modifică și poate fi partajată de mai multe procese. +    * **Răspuns**: ​TODO
- +
-=== Greșeli frecvente ===+
  
  
 +=== Greșeli frecvente ===
  
 === Lucrări foarte bune === === Lucrări foarte bune ===
Line 226: Line 183:
 ==== Lucrare 3 ==== ==== Lucrare 3 ====
  
-  * La începutul cursului ​11: +  * La începutul cursului ​TBA
- +    * TBA, seria CA 
-    * 7 mai 2018, seria CA +    * TBA, seria CB 
-    * 9 mai 2018, seria CB +    * TBA, seria CC
-    * 9 mai 2018, seria CC+
  
 === 3CA, varianta 1 === === 3CA, varianta 1 ===
Line 236: Line 192:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
Line 245: Line 201:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
Line 254: Line 210:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
- 
  
 === 3CB, varianta 2 === === 3CB, varianta 2 ===
Line 264: Line 219:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
Line 273: Line 228:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
 +
  
 === 3CC, varianta 2 === === 3CC, varianta 2 ===
Line 282: Line 238:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
 +
  
 === Greșeli frecvente === === Greșeli frecvente ===
 + .
  
  
Line 296: Line 253:
 ==== Lucrare 4 ==== ==== Lucrare 4 ====
  
-  * La începutul cursului ​13+  * La începutul cursului ​TBA
-    * 21 mai 2018, seria CA +    * TBA, seria CA 
-    * 23 mai 2018, seria CB +    * TBA, seria CB 
-    * 23 mai 2018, seria CC+    * TBA, seria CC
  
 === 3CA, varianta 1 === === 3CA, varianta 1 ===
Line 305: Line 262:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
 +
  
 === 3CA, varianta 2 === === 3CA, varianta 2 ===
Line 314: Line 272:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
 +
  
 === 3CB, varianta 1 === === 3CB, varianta 1 ===
Line 323: Line 282:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
- 
  
 === 3CB, varianta 2 === === 3CB, varianta 2 ===
Line 333: Line 291:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
Line 342: Line 300:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
 +
  
 === 3CC, varianta 2 === === 3CC, varianta 2 ===
Line 351: Line 310:
   - TODO   - TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
-  - TODO+  -  TODO
     * **Răspuns**:​ TODO     * **Răspuns**:​ TODO
   - TODO   - TODO
Line 359: Line 318:
 === Greșeli frecvente === === Greșeli frecvente ===
  
 + 
 +=== Lucrări foarte bune ===
  
 +</​hidden>​
 +</​spoiler>​
  
-=== Lucrări foarte bune === 
  
  
 ===== Examene anterioare ===== ===== Examene anterioare =====
  
 +  * [[:​so:​meta:​examen:​2019-2020 | Examene și lucrări 2019-2020]]
 +  * [[:​so:​meta:​examen:​2018-2019 | Examene și lucrări 2018-2019]]
 +  * [[:​so:​meta:​examen:​2017-2018 | Examene și lucrări 2017-2018]]
   * [[:​so:​meta:​examen:​2016-2017 | Examene și lucrări 2016-2017]]   * [[:​so:​meta:​examen:​2016-2017 | Examene și lucrări 2016-2017]]
   * [[:​so:​meta:​examen:​2015-2016 | Examene și lucrări 2015-2016]]   * [[:​so:​meta:​examen:​2015-2016 | Examene și lucrări 2015-2016]]
so/meta/examen.1522864305.txt.gz · Last modified: 2018/04/04 20:51 by maria.mihailescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0