Scheda programma d'esame
LABORATORIO II
PATRIZIO DAZZI
Anno accademico2023/24
CdSINFORMATICA
Codice732AA
CFU12
PeriodoAnnuale
LinguaItaliano

ModuliSettore/iTipoOreDocente/i
LABORATORIO IIINF/01LEZIONI96
PATRIZIO DAZZI unimap
LUCA FERRUCCI unimap
Obiettivi di apprendimento
Learning outcomes
Conoscenze

Lo studente acquisirà conoscenze relativi alla programmazione in C, gestione delle procedure di compilazione tramite Makefile e scripting in bash. Lo studente acquisirà inoltre le conoscenze necessarie alla programmazione concorrente e di sistema con il linguaggio C. Lo studente apprenderà anche come programmare in Assembler ARM.

Knowledge

The student will acquire knowledge related to C programming, management of compilation procedures via Makefile and scripting in bash. The student will also acquire the knowledge necessary for concurrent and system programming with the C language. The student will also learn how to program in ARM Assembler.

Modalità di verifica delle conoscenze

Le conoscenze verrano verificate tramite:

  • Prove in itinere - esercizi di programmazione da svolgere in un tempo limitato.
  • Homework - esercizi di programmazione più complessi, con limiti temporali più rilassati.
  • Progetto finale - compito più complesso che deve integrare la maggior parte dei concetti affrontati nel corso.
  • Verifica orale finale.
Assessment criteria of knowledge

Knowledge will be verified through:

  • Tests in progress - programming exercises to be carried out in a limited time.
  • Homework - more complex programming exercises, with more relaxed time limits.
  • Final Project - more complex task that must integrate most of the concepts covered in the course.
  • Final oral exam.
Capacità

Lo studente svilupperà capacità di:

  • Sviluppo di script di shell (Bash).
  • Sviluppo di programmi in Assembler (ARM).
  • Sviluppo di programmi in C, anche utilizzando strutture dati complesse.
  • Sviluppo di programmi in C, che facciano ricorso a chiamate di sistema (POSIX).
  • Design e sviluppo di applicazioni concorrenti in C.
Skills

The student will develop the ability to:

  • Development of shell scripts (Bash).
  • Development of programs in Assembler (ARM).
  • Development of programs in C, also using complex data structures.
  • Development of C programs using system calls (POSIX).
  • Design and development of concurrent applications in C.
Modalità di verifica delle capacità

Prove in itinere di programmazione in classe e a casa, progetto.

Assessment criteria of skills

Programming tests in the classroom and at home, project.

Comportamenti

I comportamenti che gli studenti acquisiranno, includono:

  • Capacità di risolvere problemi: sviluppo di competenze nel risolvere problemi di programmazione complessi, utilizzando il linguaggio C e le tecniche apprese nel corso. 
  • Capacità di apprendimento autonomo: gli studenti acquisiranno la capacità di apprendere tecniche di programmazione in modo autonomo, ad esempio attraverso la consultazione di documentazione o lo studio individuale degli aspetti correlati alla programmazione in C, all'Assembler ARM o ad altri concetti trattati nel corso.
  • Capacità di gestire e risolvere problemi di concorrenza: la programmazione concorrente comporta la gestione di più thread o processi che operano contemporaneamente e condividono risorse comuni. Durante il corso, gli studenti affronteranno sfide legate alla sincronizzazione dei thread, alla gestione della mutua esclusione e alla prevenzione dei conflitti tra le risorse condivise. Di conseguenza, acquisiranno la capacità di identificare e risolvere problemi di concorrenza, migliorando la qualità e l'efficienza delle proprie soluzioni.
Behaviors

Behaviours that students will acquire include:

  • Problem-solving skills: development of skills in solving complex programming problems, using the C language and the techniques learned in the course.
  • Autonomous learning skills: students will acquire the ability to learn programming techniques independently, for example through the consultation of documentation or the individual study of aspects related to C programming, ARM Assembler or other concepts covered in the course.
  • Ability to handle and solve concurrency problems: Concurrent programming involves managing multiple threads or processes operating concurrently and sharing common resources. Throughout the course, students will face challenges related to synchronizing threads, managing mutual exclusion, and preventing conflicts between shared resources. As a result, they will acquire the ability to identify and solve concurrency problems, improving the quality and efficiency of their solutions.
Modalità di verifica dei comportamenti

L'opportuna acquisizione dei comportamenti sarà verificata tramite la valutazione degli assegnamenti, sia in classe che a casa, il progetto finale e la prova orale.

Assessment criteria of behaviors

The assessment of the acquisition of behaviours will be verified through the evaluation of the assignments, both in class and at home, the final project and the oral exam.

Prerequisiti (conoscenze iniziali)

Competenze di base della programmazione.

Prerequisites

Basic programming skills.

Indicazioni metodologiche

Modalità:

  • Lezioni frontali

Attività di apprendimento:

  • partecipazione alle lezioni
  • studio individuale
  • svolgigmento di esercizi di programmazione individualmente
  • svolgimento di prove di valutazione intermedie
  • partecipazione ai ricevimenti tenuti dai docenti e dai tutor

Frequenza:

  • consigliata ma non obbligatoria.


Metodi di insegnamento:

  • lezioni frontali con slide
  • esercizi di programmazione
Teaching methods

Methods:

  • Frontal lessons

Learning activity:

  • participation in lessons
  • individual investigation
  • conducting programming exercises individually
  • conducting mid-term evaluation tests
  • participation in receptions held by teachers and tutors


Frequency:

  • recommended but not mandatory.

Teaching methods:

  • frontal lessons with slides
  • programming exercises
Programma (contenuti dell'insegnamento)

Programmazione in C, incluso l'utilizzo di pointer, stringhe, librerie standard di I/O.
Programmazione in C su strutture dati astratte, come pile, liste, alberi e grafi.
Debugging con GDB e controllo degli accessi alla memoria con Valgrind.
Utilizzo di Makefile.
Scripting di shell in bash.
Programmazione in Assembler ARM.

Programmazione in C utilizzando chiamate di sistema e segnali POSIX.
Programmazione concorrente in C utilizzando processi e thread.
Communicazione e sincronizzazione tra processi e thread.
Programmazione concorrente in C utilizzando user-space threads.
Introduzione al modello di comunicazione client-server basato su sockets.


Applicazioni, esempi e link con altri corsi del secondo anno.

Syllabus

Programming in C, including pointers, strings, and standard I/O libraries.
Programming in C on abstract data structures, such as stacks, lists, trees and graphs.
Debugging with GDB and memory access control with Valgrind.
Using Makefiles.
Shell scripting in bash.
Programming in ARM Assembler.

Programming in C using system calls and POSIX signals.
Concurrent programming in C using processes and threads.
Communication and synchronization between processes and threads.
Concurrent programming in C using user-space threads.
Introduction to the client-server communication model based on sockets.


Applications, examples and links with other second-year courses.

Bibliografia e materiale didattico

Dennis M. Ritchie, Brian W. Kernighan. Il linguaggio C Principi di programmazione e manuale di riferimento, Pearson Italia, ISBN: 9788871922003

Marc J. Rochkind. Advanced UNIX Programming 2nd Edition, Addison-Wesley Professional Computing Series, 2004.

Bibliography

Dennis M. Ritchie, Brian W. Kernighan. Il linguaggio C Principi di programmazione e manuale di riferimento, Pearson Italia, ISBN: 9788871922003

Marc J. Rochkind. Advanced UNIX Programming 2nd Edition, Addison-Wesley Professional Computing Series, 2004.

Indicazioni per non frequentanti

Per i non frequentanti si adottano le regole applicate a chi non ha superato le verifiche intermedie:  progetto + orale.

Non-attending students info

For non-attending students, the rules applied to those who have not passed the intermediate tests are adopted: project + oral.

Modalità d'esame

L'esame si svolgerà con una delle due seguenti modalità:

  • Verifiche intermedie durante l'anno, tramite compiti di programmazione in classe + mini-progetto finale + orale.
  • Per gli studenti che non hanno passato le verifiche intermedia: progetto + orale.
Assessment methods

The exam will take place in one of the following two ways:

  • Intermediate assessments during the year, through programming assignments in class + final mini-project + oral.
  • For students who have not passed the intermediate tests: project + oral.
Stage e tirocini

N/A

Work placement

N/A

Note

N/A

Notes

N/A

Ultimo aggiornamento 19/07/2023 14:48