SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
COSTRUTTI LINGUISTICI
COSTRUTTI SPECIFICI PER LA CONCORRENZA


                   S TRUTTURE D ATI
                   DESCRITTORE PROCESSO
                          Typedef struct{
                                PID nome;
                                modalita_di_servizio servizio;
                                tipo_contesto contensto;
                                tipo_stato stato;
                                PID padre;
                                int N_figli;
                                des_figlio prole[max_figli];
                                p_des successivo;
                          } des_processo;

                   PUNTATORE ALL’ELEMENTO SUCCESSIVO
                          typedef des_processo * p_des;

                   PI D
                          typedef int PID;

                   MODALITÀ DI SERVIZIO
                          typedef struct {
                                int priorita;
                                int delta_t;
                          } modalita_di_servizio;

                   DESCRITTORE FIGLIO
                          Typedef struct {
                                PID figlio;
                                boolean terminato;
                          }

                   CODA DI DESCRITTORI
                          Typedef struct{
                                P_des primo, ultimo;
                          } des_coda;
F UNZIONI
D ISPONIBILI
          PID assegna_nome();
          p_des descrittore(PID x);
          void inserimento(p_des pro, des_coda coda);
          p_des prelievo(des_coda coda);

I MPLEMENTAZONE
M O N O P R O C ES SO R E
SALVATAGGIO STATO
          Void salvataggio_stato(){
                P_des esec = processo_in_esecuzione;
                esec->contesto= //valori dei registri della CPU//
          }

RIPRISTINO STATO
          Void Ripristino_stato(){
                P_des esec = processo_in_esecuzione;
                //valori dei registri della CPU//=esec->contesto;
          }

ASSEGNAZIONE          CPU
          void assegnazione_cpu{
                int k=0;
                p_des p;
                while (coda_processi_pronti[k].primo == null)
                       k++;
                p=prelievo(coda_processi_pronti[k]);
          }

PIE ( P R O C E S S O I N E S E C U Z I O N E )
          PID PIE(){
                PID nome_processo_in_esecuzione;
                p_des esec = processo_in_esecuzione;
                nome_processo_in_esecuzione = esec->nome;
                return nome_processo_in_esecuzione;
          }
ATTIVA
       Void attiva(p_des proc){
             P_des esec = processo_in_esecuzione;
             int pri_esec = esec->servizio.priorita;
             int pri_proc = proc->servizio.priorita;
             proc->stato = //PROCESSO ATTIVO//;
             if(pri_esec>pri_proc){
                    inserimento(esec,coda_processi_pronti[pri_esec]);
                    processo_in_esecuzione = proc;
             } else {
                    Inserimento(proc,coda_processi_pronti[pri_proc]);
             }
       }

FORK
       Risultato fork(des_processo inizializzazione){
             P_des p;
             int NF;
             p_des esec = processo_in_esecuzione;
             if (descrittori_liberi.primo == null){
                    return eccezione;
             } else {
                    p=prelievo(descrittori_liberi);
                    *p=inizializzazione;
                    p->nome = assegna_nome();
                    p->padre = esec->nome;
                    esec->N_figli++;
                    NF=esec->N_figli;
                    esec->prole[NF].figlio=p->nome;
                    esec->prole[NF].terminato=false;
                    attiva(p);
                    return ok;
             }
       }

JOIN
       Void join(PID nome_figlio){
             p_des esec = processo_in_esecuzione;
             int k = indice_figlio(esec,nome_figlio);
             if(esec->prole[k].terminato == false){
                    esec->stato = //SOSPESO IN ATTESA DEL FIGLIO//
                    Assegnazione_CPU();
             }
       }

QUIT
       Void quit(){
             P_des esec = processo_in_esecuzione;
             PID nome_padre = esec->padre;
             p_des p_padre = descrittore(nome_padre);
int k = indice_figlio(p_padre, esec->nome);
                  p_padre->prole[k].terminato=true;
                  inserimento(esec, descrittori_liberi);
                  if(p_padre->stato==//attende che il figlio termini//){
                        int pri = p_padre -> servizio.priorita;
                        inserimento(p_padre, coda_processi_pronti[pri]);
                        p_padre->stato = //processo attivo//;
                  }
                  Assegnazione_cpu();
        }

INTERRUZIONE TEMPORIZ ZAZIONE (TIME SLICE)
        Void interruzione_temporizzazione(){
              P_des esec = processo_in_esecuzione;
              int k;
              k = esec->servizio.priorita;
              inserimento(esec, coda_processi_pronti[k]);
              assegnazione_cpu();
        }

M UL T I P R O C E SSO R E
Il codice rimane sostanzilmente identico. Tranne per il fatto che l’accesso a
coda_processori_liberi e descrittori_liberi deve essere esclusivo. Inoltre processo in
esecuzione dovrà essere un array.

Más contenido relacionado

Destacado

บทที่ 1บทนำ
บทที่ 1บทนำบทที่ 1บทนำ
บทที่ 1บทนำ
Beeiiz Gubee
 
วิธีสมัคร Facebook
วิธีสมัคร Facebookวิธีสมัคร Facebook
วิธีสมัคร Facebook
Cp Delay
 
คำอธิบายรายวิชา
คำอธิบายรายวิชาคำอธิบายรายวิชา
คำอธิบายรายวิชา
sendkrukay
 
intelligenza
intelligenzaintelligenza
intelligenza
annangela
 
Montelupo settembre 2013 panzica
Montelupo settembre 2013 panzicaMontelupo settembre 2013 panzica
Montelupo settembre 2013 panzica
Francesca Panzica
 
ผู้ไม่หวังดี
ผู้ไม่หวังดีผู้ไม่หวังดี
ผู้ไม่หวังดี
Papichaya Chengtong
 
Hardware
HardwareHardware
Hardware
ilbeok
 
Quy trinh san xuat tvc vietstar media vietstarmax Media
Quy trinh san xuat tvc vietstar media vietstarmax MediaQuy trinh san xuat tvc vietstar media vietstarmax Media
Quy trinh san xuat tvc vietstar media vietstarmax Media
Hồng Nguyên
 

Destacado (20)

บทที่ 1บทนำ
บทที่ 1บทนำบทที่ 1บทนำ
บทที่ 1บทนำ
 
llave youth
llave youthllave youth
llave youth
 
วิธีสมัคร Facebook
วิธีสมัคร Facebookวิธีสมัคร Facebook
วิธีสมัคร Facebook
 
คำอธิบายรายวิชา
คำอธิบายรายวิชาคำอธิบายรายวิชา
คำอธิบายรายวิชา
 
intelligenza
intelligenzaintelligenza
intelligenza
 
Validate Pp New
Validate Pp NewValidate Pp New
Validate Pp New
 
Clases tècnicas
Clases tècnicasClases tècnicas
Clases tècnicas
 
Montelupo settembre 2013 panzica
Montelupo settembre 2013 panzicaMontelupo settembre 2013 panzica
Montelupo settembre 2013 panzica
 
IPA Keseimbangan Lingkungan
IPA Keseimbangan LingkunganIPA Keseimbangan Lingkungan
IPA Keseimbangan Lingkungan
 
Nsc2013 finalists
Nsc2013 finalistsNsc2013 finalists
Nsc2013 finalists
 
ผู้ไม่หวังดี
ผู้ไม่หวังดีผู้ไม่หวังดี
ผู้ไม่หวังดี
 
Hardware
HardwareHardware
Hardware
 
Quy trinh san xuat tvc vietstar media vietstarmax Media
Quy trinh san xuat tvc vietstar media vietstarmax MediaQuy trinh san xuat tvc vietstar media vietstarmax Media
Quy trinh san xuat tvc vietstar media vietstarmax Media
 
séminaire Veille et marché Pros new IHM
séminaire Veille et marché Pros new IHMséminaire Veille et marché Pros new IHM
séminaire Veille et marché Pros new IHM
 
Halloween 2009
Halloween 2009Halloween 2009
Halloween 2009
 
Macdonal
MacdonalMacdonal
Macdonal
 
EDI - Photoshop - trasformazioni
EDI - Photoshop - trasformazioniEDI - Photoshop - trasformazioni
EDI - Photoshop - trasformazioni
 
Go greencart
Go greencartGo greencart
Go greencart
 
Entrevista de trabajo
Entrevista de trabajoEntrevista de trabajo
Entrevista de trabajo
 
Brannon hitt is an accomplished project manager
Brannon hitt is an accomplished project managerBrannon hitt is an accomplished project manager
Brannon hitt is an accomplished project manager
 

Más de Marco Montanari

Más de Marco Montanari (20)

OpenStreetMap_LinuxDay2023.pptx
OpenStreetMap_LinuxDay2023.pptxOpenStreetMap_LinuxDay2023.pptx
OpenStreetMap_LinuxDay2023.pptx
 
Ohm wikimania 2021
Ohm wikimania 2021Ohm wikimania 2021
Ohm wikimania 2021
 
Ohm itwikicon tech - english
Ohm itwikicon tech - englishOhm itwikicon tech - english
Ohm itwikicon tech - english
 
ITWikiCon 2020 - OpenHistoryMap
ITWikiCon 2020 - OpenHistoryMapITWikiCon 2020 - OpenHistoryMap
ITWikiCon 2020 - OpenHistoryMap
 
ITWikiCon - Edutainment e Wikipedia
ITWikiCon - Edutainment e WikipediaITWikiCon - Edutainment e Wikipedia
ITWikiCon - Edutainment e Wikipedia
 
Storia dell'informatica
Storia dell'informaticaStoria dell'informatica
Storia dell'informatica
 
Bononia 1115
Bononia 1115Bononia 1115
Bononia 1115
 
ChContext
ChContextChContext
ChContext
 
MN-MAP Poster for Foss4G2018
MN-MAP Poster for Foss4G2018MN-MAP Poster for Foss4G2018
MN-MAP Poster for Foss4G2018
 
GEOCONTEXT AND CHCONTEXT GEOGRAPHIC INFORMATION IN CULTURAL HERITAGE
GEOCONTEXT AND CHCONTEXT GEOGRAPHIC INFORMATION IN CULTURAL HERITAGEGEOCONTEXT AND CHCONTEXT GEOGRAPHIC INFORMATION IN CULTURAL HERITAGE
GEOCONTEXT AND CHCONTEXT GEOGRAPHIC INFORMATION IN CULTURAL HERITAGE
 
OHM at FOSS4G17
OHM at FOSS4G17OHM at FOSS4G17
OHM at FOSS4G17
 
Mn map poster
Mn map posterMn map poster
Mn map poster
 
Saas rad with django, django rest framework
Saas rad with django, django rest frameworkSaas rad with django, django rest framework
Saas rad with django, django rest framework
 
poster mn-auth
poster mn-authposter mn-auth
poster mn-auth
 
poster holodocker
poster holodockerposter holodocker
poster holodocker
 
Big data, big tourism
Big data, big tourismBig data, big tourism
Big data, big tourism
 
Intro datajournalism - 14-15/06/2017
Intro datajournalism - 14-15/06/2017Intro datajournalism - 14-15/06/2017
Intro datajournalism - 14-15/06/2017
 
OHM at Kainua17
OHM at Kainua17OHM at Kainua17
OHM at Kainua17
 
OHM Workshop
OHM WorkshopOHM Workshop
OHM Workshop
 
Open Data e Trasparenza come punto di contatto fra cittadinanza e politica
Open Data e Trasparenza come punto di contatto fra cittadinanza e politicaOpen Data e Trasparenza come punto di contatto fra cittadinanza e politica
Open Data e Trasparenza come punto di contatto fra cittadinanza e politica
 

Costrutti linguistici

  • 1. COSTRUTTI LINGUISTICI COSTRUTTI SPECIFICI PER LA CONCORRENZA S TRUTTURE D ATI DESCRITTORE PROCESSO Typedef struct{ PID nome; modalita_di_servizio servizio; tipo_contesto contensto; tipo_stato stato; PID padre; int N_figli; des_figlio prole[max_figli]; p_des successivo; } des_processo; PUNTATORE ALL’ELEMENTO SUCCESSIVO typedef des_processo * p_des; PI D typedef int PID; MODALITÀ DI SERVIZIO typedef struct { int priorita; int delta_t; } modalita_di_servizio; DESCRITTORE FIGLIO Typedef struct { PID figlio; boolean terminato; } CODA DI DESCRITTORI Typedef struct{ P_des primo, ultimo; } des_coda;
  • 2. F UNZIONI D ISPONIBILI PID assegna_nome(); p_des descrittore(PID x); void inserimento(p_des pro, des_coda coda); p_des prelievo(des_coda coda); I MPLEMENTAZONE M O N O P R O C ES SO R E SALVATAGGIO STATO Void salvataggio_stato(){ P_des esec = processo_in_esecuzione; esec->contesto= //valori dei registri della CPU// } RIPRISTINO STATO Void Ripristino_stato(){ P_des esec = processo_in_esecuzione; //valori dei registri della CPU//=esec->contesto; } ASSEGNAZIONE CPU void assegnazione_cpu{ int k=0; p_des p; while (coda_processi_pronti[k].primo == null) k++; p=prelievo(coda_processi_pronti[k]); } PIE ( P R O C E S S O I N E S E C U Z I O N E ) PID PIE(){ PID nome_processo_in_esecuzione; p_des esec = processo_in_esecuzione; nome_processo_in_esecuzione = esec->nome; return nome_processo_in_esecuzione; }
  • 3. ATTIVA Void attiva(p_des proc){ P_des esec = processo_in_esecuzione; int pri_esec = esec->servizio.priorita; int pri_proc = proc->servizio.priorita; proc->stato = //PROCESSO ATTIVO//; if(pri_esec>pri_proc){ inserimento(esec,coda_processi_pronti[pri_esec]); processo_in_esecuzione = proc; } else { Inserimento(proc,coda_processi_pronti[pri_proc]); } } FORK Risultato fork(des_processo inizializzazione){ P_des p; int NF; p_des esec = processo_in_esecuzione; if (descrittori_liberi.primo == null){ return eccezione; } else { p=prelievo(descrittori_liberi); *p=inizializzazione; p->nome = assegna_nome(); p->padre = esec->nome; esec->N_figli++; NF=esec->N_figli; esec->prole[NF].figlio=p->nome; esec->prole[NF].terminato=false; attiva(p); return ok; } } JOIN Void join(PID nome_figlio){ p_des esec = processo_in_esecuzione; int k = indice_figlio(esec,nome_figlio); if(esec->prole[k].terminato == false){ esec->stato = //SOSPESO IN ATTESA DEL FIGLIO// Assegnazione_CPU(); } } QUIT Void quit(){ P_des esec = processo_in_esecuzione; PID nome_padre = esec->padre; p_des p_padre = descrittore(nome_padre);
  • 4. int k = indice_figlio(p_padre, esec->nome); p_padre->prole[k].terminato=true; inserimento(esec, descrittori_liberi); if(p_padre->stato==//attende che il figlio termini//){ int pri = p_padre -> servizio.priorita; inserimento(p_padre, coda_processi_pronti[pri]); p_padre->stato = //processo attivo//; } Assegnazione_cpu(); } INTERRUZIONE TEMPORIZ ZAZIONE (TIME SLICE) Void interruzione_temporizzazione(){ P_des esec = processo_in_esecuzione; int k; k = esec->servizio.priorita; inserimento(esec, coda_processi_pronti[k]); assegnazione_cpu(); } M UL T I P R O C E SSO R E Il codice rimane sostanzilmente identico. Tranne per il fatto che l’accesso a coda_processori_liberi e descrittori_liberi deve essere esclusivo. Inoltre processo in esecuzione dovrà essere un array.