,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/D3URJUDPPD]LRQH GL5HWHHGL6LVWHPDLLL
$FXUDGL
/XFD%UHYHJOLHUL *LDFRPR%XRQDQQR 5REHUWR1HJULQL *LXVHSSH3R]]L 'RQDWHOOD6FLXWR
DEIPoliMI0LODQR
LIUC&DVWHOODQ]DVA
EUHYHJOLHULQHJULQLSR]]LVFLXWR#HOHWSROLPLLW EXRQDQQR#OLXFLW
YHUVLRQHGHOPDU]R
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/DSURJUDPPD]LRQHGLVLVWHPD
,QWURGX]LRQHDOVLVWHPDRSHUDWLYR HGLOVLVWHPDRSHUDWLYRPXOWLSURFHVVR
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
,OVLVWHPDRSHUDWLYR
 ,OVLVWHPDRSHUDWLYR
 qXQLQVLHPHGLPRGXOLVRIWZDUH
 FRQWUROODOHULVRUVHGHOVLVWHPD
 LQWHUDJLVFHGLUHWWDPHQWHFRQLVRIWZDUHFKH
FRQWUROODQRO¶KDUGZDUHGHYLFHGULYHU
 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
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
,OSURFHVVRGDOSXQWRGLYLVWD
GHOVLVWHPDRSHUDWLYR
 ,OSURFHVVR q
 XQ¶DWWLYLWjVHTXHQ]LDOHFRPHDGHV
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
,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
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
,SURFHVVLHGLOVLVWHPD
RSHUDWLYR
 $QFKHLOVLVWHPDRSHUDWLYRq
LPSOHPHQWDWRWUDPLWHSURFHVVL
 LOVLVWHPDRSHUDWLYRqJDUDQWHFKHL
FRQIOLWWLWUDLSURFHVVLVLDQRFRQWUROODWLH
JHVWLWLFRUUHWWDPHQWH
 LOVLVWHPDRSHUDWLYRYLHQHHVHJXLWRLQ
PRGDOLWjSULYLOHJLDWDNHUQHOPRGH R
VXSHUYLVRUFRVuGDSRWHUFRQWUROODUHJOL
DOWULSURFHVVLHVHJXLWLLQPRGDOLWjXVHU
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&KLDPDWHDOVXSHUYLVRU
 ,SURFHVVLXWHQWHSHUHVHJXLUH
RSHUD]LRQLSULYLOHJLDWHFRPHDGHV
 DFFHVVRDILOH
 DFFHVVRDGDOWUHULVRUVH
 RSHUD]LRQLGL,2GLUHWWR
LQYRFDQRLOVXSHUYLVRU WUDPLWHFKLDPDWH
GLVLVWHPDV\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
,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´LOVLVWHPDRSHUDWLYRFKH
IXQ]LRQLVHFRQGRUHJROHFKLDUHHEHQ
VWDELOLWH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
1HFHVVLWjGLSDUDOOHOLVPR QHLVLVWHPLRSHUDWLYL
 8QXWHQWHFKHVLFROOHJDDGXQD
PDFFKLQDDGHV8QL[WUDPLWHLO
SURJUDPPDWHOQHWGLVSRQHGLXQ
LQWHUSUHWHFRPDQGLHYHQWXDOPHQWH
VFHOWRGDOO¶XWHQWHVWHVVRWUDPLWHFKVK
 1HOODPDFFKLQDGHYHHVVHUHSUHVHQWHXQ
SURFHVVRLQWHUSUHWHFRPDQGLSHURJQL
VHVVLRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
1HFHVVLWjGLSDUDOOHOLVPR QHLVLVWHPLRSHUDWLYL
 $GRJQLQXRYDFRQQHVVLRQHLOVLVWHPD
RSHUDWLYRJHQHUDXQSURFHVVRLQWHUSUHWH
FRPDQGLVSHFLILFRSHUTXHOOD
FRQQHVVLRQH
 &LVRQRTXLQGLSLFRSLHGHOORVWHVVR
SURJUDPPD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
3DUDOOHOLVPRLQ8QL[
 (VLVWRQRGXHSULQFLSDOLPHWRGLSHU
RWWHQHUHO¶HVHFX]LRQHSDUDOOHODLQ
DPELHQWH8QL[
 JHQHUD]LRQHGLQXRYLSURFHVVL
 XWLOL]]RGLWKUHDG
 &RQVLGHUHUHPRODJHQHUD]LRQHGLQXRYL
SURFHVVLPHFFDQLVPRSLVWDQGDUGH
PHQRFRPSOHVVR
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/DSURJUDPPD]LRQHGLVLVWHPD
'HILQL]LRQL
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
'HILQL]LRQH
 &RQSURJUDPPD]LRQHGLVLVWHPD VL
LQWHQGRQROHWHFQLFKHXWLOL]]DWHQHOOD
VFULWWXUDGLSURJUDPPLXWHQWHFLRqQRQ
QHFHVVDULDPHQWHHVHJXLWLLQPRGDOLWj
VXSHUYLVRUFKHLQWHUDJLVFRQR
VWUHWWDPHQWHFRQLOVLVWHPDRSHUDWLYRH
FKHXWLOL]]DQRLVHUYL]LV\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
,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
 JHQHUDUHXQSURFHVVRILJOLRFKLOG RDQFKH
VODYHFRSLDGHOSURFHVVRSDGUHSDUHQW R
DQFKHPDVWHULQHVHFX]LRQH
 DWWHQGHUHODWHUPLQD]LRQHGLXQSURFHVVRILJOLR
 WHUPLQDUHXQSURFHVVRILJOLR UHVWLWXHQGRXQ
FRGLFHDOSURFHVVRSDGUH
 VRVWLWXLUHLOFRGLFHGLXQSURFHVVRLQHVHFX]LRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/DSURJUDPPD]LRQHGLVLVWHPD
/DJHVWLRQHGHLILOH
DHVHUFLWD]LRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
,OILOH
 (¶XQFRQWHQLWRUHGLLQIRUPD]LRQL
 SHUPDQHQWL
 VXPHPRULDGLPDVVD
 FXLVLDFFHGHWUDPLWHIXQ]LRQLGHOOD
VWDQGDUGOLEUDU\
 (¶DQFKHGHWWR³ORQJOLYHGREMHFW´
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
,OILOH
 (¶LGHQWLILFDWRGD
 QRPHXQLYRFRQHOODVXDGLUHFWRU\HG
HVWHQVLRQH
 GLUHFWRU\HYROXPHGRYHqPHPRUL]]DWR
 OXQJKH]]DQXPHURGLE\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
 8QSURJUDPPDDGHVLQ&FKHGHVLGHUD
XWLOL]]DUHXQILOHGHYHDSULUHXQIOXVVR
VWUHDPGLFRPXQLFD]LRQHLQYRFDQGRLO
VLVWHPDRSHUDWLYR
 ,OVLVWHPDRSHUDWLYRUHVWLWXLVFHDOSURJUDPPD
LOGHVFULWWRUHGHOILOH KDQGOHHPHPRUL]]D
VHPSUHODSRVL]LRQHFRUUHQWHQHOILOH
 2JQLRSHUD]LRQHVXOILOHDYYLHQHWUDPLWH
KDQGOH$OWHUPLQHLOSURJUDPPDFKLXGHLO
ILOHULODVFLDQGRLOGHVFULWWRUH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
)OXVVLHILOH
 9LVRQRWUHIOXVVLVWDQGDUGDVVRFLDWLDG
RJQLSURFHVVR
 VWGLQODWDVWLHUDSHUOHJJHUHLPHVVDJJLLQ
LQJUHVVRVFDQI
 VWGRXWLOYLGHRSHUVFULYHUHLPHVVDJJLLQ
XVFLWDSULQWI
 VWGHUULOYLGHRSHUVFULYHUHLPHVVDJJLGL
HUURUHSULQWI
 $WDOLIOXVVLVLDJJLXQJRQRHYHQWXDOLILOH
DSHUWLGDOSURJUDPPD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
7LSLGLILOH
 'LWHVWR $6&,,
 VRQRVHTXHQ]HGLFDUDWWHULJHQHUDOPHQWH
VXGGLYLVHLQOLQHHVHSDUDWHGDOFDUDWWHUH
C?Q¶
 SRVVRQRHVVHUHYLVXDOL]]DWLDYLGHRDGHV
WUDPLWHLOFRPDQGRFDWRVWDPSDWLDGHV
WUDPLWHLOFRPDQGROSU
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
7LSLGLILOH
 %LQDUL ELQDU\
 VRQRVHTXHQ]HGLE\WH
 SHUHVVHUHOHWWLqQHFHVVDULRFRQRVFHUHOD
PRGDOLWjVHFRQGRODTXDOHOHLQIRUPD]LRQL
VRQRVWDWHVFULWWH
 JHQHUDOPHQWHQRQSRVVRQRHVVHUHOHWWLH
VWDPSDWLGLUHWWDPHQWHVHQRQWUDPLWH
RSSRUWXQLSURJUDPPL
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
2SHUD]LRQLGLEDVH QHOODJHVWLRQHGHLILOH
 $SHUWXUDIRSHQ DSUHXQILOH
 PHPRUL]]DVHPSUHODSRVL]LRQHFRUUHQWH
QHOILOH
 &KLXVXUDIFORVH FKLXGHXQILOH
 &DQFHOOD]LRQHUHPRYH SHUFDQFHOODUHXQ
ILOH
 5LGHQRPLQD]LRQHUHQDPH PRGLILFDLO
QRPHGLXQILOHRVSRVWDUORGLGLUHWWRULR
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
0RGDOLWjEDVHGLDFFHVVR
 /HPRGDOLWjEDVHGLDFFHVVRVRQRVSHFLILFDWH
GXUDQWHODIDVHGLDSHUWXUDGHOILOHHVRQR
 /HWWXUD
 UUHDG
 ODSRVL]LRQHFRUUHQWHqDOO¶LQL]LRGHOILOH
 6FULWWXUD
 ZZULWH
 ODSRVL]LRQHFRUUHQWHqDOO¶LQL]LRGHOILOH
 $JJLXQWD
 DDSSHQG
 ODSRVL]LRQHFRUUHQWHqDOODILQHGHOILOH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
$OWUHPRGDOLWjGLDFFHVVR
 %LQDULR
 EELQDU\
 /HWWXUDHVFULWWXUD
 VLDVFULWWXUDFKHOHWWXUD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
(VHPSLGLPRGDOLWjGLDFFHVVR
 ZZULWHLQPRGDOLWjWHVWR
 ZZULWHHUHDGLQPRGDOLWjWHVWR
 UEUHDGLQPRGDOLWjELQDULD
 DEDJJLXQWDHOHWWXUDLQPRGDOLWjELQDULD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IRSHQ
 $SHUWXUDGHOILOH
),/( IS
FRQVWFKDU IQDPH ³0LR)LOH´
FRQVWFKDU PRGH ³Z´
IS IRSHQIQDPHPRGH
IS 18//VHHUURUHGLDSHUWXUD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IFORVH
 &KLXVXUDGHOILOHFKHGHYHHVVHUHVWDWR
DSHUWRSUHFHGHQWHPHQWH
),/( IS
LQWUHVXOW
UHVXOW IFORVHIS
UHVXOW VHHUURUHGLFKLXVXUD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
UHPRYH
 &DQFHOOD]LRQHGHOILOH
),/( IS LQXWLOHSHUODUHPRYH LQWUHVXOW
FRQVWFKDU IQDPH ³0LR)LOH´
UHVXOW UHPRYHIQDPH
UHVXOW VHHUURUHGLFDQFHOOD]LRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
UHQDPH
 5LGHQRPLQD]LRQHGHOILOH
),/( IS LQXWLOHSHUODUHQDPH FRQVWFKDU IQDPH2OG ³9HFFKLR1RPH´
FRQVWFKDU IQDPH1HZ ³1XRYR1RPH´
LQWUHVXOW
UHVXOW UHQDPHIQDPH2OGIQDPH1HZ
UHVXOW VHHUURUHGLULGHQRPLQD]
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
UHQDPHLL
 5LGHQRPLQD]LRQHGHOILOHFRQFDPELRGL
GLUHFWRU\
),/( IS LQXWLOHSHUODUHQDPH FKDU IQDPH2OG ³0\'LU9HFFKLR´
FKDU IQDPH1HZ ³0\'LU1XRYR´
UHVXOW UHQDPHIQDPH2OGIQDPH1HZ
UHVXOW VHHUURUHGLULGHQRPLQD]
,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 IHRIIS
UHVXOW VHILQHILOHUDJJLXQWD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IHUURU
 &RQWUROODHUURULGLDFFHVVRDOILOHVXXQ
ILOHSUHFHGHQWHPHQWHDSHUWROHJJHQGR
ODYDULDELOHHUURU DVVRFLDWDDIS
),/( IS
LQWUHVXOW
UHVXOW IHUURUIS
UHVXOW VHHUURUHGLDFFHVVRDOILOH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
FOHDUHUU
 5LVWDELOLVFHLYDORULGLGHIDXOWSHUHRI HG
HUURU VXILOHSUHFHGHQWHPHQWHDSHUWR
),/( IS
YRLGFOHDUHUUIS
,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 IVHHNISRIIVHWUHISRLQW
,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 IWHOOIS
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
UHZLQG
 5LSRUWDDOO¶LQL]LRODSRVL]LRQHFRUUHQWHGL
XQILOHSUHFHGHQWHPHQWHDSHUWR
),/( IS
YRLGUHZLQGIS
HTXLYDOHDIVHHNIS6((.B6(7
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/HWWXUDHVFULWWXUD GLFDUDWWHULVXILOH
 /HWWXUDOHJJHXQFDUDWWHUHGDOILOH
SUHFHGHQWHPHQWHDSHUWR
 JHWF
 IJHWF
 6FULWWXUDVFULYHXQFDUDWWHUHVXOILOH
SUHFHGHQWHPHQWHDSHUWR
 SXWF
 ISXWF
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IJHWF
 /HWWXUDGLXQFDUDWWHUHGDXQILOH
SUHFHGHQWHPHQWHDSHUWR
),/( IS
FKDUF
F IJHWFIS
F (2)VHILQHILOHUDJJLXQWD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
ISXWF
 6FULWWXUDGLXQFDUDWWHUHVXXQILOH
SUHFHGHQWHPHQWHDSHUWR
),/( IS
LQWUHVXOW
FKDUF
UHVXOW ISXWFISF
UHVXOW VHHUURUHGLVFULWWXUD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/HWWXUDHVFULWWXUD GLVWULQJKHVXILOH
 /HWWXUDOHJJHXQDVWULQJDGLFDUDWWHUL
GDOILOHSUHFHGHQWHPHQWHDSHUWR
 JHWV
 IJHWV
 6FULWWXUDVFULYHXQDVWULQJDGLFDUDWWHUL
VXOILOHSUHFHGHQWHPHQWHDSHUWR
 SXWV
 ISXWV
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IJHWV
 /HWWXUDGLXQDVWULQJDGLQ FDUDWWHULGD
XQILOHSUHFHGHQWHPHQWHDSHUWR
),/( IS
FKDU V
LQWQ
LIIJHWVVQIS 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 ISXWVVIS
UHVXOW VHHUURUHLQVFULWWXUD
,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]HRIVWXG
 QXPHOHP
 QXPHURGLHOHPHQWLGDOHJJHUH
 UHVXOW
 QXPHURGLHOHPHQWLHIIHWWLYDPHQWHOHWWL
6HUHVXOW QXPHOHPLQGLFDXQHUURUH
QHOO¶RSHUD]LRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IZULWH
 6FULWWXUDGLXQEORFFRGLGDWLVXXQILOH
SUHFHGHQWHPHQWHDSHUWR
),/( IS
VWXGHQWHVWXG
LQWUHVXOWGLPHOHPQXPHOHP
UHVXOW IZULWH VWXGGLPHOHPQXQHOHP
IS
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IZULWH
 VWXG
 LQGLUL]]RGLVWXGHQWH
 GLPHOHP
 GLPHQVLRQHGHOO¶HOHPHQWR
VL]HRIVWXG
 QXPHOHP
 QXPHURGLHOHPHQWLGDVFULYHUH
 UHVXOW
 QXPHURGLHOHPHQWLHIIHWWLYDPHQWHVFULWWL
6HUHVXOW QXPHOHPLQGLFDXQHUURUH
QHOO¶RSHUD]LRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/DSURJUDPPD]LRQHGLVLVWHPD
/DJHVWLRQHGHLSURFHVVL
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
0RWLYD]LRQL
 8QSURFHVVRSDGUHSXzGRYHU
PDQGDUHLQHVHFX]LRQHXQDOWUR
SURFHVVRILJOLRHYHQWXDOPHQWH
VRVSHQGHQGRODSURSULDHVHFX]LRQHLQ
DWWHVDGHOODWHUPLQD]LRQHGHOSURFHVVR
ILJOLR
 (VHPSLRLQWHUSUHWHFRPDQGL
,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[WVHJPHQWFRQWLHQHOHVHJXLELOHGHO
SURJUDPPD
 VHJPHQWRGDWL XVHUGDWDVHJPHQWFRQWLHQHWXWWHOHYDULDELOLGHO
SURJUDPPDJOREDOLRVWDWLFKHORFDOLDOORFDWHVXVWDFNFUHDWH
GLQDPLFDPHQWHGDOSURJUDPPDWUDPLWHPDOORF
 VHJPHQWRGLVLVWHPD V\VWHPGDWDVHJPHQWFRQWLHQHLGDWLQRQ
JHVWLWLHVSOLFLWDPHQWHGDOSURJUDPPDLQHVHFX]LRQHPDGDO62DG
HVHPSLRODWDEHOODGHLILOHDSHUWLHLGHVFULWWRULGLVRFNHW
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
2SHUD]LRQHVXLSURFHVVL
 /HSULQFLSDOLRSHUD]LRQLVXLSURFHVVL
FRQVHQWRQRGL
 JHQHUDUHXQSURFHVVR
 DWWHQGHUHODWHUPLQD]LRQHGLXQSURFHVVR
 WHUPLQDUHXQSURFHVVR
 VRVWLWXLUHLOFRGLFHGLXQSURFHVVRLQ
HVHFX]LRQH
LOSUHVHQWHOXFLGRQHULFKLDPDXQRSUHFHGHQWH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
IRUN
 &UHDXQSURFHVVRILJOLRRFKLOGLGHQWLFRDO
SURFHVVRSDGUHRSDUHQW
 LOILJOLRqXQDFRSLDLGHQWLFDGHOSDGUHDOO¶L
VWDQWHGHOODIRUN/HYDULDELOLLILOHDSHUWLL
VRFNHWXWLOL]]DWLVRQRGXSOLFDWL QHOILJOLR
 O¶XQLFDGLIIHUHQ]DWUDILJOLRHSDGUHqOD
YDULDELOHSLG GHOSURFHVVRILJOLRJHQHUDWR
 LOSDGUHFRQRVFHLOSLG GHOORILJOLRLOILJOLRQRQ
FRQRVFHLOSURSULRSLG4XLQGLQHOILJOLR
SLG
,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
 QHOSDGUHVHODIRUNQRQqVWDWDHVHJXLWDDG
HVSHUPDQFDQ]DGLPHPRULD
 TXDOVLDVLDOWURYDORUHQHOSDGUHLQGLFDLOSLGGHO
ILJOLR
,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) ∗/
,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 LOSLGP\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) ∗/
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
(VHPSLRGLZDLWSLG
 6LQWDVVL
P\BSLG ZDLWSLGSLG VWDWXV
RSWLRQV UHVWLWXLVFHXQSLGBW QHOSDGUH
 P\BSLGDVVXPHLOYDORUHGHOSLGGHOILJOLR
WHUPLQDWR
 VWDWXVDVVXPHLOYDORUHGHOFRGLFHGLWHUPLQD]LRQH
GHOSURFHVVRILJOLR
 RSWLRQVVSHFLILFDXOWHULRULRS]LRQLLSRWL]]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
FRGLFHDWWUDYHUVRODOLQHDGLFRPDQGRDUJFH
DUJY YHGLDSSHQGLFH
 HVLVWRQRQXPHURVLYDULDQWLFRQVLGHUHUHPROD
IXQ]LRQHH[HFO
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
6LQWDVVLGLH[HFO
 6LQWDVVL
LQWH[HFOFKDU 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
,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
 3RQHWHUPLQHDOSURFHVVRFRUUHQWHILJOLR UHVWLWXHQGRXQFRGLFHDOSURFHVVRSDGUH
 6HLOSURFHVVRFKHqWHUPLQDWRQRQKDXQ
SURFHVVRSDGUHLOFRGLFHGHOODH[LWYLHQH
UHVWLWXLWRDOO¶LQWHUSUHWHFRPDQGL
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
6LQWDVVLGLH[LW
 6LQWDVVL
YRLGH[LWLQWVWDWXV
QRQUHVWLWXLVFHQXOODDO
SURFHVVRFKHHVHJXHODH[LW LOSURFHVVRSDGUHSXzDFFHGHUHDOFRGLFHGL
WHUPLQD]LRQHGHOILJOLR
,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
VWHVVRVHUYHUOLVWHQ
 VRQRDQFKHGHWWLPRQRFRQQHVVLRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
1HFHVVLWjGLSDUDOOHOLVPR QHLVHUYHU
 6HUYHUSDUDOOHOL
 VXSHUDQRLOLPLWLGHLVHUYHUVHTXHQ]LDOL
VIUXWWDQGRLOPHFFDQLVPRGLSDUDOOHOLVPR
 XWLOL]]HUHPRLOSDUDOOHOLVPRGL8QL[
WUDVFXUDQGRTXHOORGL:LQGRZV
 LOFOLHQWQRQKDPRGRGLGLVWLQJXHUHVHVLq
FRQQHVVRDGXQVHUYHUVHTXHQ]LDOHRDGXQ
VHUYHUSDUDOOHORSXzVRORDFFRUJHUVLGLXQD
FRQQHVVLRQHULILXWDWD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
)XQ]LRQDPHQWR GLXQVHUYHUSDUDOOHOR
 ,OVHUYHUVLSRQHLQDWWHVDGLULFKLHVWHGL
FRQQHVVLRQLDFFHSWVXXQSRUWVUYSRUW
 DOODULFH]LRQHGLXQDULFKLHVWDGL
FRQQHVVLRQHFRQQHFW GHOFOLHQWVX
VUYSRUWLOVHUYHUFUHDWUDPLWHODIRUN XQ
QXRYRSURFHVVRGHWWRILJOLRLGHQWLFRD
VHVWHVVRSURFHVVRSDGUHLPSURSULD
PHQWHGHWWRDQFKHVHUYHUSULQFLSDOH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
$OO¶LQWHUQRGHOVHUYHUSDUDOOHOR
 'RSRODFUHD]LRQHGHOSURFHVVRILJOLRLO
SDGUHFKLXGHODFRQQHVVLRQHFROFOLHQWH
ULPDQHLQDWWHVDGLQXRYHULFKLHVWHGL
FRQQHFWFKHXWLOL]]HUDQQRVHPSUHOR
VWHVVRVUYSRUW
 ,OILJOLRXWLOL]]DLOVRFNHWDSHUWRGDO
SDGUHDOODFRQQHFW$OWHUPLQHLOILJOLR
FKLXGHODFRQQHVVLRQHFORVHHWHUPLQD
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
VHUYHUSDUDOOHOR6HUYHUSDU
QEVXLFDOFRODWRUL8QL[LOWLSRSLGBWFRLQFLGHFRQLOWLSR
LQW9HUUjTXLQGLXWLOL]]DWDODGLFKLDUD]LRQHGHOWLSR
int p_id;
,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
/LVWDWRGL6HUYHU3DULL
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
/LVWDWRGL6HUYHU3DULLL
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
/LVWDWRGL6HUYHU3DULY
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 */
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
(VHFX]LRQHGL6HUYHU3DU
 &RQVLGHULDPRRUDXQHVHPSLRGL
HVHFX]LRQHGL6HUYHU3DUFKHDFFHWWD
FRQQHVVLRQLGDGLVWLQWLSURFHVVL
ULVSHWWLYDPHQWH&&H&
 &&H&VRQRHVHFX]LRQLGHO
SURJUDPPD&OLHQWR:&OLHQW
 &OLHQWQRQKDPRGRGLULFRQRVFHUHVHLO
VHUYHUFXLVLFROOHJDqVHTXHQ]LDOHR
SDUDOOHOR
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
(VHFX]LRQHGL6HUYHU3DU
 ,SURFHVVLILJOLGL6HUYHU3DUXWLOL]]DQR
ODVWHVVDVHVVLRQHGLWHUPLQDOHGHO
SURFHVVRSDGUH
 ,PHVVDJJLGHOSDGUHHGHLILJOLVDUDQQR
DOWHUQDWLVXXQDXQLFDILQHVWUD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
$YYLRGL6HUYHU3DU
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&HVHJXHLOFRPDQGRD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
$YYLRGL&
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&HVHJXHLFRPDQGLDHE
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&HVHJXHLOFRPDQGR[
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&HVHJXHLOFRPDQGR\
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
$YYLRGL&
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&HVHJXHLOFRPDQGRD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&FKLXGHODFRQQHVVLRQH
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&HVHJXHLOFRPDQGRE
,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
 ,OVHUYHUSDUDOOHORIRUN HJHQHUD]LRQHGL
ILJOLRSHURJQLFRQQHVVLRQHULFHYXWDGHYH
 HVHJXLUHLOSURJUDPPDVSHFLILFDWRGDOFOLHQW
WUDPLWHXQDH[HF SDVVDQGRJOLLOGHVFULWWRUHGHO
VRFNHW
 DWWHQGHUHLOWHUPLQHGHOSURJUDPPDZDLW
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
6HUYHU([HF
 5LVSHWWRD6HUYHU3DU
 qVHPSUHPXOWLSURFHVVRTXLQGLSHURJQL
FRQQHVVLRQHHVHJXHXQDIRUN
 DGRJQLULFKLHVWDGDOFOLHQWJHQHUDXQ
XOWHULRUHSURFHVVRWUDPLWHXQDIRUNFKH
HVHJXHLOFRPDQGRLQGLFDWRGDOFOLHQW
WUDPLWHODH[HFO
 SDVVDDOSURJUDPPDLQYRFDWR0DLQ$R
0DLQ%LOGHVFULWWRUHGHOVRFNHWSHU
FRPXQLFDUHFROFOLHQW
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/LVWDWRGL6HUYHU([HFL
/* 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([HFLL
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([HFLLL
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 */
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
/LVWDWRGL6HUYHU([HFLY
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);
}
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
$YYLRGL6HUYHU([HF
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&OLHQWULFKLHGHLOFRPDQGRH
ORLQYLDDOVHUYHU
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
6HUYHU([HFULFHYH
LOFRPDQGREHODQFLDO¶HVFX]LRQH
GL0DLQ%
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&OLHQWULFHYHLPHVVDJJL
GD0DLQ%
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&OLHQWHVHJXHLOFRPDQGR[
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&OLHQWHVHJXHLOFRPDQGRD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD
&OLHQWWHUPLQD
,QIRUPDWLFD,, 3URJUDPPD]LRQHGL5HWHHGL6LVWHPD