(HOLD) . - . qnx_pflags(). . SIGTERM . SIGTSTP QNX. SIGTTIN QNX. SIGTTOU QNX. SIGUSR1 1. SIGUSR2 2. SIGWINCH .

, signal() ANSI sigaction() POSIX.

sigaction() .

. , , .

, .

. . , , ( ).

, siglongjmp() longjmp() , , siglongjmp() . longjmp() .

, . QNX , . ; .

, QNX . , . - . , .


Note: UNIX , , . UNIX signal() , . . -, , , signal(), . -, signal() , . QNX , , . signal() . (long jump), siglongjmp().

. SEND- RECEIVE- , , :

  1. ;
  2. ;
  3. Send() Receive() .

SEND- , , . RECEIVE-, , , , , Send().

, (.. ), , , - , REPLY-. SIGNAL- . , . :

, SIGNAL-, Send(), (-).

IPC

QNX , . , .

( virtual circuit, VC). VC - , , . VC QNX- :

  1. VC, ; , . , , , VC .
  2. , , VC, VC , . , .
  3. VC , , , .
  4. , VC .

- VC , . - qnx_vc_attach(). VC, , VID. , VID , . VID.

, PID 1 PID 2. 20 - PID 1 - VID PID 2. 40 - PID 2 - VID PID 1. PID 1 PID 2 VID , , , , , .. , , PID 1 VID , VID VID, PID 1 . VID PID 2.


fig: i/vcircuit.gif


. PID 1 VID 2, , VID 1 PID 2.


VID , :

, VC. , , / , VC open() . VC. , qnx_name_locate(), VC . VC PID .

qnx_name_locate() " " ".

, , .

, , .

qnx_proxy_rem_attach(), (nid_t) (pid_t).


fig: i/vproxies.gif


, .


, qnx_proxy_rem_attach().

VC :

VC. , , . , .

VC . :

  1. , VC, , VC, .
  2. VC. , VC.
  3. , VC . .
  4. , VC ; , VC, READY (). , .

, VC, netpoll.

IPC

. "" (sem_post()) "" (sem_wait()) , . , .

, , . , - . - , .

, " " . , , .

:

QNX . , READY, . ( READY - , ). .


fig: i/readyq.gif


(A-F), READY. (G-Z) . A. A, B C , .


, , 0 () 31 (). ; , , 10.
: :
getprio()
setprio()

, QNX :

, . , .

, , READY (.. ). READY, .

READY. , B.


fig: i/ablocks.gif


A , B .


, , .
: :
getscheduler()
setscheduler()

FIFO

FIFO , :


fig: i/method1.gif


FIFO . , .


, , FIFO (.. ) . . , , , , - (, ).

, , :


fig: i/method2.gif


. , ; , READY ( B).


- , . , , , READY . 50 .


Note: , FIFO-.

:


fig: i/method3.gif


. ; 1. READY ( B).


, , , . , .

, , .

-

QNX /. , , , . , , .

, . , , . , , , .

, , , . , .. .

, . , , , , , .

, , . , , . , - . , , , . , "" , . , , .

- , ( ).

- , qnx_pflags() :

qnx_pflags(~0, _PPF_PRIORITY_FLOAT
            | _PPF_PRIORITY_REC, 0, 0);

, . , . , , . .

QNX .

- . QNX , , , . , . - QNX .

, . , .


fig: i/intlat.gif


.


(Til) - , , . , QNX .

Til

(Tqqq1ilqqq0) :
(Til): :
3.3 166 Pentium
4.4 100 Pentium
5.6 100 486DX4
22.5 33 386EX

. "" . - , - .

- -. , , , . QNX , .


fig: i/schedlat.gif


.


, . . , "" , , . , " " (Dev) , , , .

Tsl

(Tsl) :
(Tsl): :
4.7 166 Pentium
6.7 100 Pentium
11.1 100 486DX4
74.2 33 386EX

, .

QNX. - - , . . , .. QNX .


fig: i/stackint.gif


A. IRQx Intx, IRQy Inty. Inty , B, Intx , C.


:

, , . , , , . , , .

, . . , , , , . , .. , , .

QNX :

fork() exec() POSIX, spawn() QNX.

fork()

fork() , . , , .

exec()

exec() . exec() , .. . POSIX- - - fork(), exec() .

spawn()

spawn() . fork() exec(), . fork() exec(), , , spawn() .

, . :
fork()exec()spawn()
*
UID, GID
UID, GID

* : - .

:

  1. .
  2. .
  3. .
  4. .

(ID) , . ( "").

. , ID . .

, , ; . , . , .

:

:

  1. . " " , ID . :
  2. , , ( ).

    wait() waitpid(), "" , wait() . ( , , _SPAWN_NOZOMBIE qnx_spawn() qnx_spawn_options(), SIG_IGN SIGCHLD signal(). , .)

    , . - , .

dumper , . .

:

  1. READY () - (.. - ).
  2. BLOCKED () - :
  3. HELD () - SIGSTOP. ; HELD SIGCONT, .
  4. WAIT () - wait() waitpid() .
  5. DEAD () - , , .. wait() waitpid(). DEAD, . DEAD .

Note: "".


fig: i/allstate.gif


QNX.


:

  1. .
  2. - .
  3. - .
  4. .
  5. .
  6. .
  7. ; .
  8. - .
  9. .
  10. , .
  11. SIGSTOP.
  12. SIGCONT.
  13. .
  14. wait() waitpid(), , .
  15. semwait() .
  16. sempost(), .

(Shell), ps sin ( qnx_psinfo()).

(Shell), sin ( qnx_osinfo()).

ps POSIX; . sin, , QNX; , QNX, , ps.

QNX , . , , .

. , . , , , . , . - - , ?

QNX . , . , .

, , , . QNX , . , , .