• Non ci sono risultati.

Programmazione  del  Sistema

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione  del  Sistema"

Copied!
3
0
0

Testo completo

(1)

Programmazione  del  Sistema   Sistemi  Operativi   Mattia  Natali    

  1  

Programmazione  del  Sistema  

 Sistema  operativo:  

Funzioni:  

 Offrire  un  insieme  di  funzionalità  già  predisposte  (servizi  di  sistema)  che  facilitano  la  vita  del   programmatore.  

 Le  system  call  hanno  numerose  funzioni,  esempio  controllare  risorse  fisiche,  gestione  memoria,   interfacciamento  sistemi  ecc.  

 Il  sistema  operativo  possiamo  vederlo  come  una  libreria  di  funzioni  per  allocare  memoria,  per   creare  e  gestire  un  processo,  accedere  alle  varie  periferiche  in  lettura  e  scrittura,  utilizzare  a   rete,  vengono  utilizzate  attraverso  le  chiamate  di  sistema  (system  call).  Il  system  call  è  ripartito   in  gruppi  (sottolibrerie)  in  base  ai  loro  vari  scopi.  

Necessità  di  parallelismo:  

 Quasi  mai  avviene  l’esecuzione  di  un  solo  programma.  

 Processo:  è  un  programma  in  esecuzione  equipaggiato  di  quanto  serve  per  comunicare  con   l’esterno.  Il  processo  è  un’entità  autonoma  a  prescindere  di  eventuali  altri  processi  (a  meno   che  debba  interagire  con  essi).  

 Il  sistema  operativo  virtualizza  il  sistema  di  calcolo  per  far  sì  che  il  processo  abbia  tutto  quello   che  gli  serve  per  l’esecuzione.  

 Il  sistema  operativo  gestisce  dei  conflitti  nell’uso  temporaneo  di  risorse  da  parte  di  processi   distinti.  

 

 Programmazione  di  Sistema:  

 Serve  per  creare,  gestire,  eliminare  i  processi.  È  una  libreria  abbastanza  piccola  con  4-­‐5  funzioni   principali.  

Processo:  è  un  programma  in  esecuzione.  

Le  parti  di  un  programma  sono  3:  

Segmento  codice:  contiene  l’eseguibile  del  programma.  

Segmento  dati:  in  cui  ci  sono  le  variabili  del  programma.  Il  segmento  dati  si  divide  in  dati  statici,   stacke  dinamici  (raggiungibili  per  puntatore).  

Segmento  di  Sistema:  dati  che  servono  al  SO  per  gestire  al  meglio  il  processo.  

Le  funzioni  per  gestire  un  processo  in  modo  elementare  sono:  

 Generare  un  processo  figlio.  

 Terminare  un  processo  figlio.  

 Attendere  la  terminazione  di  un  processo  figlio.  

 Sostituire  il  codice  di  un  processo  in  esecuzione.  

 Organigramma  processi:  

 Tutti  i  processi  derivano  da  un  processo  padre  ultimo,  i  processi  non  possono  venire  “dal  nulla”.  

 I  processi  figli  possono  generare  altri  figli.  

 È  una  relazione  ad  albero.  

 Le  sincronizzazioni  possono  venire  da  padre  e  figlio.  

 Il  processo  iniziale  è  creato  dal  sistema  operativo.  

 

(2)

Programmazione  del  Sistema   Sistemi  Operativi   Mattia  Natali    

  2  

 Funzioni  processi:  

Funzione  fork():  

 Crea  un  processo  figlio  che  è  una  copia  identica  del  padre,  viene  duplicato  il  segmento  dati  e  il   segmento  di  sistema.  

Il  valore  restituito  dalla  fork()  è  l’unica  differenza  tra  padre  e  figlio:  

• Nel  padre  viene  restituito  il  pid  del  processo  figlio.  

• Nel  figlio  viene  restituito  il  valore  0.  

• Restituisce  -1  in  caso  di  errore.  

Prototipo:  pid_t fork(void)  

 Dopo  la  biforcazione  i  processi  vengono  gestiti  in  maniera  tale  che  si  possono  ignorare  a   vicenda  (parallelismo  puro).  

Funzione  exit():  

 Termina  il  processo  corrente.  

Prototipo:  void exit(int)  

• L’argomento  int  è  il  codice  di  terminazione,  serve  per  sapere  in  che  modo  si  sia  concluso  il   processo.  

 In  un  programma  C  ci  deve  essere  la  funzione  exit(),  se  non  la  mettiamo  noi  il  sistema   operativo  la  aggiunge  automaticamente  a  fine  programma.  

Funzione  getpid():  

 Consente  ad  un  processo  il  valore  del  proprio  pid.  

Prototipo:  pid_t getpid(void)

Funzione  wait():  

 Sospende  l’esecuzione  del  processo  padre  che  la  esegue  ed  attende  la  terminazione  di  un   qualsiasi  processo  figlio.  

 Serve  per  sincronizzare  i  vari  processi  tra  di  loro.  

 Prototipo:  pid_t wait(int *)  

 Se  il  figlio  termina  prima  della  richiesta  wait,  l’esecuzione  della  wait  nel  padre  termina   istantaneamente.  

Il  valore  restituito  è  il  pid  del  processo  figlio  terminato.  

 L’argomento  è  un  puntatore  ad  intero,  così  è  possibile  realizzare  una  forma  elementare  di   comunicazione  tra  processi:  è  il  puntatore  all’argomento  passato  nella  funzione  exit()  del   figlio.  Ricorda:  l’intero  così  ottenuto  deve  essere  diviso  per  256!  

Funzione  waitpid():  

 Sospende  l’esecuzione  del  processo  padre  ed  attende  il  processo  figlio  con  un  determinato  pid.  

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

Funzione  exec():  

 Sostituisce  il  segmento  codice  e  il  segmento  dati  del  processo  corrente  con  il  codice  e  i  dati  di   un  programma  contenuto  in  un  file  eseguibile  specificato.  Il  segmento  di  sistema  non  viene   sostituito  (file  e  socie  rimangono  aperti  e  disponibili).  

 Il  processo  rimane  lo  stesso  e  quindi  mantiene  lo  stesso  pid.  

 La  funzione  exec  passa  dei  paramentri  al  programma  che  viene  eseguito,  tramite  il   meccanismo  di  passaggio  dei  parametri  al  main  argc  e  argv.  

Sintassi:  int execl(char *path_programma, char *arg0, char *arg1, …,

char *argn)

• Path_programma:  path  completo  del  file  eseguibile  del  nuovo  programma  da  lanciare.  

(3)

Programmazione  del  Sistema   Sistemi  Operativi   Mattia  Natali    

  3  

• Arg0:  deve  essere  il  nome  del  programma.  

• Argn:  deve  essere  NULL.  

• Valore  restituito:  

♦ 0:  operazione  eseguita  correttamente.  

♦ -1:  se  c’è  stato  un  errore.  

• Al  momento  dell’esecuzione  del  main  del  nuovo  programma  –  void main (int argc, char *arv[])  –  arg0, arg1  …  vengono  resi  accessibili  tramite  l’array  di   puntatori  argv.  

 

Riferimenti

Documenti correlati

(a) Il lato erogatore non è temporaneamente disponibile (ad es., a causa di una manutenzione programmata); in questo caso, la parte specifica dell’accordo di

Parametri: sd, specifica il socket (che deve essere già stato creato) da associare al canale di rete; server_ep, specifica il punto terminale (endpoint) del destinatario

• Le relazioni tra concetti appaiono nel codice come relazioni di ereditarieta’.. Aspetti generali

(a) Mostrare che l’insieme delle soluzioni del sistema `e un sottospazio di R n ; (b) discutere sotto quali condizioni il sistema ammette solo la soluzione

lett.f - si occupa della corretta applicazione delle linee guida, delle metodologie e degli strumenti predisposti dall'ANAC e dal Dipartimento della Funzione Pubblica; comma 4,

il recupero o una combinazione di recupero e smaltimento, di rifiuti non pericolosi, con una capacità superiore a 75 Mg al giorno, che comportano il ricorso ad una o più

• Pi`u tipicamente usata per creare directory e special file.. • Solo il super-user pu`o usarla (eccetto che per

I fattori che concorrono a rendere concreta questo tipo di minaccia sono diversi, ad esempio la presenza di punti di accesso non adeguatamente protetti, la tipologia della rete e