← Back
ExercisesBy topicItalian

Sistemi operativi 5 Nucleo e commutazioni processi

Study material for Architettura dei Calcolatori e Sistemi Operativi, shared by the Studwiz community and reviewed by moderators.

Architettura dei Calcolatori e Sistemi OperativiBy topic

Document information

What's included in this study material

Study material for Architettura dei Calcolatori e Sistemi Operativi, shared by the Studwiz community and reviewed by moderators.

Import quality: text was extracted directly from the original document.

Extracted content from the document

Representative passages recognised in different parts of the material. The full extracted text remains available to search, while this compact preview makes the page easier to read.

Page 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…

Preview

First page of the document.

First page: Sistemi operativi 5 Nucleo e commutazioni processi