← Indietro
EserciziDivisi per argomento

Sistemi operativi 5 Nucleo e commutazioni processi

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.

Architettura dei Calcolatori e Sistemi OperativiDivisi per argomento

Informazioni sul documento

Cosa trovi in questo materiale

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.

Contenuti estratti dal documento

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.

Pagina 1

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…

Anteprima

Prima pagina del documento.

Prima pagina: Sistemi operativi 5 Nucleo e commutazioni processi