Dal punto di vista degli indirizzi di memoria
L’uso disciplinato di alcuni meccanismi del linguaggio C++ consente una corretta strutturazione di un programma in moduli.
Tra i principali meccanismi vi sono:
E’ buona norma tenere separata la specifica di un modulo dalla sua implementazione (scrivendo due file separati).
Fintanto che l’interfaccia resta inalterata, l’implementazione può essere modificata senza dover ricompilare il modulo utente.
Digitando il comando make
, viene cercato un file di nome “Makefile” nella directory corrente, vengono interpretate ed eseguite le regole ivi contenute.
Una regola di un makefile segue la seguente sintassi:
Dato un particolare target, make esegue i comandi presenti alla linea successiva, se le dipendenze sono tutte soddisfatte.
Le dipendenze sono file da cui il target dipende. Tali file possono essere già presenti o creati a loro volta da altri target.
La modifica di una dipendenza (ad es, cambia il contenuto del file) causa la ricostruzione di tutti i target che dipendono da essa.
Nel caso della compilazione separata, ogni regola del makefile costituisce il comando per la compilazione di un modulo sorgente nel suo rispettivo modulo oggetto:
file.o: file.cpp file.h
g++ -c file.cpp
Il target file.o
“dipende” da file.cpp
e file.h
. Se uno dei due file cambia, file.o
va rigenerato.
I vari moduli oggetto possono essere poi “collegati” con un’altra regola:
eseguibile: obj1.o ... objN.o
g++ -o eseguibile obj1.o ... objN.o
Spesso il makefile specifica una regola di “clean” per ripulire i risultati della compilazione, ovvero file .o ed eseguibili.
Le tecniche di sviluppo modulare consentono lo sviluppo su base professionale di librerie di moduli software.
Il produttore di una libreria distribuisce:
Tale scelta è tipicamente motivata da esigenze di tutela della proprietà, ed inoltre evita di dover ricompilare i moduli di libreria.
Una libreria statica è una collezione di moduli oggetto (file .o) in un unico file, con estensione .a
Le librerie dinamiche, o shared library sono anch’esse collezioni di moduli oggetto.
Esercitazione: System call per la gestione dei processi
1. Introduzione ai Sistemi Operativi
2. Richiami
3. Architettura e funzionalità dei sistemi operativi
4. Esercitazione – Installazione del Sistema operativo Linux
6. Gestione dei processi nei sistemi operativi Unix/Linux e Window...
8. Esercitazione: Makefile e librerie
9. Esercitazione: System call per la gestione dei processi
11. Introduzione alla Sincronizzazione dei Processi
12. Sincronizzazione nel modello ad ambiente globale
13. Sincronizzazione nel modello ad ambiente locale
14. Esercitazione: Interprocess Communication e Shared Memory
15. Esercitazione: Gestione dei semafori
16. Esercitazione: Problema dei produttori e consumatori
17. Esercitazione: Problema dei lettori e degli scrittori
19. Il Deadlock