Lezione 6 Analisi del codice Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2014/2015 Dipartimento di Scienze Fisiche, Informatiche e Matematiche Università di Modena e Reggio Emilia http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi 1 Quote of the day (Meditate, gente, meditate...) “UNIX gives you just enough rope to hang yourself – and then a couple more feet, just to be sure. ” Eric Allman (1955-) Programmatore Autore di Sendmail e Syslog 2 Esercizi (3 min.) 1. Scaricare il codice sorgente del pacchetto software riguardante le utilità di base. 3 Soluzioni 1. Si ricordi che le utilità di sistema sono contenute nel pacchetto binario coreutils. Per scaricare il relativo pacchetto sorgente si dia il seguente comando: apt-get source coreutils 4 Esercizi (3 min.) 2. Scaricare il codice sorgente del pacchetto software riguardante la libreria del C. 5 Soluzioni 2. Si ricordi che le utilità di sistema sono contenute nel pacchetto binario libc6. Per scaricare il relativo pacchetto sorgente si dia il seguente comando: apt-get source libc6 6 Esercizi (5 min.) 3. Scaricare il codice sorgente del pacchetto software riguardante il kernel Linux. 7 Soluzioni 3. Quali pacchetti binari contengono kernel? Si dia il comando seguente per visualizzarli: apt-cache search '^linux-image.*$' Su macchine a 64 bit è presente il pacchetto binario linux-image-3.2.0-4-amd64 che fornisce la versione esatta del kernel in Debian. Si scarichi il relativo pacchetto sorgente: apt-get source linux-image-3.2.0-4-amd64 8 Esercizi (3 min.) 4. Identificare il nome del pacchetto Debian contenente il sistema di controllo delle revisioni GIT. 5. Installare tale pacchetto Debian. 9 Soluzioni 4. Si cerchino i pacchetti software che iniziano con la stringa git: apt-cache search '^git.*$' Si dovrebbe riuscire ad individuare un pacchetto software dal nome git. 5. Si installi il pacchetto software individuato: apt-get install git 10 Esercizi (3 min.) 6. Si scarichi il repository GIT di coreutils. 11 Soluzioni 6. Si individua la home page del progetto GNU coreutils: http://www.gnu.org/software/coreutils Si identifica la sezione “Latest Source” e si copia il comando di clonazione del repository. git clone git://git.sv.gnu.org/coreutils 12 Esercizi (5 min.) 7. Il comando precedente può fallire. È fallito? Se sì, sapreste dire il perché? 13 Soluzioni 7. Il protocollo di comunicazione “git” può essere filtrato dal firewall di ateneo. Se capita ciò, è possibile usare il protocollo “http”, che di solito non è filtrato. Per conoscere l'URL del repository GIT servito dal protocollo HTTP, si clicca il link “gitweb” che punta alla sua rappresentazione Web-based. I tre valori del campo “URL” contengono gli URL corretti con i diversi protocolli. Per HTTP: http://git.savannah.gnu.org/r/coreutils.git → Il comando corretto per la clonazione del repository via HTTP è il seguente: 14 git clone http://git.savannah.gnu.org/r/coreutils.git Esercizi (2 min.) 8. Si visualizzino le differenze fra l'ultima e la penultima versione delle coreutils. 15 Soluzioni 8. Le differenze possono essere visualizzate così: git log -p HEAD^ HEAD 16 Esercizi (5 min.) 9. Usando l'indicizzatore Web-based del kernel, si trovi il simbolo: init_uts_ns Secondo voi, di che cosa è responsabile tale simbolo? 17 Soluzioni 9. Si cerca il simbolo init_uts_ns con lo strumento di ricerca degli identificatori. Si scopre che è una struttura dati. Cliccando sulle costanti definite nel campo name si scopre che in tale struttura sono memorizzate le informazioni sulla versione del kernel recuperate con il comando uname. Nota bene: alcune costanti generate al volo durante la compilazione del kernel (ad es., il nome dell'host) e potrebbero non essere disponibili. 18 Esercizi (10 min.) 10. Trovare la definizione della funzione do_copy() e capire a che cosa serve. Suggerimento: in che file si trova? 11. Quali funzioni invoca la do_copy()? 12. Quali funzioni invocano la do_copy()? 19 Soluzioni 10. Si apre cscope e si usa la funzione “Find this global definition” (trova la definizione di un simbolo). La do_copy() si trova in src/cp.c (fa parte del comando cp). Essa effettua la copia da una sorgente ad una destinazione. 20 Soluzioni 11. Si apre cscope e si usa la funzione “Find functions called by this function” (trova le funzioni invocate da questa funzione). 12. Si apre cscope e si usa la funzione “Find functions calling this function” (trova le funzioni che invocano questa funzione). 21
© Copyright 2024 ExpyDoc