Examen CA/CC 2013-2014
Examen final
Seriile CA/CC
Pentru seriile CA și CC, examenele finale ale cursului de Sisteme de Operare se vor desfășura astfel:
25 mai 2014, ora 8:00, sala EC101 - 334CC
3 iunie 2014, ora 11:00, sala EC004 - 331CC, 332CC, 333CC
5 iunie 2014 ora 8:00, sala AN034 - 332CA, 333CA
8 iunie 2014, ora 8:00, sala A02 - 331CA, 334CA
Sesiunea specială de restanțe (studenți anul 4) are loc în perioada 24 mai - 6 iunie 2014. Studenții de anul 4 pot veni într-una din cele două date de mai jos:
25 mai 2014, ora 8:00, sala EC101
3 iunie 2014, ora 11:00, sala EC004
5 iunie 2014, ora 08:00, sala AN034
Datele de mai sus sunt afișate și la avizierul facultății.
Rugăm să veniți în intervalul stabilit grupei voastre. Dacă, din motive obiective, nu puteți participa în data repartizată, trimiteți-i un e-mail
Laurei cu subiectul ”[SO] Transfer examen - Prenume Nume, Grupa”.
Puteți participa la un singur examen.
Pentru sesiunea septembrie 2014, examenele finale se vor desfășura astfel:
4 septembrie 2014, ora 11:00, sala EC004
13 septembrie 2014, ora 09:00, sala EC101
Seria CB
Pentru seria CB examenele finale se vor desfășura astfel:
8 iunie 2014, ora 8:00, sala EC002 - 334CB
9 iunie 2014, ora 8:00, sala EC002 - 333CB
10 iunie 2014, ora 11:00, sala EC004 - 332CB
11 iunie 2014, ora 8:00, sala EC002 - 331CB
Datele de mai sus sunt afișate și la avizierul facultății.
Puteți participa la un singur examen.
Lucrări
Lucrare 1
* La începutul cursului 4:
* marți, 11 martie 2014, 09:05-09:15, EC004, seria CA
* miercuri, 12 martie 2014, 17:05-17:15, EC004, seria CC
3CA, varianta 1
Ce este un apel de sistem?
Ce conține și când este populată o intrare din tabela de descriptori de fișier a unui proces?
Răspuns: Este un pointer la o structură de fișier deschis. Când se deschide un fișier (folosind fopen, open, CreateFile) se creează o nouă structură de fișier deschis iar adresa acesteia este reținută în cadrul intrării din tabela de descriptori de fișier.
În ce situație are loc tranziția din starea WAITING în starea READY a unui proces?
3CA, varianta 2
De ce este utilă separația user space / kernel space?
Ce este un descriptor de fișier? Ce fel de operații folosesc descriptori de fișier?
În ce situație are loc tranziția din starea RUNNING în starea WAITING a unui proces?
3CC, varianta 1
De ce apelul de bibliotecă strcpy nu generează apeluri de sistem?
Răspuns: Un apel de sistem are loc în momentul în care este nevoie ca o operație privilegiată să fie realizată de kernel. Întrucât strcpy copiază octeți dintr-o zonă de memorie în altă zonă de memorie nu realizează operație privilegiată și, deci, nu necesită apel de sistem.
Ce rol are cursorul de fișier al unui fișier deschis? Când se modifică?
Ce este o schimbare de context? De ce este necesară?
3CC, varianta 2
Precizați un rol al nucleului sistemului de operare.
Care intrare din tabela de descriptori de fișier este modificată în cazul apelului cu redirectare ”./run > out.txt” față de cazul rulării simple ”./run”?
Răspuns: Se modifică intrarea aferentă ieșirii standard a procesului (standard output), în general cea cu indexul 1. Aceasta întrucât operatorul > este redirectarea ieșirii standard. Acum intrarea de la indexul 1 din tabela de descriptori de fișier va referi fișierul out.txt, nu ieșirea standard a sistemului.
Ce reprezintă spațiul de adrese al unui proces? De ce este util?
Răspuns: Spațiul de adrese al unui proces este spațiul de lucru cu memoria a unui proces. Procesul lucrează cu adrese de memorie iar spațiul de adresă îi definește zonele accesibile. Spațiul de adresă asigură separația, la nivelul memoriei, între un proces și alt proces
Lucrare 2
La începutul cursului 7:
marți, 1 aprilie 2014, 09:05-09:15, EC004, seria CA
miercuri, 2 aprilie 2014, 17:05-17:15, EC004, seria CC
3CA, varianta 1
De ce sistemele cu planificare preemptivă au un nivel de interactivitate mai bun decât sistemele cu planificare cooperativă?
Răspuns: Planificarea preemptivă introduce noțiunea de cuantă de timp alocată unui proces. Când acestuia îi expiră cuanta, este preemptat și înlocuit pe procesor. În acest fel, fiecare proces va ajunge mai repede pe procesor; nu apare riscul ca un proces să ruleze mult timp pe procesor. Fiecare proces rulând destul de rapid pe procesor, vom avea un sistem mai responsiv și mai interactiv.
De ce NU avem fragmentare externă în cazul folosirii paginării?
Răspuns: Întreg spațiul fizic este împărțit în pagini de dimensiune fixă. Atunci când este nevoie de spațiu nou se alocă pagini noi indiferent de poziția lor în spațiul inițial. Dacă o pagină este liberă, este eligibilă pentru alocare. Nu ajungem să avem fragmentare externă, adică spațiu liber nealocabil între spații deja alocate.
Ce reprezintă “demand paging”? Ce rol are?
Răspuns: Demand paging este o formă de amânare a alocării de pagini fizice până în momentul în care este nevoie. Prin demand paging se alocă doar pagini virtuale iar paginile fizice aferente se vor aloca în momentul accesului la acele pagini. Rolul său este de a eficientiza consumul de memorie și de timpul de alocare. În momentul alocării se alocă doar memorie virtuală, nu și fizică, lucru care durează mai puțin. De asemenea, consumul de memorie fizică (RAM) la un moment dat este redus la strictul necesar în acel moment.
3CA, varianta 2
Dați exemplu de situație în care un proces este scos de pe procesor deși NU a efectuat o operație blocantă.
Precizați un avantaj al folosirii mecanismului de memorie virtuală.
Răspuns: Un avantaj este faptul că spațiul (virtual) de adrese al unui proces este continuu, independent de forma în care este realizată maparea pe spațiul fizic. Orice alocare se face în continuare spațiului virtual existent, iar mecanismul de memorie virtuală face maparea cu spațiul fizic. Un alt avantaj este posibilitatea folosirea spațiului de swap: mod prin care putem folosi discul pentru a reține pagini care nu încap în spațiul fizic (memoria RAM). Un alt avantaj este posibilitatea partajării memoriei, pagini virtuale din procese diferite (sau chiar din același proces) putând fi mapate peste aceleași pagini fizice.
Ce este spațiul de swap? Ce rol are?
Răspuns: Spațiul de swap este spațiul localizat pe disc folosit ca depozitar temporar al informațiilor din memorie RAM. În momentul în care spațiul fizic (memoria RAM) devine insuficient, se evacuează (swap out) anumite pagini fizice. În momentul în care aceste pagini sunt necesare sunt readuse în memoria RAM (swap in).
3CC, varianta 1
De ce, în general, procesele I/O bound au prioritate mai bună decât procesele CPU bound?
Răspuns: În general, procesele I/O bound vor executa o operație de I/O rapid, adică se vor bloca. În acest caz, aceste procese vor trece în starea WAITING și vor elibera procesorul unui alt proces. Acordându-le prioritate mai bună, acestea vor rula mai repede dar vor elibera rapid procesorul lăsând loc altor procese. Un proces CPU bound va elibera mai târziu procesorul, motiv pentru care va avea o prioritate mai puțin bună. Preferăm să planificăm procesele I/O bound.
Care este avantajul folosirii paginării ierarhice?
Răspuns: Prin folosirea paginării ierarhice, spațiul ocupat de tabelele de pagini ale proceselor este diminuat. În loc să existe o intrare pentru fiecare pagină, vor exista intrări doar pentru paginile valide din spațiul virtual de adrese al proceselor.
Corespondența între pagini virtuale și pagini fizice este “mai multe la una”. De ce se întâmplă și la ce este util acest lucru?
3CC, varianta 2
De ce sistemele care doresc productivitate ridicată au alocată o cuantă de timp mai mare alocată fiecărui proces?
Răspuns: Un sistem este productiv dacă cea mai mare parte din timp acesta execută acțiune utilă. Pentru aceasta trebuie ca procesele să ruleze cât mai mult timp și să existe cât mai puține schimbări de context. Prea multe schimbări de context înseamnă un overhead semnificativ asupra timpului util de lucru. De aceea, pentru a diminua numărul de schimbări de context un sistem productiv va aloca o cuantă de timp mare proceselor sale, procesele petrecând cât mai mult timp rulând.
Ce este TLB? Ce rol are?
Răspuns: TLB (Translation Lookaside Buffer) este o memorie cache la nivelul sistemului care cache-uiește intrările din tabelele de pagini ale proceselor. Întrucât fiecare acces la memorie necesită de fapt două accese (unul la tabela de pagini, alta la datele efective), TLB-ul micșorează timpul de acces simplificând primul acces (la tabela de pagini). TLB îndeplinește astfel rolul eficientizării accesului la memorie.
Care este avantajul principal al folosirii mecanismului copy-on-write la crearea proceselor folosind fork()?
Răspuns: Prin folosirea mecanismului de copy-on-write la crearea proceselor folosind fork(), un proces nou este creat foarte rapid. Un proces nou nu va trebui să aloce spațiu fizic nou/separat ci va partaja spațiul fizic aferent procesului părinte. Acel spațiu este marcat read-only și va fi duplicat doar în momentul în care unul dintre procese va scrie (copy-on-write).
Lucrare 3
3CA, varianta 1
Care este utilitatea ASLR (Address Space Layout Randomization) din perspectiva securității memoriei?
Răspuns: În cazul unui atac ce exploatează o vulnerabilitate de securitate a memoriei, atacatorul dorește să deturneze fluxul normal de execuție spre o funcție/adresă injectată de el (shellcode) sau către una existentă (return to libc). Pentru aceasta are nevoie de adresa precisă a acelei funcții; dacă procesul folosește ASLR este foarte dificil (în special pe sistemele pe 64 de biți) de identificat adresa funcției.
Precizați un avantaj al folosirii thread-urilor în locul proceselor
Ce înseamnă “lock contention”?
Răspuns: Lock contention se referă la accesul concurent la un lock/mutex din partea multor thread-uri. În cazul în care multe thread-uri așteaptă la un lock, eficiența este scăzută, doar un singur thread putând accesa la un moment dat regiunea critică protejată de lock.
3CA, varianta 2
Ce înseamnă “stack buffer overflow”?
Răspuns: Stack buffer overflow este depăsirea unui buffer local unei funcții (alocat pe stivă). Adică în cazul unui buffer cu 10 elemente, accesăm al 15-lea sau al 20-lea element. Putem suprascrie pointeri sau adresa de retur a funcției și dând naștere, astfel, unor atacuri de securitate.
Ce efect are apelul exit() în cadrul unei codului rulat de un thread?
Indicați un dezavantaj/neajuns al primitivelor de acces exclusiv chiar și în cazul folosirii corespunzătoare (în care se asigură coerența datelor).
3CC, varianta 1
Ce este un shellcode?
Răspuns: Un shellcode este o secvență de cod binar care se dorește a fi injectat, prin intermediul unei vulnerabilități de securitate, în codul unui proces care rulează. Apoi procesului îi este deturnat fluxul de execuție pentru a executa shellcode-ul. De regulă shellcode-ul urmărește obținerea unui shell prin execuția unei instrucțiuni de forma exec(“/bin/bash”).
Ce se întâmplă în cazul unui acces nevalid la memorie în cadrul codului rulat de un thread?
Răspuns: În cazul unui acces nevalid la memorie, sistemul de operare generează o excepție (semnalul SIGSEGV pe Linux) al cărei efect este încheierea execuției procesului curent. Indiferent de modul în care este generat accesul (din cadrul funcției unui thread), procesul își încheie execuția, împreună cu toate thread-urile aferente.
Care este dezavantajul folosirii de regiuni critice de mici dimensiuni (granularitate fină)?
Răspuns: Într-o regiune critică mică, overhead-ul cauzat de apelurile lock și unlock este semnificativ față de acțiunea efectivă realizată în regiunea critică. Dacă regiunea critică este accesată foarte des atunci acest overhead devine semnificativ la nivelul întregului set de acțiuni executate de thread.
3CC, varianta 2
Ce înseamnă un atac de tipul “return-to-libc”?
Precizați un dezavantaj al folosirii thread-urilor în locul proceselor.
Două thread-uri folosesc două mutex-uri. Cum se poate ajunge la deadlock?
Răspuns: Fie T1, T2 cele două thread-uri și mutex_a și mutex_b cele două mutex-uri. Situația în care se poate ajunge la deadlock presupune ca thread-ul T1 să execute un cod de forma lock(mutex_a); lock(mutex_b); iar thread-ul T2 să execute un cod de forma lock(mutex_b); lock(mutex_a); Dacă thread-ul T2 rulează între cele două apeluri lock ale thread-ului T1 atunci acesta va achiziționat mutex-ul mutex_b. În acea situație T1 va avea achiziționat mutex-ul mutex_a și va aștepta după eliberarea mutex-ului mutex_b, iar T2 invers. În această situație nici un thread nu poate trece mai departe, ambele rămânând blocate: deadlock.
Lucrare 4
3CA, varianta 1
La ce este util buffer/page cache-ul?
În ce situație se poate bloca un apel send pe un socket?
Răspuns: Apelul send pe socket se blochează dacă buffer-ul de send (transmit, TX) al socketului este plin, adică dacă nu are nici un slot de un octet disponibil. Buffer-ul este plin pentru că nu au apucat să fie transmise pachetele pe rețea (placă de rețea lentă, congestie sau receiver-ul are și el buffer-ul plin).
Care este un avantaj al alocării indexate față de alocarea contiguă la nivelul sistemului de fișiere?
3CA, varianta 2
De ce în cadrul unei plăci de rețea de mare viteză (10Gbit) este problematic să se folosească un model bazat DOAR pe întreruperi? (în general se folosește un model hibrid de întreruperi și polling)
De ce este considerat sendfile un mecanism de tip zero-copy?
Răspuns: sendfile transmite un fișier (sau parte a unui fișier) pe un socket. Întrucât nu există copieri între user space și kernel space, așa cum ar fi cazul unor operații de tipul read și send, sendfile este un mecanism de tip zero-copy.
Ce este un hard link?
3CC, varianta 1
Care este o caracteristică a unui dispozitiv de tip bloc?
Răspuns: Un dispozitiv de tip bloc permite acces aleator la date, nu secvențial ca în cazul unui dispozitiv de tip caracter. De asemenea, un dispozitiv de tip bloc lucrează cu blocuri de date, nu cu câte un caracter/byte așa cum este cazul unui dispozitiv de tip caracter.
Ce valoare (numărul de octeți transmiși) poate întoarce un apel de forma send(s, buffer, 1000, 0)? Apelul urmărește transmiterea unui buffer de 1000 de octeți pe socketul s.
Răspuns: Apelul send poate întoarce între 1 și 1000 de octeți. Întoarce numărul de octeți disponibili (între 1 și 1000) când are date disponibile. Dacă nu are date disponibile și celălalt capăt nu a închis conexiunea, se blochează. La eroare sau când celălalt capăt a închis conexiunea, se întoarce cu eroare (-1).
De ce este importantă ordonarea cererilor în cadrul unui planificator de disk (disk scheduler)?
Răspuns: Dacă cererile nu sunt ordonate, se fac multe operații de căutare (seek) pe disk pentru fiecare cerere, ceea ce înseamnă timp consumat. Prin ordonarea cererilor timpul de căutare (seek) este minimizat: se trece, în ordine, de la un bloc la alt bloc.
3CC, varianta 2
Care este un avantaj al folosirii operațiilor I/O asincrone?
Răspuns: După momentul lansării unei operații I/O asincrone, sistemul/procesul poate executa alte operații, nu trebuie să se blocheze în așteptarea încheierii acesteia. Acest lucru conduce la o eficiență sporită a sistemului.
accept este un apel blocant pe partea server-ului. Ce apel din partea clientului deblochează apelul accept? De ce?
Ce este un inode? Ce informații conține (în linii mari)?
Răspuns: Este o structură/tip de date care identifică un fișier pe disc. Un inode identifică orice fișier (fișier obișnuit, director, link simbolic) și conține metadate despre un fișier: permisiune de acces, deținător, timestamp-uri, dimensiune, contor de link-uri, pointeri la blocurile de date etc.