• Non ci sono risultati.

 Manualetto per i processi: Processi

N/A
N/A
Protected

Academic year: 2021

Condividi " Manualetto per i processi: Processi"

Copied!
2
0
0

Testo completo

(1)

Processi

 In ambienti UNIX il processo radice generatore è Init.

 PID (Process Identifier) = 1.

 Genera un sottoalbero di processi denominato processi del SO:

 Esempio: coordina stampante (spooler di stampa).

 Getty, processi legati al terminale. Sono dei processi “dormienti” perché se nessuno fa nulla non si attivano.

 Quando si attiva, si avvia il programma di login  si attribuiscono le giuste autorizzazioni.

 Serve il programma interprete programmi.

 A sua volta genera un processo figlio con l’interprete comandi  shell.

 L’interprete programmi quando riceve un comando genera un altro processo e chiede di eseguire un programma (copy, mov ecc). Alla terminazione del processo muore.

 Processo:

 PID: serve per identificare in modo univoco un processo.

 Si creano 3 parti logiche:

Segmento codice: contiene l’eseguibile del nostro programma inteso come istruzioni. Solo le istruzioni eseguibili. Program Counter seguirà il programma un’intruzione alla volta.

Segmento dat: contiene tutte le tipologie di dati. Dati globali, dati locali dei sottoprogrammi (stack), area dati dinamica (heap).

Segmento di sistema: serve per la gestione sincrona o asincrona del programma con altri processi. L’area è gestita dal sistema operativo. Contiene la tabella dei file aperti.

 Quando si crea un processo figlio, quest’ultimo assume una copia identica al padre di entrambe le 3 parti logiche.

 Manualetto per i processi:

 Include:

 #include <stdlib.h>

 #include <unistd.h>

 #include <sys/types.h>

 pid_t fork():

 Crea un nuovo processo chiamato “processo figlio”. Effettua un clone del padre ossia copia le stesse parti del programma (Segmento codice, segmento dati, segmento di sistema).

 Nel processo padre la funzione fork() restituisce un valore diverso da 0; normalmente tale valore indica il pid del figlio appena generato, tranne -1, che indica un errore e quindi che la fork() non è stata eseguita.

 Nel processo figlio la funzione fork() restituisce il valore 0.

 pid_t getpid():

 Restituisce al processo che la invoca il valore del suo pid.

 pid_t getppid():

 Restituisce al processo che la invoca il valore del pid del processo padre.

 pid_t wait(int *):

 La funzione wait sospende l’esecuzione del processo che la esegue ed attende la terminazione di un qualsiasi processo figlio.

 pid = wait(&stato).

1

(2)

 Dopo l’esecuzione la variabile pid assume il valore del pid del figlio terminato.

 La variabile stato assume il valore del codice di terminazione del processo figlio. Dato che il valore restituito dalla exit(valore) è contenuto negli 8 bit superiori, lo stato ricevuto dalla wait() è lo stato della exit() diviso per 256.

 pid_t waitpid(pid_t pid, int *status, int options):

 La funzione waitpid sospende l’esecuzione del processo che la esegue ed attende la terminazione del processo figlio specificato dal pid.

 Il pid può assumere i seguenti valori:

 < -1: La funzione attende ciascun figlio avente il pid uguale al valore assoluto del pid.

 -1: La funzione attende qualsiasi figlio, analogamente alla funzione wait.

 0: La funzione attende ciascun figlio avente il pid uguale a quello del processo corrente.

 > 0: La funzione attende il figlio con pid corrispondente al valore del pid.

 void exit(int):

 Termina il processo corrente e si ha la possibilità di passare un valore tramite l’argomento di tipo intero. Tale valore verrà passato al processo padre.

 int execl (char *path_e_nome_programma, char *arg0, char *arg1, ...NULL ):

 Il parametro path_e_nome_programma è una stringa che deve contenere l’identificazione completa (con tutto il pathname, relativo o assoluto) di un file eseguibile contenente il nuovo programma da lanciare in esecuzione.

 Il parametro arg0 è il nome del programma.

 I parametri arg1, arg2, ecc... sono puntatori a stringhe che verranno passate al main del nuovo programma lanciato in esecuzione.

 L’ultimo parametro passato deve essere NULL per indicare la fine dei parametri.

 In caso di errore viene restituito il valore -1.

 int main(int argc, char * argv[ ]):

 Il parametro argc è un intero che indica il numero di parametri ricevuti su linea di comando contenuti in argv[].

 Il parametro argv[] è un vettore di puntatori a stringhe contenente i valori passati su linea di comando.

 Area SO:

 Tabella globale dei file aperti: tiene traccia di tutti i file aperti con fopen().

2

Riferimenti

Documenti correlati

Definizione: la varianza di una variabile aleatoria X è un numero, indicato con Var(X), che fornisce una misura di quanto siano vari i valori assunti dalla variabile, ovvero di

Esercizio 9 Un discriminatore d’ampiezza `e un circuito che consente la trasmissione di una parte sola di una generica forma d’onda

La temperatura di un locale ` e modellabile con una variabile casuale normale di media e

Indica il dominio, la positività e il codominio della funzione rappresentata nel

[r]

Un giovane di 33 anni, Marco Diotallevi fondatore dell’agenzia di comunicazione Plural, ha creato il programma “Ti connetto i nonni”, una webserie con l’obiettivo di favorire il

è preceduto dal segno + se numeratore e denominatore sono concordi è preceduto dal segno – se numeratore e denominatore sono discordi ha al numeratore il valore assoluto del

SOMMARIO: I. I “beni pubblici” nell’ordinamento giuridico italiano. Le res publicae nel sistema giuridico romano. Il titolare dei “beni” e delle ‘res’ pubblici. Il