PROCESS MANAGEMENT: STRUTTURE DATI

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Gestione della Memoria
Il Sistema Operativo Il Sistema Operativo fa parte del software di base; e` costituito da un insieme di programmi che interagiscono e cooperano per: gestire.
Programmazione concorrente
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Gestione della Memoria
Gestione del processore
SC che operano su processi
I segnali.
1 System Call per Comunicazione tra Processi Pipe.
Memoria virtuale Memoria virtuale – separazione della memoria logica dell’utente dalla memoria fisica. Solo alcune parti di un programma devono trovarsi.
Operating System Concepts
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Allocazione dinamica della memoria
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Threads: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica
Struttura dei sistemi operativi (panoramica)
I Thread.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Sistemi Operativi GESTIONE DEI PROCESSI.
Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE.
Strutture dei sistemi di calcolo Funzionamento di un sistema di calcolo Struttura di I/O Struttura della memoria Gerarchia delle memorie Architetture di.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
I File.
Le funzioni.
Espressioni condizionali
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Modulo 13: System call relative al File System
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Inserire il CDROM CygWin nel lettore, aprite la directory cyg e lanciare in esecuzione (con un doppio click del pulsante sinistro del mouse sulla relativa.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
1 Scheduling in Windows 2000 Un thread entra in modalità kernel e chiama lo scheduler quando: Si blocca su un oggetto di sincronizzazione (semaforo, mutex,
Unità Didattica 3 Linguaggio C
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Costruzione di una semplice Agenda telefonica Elettronica Esercizio sull'uso delle principali system call Unix.
1 Il Sistema Operativo: Esempio n Le operazioni effettuate sembrano abbastanza semplici ma … n Provocano una serie di eventi in cui vengono coinvolte sia.
1 I segnali. 2 Prima un po’ di teoria…... 3 Stati dei processi in UNIX Idle Sleeping Zombified Runnable Running Fork iniziata waitpid Fork terminata.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Il Buffer Cache Unix (Bach: the Design of the Unix Operating System (cap: 3)
Prima di iniziare… Durata attività: due lezioni frontali + una lezione laboratorio + compiti per casa Prerequisiti: elementi base architettura dei calcolatori.
I processi.
T. MottaGenerazione e terminazione processi1 Creazione e terminazione dei processi Tommaso Motta
Il nucleo del Sistema Operativo
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
1 Il file system di Unix Caratteristiche generali dei FS comunemente usati da Unix/Linux.
1 Esercitazione finale per il corso di Sistemi Operativi (A.A. 2001/2002)
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Architettura dei Sistemi Operativi
Gestione dei dispositivi di I/O:
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 Amministrazione dei processi nel sistema operativo Unix (Bach: the Design of the Unix Operating System (cap: 6, 7, 8)
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1 Chiamate di sistema Introduzione Errori : perror() Chiamate che lavorano su file.
Programmazione di sistema e gestione dei processi in C.
1 File System ed Input/Output UNIX Caratteristiche del FS Unix Implementazione Il file system di Linux Organizzazione dell’ I/O.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1 Gestione della Memoria Capitolo Introduzione alla gestione della memoria 4.2 Swapping 4.3 Memoria virtuale 4.4 Implementazione 4.5 Algoritmi di.
Gestione dei segnali I segnali sono interrupt software.I segnali –interrompono i processi qualunque cosa stiano essi facendo al momento della generazione.
1 Cenni di gestione della memoria Unix-Linux. 2 Organizzazione della Memoria Spazio logico dei processi A e B e memoria fisica Condivisione dell’area.
I segnali.
1.1 Il concetto di processo Un sistema operativo può eseguire una grande varietà di attività diverse:  sistemi batch – jobs;  sistemi time-shared – programmi.
1.1 Corso di Sistemi Operativi: Programmazione di Sistema Corso di Laurea in Informatica, Università di Firenze Anno accademico 2010/2011 Prof. Luca Ferrari.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
1 Processi e Thread Processi e thread in Unix. 2 UNIX/Linux Molte versioni di UNIX –trattiamo le caratteristiche più comuni) Ci riferiamo allo standard.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 System Call che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 Metodo I metodi sono uno strumento che i programmatori usano per strutturare i programmi, sia per renderli più facili da capire che per permettere il.
LINUX: struttura generale
Transcript della presentazione:

PROCESS MANAGEMENT: STRUTTURE DATI

Sintesi fin qui Processi utente Memoria centrale Periferiche Residente Switcher System calls Interrupt Handlers I/O drivers Residente Daemon Processi utente Non residente Processo 1 Processo 2 Processo n Memoria centrale Periferiche

Immagine di un processo L’immagine di memoria di un processo è organizzata in tre regioni: Testo Dati Stack E’ rientrante, e può essere condiviso fra più processi Ogni regione è uno spazio di indirizzamento autonomo

Che cosa genera il compilatore C #include ... NON char buffer[1000]; INIZIALIZZATI int version=1; DATI main(int argc, char *argv[]) INIZIALIZZATI { int i; while ... ... exit (0); STACK } int fun(int n) { int j; if ... TESTO ... } 3 Il compilatore genera solo la dimensione: lo spazio verrà azzerato dal kernel all'esecuzione

Formato di un eseguibile Un eseguibile è costituito da un insieme di header e un insieme di sezioni, contenenti codice o dati: Main header, con magic number Header della Sezione 1 Header della Sezione 2 Sezione 1 Sezione 2

Sintesi fin qui Memoria centrale Periferiche Residente Non residente Switcher System calls Interrupt Handlers I/O drivers Residente Stack Stack Stack Non residente Dati Dati Dati Testo Testo Testo Processo 1 Processo 2 Processo n Memoria centrale Periferiche

Strutture dati per la gestione dei processi Process Table si trova nel kernel, ed è residente contiene una entry per ogni processo, ed è dimensionata staticamente al momento della configurazione del sistema per ogni processo contiene le informazioni che ne permettono la schedulazione, e che devono essere sempre residenti U-Area (user area) si trova nel kernel, ma non è residente contiene quelle informazioni necessarie al kernel per la gestione del processo, ma che non è necessario che siano sempre residenti in memoria Ready Queue Liste dei processi ready (una per ciascun livello di priorità)

Strutture dati per la gestione dei processi Process Table 1 2 3 4 … PID PPID UID del proprietario Stato del processo Flag di residenza Parametri di schedulazione (priorità, tempo di CPU usato, tempo di attesa) Dimensione del processo Maschere per i segnali …. U-Area

Strutture dati per la gestione dei processi Ptr alla Process Table entry Registers & PC save area Stack del kernel per il processo Info relative alla system call corrente File descriptors dei file aperti dal processo Parametri per operazioni di I/O Directory corrente e root directory Informazioni per l’accounting Puntatori alle region del processo …. 1 2 3 4 … Testo Dati Stack Processo Process Table Text Table U-Area Processo

Strutture dati per la gestione dei processi 1 2 -1 -2 Ready Q Priorità 1 Lista dei processi che hanno priorità 0 2 3 4 … Testo Dati Stack Processo Process Table Text Table U-Area

Sintesi fin qui Kernel Switcher U-Area Stack Dati Testo Processo 2 Processo n Processo 1 Process Table Ready queue Switcher Interrupt handlers System calls

MEMORY MANAGEMENT

Paginazione Le versioni non “antiche” di Unix utilizzano tecniche di paginazione Per eseguire un processo è sufficiente che in memoria siano presenti almeno: la sua u-area la sua tabella delle pagine Le pagine di testo, dati e stack sono portate dinamicamente in memoria dal kernel, una alla volta, quando servono (cioè a seguito di un page fault) Se u-area e tabella delle pagine non sono in memoria, ve le porta il processo swapper

Pagedaemon E’ un demone che viene eseguito periodicamente per controllare il numero di pagine libere in memoria: Se è troppo basso, libera qualche pagina Se è ok, ritorna inattivo

Swapper E’ un processo di sistema che: Se le pagine libere sono sotto il minimo, rimuove uno o più processi dalla memoria (in genere quelli inattivi da più tempo): SWAPOUT Verifica periodicamente la esistenza di processi pronti su disco e, se possibile, li carica in memoria (solo u-area e tabella delle pagine) (in genere quelli fuori da più tempo, a meno che non siano troppo grossi): SWAPIN

PROCESS MANAGEMENT: SYSTEM CALL

Processi in Unix In Unix, ogni processo viene creato dal kernel su richiesta di un altro processo (detto processo padre), mediante una apposita system call (fork) Esiste un processo iniziale (PID=0) che non ha padre, e che viene creato dal kernel al momento della inizializzazione del sistema Ogni processo si termina attraverso una apposita system call (exit)

Creazione di un processo In Unix un nuovo processo viene creato esclusivamente per duplicazione di un processo esistente, attraverso la system call: pid_t fork(void); che crea un processo “figlio” identico al padre, e restituisce: al figlio: 0 al padre: PID del figlio in caso di errore: -1 L’unica eccezione è il processo 0, che viene creato alla inizializzazione del sistema

Fork: esempio p = fork(); if p < 0 { /* la fork è fallita */ } else if p=0 { /* operazioni del figlio */ } else { /* operazioni del padre */ } In Unix non esiste alcuna system call per “creare un processo che esegue l’eseguibile x” Devo farlo utilizzando più system call…

Creazione di un processo Kernel Switcher Interrupt handlers System calls Process Table Ready queue Processo Figlio Dati Stack U-Area Processo Padre Testo Dati Stack U-Area P=0 P= n P=fork()

Che cosa fa la fork Alloca una entry nella Process Table per il nuovo processo Assegna un PID unico al nuovo processo e inizializza i campi della Process Table entry Crea una copia della immagine del processo padre (il testo non viene duplicato ma si incrementa un reference count) Incrementa opportuni contatori dei file aperti Inizializza i contatori di accounting nella u-area del nuovo processo Pone il nuovo processo nello stato di pronto Restituisce il PID del figlio al padre, 0 al figlio o -1 in caso di errore

exec (pathname, argomenti) Le system call exec exec (pathname, argomenti) sostituisce l’immagine del chiamante con il file eseguibile pathname, e lo manda in esecuzione passandogli gli argomenti p = fork(); if p < 0 { /* la fork è fallita */ } else if p=0 { /* operazioni del figlio */ } exec (…) else { /* operazioni del padre */ }

Creazione di un processo Kernel Switcher Interrupt handlers System calls Process Table Ready queue Processo Padre Testo Dati Stack U-Area U-Area Stack Dati Processo Figlio

Exec Kernel Switcher U-Area U-Area Stack Stack Dati Dati Testo Testo Interrupt handlers System calls Process Table Ready queue U-Area U-Area Stack Stack Dati Dati Testo Testo Processo Padre Processo Figlio

Terminazione di un processo In Unix un processo si termina attraverso la system call void _exit(int status); che: - termina il processo chiamante; - rende disponibile al processo padre il valore di status, mettendolo nella propria process table entry - (il padre potrà ottenerlo tramite la primitiva wait)

pid_t wait (int *status) sospende il processo chiamante fino a che uno dei suoi figli termina restituisce il PID del figlio terminato (di uno a caso se sono più di uno) o –1 se non ci sono figli assegna a status l’exit status del figlio

process table entry del figlio Exit: esempio padre … int st; …. wait ( &st ) figlio … exit (0) …. process table entry del figlio

Exit Kernel Switcher Interrupt handlers System calls Process Table Ready queue La process table entry del figlio non può essere rimossa fino a quando il valore di status in essa contenuto non è stato prelevato dal padre U-Area U-Area Stack Stack Dati Dati Testo Testo Processo Padre Processo Figlio

Zombie e orfani un processo terminato passa nello stato di zombie, e viene definitivamente rimosso dopo che il padre ha ricevuto il suo stato di terminazione con una wait un processo zombie occupa un insieme minimo di risorse (process table entry) un processo orfano (cioè il cui padre è terminato) viene “adottato” dal processo init, quindi un processo ha sempre un padre

Altri stati di un processo Zombie Exit Idle fork

INIZIALIZZAZIONE DEL SISTEMA

BOOTSTRAP All’accensione della macchina, l’hardware lancia il programma di boostrap … … che carica in memoria il blocco di boot da disco, il quale contiene un programma… …. che carica in memoria il kernel … … e quindi trasferisce il controllo a un entry point (start), che crea il processo 0

Inizializzazione del sistema /etc/getty /bin/login LOGIN SHELL exec fork swapper Processo Ø bootstrap /etc/init demoni ……. Inizializzazione del sistema inizializza le strutture dati del kernel crea processo 1 (init): fork+exec) Start crea un processo per ogni terminale attivo e i demoni: è il padre di tutti i processi – è in loop exec fork cmd 1 1 comando è la shell di login effettua il login inizializza il terminale kernel mode user mode

STRUTTURA DELLA SHELL

Shell: interfaccia utente $file args esecuzione in foreground <output> $file args& esecuzione in background $

Struttura generale della shell $file args<> <output> $ write (1, PROMPT); while ((n=read(0,buffer,80)=!0) { riconosci nome file e args; If ( (pid=fork()) ==0) { /* I/O redirection */ if (exec(file, args)==-1) exit (1) } procid=wait(status); If (status !=0) write (2, error); write(1,PROMPT) } FIGLIO PADRE Se il comando è eseguito in background, non viene eseguita la wait

COMUNICAZIONE FRA PROCESSI

Interprocess communication in Unix Unix fornisce diversi meccanismi: Segnali Pipes Sockets …

Che cos’è un segnale Un segnale è una notifica a un processo che è occorso un particolare evento: Un errore di floating point La morte di un figlio Una richiesta di terminazione … I segnali possono essere pensati come degli “interrupts software” I segnali possono essere inviati: da un processo a un altro processo da un processo a se stesso dal kernel a un processo Ogni segnale è identificato da un numero intero associato a un nome simbolico

Segnali in POSIX Segnale Significato (default) SIGABRT Abortisce un processo (termina con dump) SIGALRM Invia un segnale di "sveglia" (termina) SIGCHLD Lo stato di un figlio è cambiato (ignora) SIGCONT Continua un processo stoppato (continua o ignora) SIGFPE Floating Point Error (termina con dump) SIGHUP Hangup su un terminale (termina) SIGILL Istruzione di macchina illegale (termina con dump) SIGINT Premuto il tasto DEL per interrompere il processo (termina) SIGKILL Segnale per terminare un processo (non può essere ignorato) (termina) SIGPIPE Tentativo di scrivere su una pipe che non ha lettori (termina) SIGQUIT L'utente ha usato il tasto di quit del terminale (termina con dump) SIGSEGV Riferimento a un indirizzo di memoria non valido (termina con dump) SIGSTOP Per stoppare un processo (non può essere ignorato) (stoppa il processo) SIGTERM Segnale per terminare un processo (termina) SIGTSTP L'utente ha usato il tasto "suspend" del terminale (stoppa il processo) SIGTTIN Un processo in background tenta di leggere dal suo terminale di controllo (stoppa il processo) SIGTTOU Un processo in background tenta di scrivere sul su terminale di controllo (stoppa il processo) SIGUSR1 Disponibile per scopi definiti dall'applicazione SIGUSR2 Disponibile per scopi definiti dall'applicazione

System call per gestire i segnali kill (PID, sig#) invia il segnale specificato al processo o al gruppo di processi specificato sigaction (sig#, action, ..) associa a un segnale la sua funzione di trattamento (inizialmente: signal – non POSIX)

Come viene trattato un segnale Quando un processo riceve un segnale, può: Trattarlo mediante una specificata funzione (“handler”) Ignorarlo Attivare l’azione di default associata al segnale stesso (termina o sospendi il processo, ignora)

Esempio Per terminare o sospendere un processo in foreground, l’utente può premere i tasti CTRL-C o CTRL-Z (rispettivamente) Tale carattere viene acquisito dal driver del terminale, che notifica al processo il segnale SIGINT o SIGTSTP (rispettivamente) Per default, SIGINT termina il processo e SIGTSTP lo sospende NB: Tali segnali vengono inviati a tutto il gruppo di processi

Protezione Per motivi di protezione, deve valere almeno una delle seguenti condizioni: Il processo che riceve e il processo che invia il segnale devono avere lo stesso owner L’owner del processo che invia il segnale è il superuser

Strutture dati per la gestione dei segnali 1 2 3 4 ..… un bit per ogni segnale, che viene alzato dalla kill (viene ricordato solo l’ultimo segnale di ogni tipo) 1 2 3 4 … Testo Dati Stack Processo Process Table Text Table 1 2 3 4 ..… array di puntatori agli handler definiti dall’utente per ogni segnale (null=default) U-Area