QNXãªã¢ã«ã¿ã€ã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«é¢ããäžé£ã®æ³šæäºé
ã®ç¶ãã ä»åã¯ãQNX Neutrinoã®ã¿ã¹ã¯éåŠçã«ã€ããŠã話ãããããšæããŸãïŒQNX 6.5.0ãæ€èšããŸãïŒã RTOSã«ã¯ãQNXåºæã®ã¡ãã»ãŒãžã³ã°ãããUNIXããã³POSIXéçºè
ãå
±æã¡ã¢ãªã«éŠŽæã¿ã®ããä¿¡å·ãŸã§ãã¿ã¹ã¯éçžäºäœçšã®ããã®å¹
åºãã¡ã«ããºã ããããŸãã ãŸããã¡ã¢ã®ã»ãšãã©ã¯ã¡ãã»ãŒãžã³ã°ã«åœãŠãããŸãããä¿¡å·ãPOSIXã¡ãã»ãŒãžãããã³å
±æã¡ã¢ãªã䜿çšããæ©èœã«ã€ããŠã説æããŸãã ãããŠæåŸãŸã§èªãã 人ã¯ãè¶ã®ããã«2ã€ã®ãã³ãåãåããŸãã

QNXã·ã¹ãã ããã°ã©ãã«ã¯ãã¡ãã»ãŒãžã³ã°ã®åçãç解ããããšãå¿
èŠã§ãã ãã®ã¡ã«ããºã ã¯RTOSã§åºæ¬çãªåœ¹å²ãæãããŸãã éçºè
ã«éŠŽæã¿ã®ãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®å€ãã®æ©èœã¯ã¢ããªã³ã«éãããã¡ãã»ãŒãžã³ã°ã䜿çšããŠå®è£
ãã
read()
ããšãã°ã
read()
ããã³
write()
ïŒã
QNX RTOS InterTaskingãã©ãŒã
äžèšã®ããã«ãã¡ãã»ãŒãžã³ã°ã¯ââQNXã®ã¿ã¹ã¯éçžäºäœçšã®åºæ¬çãªã¡ã«ããºã ã§ãããä»ã®ã¡ã«ããºã ã®åºç€ãšãªã£ãŠããŸãã ãã®ããŒãã§èª¬æãããŠãããã¹ãŠã®åœ¢åŒã®ã¿ã¹ã¯éçžäºäœçšã以äžã®è¡šã«ãªã¹ããããã®ã¡ã«ããºã ãŸãã¯ãã®ã¡ã«ããºã ãå®è£
ãã責任è
ã瀺ããŸãã
è¡š1.ã¿ã¹ã¯éçžäºäœçšã®åœ¢åŒãã¡ã«ããºã | å®æœåé |
---|
ã¡ãã»ãŒãžã³ã° | å°æ ž |
ä¿¡å· | å°æ ž |
å
±æã¡ã¢ãª | procnto ããã»ã¹procnto |
POSIXã¡ãã»ãŒãžãã¥ãŒ | mqueue manager |
ååãªãïŒãã€ãïŒããã³ååä»ãïŒFIFOïŒããã°ã©ã ãã£ãã« | pipe ãããŒãžã£ãŒ |
QNX 6.5.0 RTOSã§ã¯ãå¥ã®åœ¢åŒã®ã¿ã¹ã¯é察話ãç»å ŽããŸãã-æ°žç¶ãããªãã·ã¥/ãµãã¹ã¯ã©ã€ãïŒPPSïŒã ããã¯ããªãèå³æ·±ãæè¡ã§ãããããã«ã€ããŠã¯å¥ã®æ©äŒã«æžããŸãã èå³ã®ããæ¹ã¯ããQNX Neutruno System Architectureã
ã®PPSã»ã¯ã·ã§ã³ã®ç¿»èš³
ãèªãããšãã§ããŸãã
ã¡ãã»ãŒãžã³ã°
ããã¯ãQNX Neutrinoãã€ã¯ãã«ãŒãã«ã«å®è£
ãããåæã¿ã¹ã¯éã¡ã«ããºã ã§ãã RTOSãéçºããéããã®åœ¢åŒã®ã¿ã¹ã¯éçžäºäœçšã誀ã£ãŠã¡ã€ã³ã®çžäºäœçšãšããŠéžæãããããšã¯ãããŸããã§ããã ãŸããã¡ã«ããºã èªäœã¯éåžžã«åçŽã§ãã 第äºã«ãã¡ãã»ãŒãžã®éä¿¡ãšåä¿¡ã®åæã¯ãããã°ã容æã«ããŸãã 第äžã«ãQNX Neutrinoã¡ãã»ãŒãžã³ã°ã«åºã¥ããŠã¢ããªã·ãã¯ã«ãŒãã«ã«å®è£
ãããé«ã¬ãã«ã®çžäºäœçšïŒãœãããŠã§ã¢ãã£ãã«ãªã©ïŒã®ãã¹ãã§ã¯ãã»ãŒåãããã©ãŒãã³ã¹ç¹æ§ãæããã«ãªããŸããã
QNXã¡ãã»ãŒãžã³ã°ãšã³ãžã³ã¯ãã¡ãã»ãŒãžã³ã°ã§äœ¿çšããã3ã€ã®äž»èŠæ©èœã®æåã®æåã«åºã¥ããŠãSRRãšã³ãžã³ãšãåŒã°ããŸã
1 ã
MsgSend()
ã¯ã¡ãã»ãŒãžã®éä¿¡ã«äœ¿çšããã
MsgReceive()
ã¯ã¡ãã»ãŒãžã®åä¿¡ã«äœ¿çšããã
MsgReceive()
ã¯åŒã³åºãå
ãžã®å¿çã®éä¿¡ã«äœ¿çšãããŸãã æåã«ãåæ©èœãåå¥ã«èŠãŠãã©ã®ããã«æ©èœããããç解ããŠããããããã1ã€ã®äŸã§çµã¿åãããŸãã é¢æ°ã®ãã¹ãŠã®åŒæ°ã¯ã泚æããããããæäœã®ååãæåã«ç解ããããã«ãæå³çã«äžããããŸããã
MsgSend()
ã¯ã
ã¯ã©ã€ã¢ã³ããã
ãµãŒããŒã«ã¡ãã»ãŒãžãéä¿¡ããå¿çãåä¿¡ããããã«äœ¿çšãããŸãã ããã§ã®
ã¯ã©ã€ã¢ã³ããš
ãµãŒããŒã®æŠå¿µã¯ããªãarbitraryæçã§ãã åãããã°ã©ã ãããã€ãã®ã¿ã¹ã¯ã®ãµãŒããŒã«ãªããšåæã«ãä»ã®ã¿ã¹ã¯ã®ã¯ã©ã€ã¢ã³ãã«ãªãããšãã§ããŸãã ããšãã°ãããŒã¿ããŒã¹ãµãŒããŒã¯ãããŒã¿ããŒã¹ã¯ã©ã€ã¢ã³ã
2ã®ãµãŒããŒã§ãã åæã«ãããŒã¿ããŒã¹ãµãŒããŒããã¡ã€ã«ã·ã¹ãã ãããŒãžã£ãŒã®ã¯ã©ã€ã¢ã³ãã«ãªããŸãã
MsgSend()
é¢æ°ã
MsgSend()
ã¯ã©ã€ã¢ã³ãã¯
SEND
ãŸãã¯
REPLY
2ã€ã®ç¶æ
ã®ããããã§ãããã¯ãããŸãã
SEND
ã¹ããŒã¿ã¹ã¯ã
ã¯ã©ã€ã¢ã³ããã¡ãã»ãŒãžãéä¿¡ãã
ãµãŒããŒããŸã åä¿¡ã
ãŠããªãããšãæå³ããŸãã
ãµãŒããŒãã¡ãã»ãŒãžãåä¿¡ãããšã
ã¯ã©ã€ã¢ã³ãã¯
REPLY
ç¶æ
ã«å
¥ã
ãŸã ã
ãµãŒããŒãå¿çã¡ãã»ãŒãžãè¿ããšã
ã¯ã©ã€ã¢ã³ãã¯ããã¯è§£é€ãããŸãã
MsgReceive()
ã¯ã
ã¯ã©ã€ã¢ã³ãããã¡ãã»ãŒãžãåä¿¡ããããã«äœ¿çšãã
ãŸã ã
ãµãŒããŒã¯
MsgReceive()
ãåŒã³åºãã
ã¯ã©ã€ã¢ã³ãããŸã ã¡ãã»ãŒãžãéä¿¡ããŠããªãå Žåãã€ãŸã
RECEIVE
ç¶æ
ã§ãããã¯ã
ãŸã ã
MsgSend()
é¢æ°ãåŒã³åºããŸããã§ããã ãã®åŸïŒã¡ãã»ãŒãžã
ãµãŒããŒã«éä¿¡ãããŸããïŒã
ãµãŒããŒã¯ããã¯è§£é€ãããå®è¡ãç¶ç¶ããŸãã
ãµãŒããŒã¯éåžžãåä¿¡ããã¡ãã»ãŒãžãåŠçããæ°ããã¡ãã»ãŒãžãåä¿¡ããæºåãããããã«ããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿
èŠããããŸãã
ãµãŒããŒãè€æ°ã®ã¹ã¬ããã§å®è¡ãããŠããå Žåãå¥ã®ã¹ã¬ãããã¡ãã»ãŒãžãåŠçããŠ
ã¯ã©ã€ã¢ã³ãã«å¿çããå Žåããã
ãŸã ã ã»ãšãã©ã®å Žåãã¡ãã»ãŒãžãåä¿¡ããã¹ããªãŒã ã¯ãæ°žé ã®ããµã€ã¯ã«ã§æ©èœããåä¿¡ããã¡ãã»ãŒãžãåŠçããåŸã
MsgReceive()
å床åŒã³åºããŸãã
MsgReply()
ãå¿çã¡ãã»ãŒãžã
ã¯ã©ã€ã¢ã³ã 3ã«éä¿¡ããããã«äœ¿çšãããŸãã
MsgReply()
é¢æ°ã
MsgReply()
ããã¯ã¯çºçããŸããã
ãµãŒããŒã¯ããã«åäœãç¶ã
ãŸã ã ããã¯ã
ã¯ã©ã€ã¢ã³ãããã§ã«ããã¯ç¶æ
ïŒ
REPLY
ïŒã«ãããè¿œå ã®åæãå¿
èŠãªãããã§ãã
ç§ãã¡ãæã£ãŠããç¥èããªãã¯ããQNXã¡ãã»ãŒãžã³ã°ã¡ã«ããºã ãç解ããããã®æ©æž¡ããããããã«ãä»ã«äœãåŠã¶å¿
èŠããããŸããïŒ ãããªã«ãªãã èŸæ±åŒ·ããä»ãåçã圢ã«ãªãå§ããŸãã
QNX Neutrinoãã€ã¯ãã«ãŒãã«ã¯ãéä¿¡ãããã¡ãã»ãŒãžã®å
容ãæ°ã«ããŸããã ã¡ãã»ãŒãžã«ã¯åœ¢åŒããããŸããã ã¡ãã»ãŒãžã¯ã
ã¯ã©ã€ã¢ã³ããš
ãµãŒããŒã«å¯ŸããŠã®ã¿æå³ããã
ãŸã ã ãã€ã¯ãã«ãŒãã«ã¯ã
ã¯ã©ã€ã¢ã³ãã¢ãã¬ã¹ç©ºéãã
ãµãŒããŒã¢ãã¬ã¹ç©ºéã«ã¡ãã»ãŒãžïŒã€ãŸããããŒã¿ãããã¡ïŒã®ã¿ãã³ããŒãïŒå¿çããå Žåã¯ãã®éïŒãã¡ãã»ãŒãžãä¿åããããã®äžéãããã¡ã¯ãããŸããã ãããŠãããã¯äžéã³ããŒããªãããšãæå³ããŸãããªããªã ãã€ã¯ãã«ãŒãã«ã¯ã
ã¯ã©ã€ã¢ã³ãã¡ã¢ãªãã
ãµãŒããŒã¡ã¢ãªã«ããŒã¿ãçŽæ¥ã³ããŒã
ãŸã ïŒå¿çããå Žåã¯ãã®éïŒã ãã®çµæãã¡ãã»ãŒãžã³ã°ãšã³ãžã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã
ã¡ãã»ãŒãžãžã®éä¿¡ãåä¿¡ãããã³å¿çãåæããããã«ããã€ã¯ãã«ãŒãã«ã¯ãã¡ãã»ãŒãžäº€æã«åå ããŠããã¹ã¬ããã
SEND
ã
RECIEVE
ãããã³
REPLY
3ã€ã®ç¶æ
ã®ããããã§ãããã¯ããŸãã
ãµãŒããŒãã¡ãã»ãŒãžãåä¿¡ãããŸã§ã
ã¯ã©ã€ã¢ã³ã㯠SEND
ç¶æ
ã§ãããã¯ãããŸãã
ã¯ã©ã€ã¢ã³ããã¡ãã»ãŒãžãéä¿¡ããŠããªãå Žåã
ãµãŒããŒã¯ RECEIVE
ç¶æ
ã§ãããã¯ãã
ãŸã ã
ãµãŒããŒã¯ã¡ãã»ãŒãžãåä¿¡ãããšãããã¯ã解é€ããã
ã¯ã©ã€ã¢ã³ãã¯
REPLY
ãããã¯ç¶æ
ã«ãªããŸãã
ãµãŒããŒã
ã¯ã©ã€ã¢ã³ãã«å¿çãè¿ããåŸã
ã¯ã©ã€ã¢ã³ãã®ããã¯ã解é€ãããŸãã 以äžã§ãã
ããã§ãQNXã®ã¡ãã»ãŒãžã³ã°ãšã³ãžã³ãã©ã®ããã«æ©èœããããèŠã€ããŸããã å³ 1ã¯åã«äžèšã瀺ããŠããŸãã
å³ 1. QNX Neutrinoã§ã®ã¡ãã»ãŒãžã³ã°ãã¯ã©ã€ã¢ã³ãã¯ã©ã®ããã«ããŠãµãŒããŒãèŠã€ããŸããïŒ
QNX RTOSã®ã¡ãã»ãŒãžã³ã°ãšã³ãžã³ã®åçãç解ããŠããã°ãå
ã«é²ãããšãã§ããŸãã ãããããQNXã§ã¡ãã»ãŒãžã亀æããããšã¯ã§ããŸããã決å®ããããšãªãã1ã€ã®è³ªåãããã¯ãã§ãã
ã¯ã©ã€ã¢ã³ãã¯ã©ã®ããã«ããŠ
ãµãŒããŒãèŠã€ã
ãŸããïŒ
ã¡ãã»ãŒãžã¯ã¹ã¬ããéã§çŽæ¥éä¿¡ãããŸããã 代ããã«ããã£ãã«ãšæ¥ç¶ã䜿çšãããŸãã
ãµãŒããŒã¯
ChannelCreate()
é¢æ°ã䜿çšããŠãã£ãã«ãäœæããŸãã ããŠãæåŸã«ã
ãµãŒããŒã¯æ確ãªè¯å¿ããã£ãŠã
MsgReceive()
ããã³
MsgReply()
åŒã³åºãããšãã§ã
ãŸã ã 以äžã®ã³ãŒãã¯ã
ãµãŒããŒã®åäœã瀺ããŠã
ãŸã ã
chid = ChannelCreate( flags ); for (;;) { rid = MsgReceive( chid, &msg, sizeof( msg ), NULL ); switch ( msg.type ) { } MsgReply( rid, EOK, NULL, 0 ); }
次ã«ã
ã¯ã©ã€ã¢ã³ãã¯
ConnectAttach()
ã䜿çšããŠ
ãµãŒããŒãã£ãã«ãžã®æ¥ç¶ãäœæãã
ConnectAttach()
ãåŒã³åºããŸãã
ã¯ã©ã€ã¢ã³ãã³ãŒã
ã¯éåžžã«ç°¡åã§ãã
coid = ConnectAttach( nd, pid, chid, _NTO_SIDE_CHANNEL, 0 ); MsgSend( coid, smsg, sizeof( smsg ), rmsg, sizeof( rmsg ) );
ä»ãæåŸã®è³ªåãæ®ã£ãŠããŸãã
chid
ã©ã®ããã«
chid
ãµãŒããŒãã©ã¡ãŒã¿ã
chid
ïŒ
nd
ã
pid
ã
chid
ïŒ ãããã®ãã©ã¡ãŒã¿ãŒã¯ã
ãµãŒããŒã¢ãã¬ã¹ããŸãã¯éœåžã³ãŒããšå
ç·çªå·ãå«ãé»è©±çªå·ãè¡šã
ãŸã ã ãã®è³ªåã«å¯Ÿããçãã®ååã¯ã
ãµãŒããŒèªäœãããããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãç¥ã£ãŠãããšããããšã§ãã ãããã
ãµãŒããŒã¯ã©ã®ããã«ããŠãããã
ã¯ã©ã€ã¢ã³ãã«äŒããããšãã§ã
ãŸããïŒ
ãµãŒããŒãããã®æ
å ±ãååŸããã«ã¯ãããŸããŸãªæ¹æ³ããã
ãŸã ã
.pid
ãã¡ã€ã«ãŸãã¯ã°ããŒãã«å€æ°ã䜿çšã§ããŸãã ããããå°ããªã¢ããªã±ãŒã·ã§ã³ã®æ£ããæ¹æ³ã¯ã
ãµãŒããŒã§
name_attach()
é¢æ°ã䜿çšãã
ã¯ã©ã€ã¢ã³ãã§
name_open()
ã䜿çšããããš
ã§ã ã ããã«æ£ããæ¹æ³ã¯ãåå空éèŠçŽ ãæ
åœããå Žåã
ãµãŒããŒã
ãªãœãŒã¹ãããŒãžã£ãŒ 4ãšããŠå®è£
ããããšã§ãã
è€åã¡ãã»ãŒãž
ãã§ã«è¿°ã¹ãããã«ãQNX Neutrinoã®ã¡ãã»ãŒãžã³ã°ãšã³ãžã³ã®äž»ãªå©ç¹ã®1ã€ã¯ããã®é«ãããã©ãŒãã³ã¹ã§ãã ããã¯ãããŒã¿ã®äžéã³ããŒããªããšããäºå®ã«ãã£ãŠéæãããŸãã ã¡ãã»ãŒãžã¯
ã¯ã©ã€ã¢ã³ãã®ã¡ã¢ãªãã
ãµãŒããŒã®ã¡ã¢ãªã«çŽæ¥ã³ããŒãããŸãã ãããã®ã¡ãã»ãŒãžã¯ç°ãªãå Žæã«ããããšããããããŸãã å
žåçãªã±ãŒã¹ã¯ãããŒã¿ãæ©åšããåä¿¡ããçã®ãããã¡ã§ãããããŒã¿æ
å ±ïŒã¡ãã»ãŒãžããããŒïŒãæã€æ§é ã§ããå Žåã§ãã çããŒã¿èªäœã¯ããªã³ã°ãããã¡ã«ããå ŽåããããŸãã ãã®å Žåãå¥ã®ãããã¡ãäºåã«æºåããããã«ãããªã³ã°ãããã¡ããããããšããŒã¿ãã³ããŒããããšãæ¬åœã«å¿
èŠã§ããïŒ äœåãªã³ããŒã«ãªããŸããïŒ è€åã¡ãã»ãŒãžã䜿çšãããŠããå ŽåãQNX RTOSã§ã¯ãã¡ãã»ãŒãžãéä¿¡ããåã«ãã®ããŒã¿ãäžå¿
èŠã«ã³ããŒããããšãåé¿ã§ããŸãã
QNX Neutrinoã§è€åã¡ãã»ãŒãžã
iov_t
ããã«ã¯ãã¡ãã»ãŒãžæ°ãšçããïŒãŸãã¯å€§ããïŒèŠçŽ æ°ãæã€
iov_t
åã®é
åã宣èšãã
SETIOV()
ãã¯ãã䜿çšããŠåèŠçŽ ãåæåããå¿
èŠããããŸãã åãããã¡ã®ã¢ãã¬ã¹ãšãµã€ãºãæå®ããŸãã å³ å³2ã¯ãè€åã¡ãã»ãŒãžã®åçã瀺ããŠããŸãã
å³ 2.è€åã¡ãã»ãŒãžã®äŸãè€åã¡ãã»ãŒãžãåŠçããã«ã¯ãããç¥ãããŠããé¢æ°
MsgReceive()
ããã³
MsgReply()
ãvã®çµãããã€ãŸã
MsgReceivev()
ããã³
MsgReplyv()
ã¡ãã»ãŒãžéä¿¡é¢æ°
MsgSend()
ãçµæãåãå
¥ããããã
MsgSendv()
ã
MsgSendsv()
ããã³
MsgSendvs()
ãã¡ããªãŒå
šäœã«
MsgSendv()
ãŠããŸãã ããã§ããã€ã¯ãã«ãŒãã«ããã¹ãŠã®è¿œå äœæ¥ãè¡ããè¿œå ã®ã³ããŒãšã¡ãã»ãŒãžå
šäœã®ãããã¡ãªã³ã°ã¯è¡ãããŸããã ç§ã¯ããã奜ãã§ãïŒ
ã€ã³ãã«ã¹
æã«ã¯ãä»ã®ã¹ã¬ããã«äœããèµ·ãã£ãããšãç¥ãããã ãã§ãããçãã¯å¿
èŠãããŸããã ãããã£ãŠã
MsgSend()
ãããã¯ãå¿
èŠ
MsgSend()
ãŸããã ãã®å Žåã
MsgSendPulse()
é¢æ°ã
MsgSendPulse()
ãŸãã ãã«ã¹ã«ã¯ã8ãããã®ã³ãŒããš32ãããã®ããŒã¿ãå«ãŸããŸãã éåžžã«é »ç¹ã«ãå²ã蟌ã¿ãã³ãã©ã§ãã«ã¹ã䜿çšãããŸãã ãã«ã¹ã®å Žåããã¥ãŒã䜿çšãããŸãã ã¹ããªãŒã ããã°ãããã«ã¹ãåä¿¡ããŠââããªããŠãããã«ã¹ã¯å€±ãããŸããã ãã ããèªã¿åãæéããªãã¹ããªãŒã ã«ãã«ã¹ãéä¿¡ããå Žåã¯ãé
ããæ©ãã
EAGAIN
ãšã©ãŒãåãåãæºåãããŠãã ããã
ä¿¡å·
QNX Neutrino RTOSã¯ãUNIXéçºè
ã«ãªãã¿ã®ããã·ã°ããªã³ã°ã¡ã«ããºã ããµããŒãããŠããŸãã æšæºã®POSIXä¿¡å·ãšPOSIXãªã¢ã«ã¿ã€ã ä¿¡å·ã®äž¡æ¹ããµããŒããããŠããŸãã äž¡æ¹ã®ã¿ã€ãã®ä¿¡å·ãåŠçããã«ã¯ãåããã€ã¯ãã«ãŒãã«ã³ãŒãã䜿çšãããŸãã ãã®çµæããã€ã¯ãã«ãŒãã«èªäœãããã³ã³ãã¯ãã«ãªããPOSIXãªã¢ã«ã¿ã€ã ã·ã°ãã«ã°ã«ãŒãã®ååã®ããã«ãïŒã¢ããªã±ãŒã·ã§ã³ã®èŠæ±ã«å¿ããŠïŒPOSIXã·ã°ãã«ããã¥ãŒã«å
¥ããããšãã§ããŸãã ç¹ã«ãQNX Neutrinoã¯POSIXæšæºãæ¡åŒµããç¹å®ã®ã¹ããªãŒã ã«ä¿¡å·ãéä¿¡ã§ããããã«ããŸãã ãããŠãããã¯æã
éåžžã«äŸ¿å©ã§ãã
ãšããã§ãPOSIXãªã¢ã«ã¿ã€ã ä¿¡å·ã«ã¯ã8ãããã®ã³ãŒããš32ãããã®ããŒã¿ãå«ãŸããŠããŸãã äœã«ã䌌ãŠããŸãããïŒ æ£ç¢ºã«ã¯ãä¿¡å·ã¡ã«ããºã ãå®è£
ããåãã³ãŒãããã«ã¹ã®éä¿¡ã«ã䜿çšãããŸãã 䟿å©ã§ä¿¡é Œã§ããã
ã·ã°ãã«ãåŠçããã«ã¯ãããªãã¿ã®é¢æ°
kill()
ã
sigaction()
ã
sigprocmask()
ãªã©ãããã³ããèå³æ·±ãé¢æ°ãäŸãã°
pthread_kill()
ããã³
pthread_sigmask()
ãŸãã
çªçµãã£ã³ãã«
ãœãããŠã§ã¢ãã£ãã«ã¯ãUNIXãŠãŒã¶ãŒããã³éçºè
ã«ãªãã¿ãããå¿
èŠããããŸãã QNXã«ã¯ãããç¥ãããŠãããã¹ãŠã®ã³ãã³ããæ©èœãããã³ããªãã¯ããããŸãã ããšãã°ãããã¯ååã®ãªãããã°ã©ã ãã€ãïŒãã€ãïŒãã³ãã³ãã©ã€ã³ã§äœæãããæ¹æ³ã§ãã
ååä»ããã€ãïŒFIFOïŒãäœæããã«ã¯ã
mkfifo
ã³ãã³ããŸãã¯
mkfifo()
é¢æ°ã䜿çšããå¿
èŠããããŸãã
æ©èœã¯1ã€ã ãã§ãã QNX Neutrinoãããã°ã©ã ãã£ãã«ã§åäœããã«ã¯ã
pipe
ãããŒãžã£ãŒãå®è¡ããå¿
èŠããããŸãã
POSIXã¡ãã»ãŒãžãã¥ãŒ
ã¡ãã»ãŒãžãã¥ãŒã¯ååä»ãããã°ã©ã ãã€ãïŒFIFOïŒã«äŒŒãŠããŸãããããè€éãªã¡ã«ããºã ã§ãã ã¡ãã»ãŒãžã®åªå
é äœä»ãããµããŒãããŸãã QNX Neutrinoã§POSIXã¡ãã»ãŒãžãã¥ãŒã䜿çšããã«ã¯ã
mqueue
ãããŒãžã£ãŒãå®è¡ããå¿
èŠããããŸãã
QNX RTOSã®ã¡ãã»ãŒãžãã¥ãŒã«ã¯è€æ°ã®ã¹ã©ãã·ã¥æåã/ããå«ããããšãã§ããŸããããã¯ããã£ã¬ã¯ããªãäœæã§ããããšãæå³ããŸãã ãããã£ãŠãPOSIXæšæºã¯æ¡åŒµããããã¥ãŒåãã¹ã©ãã·ã¥ã§å§ãŸãããã®æåãå«ãŸãªãããšãèŠæ±ãããŸãã ãšããŠéåžžã«äŸ¿å©ãªæ©èœ 1ã€ã®ãœãããŠã§ã¢ããã±ãŒãžãŸãã¯1ã€ã®äŒç€Ÿã®ãã¥ãŒã1ã€ã®ãã£ã¬ã¯ããªã«ã°ã«ãŒãåã§ããŸãã
å
±æã¡ã¢ãª
QNX Neutrinoã§ã®å
±æã¡ã¢ãªã®æäœã¯ãä»ã®UNIXã·ã¹ãã ãšåãã§ãã å
±æã¡ã¢ãªã¡ã«ããºã ã¯ããã€ã¯ãã«ãŒãã«ãå«ã
procnto
ããã»ã¹
procnto
å®è£
ãããŠãããããä»ã«äœãå®è¡ããå¿
èŠã¯ãããŸããã
shm_open()
ããã³
mmap()
é¢æ°ã®ããã¥ã¡ã³ãã§è©³çŽ°ãèªãããšãã§ããŸãã
ãããšã¯å¥ã«ãå
±æã¡ã¢ãªèªäœã¯ã¿ã¹ã¯éçžäºäœçšã«é©ããŠããªãããšã«æ³šæãã䟡å€ããããŸãã
ãµãŒããŒãå
±æã¡ã¢ãªã«ã®ã¿æžã蟌ã¿ãè¡ãã
ã¯ã©ã€ã¢ã³ããå
±æã¡ã¢ãªããã®èªã¿åãã®ã¿ãè¡ãå Žåã§ããã¯ã©ã€ã¢ã³ããéšåçã«å€æŽãããããŒã¿ãèªã¿åãå ŽåããããŸãã ãã®ãããªééãã¯åŸã§èŠã€ããã®ãé£ããå ŽåãããããããŸã£ããè¡ããªãæ¹ãè¯ãã§ãããã ãã®ãããªç¶æ³ãæé€ããã«ã¯ããã¥ãŒããã¯ã¹ãã»ããã©ãªã©ã®åæããªããã£ãã®ããããã䜿çšããå¿
èŠããããŸãã
ã¡ãã»ãŒãžã³ã°ãšã³ãžã³ãšå
±æã¡ã¢ãªã䜿çšããªãããã¿ã¹ã¯éã®çžäºäœçšãè¡ãæ¹æ³ããŸãèå³æ·±ããã®ã§ãã ããã¯ãåæ£ã·ã¹ãã ã®æ§ç¯ãèšç»ããŠããå Žåã«ç¹ã«äŸ¿å©ã§ãã å
±æã¡ã¢ãªã¯ãããã¯ãŒã¯çµç±ã§ã¯å©çšã§ããŸããã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãå
±æã¡ã¢ãªã䜿çšããŠããããéåžžã«é«ãããã©ãŒãã³ã¹ãçºæ®ããã¡ãã»ãŒãžã³ã°ãä»ããåææ©èœãšãããã¯ãŒã¯ééæ§ãåããŠããŸãã
ãããæéã®æ¹æ³ã§ãããšããäºå®ã«åºã¥ããŠãå
±æã¡ã¢ãªã䜿çšããŠå¯Ÿè©±ãæ§ç¯ããããšããªãã§ãã ããã åæããªããã£ãã䜿çšããå Žåãé床ã¯ã¡ãã»ãŒãžã³ã°ãšã³ãžã³ã®é床ã«å¹æµããå¯èœæ§ããããŸãã éèŠãªå©ç¹ã¯ãéåžžã«å€§å®¹éã®ããŒã¿ã®äº€æã®ã¿ã§ãã
çŽæã®ãã³
ç§ã¯ãã³ããããšçŽæããã®ã§ãããã§ãã ç§ã¯å
šãå¿ããŸããã§ããããããŠãç§ã¯æ°ã«ããŸããã æåã®ãã³ã¯ãã¡ãã»ãŒãžãéä¿¡ãããšãã«ãã¡ãã»ãŒãžèªäœã«åããããã¡ã䜿çšããŠè¿ä¿¡ã§ããããšã§ãã ç§ã¯åœŒãããããããªãé »ç¹ã«è¡ããšããèšãã§ãããã ãã䟿å©ã«ããããã«ãããŸããŸãªã¡ãã»ãŒãžãšããããžã®å¿çãèšè¿°ãããã¹ãŠã®æ§é ã1ã€ã®çµåã«ã°ã«ãŒãåãããŸãã éåžžã
ãµãŒããŒããå¿çãåä¿¡ããåŸãã¡ãã»ãŒãžã¯
ã¯ã©ã€ã¢ã³ãã«éä¿¡ãããŸããã ãããã£ãŠããããã¡ãç¯çŽã§ããŸãã
2ã€ç®ã¯ãQNX Neutrinoã®POSIXãã¡ã€ã«èšè¿°åãæ¥ç¶ïŒã¡ãã»ãŒãžéä¿¡çšïŒãšåãã§ããããšã§ãã ãããŠãããã¯ããã¡ã€ã«èšè¿°åïŒ
write()
ã
read()
ãªã©ïŒã䜿çšããé¢æ°ããåŒæ°ã
ãµãŒããŒãžã®ã¡ãã»ãŒãžã«å€æããããããªãªãŒããŒããããæã€åãªãã©ãããŒã§ããããšãæå³ã
ãŸã ã ååãªæ·±å»ãªæé©åã ãããã£ãŠãQNXçšã®ã·ã¹ãã ãœãããŠã§ã¢ãéçºããå Žåã¯ããªãœãŒã¹ãããŒãžã£ãŒã®äœææ¹æ³ãåŠãã§ãã ããã
åç
§è³æ
- ãªã¢ã«ã¿ã€ã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã QNX Neutrino 6.3ã ã·ã¹ãã ã¢ãŒããã¯ãã£ã ISBN 5-94157-827-X
- ãªã¢ã«ã¿ã€ã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã QNX Neutrino 6.3ã ãŠãŒã¶ãŒããã¥ã¢ã«ã ISBN 978-5-9775-0370-9
- Rob KrtenããQNX Neutrinoã®çŽ¹ä»2.ãªã¢ã«ã¿ã€ã ã¢ããªã±ãŒã·ã§ã³éçºè
åãã¬ã€ããã第2çã ISBN 978-5-9775-0681-6
1é¢æ°MsgSend()
ãªã©ã®ååã®ãã¬ãã£ãã¯ã¹Msg
ã¯QNX Neutrinoã«ã®ã¿ç»å ŽããQNX4ã§ã¯ãããã®é¢æ°ã¯åã«Send()
ã Receive()
ãããã³Reply()
ãšåŒã°ããŠããŸããã ãããã£ãŠãååã¯SRRã§ãã2ãã®äŸã§ã¯ãããŒã¿ããŒã¹ãµãŒããŒãšã¯ã©ã€ã¢ã³ãã¯ã¡ãã»ãŒãžã³ã°æ©èœãçŽæ¥äœ¿çšããŠããŸããããQNXã§ã¯ãåread()
ã write()
ã sendto()
ãªã©ã®äžã§ãSRRã¡ã«ããºã ãé衚瀺ã«ãªã£ãŠããããšããã§ã«ããã£ãŠããŸãã3ãµãŒããŒããšã©ãŒã³ãŒãã®ã¿ãè¿ãå¿
èŠãããå Žåãããšãã°ã¡ãã»ãŒãžããµããŒããããŠããªãå Žåã MsgError()
é¢æ°ã䜿çšããæ¹ã䟿å©ã§ãã4ãªãœãŒã¹ãããŒãžã£ãŒã®èª¬æã¯ããã®èšäºã®ç¯å²å€ã§ãã ãã€ãããã«ã€ããŠæžãããšã¯å¯èœã§ãã