Monitor

Questo è un modo di più alto livello per creare programmazione concorrente. Introduzione ai monitor Questo costrutto per la programmazione concorrente, prende molto dalla programmazione agli oggetti, abbiamo delle variabili presenti al monitor, private solamente accessibili ad essa, tramite procedure che sono mutex automaticamente! Elementi costituenti 🟩 Dati locali Sequenza di inizializzazione Procedure di entrata Appena provo a chiamare una procedura, questa è fatta già in mutua esclusione!. E possono modificare dati locali solo tramite chiamate a sue procedure ...

3 min · Xuanqiang 'Angelo' Huang

Processi e thread

Il processo e la gestione dell’esecuzione è uno dei compiti principali dei sistemi operativi. Lo vuole fare in maniera efficace ed efficiente, come descritto in Note sull’architettura. Slide schema generale tabelle Processi Il process control block è la struttura di dati principali da comprendere. Ha una tabella dei file aperti, che sono dei file descriptor (all’interno della propria struttura di dati), riferiti a una tabella dell’interno sistema credo, e questi puntano a un VNode che permette di localizzarlo nella memoria secondaria. ...

5 min · Xuanqiang 'Angelo' Huang

Programmi Concorrenti

Vorremmo cercare di stabilire una teoria riguardante programmi che vengono eseguiti appunto concorrentemente, senza una esecuzione classica uno dpo l’altro Esempio mini-programma rallentamento #include <stdio.h> #include <pthread.h> void test(void *s) { for (int i = 0; i < 10; i++) { printf("%s\n", s); for (int j = 0; j < 100000000; j++); } } int main(int argc, char *argv[]) { pthread_t t1, t2; pthread_create(&t1, NULL, (void *)test, "Uno"); pthread_create(&t2, NULL, (void *)test, "Due"); pthread_join(t1, NULL); pthread_join(t2, NULL); } Example output: Due Uno Uno Due Uno Due Due Uno Due Uno Due Uno Due Uno Due Uno Due Uno Due Uno Esempio 2 mini-programma rallentamento #include <stdio.h> #include <pthread.h> int count = 0; void test(void *s) { for (int i = 0; i < 100000; i++) { count+= 1; } } int main(int argc, char *argv[]) { pthread_t t1, t2; pthread_create(&t1, NULL, test, "Uno"); pthread_create(&t2, NULL, test, "Due"); pthread_join(t1, NULL); pthread_join(t2, NULL); printf("%d\n", count); } Vogliamo creare un modello teorico che riesca a rappresentare il concetto di processi concorrenti, questo è il modello concorrente ...

5 min · Xuanqiang 'Angelo' Huang

Scheduler

Il suo scopo principale è gestire l’avvicendamento dei processi. Ad esempio sospendere il processo che chiede I/O. O un sistema time sharing, quando arriva un interrupt sul time. Solitamente il nome scheduler è solamente un gestore dell’avvicendamento, si può quindi utilizzare per indicare scheduler di altro tipo. Note introduttive Diagramma di Gantt Questo è il diagramma per presentare lo scheduling, ossia da quando a quando è eseguito cosa Esempio gantt ...

7 min · Xuanqiang 'Angelo' Huang