• Non ci sono risultati.

proc. Aproc. B proc. Dproc. C

N/A
N/A
Protected

Academic year: 2021

Condividi "proc. Aproc. B proc. Dproc. C"

Copied!
40
0
0

Testo completo

(1)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/D3URJUDPPD]LRQH GL5HWHHGL6LVWHPD LLL

$FXUDGL

/XFD%UHYHJOLHUL *LDFRPR%XRQDQQR 5REHUWR1HJULQL *LXVHSSH3R]]L 'RQDWHOOD6FLXWR

DEIPoliMI0LODQR

LIUC&DVWHOODQ]D VA

EUHYHJOLHULQHJULQLSR]]LVFLXWR#HOHWSROLPLLW EXRQDQQR#OLXFLW

 YHUVLRQHGHOPDU]R

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/DSURJUDPPD]LRQHGLVLVWHPD

,QWURGX]LRQHDOVLVWHPDRSHUDWLYR HGLOVLVWHPDRSHUDWLYRPXOWLSURFHVVR

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYR

‡ ,OVLVWHPDRSHUDWLYR

‡ qXQLQVLHPHGLPRGXOLVRIWZDUH

‡ FRQWUROODOHULVRUVHGHOVLVWHPD

‡ LQWHUDJLVFHGLUHWWDPHQWHFRQLVRIWZDUHFKH

FRQWUROODQRO¶KDUGZDUH GHYLFHGULYHU 

‡ PHWWHDGLVSRVL]LRQHGHOO¶XWHQWHXQD

PDFFKLQD³YLUWXDOH´LQJUDGRGLHVHJXLUH

FRPDQGLGDWLGDOO¶XWHQWHXWLOL]]DQGRXQD

PDFFKLQD³UHDOH´GLOLYHOORLQIHULRUHHPHQR

SRWHQWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYR

CPU RAM

FD

HD

Scheda

rete Interf.

I/O bus Sistema operativo

Interprete comandi

(2)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OSURFHVVRGDOSXQWRGLYLVWD

GHOVLVWHPDRSHUDWLYR

‡ ,OSURFHVVR q

‡ XQ¶DWWLYLWjVHTXHQ]LDOH FRPHDGHV

O¶LVWDQ]DGLXQSURJUDPPDLQHVHFX]LRQH 

‡ FRQXQRVWDWRDVVRFLDWR/RVWDWRDVXD

YROWDVLGLYLGHLQ

‡ VWDWRLQWHUQR

‡ VWDWRHVWHUQR

LOSURFHVVRqDQFKHGHILQLWRFRPHO¶HVHFXWRUHGLXQSURJUDPPD

FUHDWRGLQDPLFDPHQWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/RVWDWRGLXQSURFHVVR

‡ /RVWDWRLQWHUQR LQGLFD

‡ ODSURVVLPDLVWUX]LRQHGHOSURJUDPPDFKHGHYH

HVVHUHHVHJXLWD

‡ LYDORULGHOOHYDULDELOLHGHLUHJLVWULXWLOL]]DWLGDO

SURFHVVR

‡ /RVWDWRHVWHUQR LQGLFDVHLOSURFHVVRq

‡ LQDWWHVDGLXQHYHQWRFRPHDGHVODOHWWXUDGD

GLVFRRO¶LQVHULPHQWRGLGDWLGDWDVWLHUD

‡ LQHVHFX]LRQH

‡ SURQWRSHUO¶HVHFX]LRQHHTXLQGLDWWHQGHGL

DFFHGHUHDOO¶XWLOL]]RGHOOD&38

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYRHOH

PDFFKLQHYLUWXDOL

‡ ,OVLVWHPDRSHUDWLYR

‡ FRQWUROODODPDFFKLQDPXOWLSURJUDPPDWD

FLRqFKHHVHJXHSLSURFHVVL

FRQWHPSRUDQHDPHQWHUHQGHQGRYLVLELOHDG

RJQLSURFHVVRXQDPDFFKLQD³YLUWXDOH´DG

HVVRLQWHUDPHQWHGHGLFDWDHTXLQGLFRQ

ULVRUVHSURSULH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYR

HARDWARE 3URFHVVRUH 0HPRULD 3HULIHULFKH

SISTEMA OPERATIVO 6

H E L L

G U I

altri pro_

gram mi

altri pro_

gram

mi PROCESSI

Servizi di Sistema

(3)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYRHOH

PDFFKLQHYLUWXDOL

Hardware e Sistema operativo Processo 1

(esecutore)

Processo 2 (esecutore)

Processo 3 (esecutore) Programma 1 Programma 2 Programma 3

,VWUX]LRQL ,VWUX]LRQL ,VWUX]LRQL

9LUWXDOL]]D]LRQH 9LUWXDOL]]D]LRQH 9LUWXDOL]]D]LRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYR HOHPDFFKLQHYLUWXDOL

CPU A RAM A

FD A

HD A

Rete A I/O A

proc. A

CPU B RAM B

FD B

HD B

Rete B I/O B

proc. B

CPU D RAM D

FD D

HD D

Rete D I/O D

proc. D

CPU C RAM C

FD C

HD C

Rete C I/O C

proc. C

bus

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYR HODPDFFKLQDUHDOH

CPU

A, B, C, D

RAM

A B C D

HD

A B C D

FD

A B C D

Rete

A, B, C, D

I/O

A, B, C, D

bus

utilizzo a rotazione suddivisione in blocchi suddivisione in blocchi

suddivisione in blocchi utilizzo a rotazione utilizzo a rotazione

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OVLVWHPDRSHUDWLYR

‡ ,OVLVWHPDRSHUDWLYR

‡ JHVWLVFHHYHQWXDOLFRQIOLWWLGLDFFHVVR

FRQWHPSRUDQHRDOOHULVRUVH³UHDOL´

FRQGLYLVHDFFRGDQGRLSURFHVVLULFKLHGHQWL

$GHVXQFRPSRQHQWHGHWWRVFKHGXOHU

VHOH]LRQDLSURFHVVLLQVWDWRGLSURQWRHG

DVVHJQDORURDURWD]LRQHO¶XWLOL]]RGHOOD&38

SHUXQTXDQWRGLWHPSRGLHVHFX]LRQH

SROLWLFDGHWWDURXQGURELQ 

(4)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,SURFHVVLHGLOVLVWHPD

RSHUDWLYR

‡ $QFKHLOVLVWHPDRSHUDWLYRq

LPSOHPHQWDWRWUDPLWHSURFHVVL

‡ LOVLVWHPDRSHUDWLYRqJDUDQWHFKHL

FRQIOLWWLWUDLSURFHVVLVLDQRFRQWUROODWLH

JHVWLWLFRUUHWWDPHQWH

‡ LOVLVWHPDRSHUDWLYRYLHQHHVHJXLWRLQ

PRGDOLWjSULYLOHJLDWD NHUQHOPRGH R

VXSHUYLVRU FRVuGDSRWHUFRQWUROODUHJOL

DOWULSURFHVVLHVHJXLWLLQPRGDOLWjXVHU

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&KLDPDWHDOVXSHUYLVRU

‡ ,SURFHVVLXWHQWHSHUHVHJXLUH

RSHUD]LRQLSULYLOHJLDWHFRPHDGHV

‡ DFFHVVRDILOH

‡ DFFHVVRDGDOWUHULVRUVH

‡ RSHUD]LRQLGL,2GLUHWWR

LQYRFDQRLOVXSHUYLVRU WUDPLWHFKLDPDWH

GLVLVWHPD V\VWHPFDOOV 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

0RWLYD]LRQLGHOO¶XVR GHOVXSHUYLVRU

‡ /HRSHUD]LRQLGL,2VRQRRSHUD]LRQL

ULVHUYDWH

‡ XQSURFHVVR$ QRQGHYHSRWHUDQGDUHD

VFULYHUHPHVVDJJLVXXQWHUPLQDOHQRQ

DVVRFLDWRDOORVWHVVRSURFHVVR$

‡ XQSURFHVVR$ QRQGHYHSRWHUOHJJHUH

FDUDWWHULLPPHVVLGDXQWHUPLQDOHQRQ

DVVRFLDWRDOORVWHVVRSURFHVVR$

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

0RWLYD]LRQLGHOO¶XVR GHOVXSHUYLVRU

‡ 8QSURFHVVRQRQGHYHSRWHUVFRQILQDUH

DOGLIXRULGHOSURSULRVSD]LRGL

PHPRULD

‡ SHUQRQDFFHGHUHDOORVSD]LRGLPHPRULD

DVVRFLDWRDGXQDOWURSURFHVVR

PRGLILFDQGRFRGLFHHGDWLGLTXHVW¶XOWLPR

‡ SHUQRQRFFXSDUHWXWWDODPHPRULD

GLVSRQLELOHQHOVLVWHPDEORFFDQGRORH

UHQGHQGRORFRVuLQXWLOL]]DELOHGDDOWUL

SURFHVVL

(5)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

0RWLYD]LRQLGHOO¶XVR GHOVXSHUYLVRU

‡ /DFRQGLYLVLRQHGLULVRUVHTXDOLDG

HVHPSLRGLVFKL&38VFKHGHGLUHWH

‡ GHYHHVVHUHWDOHGDFDXWHODUHLGDWLGLRJQL

XWHQWH

‡ GHYHHYLWDUHFKHXQXWHQWHRFFXSLO¶LQWHUR

VSD]LRGLVSRQLELOHVXLGLVFKLQRQODVFLDQGR

VSD]LRSHUDOWULXWHQWL

‡ VHXQSURFHVVR$ HQWUDLQORRSFLzQRQ

GHYHEORFFDUHO¶LQWHURVLVWHPD

‡ «HGDOWULHVHPSLDQFRUD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

0RWLYD]LRQLGHOO¶XVR GHOVXSHUYLVRU

‡ (VVHQGRXQVLVWHPDPXOWLSURJUDPPDWR

HRPXOWLXWHQWH

‡ HYHQWXDOLFRQIOLWWLGHYRQRHVVHUHJHVWLWLGD

XQ³DUELWUR´ LOVLVWHPDRSHUDWLYR FKH

IXQ]LRQLVHFRQGRUHJROHFKLDUHHEHQ

VWDELOLWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

1HFHVVLWjGLSDUDOOHOLVPR QHLVLVWHPLRSHUDWLYL

‡ 8QXWHQWHFKHVLFROOHJDDGXQD

PDFFKLQD DGHV8QL[WUDPLWHLO

SURJUDPPDWHOQHW GLVSRQHGLXQ

LQWHUSUHWHFRPDQGLHYHQWXDOPHQWH

VFHOWRGDOO¶XWHQWHVWHVVRWUDPLWHFKVK

‡ 1HOODPDFFKLQDGHYHHVVHUHSUHVHQWHXQ

SURFHVVRLQWHUSUHWHFRPDQGLSHURJQL

VHVVLRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

1HFHVVLWjGLSDUDOOHOLVPR QHLVLVWHPLRSHUDWLYL

‡ $GRJQLQXRYDFRQQHVVLRQHLOVLVWHPD

RSHUDWLYRJHQHUDXQSURFHVVRLQWHUSUHWH

FRPDQGLVSHFLILFRSHUTXHOOD

FRQQHVVLRQH

‡ &LVRQRTXLQGLSLFRSLHGHOORVWHVVR

SURJUDPPD

(6)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

3DUDOOHOLVPRLQ8QL[

‡ (VLVWRQRGXHSULQFLSDOLPHWRGLSHU

RWWHQHUHO¶HVHFX]LRQHSDUDOOHODLQ

DPELHQWH8QL[

‡ JHQHUD]LRQHGLQXRYLSURFHVVL

‡ XWLOL]]RGLWKUHDG

‡ &RQVLGHUHUHPRODJHQHUD]LRQHGLQXRYL

SURFHVVL PHFFDQLVPRSLVWDQGDUGH

PHQRFRPSOHVVR 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/DSURJUDPPD]LRQHGLVLVWHPD

'HILQL]LRQL

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

'HILQL]LRQH

‡ &RQSURJUDPPD]LRQHGLVLVWHPD VL

LQWHQGRQROHWHFQLFKHXWLOL]]DWHQHOOD

VFULWWXUDGLSURJUDPPLXWHQWH FLRqQRQ

QHFHVVDULDPHQWHHVHJXLWLLQPRGDOLWj

VXSHUYLVRU FKHLQWHUDJLVFRQR

VWUHWWDPHQWHFRQLOVLVWHPDRSHUDWLYRH

FKHXWLOL]]DQRLVHUYL]L V\VWHPFDOOV  PHVVLDGLVSRVL]LRQHGDTXHVW¶XOWLPR

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/HFKLDPDWHGLVLVWHPD

‡ /HFKLDPDWHGLVLVWHPDVRQRGLYLVHQHOOH

VHJXHQWLSULQFLSDOLFDWHJRULH

‡ JHVWLRQHGHLSURFHVVL

‡ VHJQDOD]LRQL

‡ JHVWLRQHGLILOH

‡ JHVWLRQHGLGLUHWWRULHGLILOHV\VWHP

‡ SURWH]LRQH

‡ JHVWLRQHGLRUDHGDWD

GD7DQHQEDXP$6:RRGKXOO$:2SHUDWLQJ6\VWHPV 'HVLJQDQG,PSOHPHQWDWLRQQG HG3UHQWLFH+DOO

(7)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

3URJUDPPD]LRQHGLVLVWHPD

‡ $OO¶LQWHUQRGHOODSURJUDPPD]LRQHGL

VLVWHPDODQRVWUDDWWHQ]LRQHVL

IRFDOL]]HUjVXOOHSULPLWLYHLQOLQJXDJJLR

&SHU

‡ JHVWLRQHGHJOLDFFHVVLDILOH

‡ JHVWLRQHGLSURFHVVL

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

2SHUD]LRQLVXLILOH

‡ /HSULQFLSDOLRSHUD]LRQLGLDFFHVVRDILOH

FRQVHQWRQRGL

‡ DSULUHXQILOH

‡ OHJJHUHXQFDUDWWHUHXQDVWULQJDXQ

EORFFRGDXQILOH

‡ VFULYHUHXQFDUDWWHUHXQDVWULQJDXQ

EORFFRVXXQILOH

‡ FDQFHOODUHFDPELDUHQRPHVSRVWDUHGL

GLUHWWRULRXQILOH

‡ FKLXGHUHXQILOH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

2SHUD]LRQLVXLSURFHVVL

‡ /HSULQFLSDOLRSHUD]LRQLVXLSURFHVVL

FRQVHQWRQRGL

‡ JHQHUDUHXQSURFHVVRILJOLR FKLOG RDQFKH

VODYH FRSLDGHOSURFHVVRSDGUH SDUHQW R

DQFKHPDVWHU LQHVHFX]LRQH

‡ DWWHQGHUHODWHUPLQD]LRQHGLXQSURFHVVRILJOLR

‡ WHUPLQDUHXQSURFHVVRILJOLR UHVWLWXHQGRXQ

FRGLFHDOSURFHVVRSDGUH

‡ VRVWLWXLUHLOFRGLFHGLXQSURFHVVRLQHVHFX]LRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/DSURJUDPPD]LRQHGLVLVWHPD

/DJHVWLRQHGHLILOH

DHVHUFLWD]LRQH

(8)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OILOH

‡ (¶XQFRQWHQLWRUHGLLQIRUPD]LRQL

‡ SHUPDQHQWL

‡ VXPHPRULDGLPDVVD

‡ FXLVLDFFHGHWUDPLWHIXQ]LRQLGHOOD

VWDQGDUGOLEUDU\

‡ (¶DQFKHGHWWR³ORQJOLYHGREMHFW´

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,OILOH

‡ (¶LGHQWLILFDWRGD

‡ QRPH XQLYRFRQHOODVXDGLUHFWRU\ HG

HVWHQVLRQH

‡ GLUHFWRU\ HYROXPH GRYHqPHPRUL]]DWR

‡ OXQJKH]]D QXPHURGLE\WH 

‡ GDWDHRUDGLFUHD]LRQHHGLXOWLPRDFFHVVR

‡ SURSULHWDULRHGXWHQWLDXWRUL]]DWLDOO¶DFFHVVR

‡ PRGDOLWjGLDFFHVVR

‡ OHWWXUD

‡ VFULWWXUD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

9LVXDOL]]D]LRQHGHOOHLQIRUPD]LRQL

DVVRFLDWHDGXQILOH

KRPHSR]]LWHPS!OVOSD WRWDO

GUZ[  SR]]L 6HS 

GUZ[U[U[ SR]]L-XQ 

UZ  SR]]L 6HS  7HPD(VDPHW[W

UZ[UZ[  SR]]L6HS  ([HFXWH0H

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

)OXVVLHILOH

‡ 8QSURJUDPPD DGHVLQ& FKHGHVLGHUD

XWLOL]]DUHXQILOHGHYHDSULUHXQIOXVVR

VWUHDP GLFRPXQLFD]LRQHLQYRFDQGRLO

VLVWHPDRSHUDWLYR

‡ ,OVLVWHPDRSHUDWLYRUHVWLWXLVFHDOSURJUDPPD

LOGHVFULWWRUHGHOILOH KDQGOH HPHPRUL]]D

VHPSUHODSRVL]LRQHFRUUHQWHQHOILOH

‡ 2JQLRSHUD]LRQHVXOILOHDYYLHQHWUDPLWH

KDQGOH$OWHUPLQHLOSURJUDPPDFKLXGHLO

ILOHULODVFLDQGRLOGHVFULWWRUH

(9)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

)OXVVLHILOH

‡ 9LVRQRWUHIOXVVLVWDQGDUGDVVRFLDWLDG

RJQLSURFHVVR

‡ VWGLQODWDVWLHUDSHUOHJJHUHLPHVVDJJLLQ

LQJUHVVR VFDQI 

‡ VWGRXWLOYLGHRSHUVFULYHUHLPHVVDJJLLQ

XVFLWD SULQWI 

‡ VWGHUULOYLGHRSHUVFULYHUHLPHVVDJJLGL

HUURUH SULQWI 

‡ $WDOLIOXVVLVLDJJLXQJRQRHYHQWXDOLILOH

DSHUWLGDOSURJUDPPD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

7LSLGLILOH

‡ 'LWHVWR $6&,, 

‡ VRQRVHTXHQ]HGLFDUDWWHULJHQHUDOPHQWH

VXGGLYLVHLQOLQHHVHSDUDWHGDOFDUDWWHUH

C?Q¶

‡ SRVVRQRHVVHUHYLVXDOL]]DWLDYLGHR DGHV

WUDPLWHLOFRPDQGRFDW RVWDPSDWL DGHV

WUDPLWHLOFRPDQGROSU 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

7LSLGLILOH

‡ %LQDUL ELQDU\ 

‡ VRQRVHTXHQ]HGLE\WH

‡ SHUHVVHUHOHWWLqQHFHVVDULRFRQRVFHUHOD

PRGDOLWjVHFRQGRODTXDOHOHLQIRUPD]LRQL

VRQRVWDWHVFULWWH

‡ JHQHUDOPHQWHQRQSRVVRQRHVVHUHOHWWLH

VWDPSDWLGLUHWWDPHQWH VHQRQWUDPLWH

RSSRUWXQLSURJUDPPL 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

2SHUD]LRQLGLEDVH QHOODJHVWLRQHGHLILOH

‡ $SHUWXUDIRSHQ DSUHXQILOH

‡ PHPRUL]]DVHPSUHODSRVL]LRQHFRUUHQWH

QHOILOH

‡ &KLXVXUDIFORVH FKLXGHXQILOH

‡ &DQFHOOD]LRQHUHPRYH SHUFDQFHOODUHXQ

ILOH

‡ 5LGHQRPLQD]LRQHUHQDPH PRGLILFDLO

QRPHGLXQILOHRVSRVWDUORGLGLUHWWRULR

(10)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

0RGDOLWjEDVHGLDFFHVVR

‡ /HPRGDOLWjEDVHGLDFFHVVRVRQRVSHFLILFDWH

GXUDQWHODIDVHGLDSHUWXUDGHOILOHHVRQR

‡ /HWWXUD

‡ U UHDG 

‡ ODSRVL]LRQHFRUUHQWHqDOO¶LQL]LRGHOILOH

‡ 6FULWWXUD

‡ Z ZULWH 

‡ ODSRVL]LRQHFRUUHQWHqDOO¶LQL]LRGHOILOH

‡ $JJLXQWD

‡ D DSSHQG 

‡ ODSRVL]LRQHFRUUHQWHqDOODILQHGHOILOH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$OWUHPRGDOLWjGLDFFHVVR

‡ %LQDULR

‡ E ELQDU\ 

‡ /HWWXUDHVFULWWXUD

‡  VLDVFULWWXUDFKHOHWWXUD 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

(VHPSLGLPRGDOLWjGLDFFHVVR

‡ ZZULWHLQPRGDOLWjWHVWR

‡ ZZULWHHUHDGLQPRGDOLWjWHVWR

‡ UEUHDGLQPRGDOLWjELQDULD

‡ DEDJJLXQWDHOHWWXUDLQPRGDOLWjELQDULD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IRSHQ

‡ $SHUWXUDGHOILOH

),/( IS

FRQVWFKDU IQDPH ³0LR)LOH´

FRQVWFKDU PRGH ³Z´

IS IRSHQ IQDPHPRGH 

 IS 18//VHHUURUHGLDSHUWXUD 

(11)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IFORVH

‡ &KLXVXUDGHOILOH FKHGHYHHVVHUHVWDWR

DSHUWRSUHFHGHQWHPHQWH

),/( IS

LQWUHVXOW

UHVXOW IFORVH IS 

 UHVXOW VHHUURUHGLFKLXVXUD 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

UHPRYH

‡ &DQFHOOD]LRQHGHOILOH

),/( IS  LQXWLOHSHUODUHPRYH  LQWUHVXOW

FRQVWFKDU IQDPH ³0LR)LOH´

UHVXOW UHPRYH IQDPH 

 UHVXOW VHHUURUHGLFDQFHOOD]LRQH 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

UHQDPH

‡ 5LGHQRPLQD]LRQHGHOILOH

),/( IS  LQXWLOHSHUODUHQDPH  FRQVWFKDU IQDPH2OG ³9HFFKLR1RPH´

FRQVWFKDU IQDPH1HZ ³1XRYR1RPH´

LQWUHVXOW

UHVXOW UHQDPH IQDPH2OGIQDPH1HZ 

 UHVXOW VHHUURUHGLULGHQRPLQD] 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

UHQDPH LL

‡ 5LGHQRPLQD]LRQHGHOILOHFRQFDPELRGL

GLUHFWRU\

),/( IS  LQXWLOHSHUODUHQDPH  FKDU IQDPH2OG ³0\'LU9HFFKLR´

FKDU IQDPH1HZ ³0\'LU1XRYR´

UHVXOW UHQDPH IQDPH2OGIQDPH1HZ 

 UHVXOW VHHUURUHGLULGHQRPLQD] 

(12)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

*HVWLRQHGHJOLHUURUL

QHOO¶DFFHVVRDLILOH

‡ 5DJJLXQJLPHQWRGHOODILQHGHOILOHIHRI LQGLFDVHVLqUDJJLXQWDODILQHGHOILOH

‡ 9HULILFDGLHYHQWXDOLHUURULGLDFFHVVR

IHUURU LQGLFDVHVLVRQRYHULILFDWLHUURUL

GLDFFHVVRDOILOH

‡ &DQFHOOD]LRQHGLHYHQWXDOLHUURULGL

DFFHVVRFOHDUHUU ULSRUWDDOGHIDXOWL

YDORULGLHRI HGLHUURU SHULOILOH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IHRI

‡ 9HULILFDLOUDJJLXQJLPHQWRGHOODILQHGHO

ILOHVXXQILOHSUHFHGHQWHPHQWHDSHUWR

OHJJHQGRODYDULDELOHHRI DVVRFLDWDDIS

),/( IS

LQWUHVXOW

UHVXOW IHRI IS 

 UHVXOW VHILQHILOHUDJJLXQWD 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IHUURU

‡ &RQWUROODHUURULGLDFFHVVRDOILOHVXXQ

ILOHSUHFHGHQWHPHQWHDSHUWROHJJHQGR

ODYDULDELOHHUURU DVVRFLDWDDIS

),/( IS

LQWUHVXOW

UHVXOW IHUURU IS 

 UHVXOW VHHUURUHGLDFFHVVRDOILOH 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

FOHDUHUU

‡ 5LVWDELOLVFHLYDORULGLGHIDXOWSHUHRI HG

HUURU VXILOHSUHFHGHQWHPHQWHDSHUWR

),/( IS

YRLGFOHDUHUU IS 

(13)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$FFHVVRGLUHWWRDLILOH

‡ &RQVHQWH

‡ ODPRGLILFDGHOODSRVL]LRQHFRUUHQWHQHOILOH

SUHFHGHQWHPHQWHDSHUWRTXLQGLSHUPHWWH

‡ O¶DFFHVVRDGXQSDUWLFRODUHE\WHGHOTXDOHq

QRWDODSRVL]LRQHDOO¶LQWHUQRGHOILOH

‡ 'LVSRQHGHOOHIXQ]LRQL

‡ IVHHN

‡ IWHOO

‡ UHZLQG

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IVHHN

‡ 0RGLILFDGHOODSRVL]LRQHFRUUHQWHGLXQ

ILOHSUHFHGHQWHPHQWHDSHUWR

),/( IS

ORQJRIIVHW

LQWUHVXOWUHISRLQW

UHVXOW IVHHN ISRIIVHWUHISRLQW 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IVHHN

‡ RIIVHW

‡ LQGLFDORVFRVWDPHQWRHSXzDVVXPHUH

YDORULSRVLWLYLRQHJDWLYL

‡ UHISRLQW

‡ LQGLFDVHORVFRVWDPHQWRqUHODWLYRD

‡ 6((.B6(7LQL]LRGHOILOH

‡ 6((.B&85SRVL]LRQHFRUUHQWH

‡ 6((.B(1'ILQHGHOILOH

‡ UHVXOW

‡ VH LQGLFDXQHUURUHQHOO¶RSHUD]LRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IWHOO

‡ 5LSRUWDODSRVL]LRQHFRUUHQWHGLXQILOH

SUHFHGHQWHPHQWHDSHUWR

),/( IS

ORQJRIIVHW

RIIVHW IWHOO IS 

(14)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

UHZLQG

‡ 5LSRUWDDOO¶LQL]LRODSRVL]LRQHFRUUHQWHGL

XQILOHSUHFHGHQWHPHQWHDSHUWR

),/( IS

YRLGUHZLQG IS 

 HTXLYDOHDIVHHN IS6((.B6(7  

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/HWWXUDHVFULWWXUD GLFDUDWWHULVXILOH

‡ /HWWXUDOHJJHXQFDUDWWHUHGDOILOH

SUHFHGHQWHPHQWHDSHUWR

‡ JHWF

‡ IJHWF

‡ 6FULWWXUDVFULYHXQFDUDWWHUHVXOILOH

SUHFHGHQWHPHQWHDSHUWR

‡ SXWF

‡ ISXWF

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IJHWF

‡ /HWWXUDGLXQFDUDWWHUHGDXQILOH

SUHFHGHQWHPHQWHDSHUWR

),/( IS

FKDUF

F IJHWF IS 

 F (2)VHILQHILOHUDJJLXQWD 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

ISXWF

‡ 6FULWWXUDGLXQFDUDWWHUHVXXQILOH

SUHFHGHQWHPHQWHDSHUWR

),/( IS

LQWUHVXOW

FKDUF

UHVXOW ISXWF ISF 

 UHVXOW VHHUURUHGLVFULWWXUD 

(15)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/HWWXUDHVFULWWXUD GLVWULQJKHVXILOH

‡ /HWWXUDOHJJHXQDVWULQJDGLFDUDWWHUL

GDOILOHSUHFHGHQWHPHQWHDSHUWR

‡ JHWV

‡ IJHWV

‡ 6FULWWXUDVFULYHXQDVWULQJDGLFDUDWWHUL

VXOILOHSUHFHGHQWHPHQWHDSHUWR

‡ SXWV

‡ ISXWV

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IJHWV

‡ /HWWXUDGLXQDVWULQJDGLQ FDUDWWHULGD

XQILOHSUHFHGHQWHPHQWHDSHUWR

),/( IS

FKDU V

LQWQ

LI IJHWV VQIS  18//

^HUURUHGLOHWWXUD`

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IJHWV

‡ /¶RSHUD]LRQHGLOHWWXUDSXz

‡ OHJJHUHQ FDUDWWHUL

‡ OHJJHUHPHQRGLQ FDUDWWHULVHLQFRQWUDXQ

µ?Q¶

‡ /DVWULQJDLQPHPRULDqWHUPLQDWDGD

µ?¶

‡ 6HVLLQFRQWUDHRISULPDGLDYHUOHWWRQ FDUDWWHULLFDUDWWHULOHWWLVRQRDVVHJQDWL

DV FKHWHUPLQDFRQµ?¶

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

ISXWV

‡ 6FULWWXUDGLXQDVWULQJDVXXQILOH

SUHFHGHQWHPHQWHDSHUWR

),/( IS

FKDU V

LQWUHVXOW

UHVXOW ISXWV VIS 

 UHVXOW VHHUURUHLQVFULWWXUD 

(16)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/HWWXUDHVFULWWXUDGLVWUXFW

‡ /¶RSHUD]LRQHSUHYHGHO¶DFFHVVRDILOHSHU

EORFFKL

‡ /HWWXUDOHJJHXQEORFFRGLGDWLGDXQ

ILOHSUHFHGHQWHPHQWHDSHUWR

‡ IUHDG

‡ 6FULWWXUDVFULYHXQEORFFRGLGDWLVXXQ

ILOHSUHFHGHQWHPHQWHDSHUWR

‡ IZULWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/HWWXUDHVFULWWXUDGLVWUXFW

‡ 6LLSRWL]]DVLDGDWDXQDVWUXFW GHOWLSR

W\SHGHIVWUXFW^

FKDUFRJQRPH>@

FKDUQRPH>@

LQWPDWULFROD

`VWXGHQWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IUHDG

‡ /HWWXUDGLXQEORFFRGLGDWLGDXQILOH

SUHFHGHQWHPHQWHDSHUWR

),/( IS

VWXGHQWHVWXG

LQWUHVXOWGLPHOHPQXPHOHP

UHVXOW IUHDG VWXGGLPHOHPQXPHOHPIS 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IUHDG

‡ VWXG

‡ LQGLUL]]RGLVWXGHQWH

‡ GLPHOHP

‡ GLPHQVLRQHGHOO¶HOHPHQWR

VL]HRI VWXG 

‡ QXPHOHP

‡ QXPHURGLHOHPHQWLGDOHJJHUH

‡ UHVXOW

‡ QXPHURGLHOHPHQWLHIIHWWLYDPHQWHOHWWL

6HUHVXOW QXPHOHPLQGLFDXQHUURUH

QHOO¶RSHUD]LRQH

(17)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IZULWH

‡ 6FULWWXUDGLXQEORFFRGLGDWLVXXQILOH

SUHFHGHQWHPHQWHDSHUWR

),/( IS

VWXGHQWHVWXG

LQWUHVXOWGLPHOHPQXPHOHP

UHVXOW IZULWH VWXGGLPHOHPQXQHOHP

IS 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IZULWH

‡ VWXG

‡ LQGLUL]]RGLVWXGHQWH

‡ GLPHOHP

‡ GLPHQVLRQHGHOO¶HOHPHQWR

VL]HRI VWXG 

‡ QXPHOHP

‡ QXPHURGLHOHPHQWLGDVFULYHUH

‡ UHVXOW

‡ QXPHURGLHOHPHQWLHIIHWWLYDPHQWHVFULWWL

6HUHVXOW QXPHOHPLQGLFDXQHUURUH

QHOO¶RSHUD]LRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/DSURJUDPPD]LRQHGLVLVWHPD

/DJHVWLRQHGHLSURFHVVL

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

0RWLYD]LRQL

‡ 8QSURFHVVR SDGUH SXzGRYHU

PDQGDUHLQHVHFX]LRQHXQDOWUR

SURFHVVR ILJOLR HYHQWXDOPHQWH

VRVSHQGHQGRODSURSULDHVHFX]LRQHLQ

DWWHVDGHOODWHUPLQD]LRQHGHOSURFHVVR

ILJOLR

‡ (VHPSLRLQWHUSUHWHFRPDQGL

(18)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$VSHWWLJHQHUDOLUHODWLYL DLSURFHVVL

‡ 2JQLSURFHVVRqLGHQWLILFDWRLQPRGR

XQLYRFRGDXQ3,' 3URFHVV,'HQWLILHU 

‡ 7XWWLLSURFHVVLVRQRFUHDWLGDDOWUL

SURFHVVLHTXLQGLKDQQRXQSURFHVVR

SDGUH XQLFDHFFH]LRQHLOSURFHVVRLQLW

SULPRSURFHVVRFUHDWRDOODYYLDPHQWR

GHO62FKHQRQKDXQSURFHVVRSDGUH 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$VSHWWLJHQHUDOLUHODWLYL DLSURFHVVL

‡ 'DOSXQWRGLYLVWDGHOSURJUDPPDWRUHGLVLVWHPDOD

PHPRULDGLODYRURDVVRFLDWDDGXQSURFHVVRSXzHVVHUH

YLVWDFRPHFRVWLWXLWDGDVHJPHQWL

‡ VHJPHQWRFRGLFH WH[WVHJPHQW FRQWLHQHOHVHJXLELOHGHO

SURJUDPPD

‡ VHJPHQWRGDWL XVHUGDWDVHJPHQW FRQWLHQHWXWWHOHYDULDELOLGHO

SURJUDPPD JOREDOLRVWDWLFKHORFDOLDOORFDWHVXVWDFNFUHDWH

GLQDPLFDPHQWHGDOSURJUDPPDWUDPLWHPDOORF 

‡ VHJPHQWRGLVLVWHPD V\VWHPGDWDVHJPHQW FRQWLHQHLGDWLQRQ

JHVWLWLHVSOLFLWDPHQWHGDOSURJUDPPDLQHVHFX]LRQHPDGDO62 DG

HVHPSLRODWDEHOODGHLILOHDSHUWLHLGHVFULWWRULGLVRFNHW 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

2SHUD]LRQHVXLSURFHVVL

‡ /HSULQFLSDOLRSHUD]LRQLVXLSURFHVVL

FRQVHQWRQRGL

‡ JHQHUDUHXQSURFHVVR

‡ DWWHQGHUHODWHUPLQD]LRQHGLXQSURFHVVR

‡ WHUPLQDUHXQSURFHVVR

‡ VRVWLWXLUHLOFRGLFHGLXQSURFHVVRLQ

HVHFX]LRQH

LOSUHVHQWHOXFLGRQHULFKLDPDXQRSUHFHGHQWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IRUN

‡ &UHDXQSURFHVVRILJOLR RFKLOG LGHQWLFRDO

SURFHVVRSDGUH RSDUHQW 

‡ LOILJOLRqXQDFRSLDLGHQWLFDGHOSDGUHDOO¶L

VWDQWHGHOODIRUN/HYDULDELOLLILOHDSHUWLL

VRFNHWXWLOL]]DWLVRQRGXSOLFDWL QHOILJOLR

‡ O¶XQLFDGLIIHUHQ]DWUDILJOLRHSDGUHqOD

YDULDELOHSLG GHOSURFHVVRILJOLRJHQHUDWR

‡ LOSDGUHFRQRVFHLOSLG GHOORILJOLRLOILJOLRQRQ

FRQRVFHLOSURSULRSLG4XLQGLQHOILJOLR

SLG 

(19)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

IRUN

‡ 8QSURFHVVRILJOLR) SXzDVXDYROWDJHQHUDUH

XQXOWHULRUHSURFHVVRILJOLR1

‡ 6LVWDELOLVFHFRVuXQDJHUDUFKLDGLSURFHVVL

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

*HUDUFKLDGLSURFHVVL

Padre P

3qSDGUHGL)H)

)qSDGUHGL1H1

)qSDGUHGL1

Figlio F1

Figlio N11

Figlio F2

Figlio N12 Figlio N2

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6LQWDVVLGLIRUN

pid_t fork ()

/ Biforca il processo in padre e figlio:

al figlio restituisce sempre 0; al padre restituisce il pid > 0 del figlio biforcato; la funzione restituisce 1 se la biforcazione del processo fallisce (restituisce solo al padre, ovviamente, visto che il figlio non è stato biforcato), per esempio per insufficienza di memoria per la creazione del processo figlio, o altro motivo /

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6LQWDVVLGLIRUN LL

‡ 6LQWDVVL

SLGBWSLG IRUN  UHVWLWXLVFHSLGBW  SLGDVVXPHYDORUH

‡ QHOILJOLR

‡ QHOSDGUHVHODIRUNQRQqVWDWDHVHJXLWD DG

HVSHUPDQFDQ]DGLPHPRULD 

‡ TXDOVLDVLDOWURYDORUHQHOSDGUHLQGLFDLOSLGGHO

ILJOLR

(20)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

8WLOL]]RGLIRUN

#include <stdio.h>

#include <unistd.h>

void main(int argc, char * argv[]) { pid_t pid;

int retstatus;

pid = fork();

if (pid==0) {

/* sono nel figlio*/

...

/* il figlio termina restituendo al padre lo */

/* stato di terminazione */

exit(retstatus);

} else {

/* pid != 0, sono nel padre */

} }

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

s_pid = fork();

if (s_pid == 0) {

compito del figlio }

else {w_pid = wait(&stato);}

seguito del padre;

Process ID = a La fork genera un

altro processo con Process ID=s_pid=b

Process ID = b, s_pid = 0 Process ID = a, s_pid = b

s_pid = fork();

if (s_pid == 0) {...}

else {w_pid = wait(&stato);

il padre attende la terminazione del figlio

};

padre

s_pid = fork();

if (s_pid == 0) {

compito del figlio exit(0);

} else {};

figlio

s_pid = fork();

if (s_pid == 0) {...}

else {w_pid = wait(&stato);

dopo la terminazione del figlio il padre procede l’esecuzione };

Termine del processo con Process ID = b Dopo la terminazione del processo figlio

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

ZDLW

‡ 6RVSHQGHO¶HVHFX]LRQHGHOSURFHVVRSDGUHHG

DWWHQGHODWHUPLQD]LRQHGLXQTXDOVLDVL

SURFHVVRILJOLR

‡ VHLOILJOLRWHUPLQDSULPDFKHLOSDGUHHVHJXD

ODZDLWO¶HVHFX]LRQHGHOODZDLW QHOSDGUH

WHUPLQDLVWDQWDQHDPHQWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6LQWDVVLGLZDLW

pid_t wait (int * stato)

/ Mette un processo padre in stato di attesa dell’evento di terminazione di un processo figlio qualsiasi, e restituisce il pid del figlio effettivamente terminato; la funzione restituisce 1 se il processo padre esce dalla

"wait" per un errore che non abbia a che vedere con la terminazione di un figlio; l'argomento

“stato” assume il valore di “exit” del processo figlio terminato.

Parametri: stato è il puntatore a un intero, che conterrà lo stato di uscita del figlio terminato (contano solo gli 8 bit più significativi; gli 8 bit meno significativi vengono impostati da parte del sistema operativo stesso) /

(21)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

(VHPSLRGLZDLW

‡ 6LQWDVVL

P\BSLG ZDLW VWDWXV 

 UHVWLWXLVFHXQWLSRSLGBW  QHOSDGUH

‡ P\BSLGDVVXPHLOYDORUHGHOSLGGHOILJOLR

WHUPLQDWR

‡ VWDWXVGLWLSRLQWHURDVVXPHLOYDORUHGHO

FRGLFHGLWHUPLQD]LRQHGHOSURFHVVRILJOLR

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

8WLOL]]RGLZDLW

#include <stdio.h>

#include <sys/types.h>

#include <sys/wait.h>

void main(int argc, char * argv[]) { pid_t pid, my_pid;

int status;

pid = fork();

if (pid==0) { }

else {

printf("Ho generato il processo figlio con pid %d\n",pid);

/* pid != 0, sono nel padre */

...

my_pid = wait(&status);

printf{"E’ terminato il processo %d con esito %d\n",my_pid, status/256);

} }

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

ZDLWSLG

‡ 6RVSHQGHO¶HVHFX]LRQHGHOSURFHVVRSDGUHHG

DWWHQGHODWHUPLQD]LRQHGHOSURFHVVRILJOLRGL

FXLYLHQHIRUQLWR LOSLG P\BSLG 

‡ VHLOILJOLRWHUPLQDSULPDFKHLOSDGUHHVHJXD

ODZDLWSLGO¶HVHFX]LRQHGHOODZDLWSLG QHO

SDGUHWHUPLQDLVWDQWDQHDPHQWH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6LQWDVVLGLZDLWSLG

pid_t waitpid (pid_t pid, int * stato, int opzioni)

/ Mette un processo padre in stato di attesa dell’evento di terminazione del processo figlio avente pid pari a “pid”, e ne restituisce il pid; la funzione è insensibile alla terminazione di eventuali altri figli aventi pid diverso da "pid"; la funzione restituisce 1 se il processo padre esce dalla

"waitpid" per un errore che non abbia a che vedere con la terminazione del figlio "pid"; l'argomento

“stato” assume il valore di “exit” del processo figlio terminato.

Parametri: pid è il "pid" del figlio della cui terminazione il padre si mette in attesa; stato è il puntatore a un intero, che conterrà lo stato di uscita del figlio terminato (solo gli 8 bit più significativi); opzioni è un intero che specializza la funzione “waitpid”, e di solito vale 0 (altrimenti vedere il manuale in linea della funzione, perché le opzioni possibili sono parecchie) /

(22)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

(VHPSLRGLZDLWSLG

‡ 6LQWDVVL

P\BSLG ZDLWSLG SLG VWDWXV

RSWLRQV  UHVWLWXLVFHXQSLGBW  QHOSDGUH

‡ P\BSLGDVVXPHLOYDORUHGHOSLGGHOILJOLR

WHUPLQDWR

‡ VWDWXVDVVXPHLOYDORUHGHOFRGLFHGLWHUPLQD]LRQH

GHOSURFHVVRILJOLR

‡ RSWLRQVVSHFLILFDXOWHULRULRS]LRQL LSRWL]]LDPR! 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

8WLOL]]RGLZDLWSLG

#include <stdio.h>

#include <sys/types.h>

#include <sys/wait.h>

void main(int argc, char * argv[]) { pid_t pid, my_pid;

int status;

pid = fork();

if (pid==0) { }

else {

printf("Ho generato il processo figlio con pid %d\n",pid);

/* pid != 0, sono nel padre */

...

printf{"Attendo la terminazione del figlio con pid %d\n",pid) my_pid = waitpid(pid, &status, 1);

printf{"E’ terminato il processo %d con esito %d\n",my_pid, status/256);

} }

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

H[HF

‡ 6RVWLWXLVFHLOFRGLFHGHOSURFHVVRFRUUHQWHFRQ

LOFRGLFHGHOSURJUDPPDVSHFLILFDWR

‡ PDQWLHQHORVWHVVRSLG

‡ SDVVDLSDUDPHWULDOSURFHVVRFRQLOQXRYR

FRGLFHDWWUDYHUVRODOLQHDGLFRPDQGR DUJFH

DUJY YHGLDSSHQGLFH 

‡ HVLVWRQRQXPHURVLYDULDQWLFRQVLGHUHUHPROD

IXQ]LRQHH[HFO

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6LQWDVVLGLH[HFO

‡ 6LQWDVVL

LQWH[HFO FKDU SDWKBSURJUDPPD

FKDU DUJFKDU DUJ«FKDU DUJQ18// 

 UHVWLWXLVFHLQW 

SDWKBSURJUDPPDSDWKFRPSOHWRGHOILOH

DUJDUJ«DUJQSXQWDWRULDVWULQJKHFKHYHUUDQQRSDVVDWH

FRPHSDUDPHWULDOPDLQGHOSURJUDPPD DUJ GHYHHVVHUHLOQRPHGHOSURJUDPPD

O¶XOWLPRHOHPHQWRGHYHHVVHUHXQSXQWDWRUHD18//

LOYDORUHUHVWLWXLWRq

‡ VHO¶RSHUD]LRQHqVWDWDHVHJXLWDFRUUHWWDPHQWH

‡ VHF¶qVWDWRXQHUURUHHO¶RSHUD]LRQHGLVRVWLWX]LRQHGHO

FRGLFHqIDOOLWD

(23)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

8WLOL]]RGLH[HFO

#include <stdio.h>

#include <unistd.h>

void main(int argc, char * argv[]) {

int retstatus;

char par0[] = “my_main1”;

char par1[] = “primo parametro”;

char par2[] = “secondo parametro”;

retstatus = execl(“/usr/home/pozzi/main1", par0, par1, par2, NULL);

}

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

if (s_pid == 0) {

compito del figlio;

exec(“my_prog”,…)}

else {w_pid = wait(&stato);}

seguito del padre;

Process ID = a

if (s_pid == 0) {...}

else {w_pid = wait(&stato);

il padre attende la terminazione del figlio

};

padre

if (s_pid == 0) {...}

else {w_pid = wait(&stato);

dopo la terminazione del figlio il padre procede l’esecuzione };

Dopo la terminazione di my_prog

main(int argc, char **argv) {

exit(0);

}

figlio (con exec sostituisco il codice)

Termine del processo figlio if (s_pid == 0) {

compito del figlio exec(“my_prog,…”);}

else {};

figlio

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

H[LW

‡ 3RQHWHUPLQHDOSURFHVVRFRUUHQWH ILJOLR  UHVWLWXHQGRXQFRGLFHDOSURFHVVRSDGUH

‡ 6HLOSURFHVVRFKHqWHUPLQDWRQRQKDXQ

SURFHVVRSDGUHLOFRGLFHGHOODH[LWYLHQH

UHVWLWXLWRDOO¶LQWHUSUHWHFRPDQGL

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6LQWDVVLGLH[LW

‡ 6LQWDVVL

YRLGH[LW LQWVWDWXV 

 QRQUHVWLWXLVFHQXOODDO 

 SURFHVVRFKHHVHJXHODH[LW  LOSURFHVVRSDGUHSXzDFFHGHUHDOFRGLFHGL

WHUPLQD]LRQHGHOILJOLR

(24)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

8WLOL]]RGLH[LW

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/wait.h>

void main(int argc, char * argv[]) { pid_t pid;

int status,retstatus;

pid = fork();

if (pid==0) {

/* il figlio restituisce al padre lo stato di terminazione */

retstatus = 250;

exit(retstatus);}

else { /* pid != 0, sono nel padre */

pid = wait(&status);

printf("E’ terminato il processo %d con esito

%d\n”,pid,status/256);

/* stampera’ il numero del pid del figlio e il numero 250 */

} }

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/DSURJUDPPD]LRQHGLUHWH LQDPELHQWHPXOWLSURFHVVR

,OSDUDOOHOLVPRQHLVHUYHU

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

1HFHVVLWjGLSDUDOOHOLVPR QHLVHUYHU

‡ 6HUYHUVHTXHQ]LDOL

‡ DFFHWWDQRXQDVROD FRQQHVVLRQHDOODYROWD

‡ QRQVRQRSHUWDQWRSDUWLFRODUPHQWHXWLOL(¶

VRORXQDFRPXQLFD]LRQHWUDGXHSURFHVVL

SHUYROWDHYHQWXDOPHQWHDFFRGDQGRDOWUL

SURFHVVLFKHYRJOLDQRFRQQHWWHUVLDOOR

VWHVVRVHUYHU OLVWHQ 

‡ VRQRDQFKHGHWWLPRQRFRQQHVVLRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

1HFHVVLWjGLSDUDOOHOLVPR QHLVHUYHU

‡ 6HUYHUSDUDOOHOL

‡ VXSHUDQRLOLPLWLGHLVHUYHUVHTXHQ]LDOL

VIUXWWDQGRLOPHFFDQLVPRGLSDUDOOHOLVPR

‡ XWLOL]]HUHPRLOSDUDOOHOLVPRGL8QL[

WUDVFXUDQGRTXHOORGL:LQGRZV

‡ LOFOLHQWQRQKDPRGRGLGLVWLQJXHUHVHVLq

FRQQHVVRDGXQVHUYHUVHTXHQ]LDOHRDGXQ

VHUYHUSDUDOOHORSXzVRORDFFRUJHUVLGLXQD

FRQQHVVLRQHULILXWDWD

(25)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

)XQ]LRQDPHQWR GLXQVHUYHUSDUDOOHOR

‡ ,OVHUYHUVLSRQHLQDWWHVDGLULFKLHVWHGL

FRQQHVVLRQL DFFHSW VXXQSRUWVUYSRUW

‡ DOODULFH]LRQHGLXQDULFKLHVWDGL

FRQQHVVLRQH FRQQHFW GHOFOLHQWVX

VUYSRUW LOVHUYHUFUHDWUDPLWHODIRUN XQ

QXRYRSURFHVVRGHWWRILJOLRLGHQWLFRD

VHVWHVVR SURFHVVRSDGUHLPSURSULD

PHQWHGHWWRDQFKHVHUYHUSULQFLSDOH 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$OO¶LQWHUQRGHOVHUYHUSDUDOOHOR

‡ 'RSRODFUHD]LRQHGHOSURFHVVRILJOLRLO

SDGUHFKLXGHODFRQQHVVLRQHFROFOLHQWH

ULPDQHLQDWWHVDGLQXRYHULFKLHVWHGL

FRQQHFWFKHXWLOL]]HUDQQRVHPSUHOR

VWHVVRVUYSRUW

‡ ,OILJOLRXWLOL]]DLOVRFNHWDSHUWRGDO

SDGUHDOODFRQQHFW$OWHUPLQHLOILJOLR

FKLXGHODFRQQHVVLRQH FORVH HWHUPLQD

H[LW 

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

)XQ]LRQDPHQWRGLEDVH GLXQVHUYHUSDUDOOHOR

while (1) /* il server è in un ciclo perenne */

{

new_sd = accept(sd, ...) pid = fork();

if (pid==0) /*sono nel figlio */

{ /*esegui le richieste del client utilizzando il socket connesso new_sd; alla fine chiudi new_sd ed esegui exit */

}

else /* sono nel padre */

{ /*chiudi new_sd e

riprendi ad eseguire la accept su sd */

} }

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

5HDOL]]D]LRQH

GLXQVHUYHUSDUDOOHOR

0RGLILFDUH6HUYHUFRVuGDUHQGHUORXQ

VHUYHUSDUDOOHOR 6HUYHUSDU 

QEVXLFDOFRODWRUL8QL[LOWLSRSLGBWFRLQFLGHFRQLOWLSR

LQW9HUUjTXLQGLXWLOL]]DWDODGLFKLDUD]LRQHGHOWLSR

int p_id;

(26)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU3DU L

/* programma Server3Par */

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#define PORT 4000

#define MAXCONN 5

void addr_initialize();

void main(int argc, char * argv[])

{ int sd,new_sd,bind_result,listen_result; int pid; char inbuf;

struct sockaddr_in server_addr;

struct sockaddr_in client_addr;

int client_len=sizeof(client_addr);

char rispostaA[]="**il Server ha eseguito il comando A**";

char rispostaB[]="**il Server ha eseguito il comando B**";

char errmessage[]="**comando errato**";

char terminatore[2]={’*’,’\n’};

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU3DU LL

addr_initialize(&server_addr, PORT, INADDR_ANY);

sd=socket(AF_INET,SOCK_STREAM,0);

bind_result=bind(sd,(struct sockaddr*) &server_addr,sizeof(server_addr));

listen_result=listen(sd,MAXCONN);

while (1) {

printf("\nMi pongo in attesa di richieste di connessione\n");

new_sd=accept(sd,(struct sockaddr*) &client_addr,

&client_len);

printf("Ho accettato una connessione da: %d\n", ntohs(client_addr.sin_port));

pid=fork();

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU3DU LLL

if (pid==0){

do{ recv(new_sd,&inbuf,1,0);

printf("Ho ricevuto il comando %c ",inbuf);

printf("da: %d \n", ntohs(client_addr.sin_port));

switch (inbuf) { case ’e’:break;

case ’a’:{send(new_sd,rispostaA, sizeof(rispostaA),0);

send(new_sd,terminatore,2,0);break;}

case ’b’:{printf("i parametri sono: ");

do{recv(new_sd,&inbuf,1,0);

printf("%c",inbuf);

}while (inbuf!=’\0’);

printf(" ");

do {recv(new_sd,&inbuf,1,0);

printf("%c",inbuf);

}while (inbuf!=’\0’);

printf(" \n");

send(new_sd,rispostaB,sizeof(rispostaB),0);

send(new_sd,terminatore,2,0);break;}

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU3DU LY

default:{send(new_sd,errmessage, sizeof(errmessage),0);

send(new_sd,terminatore,2,0);break;}

}

} while (inbuf!=’e’);

printf("\nChiudo la connessione con: %d\n\n", ntohs(client_addr.sin_port));

close(new_sd);

exit();

} /* chiude if (pid == 0) */

close(new_sd); /* il padre chiude il socket che */

/* viene utilizzato dal figlio */

} /* chiude while (1) */

} /* chiude main */

(27)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

(VHFX]LRQHGL6HUYHU3DU

‡ &RQVLGHULDPRRUDXQHVHPSLRGL

HVHFX]LRQHGL6HUYHU3DUFKHDFFHWWD

FRQQHVVLRQLGDGLVWLQWLSURFHVVL

ULVSHWWLYDPHQWH&&H&

‡ &&H&VRQRHVHFX]LRQLGHO

SURJUDPPD&OLHQW R:&OLHQW 

‡ &OLHQWQRQKDPRGRGLULFRQRVFHUHVHLO

VHUYHUFXLVLFROOHJDqVHTXHQ]LDOHR

SDUDOOHOR

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

(VHFX]LRQHGL6HUYHU3DU

‡ ,SURFHVVLILJOLGL6HUYHU3DUXWLOL]]DQR

ODVWHVVDVHVVLRQHGLWHUPLQDOHGHO

SURFHVVRSDGUH

‡ ,PHVVDJJLGHOSDGUHHGHLILJOLVDUDQQR

DOWHUQDWLVXXQDXQLFDILQHVWUD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$YYLRGL6HUYHU3DU

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&HVHJXHLOFRPDQGRD

(28)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$YYLRGL&

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&HVHJXHLFRPDQGLDHE

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&HVHJXHLOFRPDQGR[

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&HVHJXHLOFRPDQGR\

(29)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$YYLRGL&

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&HVHJXHLOFRPDQGRD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&FKLXGHODFRQQHVVLRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&HVHJXHLOFRPDQGRE

(30)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&HVHJXHLOFRPDQGR

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&FKLXGHODFRQQHVVLRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&FKLXGHODFRQQHVVLRQH

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

,QYRFD]LRQHGLSURJUDPPL GLVHUYL]LR

‡ 8QVHUYHUSUHVHQWDXQ¶LQWHUIDFFLDDWWUDYHUVR

FXLGLIIHUHQWLFOLHQWULFKLHGRQRDTXHOVHUYHU

O¶HVHFX]LRQHGLSURJUDPPLJLjHVLVWHQWL

‡ ,OVHUYHUSDUDOOHOR IRUN HJHQHUD]LRQHGL

ILJOLRSHURJQLFRQQHVVLRQHULFHYXWD GHYH

‡ HVHJXLUHLOSURJUDPPDVSHFLILFDWRGDOFOLHQW

WUDPLWHXQDH[HF SDVVDQGRJOLLOGHVFULWWRUHGHO

VRFNHW

‡ DWWHQGHUHLOWHUPLQHGHOSURJUDPPD ZDLW 

(31)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6HUYHU([HF

‡ 5LVSHWWRD6HUYHU3DU

‡ qVHPSUHPXOWLSURFHVVRTXLQGLSHURJQL

FRQQHVVLRQHHVHJXHXQDIRUN

‡ DGRJQLULFKLHVWDGDOFOLHQWJHQHUDXQ

XOWHULRUHSURFHVVR WUDPLWHXQDIRUN FKH

HVHJXHLOFRPDQGRLQGLFDWRGDOFOLHQW

WUDPLWHODH[HFO 

‡ SDVVDDOSURJUDPPDLQYRFDWR 0DLQ$R

0DLQ% LOGHVFULWWRUHGHOVRFNHWSHU

FRPXQLFDUHFROFOLHQW

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU([HF L

/* programma Server3Exec */

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#define PORT 4000

#define MAXCONN 5

void addr_initialize();

void main(int argc, char * argv[]) {

int sd,new_sd,bind_result,listen_result; char inbuf;

struct sockaddr_in server_addr;

struct sockaddr_in client_addr;

int client_len=sizeof(client_addr);

char errmessage[]="**comando errato**"; /* rispetto a Server3Pa mancano */

char terminatore[2]={’*’,’\n’}; /* rispostaA e rispostaB */

char sdstring[7]; /* nuovo rispetto a Server3Par */

int pid,my_pid,status;

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU([HF LL

addr_initialize(&server_addr, PORT, INADDR_ANY);

sd=socket(AF_INET,SOCK_STREAM,0);

bind_result=bind(sd,(struct sockaddr*) &server_addr,sizeof(server_addr));

listen_result=listen(sd,MAXCONN);

while (1) {

printf("\nMi pongo in attesa di richieste di connessione\n");

new_sd=accept(sd,(struct sockaddr*) &client_addr, &client_len);

printf("Ho accettato una connessione da: %d\n", ntohs(client_addr.sin_port));

pid=fork();

if (pid==0) { do

{

recv(new_sd,&inbuf,1,0);

printf("Ho ricevuto il comando %c ",inbuf);

printf("da: %d \n", ntohs(client_addr.sin_port));

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU([HF LLL

switch (inbuf) {

case ’e’:break;

case ’a’:{sprintf(sdstring,"%d",new_sd);

pid=fork();

if (pid==0) {

execlp(“./MainA", “MainA”, sdstring, NULL);

printf(“errore di execl”); exit(255)}

else {my_pid = wait(&status); break;}}

case 'b':{sprintf(sdstring,"%d",new_sd);

pid=fork();

if (pid==0) {

execlp(“./MainB", “MainB”, sdstring, NULL);

printf(“errore di execl”); exit(255)}

else {my_pid = wait(&status); break;}}

default: {send(new_sd,errmessage, sizeof(errmessage),0);

send(new_sd,terminatore,2,0);break;}

} /* chiude switch */

} while (inbuf!='e'); /* chiude do */

(32)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL6HUYHU([HF LY

printf("\nChiudo la connessione con: %d\n\n", ntohs(client_addr.sin_port));

close(new_sd);

exit();

} /* chiude if (pid == 0) */

close(new_sd); /* il padre chiude il socket che */

/* viene utilizzato dal figlio */

} /* chiude while (1) */

} /* chiude main */

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL0DLQ$

/* programma MainA */

void main(int argc, char * argv[]) {

int sd;

char terminatore[2] = {’*’,’\n’};

char rispostaA[] = "**MainA ha eseguito il comando A**";

printf(" MainA\n");

sd = atoi(argv[1]);

send(sd, rispostaA, sizeof(rispostaA),0);

send(sd, terminatore,2,0);

printf(" MainA: ho terminato\n");

exit(0);

}

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&RPXQLFD]LRQH&OLHQW0DLQ%

‡ /DFRPXQLFD]LRQHWUD&OLHQWH0DLQ%

DYYLHQHDWWUDYHUVRLOGHVFULWWRUHGHO

VRFNHW

‡ &OLHQWQRQVLDFFRUJHGLSDUODUHFRQ

0DLQ%qFRQYLQWRGLSDUODUHFRQ

6HUYHU([HF

‡ 0DLQ%ULFHYHVXOODOLQHDGLFRPDQGRLO

GHVFULWWRUHGHOVRFNHWSHUFROORTXLDUH

FRQ&OLHQW

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

/LVWDWRGL0DLQ%

/* programma MainB*/

void main(int argc, char * argv[]) { int sd; char inbuf;

char rispostaB[] = "**MainB ha eseguito il comando B**";

char terminatore[2] = {’*’,’\n’};

sd = atoi(argv[1]);

printf(" MainB: i parametri sono:");

do { recv(sd, &inbuf, 1, 0);

printf("%c", inbuf);

} while (inbuf != ’\0’);

prinf(" ");

do { recv(sd, &inbuf, 1, 0);

printf("%c",inbuf);

} while (inbuf != ’\0’);

printf("\n" );

send(sd, rispostaB, sizeof(rispostaB),0);

send(sd, terminatore, 2, 0);

printf(" MainB: ho terminato\n");

exit(0);

}

(33)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

$YYLRGL6HUYHU([HF

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&OLHQWULFKLHGHLOFRPDQGRH

ORLQYLDDOVHUYHU

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

6HUYHU([HFULFHYH

LOFRPDQGREHODQFLDO¶HVFX]LRQH

GL0DLQ%

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&OLHQWULFHYHLPHVVDJJL

GD0DLQ%

(34)

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&OLHQWHVHJXHLOFRPDQGR[

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&OLHQWHVHJXHLOFRPDQGRD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&OLHQWWHUPLQD

 ,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD 

&RQVLGHUD]LRQHFRQFOXVLYH VXLVHUYHU

‡ 0ROWLVHUYHUVRQRDWWLYDWLTXDQGROD

PDFFKLQDYLHQHDFFHVDHGHYRQR

ULPDQHUHVHPSUHDWWLYL DGHVVHUYHU

:HE ,Q8QL[VRQRGHWWLGDHPRQV

‡ 6SHVVRLGDHPRQVQRQGHYRQRGLVSRUUH

GLXQDVHVVLRQHGLLQWHUSUHWHFRPDQGLH

GLWHUPLQDOHDVVRFLDWL HVHFX]LRQHLQ

EDFNJURXQG 1RQGLVSRQJRQRGLXQ

WHUPLQDOHDVVRFLDWRDOSURFHVVR

Riferimenti

Documenti correlati

ha offerto il prezzo più basso per il servizio ma non ha reso una adeguata giustificazione del basso costo della manodopera praticato. Infatti il servizio richiesto si

L’adattamento dell’immobile alle esigenze della Direzione Regionale e i complessivi lavori di sistemazione ambientale, di cui il presente lavoro è uno stralcio

IV U.1.03.02.09 - Manutenzione ordinaria e riparazione di beni immobili Liv V 008 e che lo stesso presenta la necessaria disponibilità di budget riscontrabile nella

OGGETTO: Manutenzioni edili varie immobili di Sassari P.zza Marconi n.8 – CIG ZBA21F7A9B – Ditta Atzori Emilio.. Questa Direzione Regionale deve procedere alla esecuzione

Lamberto Tagliasacchi, il quale, in data 12.02.2018, trasmetteva al Direttore Regionale la propria relazione nella quale, riepilogati i fatti, proponeva l’affidamento del

Su Geogebra traccia due angoli con vertici diversi A e A 0 , di ampiezza 60° (con il comando angolo di data misura).. Esegui le simmetrie assiali che trasformano il primo angolo

Esprimi in relazione alle misure dei lati l'area della gura

(c) se Donato stabilisse fra la sua frutta una relazione del tipo il frutto a è in relazione con il frutto b se il peso di a è maggiore del peso di b riuscirebbe a suddividere