Semafory w systemie Unix Pakiet IPC wprowadzony w Uniksie Systemu V UR]SRZV]HFKQLáVL ZNROHMQ\FKZDULDQWDFK8QLNVDWDN HZ wydaniach BSD) 8GRVW SQLDWU]\PHFKDQL]P\: kolejki komunikatów semafory VHJPHQW\SDPL FLG]LHORQHM 3RM FLDZVSyOQHGODZV]\VWNLFKPHFKDQL]PyZ,3& klucz ±Z\Uy QLNLQVWDQFML]DVREX identyfikator ZHZQ WU]Q\LGHQW\ILNDWRU]DVREXZV\VWHPLH twórca identyfikator oraz identyfikator grupowy procesu, NWyU\XWZRU]\á]DVyE ZáD FLFLHO±ZáD FLFLHO]DVREX3RF] WNRZRWZyUFDDOHPR H ]RVWDü]PLHQLRQ\SU]H]SURFHV\WZyUF\DNWXDOQHJRZáD FLFLHOD nadzorcy SUDZDGRVW SX prawa odczytu/zapisu/wykonania jak w systemie plików )XQNFMHV\VWHPRZHGRREVáXJL]DVREyZ,3& get ±WZRU]\LQVWDQFM ]DVREX,3&OXESU]HND]XMHZZ\QLNX LGHQW\ILNDWRUMX LVWQLHM FHJR]DVREX,3& ctl±ixqnfmhvwhuxm FH]DVREDPL,3&PLQXVXZDQLHLQVWDQFML funkcje specyficzne dla konkretnego mechanizmu Semafory w systemie UNIX str. 1
Uwagi:,QVWDQFMDND GHJRPHFKDQL]PX,3&MHVW]DVREHPV\VWHPRZ\P WZRU]\M V\VWHPRSHUDF\MQ\QD]OHFHQLHSURFHVyZX \WNRZQLND,QVWDQFMH]DVREyZSRV]F]HJyOQ\FKW\SyZV SU]HFKRZ\ZDQHZ statycznych tablicach systemowych.oxf]váx \GRRNUH OHQLDLQVWDQFML]DVREX,QVWDQFMH]DVREX RNUH ORQHJRPHFKDQL]PXPDM XQLNDWRZHNOXF]H.OXF]Z\NRU]\VWXMHVL MHG\QLHSU]\SLHUZV]\PRGZRáDQLXGR zasobu w procesie (w funkcji getsrgf]dvwhjrrgzrádqldmhvw RQSU]HNV]WDáFDQ\QDLGHQW\ILNDWRUNWyU\MHVWDUJXPHQWHP SR]RVWDá\FKIXQNFMLPDQLSXOXM F\FK]DVREHP 1DOH \GEDüRXVXZDQLHQLHSRWU]HEQ\FK]DVREyZV\VWHPRZ\FK (funkcje systemowe ctl oraz polecenia ipcs i ipcrm z poziomu LQWHUSUHWHUDSROHFH Typowe scenariusze pracy z zasobami IPC: 1. :LHOHZVSyáSUDFXM F\FK]HVRE UyZQRU] GQ\FK QLHVSRNUHZQLRQ\FK]HVRE SURFHVyZ NRRSHUXM FHSURFHV\XVWDODM ZVSyOQ\NOXF]]DVREX ND G\]QLFKZ\NRQXMHRSHUDFM getsrgdm FXVWDORQ\NOXF] RUD]RSFM IPC_CREAT SURFHV\NRU]\VWDM ]]DVREX SURFHVNWyU\NR F]\VL MDNRRVWDWQLZ\NRQXMHRSHUDFM ctl z RSFM IPC_RMIDXVXZDM FLQVWDQFM ]DVREX Semafory w systemie UNIX str. 2
2. Jak 1., ale proces WZRU] F\zasób wykonuje dodatkowe F]\QQR FLLQLFMXM FH NRRSHUXM FHSURFHV\XVWDODM ZVSyOQ\NOXF]]DVREX ND G\]QLFKZ\NRQXMHRSHUDFM get SRGDM FXVWDORQ\NOXF] RUD]NRPELQDFM RSFMLIPC_CREAT IPC_EXCL W\ONRMHGQHPXSURFHVRZLXGDMHVL Z\NRQDüW RSHUDFM ± Z\NRQXMHRQGRGDWNRZHF]\QQR FLLQLFMXM FH]DVyE SURFHV\NWyU\PQLHXGDáRVL Z\NRQDüRSHUDFMLget SRQDZLDM M W\PUD]HPEH] DGQ\FKRSFML SURFHV\NRU]\VWDM ]]DVREX MHGHQ]SURFHVyZXVXZDLQVWDQFM ]DVREX 3. 3URFHV\NRU]\VWDM FH]]DVREXV WZRU]RQHSU]H]ZVSyOQ\ proces macierzysty: RMFLHFWZRU]\QRZ LQVWDQFM ]DVREX]DSRPRF RSHUDFMLget z kluczem IPC_PRIVATE LHZHQWXDOQLHZ\NRQXMHF]\QQR FL LQLFMXM FH RMFLHFWZRU]\SURFHV\SRWRPQHLF]HNDQDLFK]DNR F]HQLH SURFHV\SRWRPQHZ\NRQXM VL NRU]\VWDM F]]DVREX RMFLHFXVXZDXWZRU]RQ LQVWDQFM ]DVREX Semafory w pakiecie IPC SRMHG\QF]DLQVWDQFMD]DVREXVNáDGDVL ]WDEOLF\VHPDIRUyZMHM UR]PLDUMHVWRNUH ODQ\MDNRDUJXPHQWRSHUDFMLsemget. ND GDRSHUDFMDQDWDEOLF\VHPDIRUyZMHVWZ\NRQ\ZDQD QLHSRG]LHOQLHLVNáDGDVL ]ZLHOXRSHUDFMLGRW\F] F\FK poszczególnych semaforów w tablicy QDSRMHG\QF]\PVHPDIRU]HZ]HVWDZLHPR QDZ\NRQ\ZDü RSHUDFMHVHPDIRUDXRJyOQLRQHJRGRGDWNRZRMHVWGRVW SQD RSHUDFMDZVWU]\PDQLDSURFHVXZRF]HNLZDQLXQD]DPNQL FLH semafora Semafory w systemie UNIX str. 3
RSHUDFMHPRJ E\üEORNXM FHOXEQLHEORNXM FH SURFHV\ZVWU]\PDQHRF]HNXM ZNROHMFH Semantyka wielokrotnych operacji na semaforze ]DZV]HZ\NRQXMHVL ZV]\VWNLHRNUH ORQHRSHUDFMHDOERQLF system po koleidqdol]xmhpr OLZR üz\nrqdqld poszczególnych operacji: MH OLRSHUDFM GDVL Z\NRQDüSU]HFKRG]LGRDQDOL]\QDVW SQHM operacji MH OLRSHUDFMDSRZRGXMHZVWU]\PDQLHSURFHVXSURFHV]RVWDMH ]DEORNRZDQ\QLHZ\NRQDZV]\ DGQHMRSHUDFML MH OLRSHUDFMDMHVWQLHEORNXM FDLQLHPR HE\üZ\NRQDQD QDW\FKPLDVWSURFHVRWU]\PXMHLQIRUPDFM REá G]LHQLH Z\NRQDZV]\ DGQHMRSHUDFML MH OLZV]\VWNLHRSHUDFMHPR QDZ\NRQDüZ\NRQXMHVL MHL sterowanie powraca do procesu Semantyka operacji podnoszenia semafora: SRZ\NRQDQLXRSHUDFMLSRGQLHVLHQLDVHPDIRUDVSUDZG]DVL F]\ V SURFHV\RF]HNXM FHQDW\PVHPDIRU]H MH OLWDNWRV\VWHPSU]HJO GDNROHMN SURFHVyZZVWU]\PDQ\FK VSUDZG]DM FF]\ZVWU]\PDQ\SURFHVPR QDREXG]Lü MH OLWDNWRVSUDZG]DVL F]\REXG]RQ\SURFHVQLH]RVWDQLH ZVWU]\PDQ\QDLQQHMRSHUDFMLDQDOL]XM Fwszystkie od SRF] WNX) QDVW SQLHZDUWR üvhpdirudmhvwrgsrzlhgqlrprg\ilnrzdqdl UR]SRF]\QDVL VSUDZG]HQLHF]\PR QDREXG]LüNROHMQ\] X SLRQ\FKSURFHVyZ PR OLZH]DJáRG]HQLH Semafory w systemie UNIX str. 4
Notacja: Operacje na pojedynczym semaforze P(6QRSXV]F]HQLH6RZDUWR üq V(6QSRGQLHVLHQLH6RZDUWR üq =6F]HNDMD 6 np(s,n) - QLHEORNXM FHRSXV]F]HQLH6RZDUWR üq nv(s,n) - QLHEORNXM FHSRGQLHVLHQLH6RZDUWR üq Operacje jednoczesne >9636=6@F]HNDMD 6 3 oraz S3 = 0 i ZWHG\6]ZL NV]RD6]PQLHMV]R [Q36=696@MH OL6 1 i S2 = 0, to zmniejsz 6RL]ZL NV]6Rwpp nic nie rób (QLHEORNXM FD 3U]\NáDG\ >9636@±]DZV]HZ\NRQDOQD6QLH]PLHQLDVL >3696@±ZVWU]\PXMHSURFHVMH OL6 ZDUWR ü6 QLH]PLHQLDVL Czytelnicy i pisarze Dodatkowe operacje na semaforach (semctl): RGF]\WDQLHZDUWR FLZVND]DQHJRVHPDIRUDOXEZV]\VWNLFK semaforów w zestawie ]PLDQDZDUWR FLZVND]DQHJRVHPDIRUDOXEZV]\VWNLFK semaforów w zestawie odczytanie ile procesów czeka na operacjach P i Z pobranie 3,'XSURFHVXNWyU\RVWDWQLRZ\NRQDáRSHUDFMHQD zestawie semaforów XVXQL FLH]HVWDZXVHPDIRUyZ pobranie informacji administracyjnych Semafory w systemie UNIX str. 5
6HJPHQW\SDPL FLG]LHORQHM±REV]DU\SDPL FLNWyUHPRJ E\ü SU]\á F]RQH jako fragmenty wirtualnej przestrzeni wirtualnej Uy Q\FKDWDN HW\FKVDP\FKSURFHVyZ P1 P2 SDPL üãg]lhorqd 7\SRZ\VFHQDULXV]NRU]\VWDQLD]VHJPHQWXSDPL FLG]LHORQHM SURFHV\WZRU] VHJPHQWSDPL FLG]LHORQHMRX]JRGQLRQ\P kluczu (shmget) ND G\]QLFKSU]\á F]DVHJPHQWSDPL FLGRVZRMHMSU]HVWU]HQL adresowej (shmat) GRVW SGRVHJPHQWXSDPL FLG]LHORQHMVSURZDG]DVL WHUD]GR EH]SR UHGQLHJR]DSLVXGRSDPL FLLRGF]\FLH]QLHM±MHVWG]L NL temu bardzo szybki JG\VHJPHQWSDPL FLQLHMHVWMX SRWU]HEQ\ND G\ proces SRZLQLHQJRRGá F]\üshmdt) jeden z procesów usuwa zasób (shmctl z IPC_RMID) Uwaga! GRVW SGRSDPL FLG]LHORQHM]D]Z\F]DMZ\PDJDV\QFKURQL]DFML QDOH \]H]ZROLüV\VWHPRZLRSHUDF\MQHPXQDZ\EyUDGUHVXSRG NWyU\PVHJPHQWSDPL FLG]LHORQHME G]LHSRGSL W\ZZLUWXDOQHM przestrzeni adresowej procesu Semafory w systemie UNIX str. 6