Você está na página 1de 5

PROVA SCRITTA DESAME SISTEMI OPERATIVI II (a.a.

2010/11)
Docente: Prof. Maurizio Giordano
14 Settembre 2011
Modalit della prova scritta Lesaminando dovr rispondere ai quesiti elencati avendo a disposizione 2 ore e 30 minuti di tempo a partire dallorario di inizio della prova indicato dal docente. La prova verr valutata complessivamente con i seguenti punteggi: A=ottimo; B=buono, C=discreto, D=sufficiente. Non consentito luso di libri, appunti, fotocopie del corso, o altro materiale di consultazione. E consentito luso di calcolatrice elettronica.

Con riferimento a Linux 2.6.x su architettura Intel x86 a 32 bit si svolgano i seguenti esercizi: 1) Gestione della memoria Su un sistema Linux visualizzando il contenuto del file di sistema /proc/slabinfo si ottengono le seguenti informazioni sullo stato dello Slab Allocator:
> more /proc/slabinfo # CACHE TOT. ACTIVE # NAME OBJECTS ... blkdev_requests 5120 mnt_cache 20 inode_cache 7005 dentry_cache 5469 filp 726 buffer_head 67131 vm_area_struct 1204 ... kmalloc-8192 1 kmalloc-4096 41 kmalloc-2048 ... kmalloc-1024 ... kmalloc-512 ... ... kmalloc-32 TOT. NO. OBJECTS 5120 40 14792 5880 760 71240 1652 17 73 OBJECT SIZE 96 96 480 128 96 96 64 8192 4096 NO. ACTIVE SLABS 128 1 1598 183 19 1776 23 1 41 TOT. NO. OF SLABS 128 1 1849 196 19 1781 28 17 73 PAGES X SLAB 1 1 1 1 1 1 1 2 1

Si risponda alle seguenti domande: 1) Qual il numero di oggetti per ogni slab della dentry cache? Qual il numero di oggetti per ogni slab della inode_cache?
(Si ricordi che per alcune cache non tutta l'area di memoria dello slab usata per contenere oggetti)

2) Qual la differenza tra cache specifiche e generali? Nel listato riportato quali sono le cache generali? 3) Se il kernel deve allocare un nuovo oggetto della cache blkdev_requests, cosa accade? 4) Se il kernel deve allocare una struttura dati di 1048bytes per la quale non prevista una cache specifica, quale cache usata (se ne indichi il nome nel listato)? NOTA: per Active Object si intende oggetto allocato, per Active Slab si intende uno slab con almeno un oggetto allocato SOLUZIONE: 1) per calcolare il numero di oggetti per ogni slab dentry_cache occorre dividere il numero totale di oggetti (5880) per il numero totale di slab (196) poich gli slab hanno tutti lo stesso numero di oggetti. La risposta quindi 5880/196 = 30. A un risultato errato si perverrebbe se si dividesse la dimensione dello slab (1 pagina = 4096bytes) per la dimensione di ogni singolo oggetto (128). Difatti si otterrebbe 4096/128=32. Lo spazio di memoria dello slab non usato per allocare oggetti, invece usato per allocare descrittori di slab e/o descrittori degli oggetti. Analogamente si procede per la inode_cache: 14792/1849=8 2) Le cache specifiche sono cache di oggetti con dimensione esattamente pari alle strutture dati da allocare corrispondenti a richieste pi frequenti del kernel (descrittori di regioni di memoria, dentry objects, inode objects, etc.). Lallocazione di tali oggetti implica frammentazione interna praticamente nulla.

Inoltre le cache specifiche sono nominali, nel senso che ogni cache identificata da un nome che indica la struttura dati in grado di ospitare. Le cache generali sono cache di oggetti di dimensione 32, 64, 128, 4096, 8192 bytes. Sono usate per allocare oggetti usati meno frequentemente dal kernel, per i quali il SO non prevede cache specifiche. Tali cache hanno come nome kmalloc-<size> per indicare la dimensione degli oggetti contenuti. Rientrano nelle cache generali anche cache_slabp che contiene i descrittori degli slab non inclusi negli slab stessi, e kmem_cache che contiene i descrittori delle restanti cache usate dal kernel 3) Gli oggetti nella cache blkdev_requests sono tutti allocati, quindi il kernel allocher nuovi slab per soddisfare la richiesta. 4) Il kernel user la cache generale kmalloc_2048. 2) Copy on write In relazione al meccanismo di Copy-on-Write, si risponda alle seguenti domande: 1) A cosa serve questo meccanismo? 2) Come implementato in Linux?
(Si descriva il meccanismo COW indicando quali informazioni codificano come COW una pagina di memoria a livello hardware - perch si generi PageFault - e a livello software - perch il gestore del PageFault distingua il caso COW dagli altri)

3) Si descriva il funzionamento del meccanismo COW nelle varie fasi del seguente esempio, descrivendo come cambia lo stato della pagina P e delle sue copie e come cambiano i riferimenti dei processi alle pagine: a. il processo A genera il processo B (fork()); b. A accede in scrittura alla pagina P; c. B genera i processi C e D (fork());. d. D accede in scrittura alla pagina P; e. B accede in scrittura alla pagina P; f. C accede in scrittura alla pagina P.
(lo stato di una pagina identificato da flags di PT, regioni di memoria, e struttura page)

SOLUZIONE: 1) Il COW un meccanismo che serve a ritardare la duplicazione di pagine quando si genera un nuovo processo con fork(). 2) La pagina P da duplicare protetta in scrittura ed referenziata (attraverso la paginazione) sia dal processo padre che dal processo figlio (condivisa a livello hardware ma non a livello software: VM_SHARE=0). Il primo processo che accede in scrittura causa un Page Fault. Il gestore di Page Fault verifica che un accesso in scrittura, che la pagina presente in memoria, e che la regione a cui appartiene la pagina scrivibile (VM_WRITE=1). Allora non pu che trattarsi di un COW. Il gestore del Page Fault verifica il contatore di pagina (page->count) e se questo maggiore di uno, crea un duplicato della pagina P (non protetta in scrittura: COW disabilitato) e la assegna al processo che ha causato leccezione (ne modifica le PT in modo che puntino alla nuova pagina). La pagina originale P resta allaltro processo con la protezione in scrittura (COW abilitato). Quando (e se) laltro processo accede in scrittura, si genera un nuovo Page Fault. Il gestore verifica (come prima) che si tratta di un COW ma questa volta il contatore (page->count)) uno. Quindi, la pagina P ha un solo processo che la referenzia, e viene ne viene riabilitata la scrittura a livello hardware (COW disabilitato). 3) avviene quanto segue: a. la pagina P protetta in scrittura (COW abilitato) e page->count=2; b. A punter a una copia (con COW disabilitato) P di P. B punter alla pagina originale P che mantiene la protezione in scrittura (COW abilitato) e che ora ha page->count=1; c. La pagine P viene protetta in scrittura (COW abilitato) e C e D punteranno alla pagina P che ha pertanto page->count=3; d. D punter a una copia (con COW disabilitato) P di P. B e C continuano a puntare alla pagina P protetta in scrittura (COW abilitato) che ora ha page->count=2; e. B punter a una copia (con COW disabilitato) P di P. C continuano a puntare alla pagina P protetta in scrittura (COW abilitato) che ora ha page->count=1;

f.

La pagina P puntata dal solo processo C (page->count=1) viene riabilitata alla scrittura (COW disabilitato).

3) Argomenti vari Si risponda alle seguenti domande relative agli argomenti del corso:
(NOTA: per ogni domanda una sola risposta esatta)

1) Quale risultato fornisce la macro current?: il puntatore alla CPU corrente il puntatore al descrittore del processo corrente sulla CPU corrente il puntatore al descrittore del processo corrente sulla prima CPU il puntatore al KMS del processo corrente su ogni CPU 3) I segnali sono: messaggi inviati solo dai processi al kernel messaggi inviati solo dai processi ad altri processi messaggi inviati dai processi o dal kernel ad altri processi messaggi che solo il kernel pu inviare ai processi

2) In relazione alle system call, quale delle seguenti affermazioni vera?: ad ogni systemcall corrisponde una e una sola funzione wrapper (API) ogni systemcall invocata da una funzione wrapper (API) ogni funzione di libreria (API) invoca almeno una sytem call una funzione di libreria sinonimo di system call 4) La directory radice di un processo in esecuzione: sempre la directory radice del FS pu essere assegnata al processo allatto della creazione (di default la radice del FS) sempre la home directory dellutente che lancia il processo la directory in cui si trova lutente quando lancia il processo 6) In relazione alle funzioni ritardabili, quale delle seguenti affermazioni ver: le softirq possono eseguire sempre in parallelo su pi CPU ma non in concorrenza su stessa CPU le tasklet possono eseguire sempre in parallelo su pi CPU ma non in concorrenza su stessa CPU due tasklet dello stesso tipo possono eseguire in parallelo su pi CPU due softirq dello stesso tipo possono eseguire in cocorrenza sulla stessa CPU 8) La traduzione di un indirizzo lineare in quello fisico avviene: sempre attraverso la paginazione si verifica se la traduzione presente in TLB e, se non c, si effettua la paginazione sempre attraverso la segmentazione si verifica se la traduzione presente in Cache Hardware e, se non c, si effettua la paginazione 10) In relazione ai thread di uno stesso gruppo, quale affermazione falsa: la loro schedulazione gestita dal sistema operativo condividono i gestori dei segnali condividono lo user mode stack hanno lo stesso TGID ma diverso PID

5) In che senso Linux usa in modo limitato la segmentazione?: non usa segmenti quando esegue in modalit kernel non usa segmenti quando esegue in modalit utente usa sempre la segmentazione ma la dimensione dei segmenti ridotta al minimo indispensabile usa sempre la segmentazione ma il numero di segmenti fissato e minimo (non dipende dal num. di processi) 7) Leccezione Page Fault: avviene sempre e solo in User Mode pu avvenire nella funzione di gestione di un interrupt pu avvenire in Kernel-Mode ma solo a livello pi alto di annidamento nella gestione delle interruzioni pu avvenire in Kernel-Mode a qualunque livello di annidamento 9) Dal punto di vista dello scheduling Linux, un processo che ha concluso il priorio quanto spostato nella lista expired: sempre indipendentemente dal tipo di processo sempre se un processo batch sempre se un processo interattivo mai se un processo interattivo

4) Scheduling Si supponga che, in corrispondenza del tempo t1, la configurazione della runqueue sia la seguente:

active

->

expired ->

queue[...] queue[118] queue[117] queue[...] queue[...] queue[118] queue[117] queue[116] queue[...]

-> -> -> -> -> -> -> -> ->

NULL P1 P5 NULL NULL P2 P4 P3 -> P6 NULL

Processo P1 P2 P3 P4 P5 P6

Priorit Statica (PS) 116 118 118 120 117 118

Ricordando che un processo interattivo se: bonus - 5 > (PS /4) 28 e che la priorit dinamica data dalla formula: PD = max(100, min(PS - bonus + 5, 139)) Si risponda alle seguenti domande: 1) dal tempo t1 al tempo t2 esegue P5, fino a conclusione del quanto che avviene al tempo t2 con un bonus +6. Con riferimento al tempo t2: a. determinare la posizione (se variata) di P5 nella runqueue b. indicare quale processo X lo scheduler selezioner per lesecuzione c. descrivere la configurazione dellintera runqueue: 2) dal tempo t2 al tempo t3 esegue il processo X, fino a conclusione del quanto che avviene al tempo t3 con un bonus di +7. Con riferimento al tempo t3: a. determinare la posizione (se variata) di X nella runqueue b. indicare quale processo Y lo scheduler selezioner per lesecuzione c. descrivere la configurazione dellintera runqueue: NOTA1: lo scheduler invocato solo in corrispondenza dei tempi t2 e t3 NOTA2: linserimento di un processo in una lista expired avviene sempre in coda

NOTA3: da t1 a t3 il pi vecchio processo expired non ha atteso troppo a lungo


SOLUZIONE: 5) a. Il processo P5 batch: 6 - 5 (117 /4) 28 = 1 DIVENTA EXPIRED PD = max(100, min(117 - 6 + 5, 139)) = 116 (posizione nella lista expired) b. lo scheduler seleziona P1. c. active -> queue[...] -> NULL
expired -> queue[118] queue[...] queue[...] queue[118] queue[117] queue[116] queue[...] -> -> -> -> -> -> -> P1 NULL NULL P2 P4 P3 -> P6 -> P5 NULL

6) a. Il processo P1 interattivo: 7 - 5 > (116 /4) 28 = 1 ma NON DIVENTA EXPIRED perch non esiste un expired con PS pi elevata e il pi vecchio degli expired non ha atteso troppo a lungo. non occorre calcolare la PD b. lo scheduler seleziona DI NUOVO P1 (che non muta posizione) c. active -> queue[...] -> NULL
expired -> queue[118] queue[...] queue[...] queue[118] queue[117] queue[116] -> -> -> -> -> -> P1 NULL NULL P2 P4 P3 -> P6 -> P5

queue[...] -> NULL

Você também pode gostar