Informazioni sul documento
- Università
- Politecnico di Milano
- Corso di laurea
- Computer Engineering
- Materia
- Architettura dei Calcolatori e Sistemi Operativi
- Classificazione
- Esercizi · Divisi per argomento
- Formato originale
- Testo
- Testo ricercabile
Divisi per argomento di Architettura dei Calcolatori e Sistemi Operativi per il corso di Computer Engineering presso Politecnico di Milano. Materiale proveniente dall’archivio storico Studwiz e classificato per la consultazione online.
Divisi per argomento di Architettura dei Calcolatori e Sistemi Operativi per il corso di Computer Engineering presso Politecnico di Milano. Materiale proveniente dall’archivio storico Studwiz e classificato per la consultazione online.
Qualità dell’importazione: il testo è stato estratto direttamente dal documento originale.
Passaggi rappresentativi riconosciuti nelle diverse parti del materiale. Il testo completo resta presente nella pagina per la ricerca, mentre l’anteprima compatta rende più semplice la lettura.
1 Esercizio 1 - nucleo e commutazione tra processi /∗ programma CODICE.c ∗/ int main ( ) { ... fd = open(“/acso/file_prova”, ORDWR) pid = fork ( ); if (pid == 0) {/∗ codice eseguito da F1 ∗/ execl (“/acso/prog_x”, “prog_x”, NULL); exit (-1); } else { lseek(fd, 0L, 2); write (fd, buff, 50); sleep (2); } /∗ fine if ∗/ pid = fork( ); if (pid == 0){ /* codice eseguito da F2 */ execl (“/acso/prog_y”, “prog_y”, NULL); exit (-1); } wait( ); exit (0); } /∗ CODICE ∗/ È dato un processo P che esegue il programma CODICE. Il processo P crea due processi figli (F1 e F2) che eseguono una mutazione di codice. La mutazione di codice di F1 va a buon fine, ma quella di F2 no. Nel codice mutato, il processo F1 crea TH1 e TH2. Nel sistema non ci sono altri processi oltre ai 5 descritti, a parte il processo idle che è sempre implicitamente presente. 2 /∗ programma prog_x.c ∗/ pthread_mutex_t GATE = PTHREAD_MUTEX_INITIALIZER; sem_t GO; void ∗ ONE (void ∗ arg) { pthread_mutex_lock (&GATE); sem_post (&GO); pthread_mutex_unlock (&GATE); sem_wait (&GO); return NULL; } /∗ end ONE ∗/ void ∗ TWO (void ∗ arg) { pthread_mutex_lock (&GATE); sem_wait (&GO); pthread_mutex_unlock (&GATE); sem_post (&GO); return NULL; } /∗ end TWO ∗/ int main ( ) { /∗ codice eseguito da F1 ∗/ pthread_t TH_1, TH_2; sem_init (&GO, 0, 0); pthread_create (&TH_2, NULL, TWO, NULL); pthread_create (&TH_1, NULL, ONE, NULL); pthread_join (TH_1, NULL); pthread_join (TH_2, NULL); } /∗ fine if ∗/ pid = wait (&status); exit (1); } /∗ prog_x ∗/ 3 NOTAZIONI Il termine PROCESSO è inteso alla LINUX (denota sia PROCESSI sia THREAD). Ogni PROCE SSO è individuato in modo univoco dalla coppia <PID, TGID> e il SO assegna PID crescenti ad ogni nuova creazione di processo, assegnando la coppia in modo corretto con il tipo di creazione. Il…
Prima pagina del documento.