Documente Academic
Documente Profesional
Documente Cultură
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.
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
7. Ce este o bibliotecă?
R: O colectie de functii si/sau de tipuri de date.
11. Ce operații / instrucțiuni low-level (ISA) se pot executa doar în mod privilegiat?
R:hlt am gasit
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
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.
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.
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
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.
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.
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.
- un fdtable
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.
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.
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
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
38. Care sunt avantajele și dezavantajele folosirii memoriei partajate pentru comunicarea
inter-proces?
R:
42. Putem avea un sistem multi-core cu un singur proces aflat în starea RUNNING și mai
multe procese în READY?
R: why not ??
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
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).
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
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
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
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
37. Care este numărul maxim de page fault-uri pe care îl poate genera expresia a = b +
c?
R:
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
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:
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:
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:
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
16. Care este un avantaj al folosirii hard link-urilor și un avantaj al folosirii link-urilor
simbolice?
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:
26. Ce adresă IP locală și ce port local are un socket întors de apelul accept()?
R:
29. Ce operații asupra fișierelor modifică/nu modifică valoarea cursorului unui fișier?
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:
38. Care este diferența între un pipe anonim și un pipe cu nume (named pipe)?
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:
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:
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
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.
62. Ce utilitar putem folosi pentru crearea unui hard link al unui fișier? Dar al unui
director?
R: ln, mkdir
65. De ce, în general, ln permite crearea de link-uri simbolice pentru un director, dar nu și
crearea de hard link-uri?
R: