Sunteți pe pagina 1din 21

S

O
2
0
2
1
-
2
0
2
2
:
Î
n
t
r
e
b
ă
r
i
e
x
a
m
e
n
o
r
a
l
Aceste întrebări vor fi folosite pentru discuția de la examenul oral de SO. Nu sunt singurele
întrebări care vor fi prezente în discuție; de la aceste întrebări discuția va atinge și alte
noțiuni prezentate la cursul de SO.

Loc de tinut cursorul

Stiva software
1. Ce este un apel de sistem?
R: O tranzitie din user space in kernel space/O exceptie/O intrerupere
R2: functie pusa la dispozitie de sistemul de operare ce permite unei aplicații sa
efectueze acțiuni în kernel space

2. De ce sunt necesare apeluri de sistem?


R: In cazul in care un proces vrea sa faca actiuni care pot fi facute doar in kernel
mode(read, write, etc)

3. Ce avantaj / dezavantaje au apelurile de sistem?


R: Dezavantaj: Overhead din cauza ca este o intrerupere
Avantaj: Permite o delimitare mai buna a permisiunilor utilizatorilor/Siguranta mai
buna? (nu sunt sigur)
are grija ca nimic din sistem sa nu fie compromis (securitate mai buna) ?

4. Ce înseamnă user/application mode/space (mod neprivilegiat)? Ce înseamnă


kernel/supervisor mode/space (mod privilegiat)?
R: User space presupune utilizarea unor operatii mai simple care nu au nevoie in
mod special de interventia sistemului de operare cum ar fi operatii algebrice, accesul
memoriei, lucrul cu stringuri. Kernel mode are privilegii la nivelul sistemului de
operare, pe care din motive de securitate user mode nu le are.

5. Cum se realizează tranziția în mod privilegiat?


R: Printr-un apel de sistem (ceea ce presupune o intrerupere)

6. Ce se întâmplă în momentul tranziției în mod privilegiat? Cum se/Cine asigură


(enforcement) existența modului privilegiat?
R:

7. Ce este o bibliotecă?
R: O colectie de functii si/sau de tipuri de date.

8. Care este asocierea apel de bibliotecă / apel de sistem?


R: Un apel de biblioteca poate include efectuarea unui apel de sistem

9. Care este rolul bibliotecii standard C (libc)?


R: libc = cea mai importantă bibliotecă low level care face legătura directă cu
kernelul
+ ofera portabilitate pentru orice OS
https://stackoverflow.com/questions/11372872/what-is-the-role-of-libcglibc-in-our-linu
x-app

10. Ce acțiuni se pot executa doar în mod privilegiat?


R: Accesarea resurselor hardware (alocare dinamica de memorie, asteptarea pentru
input de la anumite device-uri )

11. Ce operații / instrucțiuni low-level (ISA) se pot executa doar în mod privilegiat?
R:hlt am gasit

12. Ce este un sistem de operare monolitic?


R: SO se împart în 2 tipuri: monolithic (toate serviciile sunt în kernel) şi microkernel
(doar cele de bază sunt în kernel, restul sunt mutate în user space).

13. Ce este un sistem de operare de tip microkernel?


R:

14. Care sunt avantajele unui sistem de operare monolitic?


R: mai rapid, overhead mai mic

15. Care sunt avantajele unui sistem de operare de tip microkernel?


R: overhead mai mare, dar sunt mai bine separate serviciile, securitatea e mai buna

16. Care tip de sistem de operare are mai multe apeluri de sistem?
R: microkernel - necesita mai multe apeluri de sistem pentru ca separarea intre user
și kernel space e mai mare

17. Care este avantajul folosirii mașinilor virtuale din perspectiva securității?
R: Avand un sistem izolat de restul arhitecturii, odata compromis, poate fi pur si
simplu sters / resetat, fiind independent

18. Ce este o bibliotecă statică? Ce este o bibliotecă dinamică?


R: Biblioteca statica este preexistenta in memoria programului la compilare,
biblioteca dinamica este incarcata la runtime.

19. Când preferăm folosirea static linking, respectiv dynamic linking? Cu ce diferă un
executabil dinamic de un executabil static?
R: Static linking aduce portabilitate si loading time constant, dar va genera un
executabil mai mare in dimensiune. La cel dinamic bibliotecile fiind aduse la run time
pot exista probleme la portabilitate.

20. Dați exemplu de apel de sistem blocant.


R: cred ca wait sper sa mai confirme cineva
read() e blocant daca nu se poate efectua citirea, programul ramane blocat pana
cand va fi disponibila (si write() e similar)

21. Dați exemplu de apel de sistem neblocant.


R:getpid

22. De ce, în general, o aplicație trebuie să execute un apel de sistem pentru a accesa
un dispozitiv hardware? De ce NU poate accesa direct dispozitivul hardware?
R: Adica de ce este nevoie de system calls ? Pentru a comunica cu dispozitivele de
I/O de exemplu.

23. Ce înțelegem prin overhead spațial și overhead temporal?


R: Overhead-ul temporal se refera la timpul petrecut in tranzitia user mode - kernel
mode.

24. Dați exemplu de mecanism / funcție care reduce overhead-ul spațial și unul care
reduce overhead-ul temporal.
R: mmap le reduce pe amandoua

25. Ce înseamnă double buffering? În ce situație concretă (mecanism/funcție) apare?


R: Double buffering problem apare cand se creaza un overhead spatial (pentru ca,
de exemplu, avem si user space buffer si kernel space buffer) dar si un overhead
temporal (ca se transfera datele de colo-colo).
O situatie concreta… nu stiu printf ? ca el foloseste super multe buffere

26. Ce se întâmplă când există o eroare critică (de tip Segmentation fault) la nivelul
sistemului de operare?
R:

Scheduling
1. Ce este un proces?
R: Un proces inseamna un task. Când am mai multe aplicaţii distincte, am nevoie de
procese. Dacă am o singură aplicaţie tot am nevoie de procese pentru că poate
vreau să rulez mai multe instanţe ale aplicaţiei.

Procesul este un program în execuţie.

2. Ce este un thread?
R: Conceptul de thread (fir de execuție) definește cea mai mică unitate de procesare
ce poate fi programată spre execuție de către sistemul de operare.

3. Cu ce diferă un thread de un proces?


R: Un thread poate fi continut de un proces… ?
Un proces are cel putin un thread, altfel spus thread-ul este cea mai mica
unitate de procesare ca mai sus.

4. Cum este afectat spațiul virtual de adrese al unui proces în momentul creării unui
thread?
R: este afectat ? :)))
R: Creste pentru fiecare thread, deoarece pt fiecare thread se rezerva cate o stiva.

5. Ce zone de memorie au comune thread-urile unui proces și ce zone au specifice?


R: Fiecare are stiva si heap ul lui si thread local storage, restul is comune
R: Thread-urile apartinand aceluiasi proces au în comun spatiul virtual de adrese,
file descriptorii(FD Table) și PCB-ul procesului din care fac parte.

6. Ce conține PCB (Process Control Block)?


R: PCB-ul fiecărui proces conţine

- listă de TCB-uri (thread control block)

- un fdtable

- VAS (spatiu virtual de adrese)


7. Care sunt stările în care se poate găsi un proces/thread?
R: new, ready, running, waiting, terminated

8. Ce efect are apelul fork()?


R: fork face o copie a procesului parinte si se mapeaza la apelul de sistem clone.
Atunci când facem fork() se crează un nou VAS pentru că se crează un nou proces
(într-adevăr acesta este un fel de copie fidelă a VAS-ului părintelui da

r atunci când facem exec acest VAS este transformat, are un alt conţinut faţă de cel
al părintelui). De unde iau informaţiile pentru popularea VAS-ului, pt. modificarea sa ?
Din executabil. Din exec. Acesta are zonele statice (text, data, rodata, bss) şi se
crează şi zonele dinamice (stack, heap, libs).

DECI Efectul principal al apelului fork este că avem un nou proces iar efectul
principal al apelului exec este că schimbă imaginea procesului, adică avem un nou
spaţiu virtual de adrese.

9. Ce resurse partajează/nu partajează procesul părinte și procesul copil în cazul


apelului fork()?
R: Partajeaza:
-> program counter
-> registre de pe cpu
-> open files(fd table i guess)
NU partajeaza:
-> process ID
-> ???????

10. Ce efect are apelul exec()?


R: vezi intrebarea 8
The exec() call replaces the entire current contents of the process with a new
program. It loads the program into the current process space and runs it from the
entry point.

11. Câte procese se pot găsi în starea RUNNING, READY și WAITING?


R: running - oricate procesoare avem; ready/waiting - oricate

12. Ce este o schimbare de context? Ce se întâmplă la o schimbare de context?


R: se schimba threadul care ruleaza pe procesor

13. Ce cauzează schimbări de context?


R: threadului running i s-a terminat cuanta de timp; threadul running face o operatie
blocanta; a aparut un nou thread cu prioritate mai mare
R2: Schimbările de context: voluntare (yeld şi operaţiile blocante) şi nevoluntare
(expiră cuanta şi niceness, priority).

14. Ce este o schimbare de context voluntară și o schimbare de context nevoluntară?


R: voluntara - threadul cedeaza procesorul; nevoluntara - threadul este preemptat de
scheduler

15. Ce sunt thread-urile cu implementare user-level și thread-urile cu implementare


kernel-level?
R: Când creez un thread nou folosind pthread_create se crează un nou TCB la
nivelul nucleului (kernel level threads, sunt threaduri de care nucleul este aware).

Pot avea scheduler în user-space (user level threads, controlul complet e la nivelul
bibliotecii de threaduri). Ce fel de schimbări de context se pot face la acest nivel ?
Doar voluntare. Avantajul folosirii threadurilor la acest nivel ar fi că nu face context
switch. Reducem tranziţia către kernel space şi câştigăm timp. Dezavantajul ar fi că
(pentru că nu sunt văzute de SO) rulează pe un singur nucleu. Soluţia ar fi să creezi
mai multe procese, să le asociezi cu procesoarele şi în acele procese să foloseşti
threaduri la nivel user level threads.

Kernel level threads sunt mai ok pt I/O şi pt context switch.

16. În ce situație este utilă zona TLS (thread local storage)?


R: cand vreau sa am variabile globale per thread

17. De ce este necesară sincronizarea proceselor/thread-urilor?


R: pot aparea race conditions

18. Ce înseamnă race condition?


R: doua threaduri modifica aceeasi resursa, ceea ce duce la un rezultat gresit

19. Ce înseamnă deadlock?


R: Doua threaduri au nevoie fiecare de o resursa de la celalat pentru a-si incheia
executia

20. Ce înseamnă livelock? Cum diferă de un deadlock?


R: Livelockurile nu evolueaza. seamana cu deadlockurile, doar ca isi schimba mereu
starea si de fapt nu prea fac nimic

21. Care sunt dezavantajele sincronizării?


R: Overhead suplimentar pt verificari

22. Ce înseamnă TOCTTOU (time of check to time of use)?


R: intre verificarea validitatii resursei și folosirea ei de catre un thread trece timp in
care resursa se poate modifica, invalidand verificarea

23. Când se blochează un producător în problema producător-consumator? Dar un


consumator?
R: producatorul se blocheaza cand bufferul/coada este plin; consumatorul se
blocheaza cand bufferul este gol

24. Cum se implementează pe un sistem single-core un spinlock? Cum se


implementează pe un sistem multi-core un spinlock?
R:

25. De ce este necesară prezența unei instrucțiuni de tipul atomic_compare_and_swap


în fiecare ISA?
R:

26. Cu ce diferă un spinlock de un mutex? Când folosim spinlock-uri? Când folosim


mutex-uri?
R: Spinlockul este un intreg si cred ca il contine mutexul.. Si cred ca se foloseste
cand lockul pe mutex nu e atomic, deci pui si un lock pe spinlock
Spinlock-ul face busy waiting, e fol pt kernel threads, ca te astepti sa treaca un
interval f mic de timp pana sunt scheduled

27. Ce efect are folosirea operatorului & din shell în crearea unui proces?
R: procesul se executa in background, shellul nu asteapta terminarea acestuia

28. Ce este un proces zombie? Cum apare un proces zombie? Care este problema
proceselor zombie?
R: proces care nu este asteptat de parinte; apare daca parintele nu apeleaza wait();

29. Ce este un proces orfan? De ce un proces este orfan foarte puțin timp?
R: proces al carui parinte s-a terminat inaintea lui; este “adoptat” in scurt timp de init
deoarece niciun alt proces nu poate sa nu aiba parinte

30. Poate fi un proces zombie orfan? Ce se întâmplă cu un proces zombie orfan?


R: Da, pe o perioada foarte scurta. E adoptat rapid de init si omorat

31. Ce se întâmplă dacă un thread realizează un acces invalid la o zonă de memorie?


R:

32. Poate un thread să acceseze stiva altui thread? Cum?


R: Se poate dar nu stiu cum exact :))
R: cred ca poate dacă ii obtine adresa

33. De ce schimbarea de context între două thread-uri ale aceluiași proces este mai
rapidă decât schimbarea de context între două thread-uri din procese diferite?
R:Deoarece nu se face flush la tlb

34. Ce forme de comunicare inter-proces cunoști?


R:Socketi, pipe-uri

35. Ce este un semnal? Când se trimite un semnal către un proces?


R: Semnalele sunt intreruperi software, mesaje standardizate trimise catre un
program care ruleaza ca sa delanseze diferite comportamente.

36. Cine trimite un semnal unui proces?


R: ori sistemul de operare(în cazul erorilor) ori un alt proces sau procesul în sine care
și poate trimite singur semnale

37. Cum este implementat operatorul | din shell?


R: Se creaza un pipe care redirecteaza stdoutul primului proces la stdinul celui de-al
doilea

38. Care sunt avantajele și dezavantajele folosirii memoriei partajate pentru comunicarea
inter-proces?
R:

39. Care sunt avantajele și dezavantajele pipe-urilor pentru comunicarea inter-proces?


R:

40. Ce se întâmplă când toate procesele sistemului sunt blocate?


R:

41. Ce înseamnă waiting time (timp de așteptare) în planificarea proceselor?


R: timpul petrecut de un thread în starea waiting

42. Putem avea un sistem multi-core cu un singur proces aflat în starea RUNNING și mai
multe procese în READY?
R: why not ??

43. Ce înseamnă starea READY/RUNNING/TERMINATED/WAITING(BLOCKED)?


R: ready - threadul este gata de rulare; running - threadul rulează pe procesor;
terminated - threadul și-a terminat execuția; waiting - threadul așteaptă rezultatul
unei operații blocante

44. Ce este un proces I/O intensive?


R: un proces care efectuează multe operații I/O și care va aștepta mult rezultatele
acestora

45. Ce este un proces CPU intensive?


R: Ce consuma multe resurse de procesor (inm de matrici de ex)

46. Cum tratează planificatorul procesele I/O intensive și procesele CPU intensive?
R:I/O intensive cuanta mare, CPU intensive cuanta mica

47. Două thread-uri ale unui proces execută aceeași funcție. Care sunt diferențele între
cele două thread-uri?
R:Fiecare are propria stiva

48. Ce este un apel thread-safe? Ce este un apel reentrant?


R:

49. Cum tratăm situația în care apelăm o funcție non-reentrantă într-un handler de
semnal?
R: Ca o funcţie să fie reentrantă ar însemna ca oricare thread o apelează să fie okay.
(Adică dacă doar threadul 1 apelează malloc nu e neapărat okay pentru threadul 2.)
Depinde de context…
O funcţie thread safe este o funcţie care este okay să fie apelată de mai multe
threaduri în acelaşi timp (nu provoacă probleme).

Functiile reentrante sunt thread safe. Invers nu.

50. Cu ce diferă procesul copil (creat prin fork) de procesul părinte?


R: PID

51. Cu ce diferă un proces zombie de un proces orfan?


R: zombie - si-a incheiat executia si asteapta dupa parinte sa si-o incheie
orfan - ii moare parintele si el mai ruleaza. E adoptat de init

52. Ce parametri ai planificatorului trebuie să modificăm pentru a avea un sistem cu


productivitate mai mare?
R:cuanta marita

53. Ce parametri ai planificatorului trebuie să modificăm pentru a avea un sistem cât mai
interactiv (responsive)?
R:cuanta miscsorata

54. Am avea nevoie de folosirea unui apel de sistem pentru crearea unui thread în cazul
unei implementări de tip user-level threads? Dar în cazul deschiderii unui fișier în
același scenariu?
R:

55. Ce se întâmplă dacă folosim apeluri de sistem blocante în interiorul unui spinlock?
R:

56. De ce este necesară folosirea prefixului LOCK pentru realizarea operațiilor atomice?
R:

Memorie
1. Cum asigură sistemul de operare separația între procese?
R: Fiecare are propriul VAS care se mapeaza la RAM

2. Ce înseamnă mecanismul de memorie virtuală?


R:
3. Ce reprezintă spațiul virtual de adrese al unui proces?
R:

4. Ce este paginarea memoriei?


R: Memoria e impartita in pagini de dimensiune data (default 4096B)

5. Ce este fragmentarea internă a memoriei?


R:

6. Ce este fragmentarea externă a memoriei?


R:

7. Ce rol are tabela de pagini?


R:Tine minte maparea adreselor virtuale la cele reale

8. Ce este și ce rol are MMU (Memory Management Unit)?


R:Translateaza adrese virtuale la adrese reale

9. Ce rol are TLB?


R:Cache pt PT

10. Care este ordinul de mărime al numărului de intrări ale TLB?


R:

11. Ce conține o intrare în tabela de pagini?


R:O adresa reala (in memoria fizica)
Continuare R: o adresa din memoria virtuala este INDEXUL in aceasta tabela.
Mai poate contine flaguri, librarii…

12. Ce înseamnă tabelă de pagini multi-nivel (ierarhică)? De ce este utilă?


R:Nu mai stocam atat in memorie(putem avea pointeri la adrese pe disc)

13. Când are loc un TLB miss?


R:Adresa virtuala nu e in TLB, trebuie luata din PT

14. De ce se golește TLB-ul (TLB flush) la schimbare de context?


R: Procesele nu au acelasi VAS, maparile nu au sens decat in cadrul procesului

15. De ce nu este nevoie de TLB flush la schimbarea de context între două thread-uri ale
aceluiași proces?
R:spatiul de adrese ramane la fel

16. Ce înseamnă mecanismul de copy-on-write?


R:

17. Dați exemple de situații în care are loc mecanismul de copy-on-write.


R:
18. Cu ce apel de sistem asociem copy-on-write?
R:

19. Când se duplică o pagină marcată copy-on-write?


R:

20. Cine detectează un acces de scriere într-o pagină marcată copy-on-write?


R:

21. Ce înseamnă demand paging?


R:Incarcare lazy

22. În ce situație apare page fault fără a cauza segmentation fault?


R:S-a rezervat spatiu in memorie dar nu si pagini
Continuare R: la malloc se intampla sa rezervi memorie si cand incerci sa o accesezi
se creaza un page fault, nu da seg fault. e principiul de on demand paging
si mai apare page fault la copy on write.

23. Ce rol are spațiul de swap?


R:

24. Când are loc swap in și swap out?


R:

25. Care este rolul unui page fault? În ce condiții apare?


R: Dacă accesezi o pagină invalidă, vei avea page fault.
Mai avem page fault dacă nu avem permisiuni să executăm ce vrem noi să facem pe
ea.

26. Care sunt secțiunile/zonele din spațiul de adrese al unui proces?


R:

27. Ce secțiuni ale unui executabil se pot inspecta doar în timpul rulării?
R:

28. Care sunt zonele writable din spațiul de adrese al unui proces?
R:

29. De ce sunt avantajoase bibliotecile dinamice pentru spațiul de adrese al unui proces?
R:

30. Două procese sunt pornite din același executabil, ce zone din spațiul de adrese vor
partaja?
R: zonele read only cum ar fi zona de text

31. Se alocă un buffer a[100]. De ce a[105] NU va rezulta, în general, în Segmentation


fault?
R: index out of bounds?
Fara mecanisme de protectie se poate merge mai departe de limita buffer-ului si se
gaseste ce este in memorie la locul respectiv.

R:

32. În ce situație a[300] rezultă în Segmentation fault?


R:

33. Câte pagini fizice alocă un apel mmap() care alocă 1MB? O pagină ocupă 4KB.
R:

34. Câte pagini fizice alocă un apel calloc() care alocă 1MB? O pagină ocupă 4KB.
R: 0 initial, aloca doar in VAS

35. Ce înseamnă maparea unui fișier în memorie? De ce este avantajos să mapăm


fișiere față de folosirea read/write?
R:

36. Câte page fault-uri se pot obține în cazul operației *a = b?


R:

37. Care este numărul maxim de page fault-uri pe care îl poate genera expresia a = b +
c?
R:

38. Ce informații sunt reținute în stivă? Ce variabile C?


R:

39. În ce zonă sunt reținute variabilele globale inițializate și cele neinițializate?


R: initializate - .data?; neinitializate - .bss

40. Ce înseamnă operația de stripping a unui executabil?


R:

41. Ce se întâmplă la faza de loading (încărcarea unui executabil în memorie și crearea


unui proces)?
R:

42. Ce este entry point-ul într-un executabil?


R: adresa de memorie de la care incepe executia (functia main)

43. Ce utilitare cunoașteți pentru analiză dinamică și ce utilitare cunoașteți pentru analiză
statică?
R: dinamica - gdb; statica - readelf, ghidra, objdump

44. Ce înseamnă analiză statică și ce înseamnă analiză dinamică?


R: statica - analizam binarul/codul fara a-l rula; dinamica - analizam in timp ce
ruleaza, verificam valorile variabilelor

45. Dați exemple de analizoare statice și analizoare dinamice.


R:

46. Ce înseamnă Stack Guard / Stack Smashing Protection (SSP)?


R: adaugam o valoare in stack, daca aceasta este suprascrisa, stiva a fost
compromisa

47. Cu ce mecanism de protecție asociem funcția __stack_chk_fail?


R:

48. Ce efect are ASLR (Address Space Layout Randomization)?


R:randomizeaza locatia incarcarii segmentelor executabilelor in memorie

49. Ce efect are PIE (Position Independent Executable)?


R:

50. Ce efect are PIC (Position Independent Code)?


R:

51. La ce se referă un atac de tipul return-to-libc?


R:

52. Ce înseamnă deturnarea fluxului de execuție a unui program (control flow hijack)?
De ce este acest lucru relevant pentru un atacator?
R:

53. Ce înseamnă memory leak / memory disclosure? De ce este acest lucru relevant
pentru un atacator?
R:

54. Ce înseamnă că o secvență de cod este PIC (Position Independent Code)?


R:

55. De ce în general, preferăm o împărțire a spațiului virtual de adrese între kernel space
și user space? Și nu un spațiu dedicat pentru kernel space?
R: din motive de securitate. Daca am avea in memoria fizica tot ce ne intereseaza
din kernel, in paginile virtuale putem referentia acea zona de memorie fizica si toate
procesele vor referentia aceeasi zona si asta ar fi ineficient.

56. Ce este un code pointer? De ce este interesant din perspectiva securității memoriei?
R:

57. Ce este un shellcode?


R: o bucata de cod ce poate fi injectata in codul altui program pentru a forta
deschiderea unui shell
58. Ce înseamnă code reuse din perspectiva securității memoriei?
R:

59. Ce înseamnă shell injection din perspectiva securității memoriei?


R:

60. Ce secvență de cod C va duce la o excepție de acces la memorie (de tip


Segmentation fault)? De ce?
R: dereferentierea lui int *a = NULL;, nu avem permisiuni pe bucata aceea de
memorie

61. Cu ce diferă o funcție de o variabilă într-un executabil și/sau în cadrul spațiului de


adrese al unui proces?
R: functia va fi salvata in sectiunea .text?

62. Două procese partajează o zonă de memorie. Cum se manifestă acest lucru în
tabelele de de pagini ale celor două procese?
R: Diferite pagini virtuale refera aceleasi pagini fizice.

63. Putem avea mai multă memorie fizică decât dimensiunea maximă a spațiului virtual
de adrese al unui proces? Dar invers?
R:

64. Ce zone de memorie se aloca static? Dar dinamic?


R:

65. Ce se întâmplă cu o variabilă modificată într-un proces copil din perspectiva


procesului părinte?
R: Nimic. El nu vede modificarea. Se intampla copy-on-write.

66. Ce reprezintă un loader? Ce rol are acesta?


R: Un loader este o functionalitate expusa de SO. Acesta mapeaza fisierul executabil
pe memoria virtuala a procesului.

67. La ce folosim apelul mprotect? La ce mecanism de securitate putem face bypass


folosind acest apel?
R:

68. În ce zonă de memorie se află o variabilă globală, inițializată cu valoarea 0?


R:

Fișiere, I/O
1. Ce conține un FCB (File Control Block)?
R:
2. Ce reprezintă un descriptor de fișier?
R: index-ul din fdtables unde se afla pointer-ul catre structura de canal deschis

3. Ce reprezintă tabele de descriptori de fișiere?


R:

4. Câte tabele de descriptori de fișiere se găsesc într-un sistem de operare?


R: una pentru fiecare proces

5. Ce efect are apelul dup()?


R: Adauga in FDT un pointer catre un OFS existent deja (dat ca parametru prin
indicele din FDT)

6. Ce efect are apelul close()?


R: Sterge pointerul cu indicele dat ca parametru din FDT. NU dezaloca neaparat
OFS-ul, acesta se dezaloca doar cand nu mai pointeaza nimeni catre el

7. Ce apeluri modifică pointer-ul/cursorul de fișier (file pointer)?


R:read, write, seek

8. Ce apeluri modifică dimensiunea fișierului?


R: open, truncate

9. Ce efect are apelul/comanda truncate?


R:

10. Ce este un hard link?


R: Un dentry stocat in blocurile de date ale unui inode de director.

11. Ce este un link simbolic/symlink?


R:
12. Care este diferența dintre un link simbolic și un hard link?
R: Hard link e un dentry care pointeaza catre inod şi creşte counterul, referinta
inodului, softlinkul la fel e un dentry care pointeaza catre inod şi acest inod ţine o cale
spre celălalt fişier din file system.

13. De ce numele unui fișier nu se găsește în inode?


R:

14. Ce se întâmplă în cazul formatării unei partiții?


R:

15. Ce se întâmplă cu sistemul de fișiere în cazul folosirii cu succes a comenzii rm?


R:

16. Care este un avantaj al folosirii hard link-urilor și un avantaj al folosirii link-urilor
simbolice?
R:

17. Ce efect are comanda mv /path/to/a.dat /new/path/to/b.dat în sistemul de fișiere?


R:

18. Care sunt tipurile de fișiere pe un sistem de fișiere uzual Unix?


R:

19. Care tipuri de fișiere nu au blocuri de date?


R:

20. Ce conțin blocurile de date ale unui director?


R:

21. Ce este un sistem de fișiere virtual?


R:

22. Ce este un dispozitiv virtual?


R:

23. Ce tipuri de dispozitive cunoașteți? Clasificați-le din orice punct de vedere cunoașteți
R:

24. Cu ce diferă un dispozitiv de tip bloc de un dispozitiv de tip caracter? Dați câte un
exemplu de fiecare.
R:

25. De ce nu are sens operația de seek pe un dispozitiv de tip caracter?


R:

26. Ce adresă IP locală și ce port local are un socket întors de apelul accept()?
R:

27. Ce valoare poate întoarce un apel read() sau un apel write()?


R:

28. Ce operații se pot face pe fișiere?


R:

29. Ce operații asupra fișierelor modifică/nu modifică valoarea cursorului unui fișier?
R:

30. Ce operații asupra fișierelor modifică/nu modifică dimensiunea fișierului?


R:

31. Unde este reținută valoarea cursorului de fișiere (file pointer) și unde este reținută
dimensiunea fișierului?
R:
32. De ce avem două buffere asociate fiecărui socket, ce rol are fiecare?
R:

33. Ce este o întrerupere? Când este livrată o întrerupere?


R:

34. Cu ce diferă port-mapped I/O de memory-mapped I/O?


R:

35. Ce este o operație asincronă?


R: Se desfăşoară separat de fluxul meu de execuţie. Dezavantajul operatiilor
asincrone e ca mentenanta codului se face greu.

36. Ce este o operație neblocantă?


R:

37. Cu ce diferă un socket de rețea de un socket UNIX?


R:

38. Care este diferența între un pipe anonim și un pipe cu nume (named pipe)?
R:

39. Ce este buffer cache-ul? Care este rolul său?


R:

40. De ce operația write pe fișiere este foarte rar blocantă?


R: Pentru ca avem mult spatiu, ca sa se blocheze write ar insemna sa se umple
bufferul din kernel ceea ce e foarte putin probabil.

41. În ce situație operația read() pe fișier se blochează?


R: Read-ul se blochează atunci când kernelspace buffer este gol.

42. Care este rolul unui device driver?


R: Sa redirecteze din bufferul hardware in bufferul kernel space cand primeste
intreruperi

43. Ce rol are controller-ul hardware?


R: Este interfata de comunicare cu device-ul

44. Care este rolul DMA-ului (Direct Memory Access)?


R: Sa transfere date intre ram si I/O fara implicarea activa a procesorului.

45. Când are sens să folosim polling în loc de întreruperi?


R: Cand dispozitivele de I/O sunt foarte rapide

46. Ce înseamnă zero-copy? Ce mecanism/apel folosește zero-copy?


R: Maparea fisierelor in memorie si apoi procesarea lor.
47. Ce rol are mecanismul de TCP offload engine?
R:

48. Care este sursa primară pentru care un apel send() pe un socket TCP se blochează?
R: se asteapta confirmarea primirii?
R2: buffer-ul din kernel se umple

49. Care este sursa primară pentru care un apel send() pe un socket UDP se
blochează?
R: Ring Tx buffer e lin.

50. Ce garanții ni se oferă în momentul în care apelul send() se întoarce în user space?
R:

51. Cu ce diferă afișarea folosind printf() față de folosirea write()?


R: printf este line buffered? se da flush la buffer doar cand intalneste \n sau e plin

52. De ce subsistemul de networking nu folosește buffer cache-ul?


R:

53. Ce rol are apelul / comanda sync?


R: sync() causes all pending modifications to filesystem metadata
and cached file data to be written to the underlying filesystems.

54. Care este rolul apelului ioctl / DeviceIoControl?


R:

55. De ce în general doar utilizatorul root are permisiuni de scriere (uneori doar root are
permisiuni de citire) pe intrările din /dev?
R:

56. Ce permisiuni are zona .text/.data/.rodata/.bss/de stivă/de heap?


R: .text - read-exec
.rodata - read-only
celelalte - read-write

57. De ce este apelul fwrite mai rapid decât write atunci când facem multe scrieri?
R: biblioteca stdio are un buffer special, cand apelam fwrite datele sunt scrise in
buffer, datele sunt scrise pe disc cu write doar cand se umple bufferul sau se da
flush; astfel nu facem apel de sistem la fiecare fwrite

58. Ce se întâmplă dacă facem open de mai multe ori consecutiv pe același fișier?
R: Se creaza un OFS diferit pentru fiecare apel de open(). Fiecare pointeaza la
acelasi FCB

59. Ce fișiere sunt deschise, în general, la crearea unui proces nou?


R: Fisierele procesului parinte.

60. De ce este utilă prezența unor dispozitive pur virtuale în ierarhia /dev (ex.
/dev/vboxnetctl, /dev/urandom)?
R: Pentru a le folosi in mod generic ca pe fisiere.

61. Ce conține tabela vectorilor de întrerupere / interrupt descriptor table?


R:

62. Ce utilitar putem folosi pentru crearea unui hard link al unui fișier? Dar al unui
director?
R: ln, mkdir

63. De ce nu se păstrează numele fișierului în inode?


R: FCB nu conţine numele fişierului. De ce aş vrea o structură care să refere fişierul
şi să nu ştie numele lui ? Pentru că dacă schimb numele, structura nu se modifică,
plus că pot adăuga mai multe nume la acel FCB (hard link). FCB mai are şi nr de
linkuri care arată câte nume îi sunt asociate.

64. Ce informații conține un directory entry (dentry)?


R: Identificatorul inode-ului si numele fisierului.

65. De ce, în general, ln permite crearea de link-uri simbolice pentru un director, dar nu și
crearea de hard link-uri?
R:

S-ar putea să vă placă și