PROCESSI PROCESSO E lunit di lavoro allinterno del

  • Slides: 21
Download presentation
PROCESSI

PROCESSI

PROCESSO E’ l’unità di lavoro all’interno del Computer E’ programma in esecuzione e comprende

PROCESSO E’ l’unità di lavoro all’interno del Computer E’ programma in esecuzione e comprende l’attività Corrente: • Sezione del codice (code section) • Program counter • Registri • Stack • Sezione Dati • Heap

Modello PROCESSO Single flusso di controllo delle operazioni (THREAD) Il processo può eseguire una

Modello PROCESSO Single flusso di controllo delle operazioni (THREAD) Il processo può eseguire una operazione alla volta

Ciclo di Vita Processo NEW END READY RUN WAIT Time Slice = 100 ms

Ciclo di Vita Processo NEW END READY RUN WAIT Time Slice = 100 ms

IDENTIFICAZIONE PROCESSO PROCESS CONTROL BLOCK (PCB) • Stato del Processo • Program Counter •

IDENTIFICAZIONE PROCESSO PROCESS CONTROL BLOCK (PCB) • Stato del Processo • Program Counter • Registri CPU • Info Scheduling • Info Gestione Memoria • Info Accounting • Info I/O

Schedulatore PROCESSO Componente del SO che decide quale processo Mandare in esecuzione Code di

Schedulatore PROCESSO Componente del SO che decide quale processo Mandare in esecuzione Code di Schedulazione (Job queue, ready queue, wait queue)

Bilanciamento PROCESSI Processi: I/O-bound o CPU-bound Long Term Scheduler Short Term Scheduler

Bilanciamento PROCESSI Processi: I/O-bound o CPU-bound Long Term Scheduler Short Term Scheduler

Context Switching Il contesto di un processo è contenuto nella PCB Rallentamento del sistema

Context Switching Il contesto di un processo è contenuto nella PCB Rallentamento del sistema (10 ms)

Operazioni sui Processi Creazione (system call) Creatore: Processo Padre Creato: Processo Figlio Risorse condivise

Operazioni sui Processi Creazione (system call) Creatore: Processo Padre Creato: Processo Figlio Risorse condivise Risorse indipendenti Esecuzione: Concorrente o sequenziale Indirizzamento: Figlio=Padre o Figlio ≠ Padre

UNIX #include <stdio. h> #include <unistd. h> int main(int argc, char *argv[]) { int

UNIX #include <stdio. h> #include <unistd. h> int main(int argc, char *argv[]) { int pid; /* creazione nuovo processo */ pid=fork(); if (pid < 0) {/* errore */ printf(stderr, ”Errore Fork”); exit(-1); } else if (pid == 0) { /* processo figlio */} execlp(“/bin/ls”, ”ls”, NULL); } else {/* processo padre */} wait(NULL); exit(0) } }

UNIX Padre #include <stdio. h> #include <unistd. h> int main(int argc, char *argv[]) {

UNIX Padre #include <stdio. h> #include <unistd. h> int main(int argc, char *argv[]) { int pid; /* creazione nuovo processo */ pid=fork(); if (pid < 0) {/* errore */ printf(stderr, ”Errore Fork”); exit(-1); } else if (pid == 0) { /* processo figlio */} execlp(“/bin/ls”, ”ls”, NULL); } else {/* processo padre */} wait(NULL); exit(0) } }

UNIX Figlio Padre #include <stdio. h> #include <unistd. h> int main(int argc, char *argv[])

UNIX Figlio Padre #include <stdio. h> #include <unistd. h> int main(int argc, char *argv[]) { int pid; /* creazione nuovo processo */ pid=fork(); if (pid < 0) {/* errore */ printf(stderr, ”Errore Fork”); exit(-1); } else if (pid == 0) { /* processo figlio */} execlp(“/bin/ls”, ”ls”, NULL); } else {/* processo padre */} wait(NULL); exit(0) } }

Operazioni sui Processi Terminazione (system call) Processo Padre ABORT(pid) Processo Figlio EXIT(num) Morte del

Operazioni sui Processi Terminazione (system call) Processo Padre ABORT(pid) Processo Figlio EXIT(num) Morte del Padre ? Terminazione a cascata o Assegnazione init (UNIX)

Processi Cooperanti • Condivisione Informazioni • Velocizzare Calcolo • Modularità • Convenienza Produttore -

Processi Cooperanti • Condivisione Informazioni • Velocizzare Calcolo • Modularità • Convenienza Produttore - Consumatore

Processi Cooperanti Produttore BUFFER Sincronizzazione (IPC) (shared memory, message passing ) Consumatore

Processi Cooperanti Produttore BUFFER Sincronizzazione (IPC) (shared memory, message passing ) Consumatore

Message Passing Send(message) , Receive(message) A ------------ canale B • Comunicazione diretta o indiretta

Message Passing Send(message) , Receive(message) A ------------ canale B • Comunicazione diretta o indiretta • Comunicazione sincrona o asincrona • Bufferizzazione automatica o esplicita

Comunicazione diretta Dati A (mittente) e B (destin. ) due processi Send(B, message) ,

Comunicazione diretta Dati A (mittente) e B (destin. ) due processi Send(B, message) , Receive(A, message) Canale di comunicazione: • Automatico con i nomi dei processi • una connessione associata a due processi • due processi hanno 1 ed 1 sola connessione Simmetrico: sia il mittente/destinatario deve usare il nome del processo destinatario/mittente Asimmetrico: send(B, message) receive(&id, message)

Comunicazione indiretta Comunicazione avviene attraverso MAILBOX o PORTE Send(MBX, message) , Receive(MBX, message), (Create

Comunicazione indiretta Comunicazione avviene attraverso MAILBOX o PORTE Send(MBX, message) , Receive(MBX, message), (Create e Delete) Canale di comunicazione: • Mailbox Condivisa (muore con il creatore) • una connessione associata a più di due processi • due processi possono avere più connessioni P 1 (mittente) e P 2, P 3 (receive) Connessione solo con 2 processi, solo 1 processo fa receive, Arbitrario.

Comunicazione Sincrona, Asincrona Dati A (mittente) e B (destin. ) due processi Send() ,

Comunicazione Sincrona, Asincrona Dati A (mittente) e B (destin. ) due processi Send() , Receive() Bloccante, non Bloccante Bufferizzazione (zero, limitata, illimitata)

Mac OS X Creazione Processo: MBX_Kern, MBX_Ntfy msg_send() , msg_receive() Creazione MBX: port_allocate() (send

Mac OS X Creazione Processo: MBX_Kern, MBX_Ntfy msg_send() , msg_receive() Creazione MBX: port_allocate() (send e receive) coda (8 msg) modalità FIFO msg: header e dati (variabili) send invia anche la mbx coda piena?

Windows XP Local Procedure Call (LPC) Porte di connessione (object) e Porte di comunicazioni

Windows XP Local Procedure Call (LPC) Porte di connessione (object) e Porte di comunicazioni Object visibili a tutti i processi 1. 2. 3. 4. Client apre un object Client invia richiesta di connessione Server crea 2 porte private e invia id al client Client e Server usano i due id: send, callback e receive Short msg (256 byte) o section object (indir. Send con short msg)