Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino 2. Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² QNX Realtime PlatformΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 78

Автор Π ΠΎΠ± ΠšΡ‘Ρ€Ρ‚Π΅Π½

int dirent_size(char *fname) {

return (ALIGN(sizeof(struct dirent) - 4 + strlen(fname)));

}

dirent_fill()

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° dirent_fill() примСняСтся для помСщСния ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β€” ΠΏΠΎΠ»Π΅ΠΉ inode, offset ΠΈ fname) Π² Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π΅ΠΉ элСмСнт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ порядкС щСдрости ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° адрСс (с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ выравнивания), с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

struct dirent* dirent_fill(struct dirent *dp, int inode,

 int offset, char *fname) {

 dp->d_ino = inode;

 dp->d_offset = offset;

 strcpy(dp->d_name, fname);

 dp->d_namelen = strlen(dp->d_name);

 dp->d_reclen =

 ALIGN(sizeof(struct dirent) - 4 + dp->d_namelen);

 return ((struct dirent*)((char*)dp + dp->d_reclen));

}

РСзюмС

НаписаниС администратора рСсурсов β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ слоТная Π·Π°Π΄Π°Ρ‡Π° ΠΈΠ· описанных Π² этой ΠΊΠ½ΠΈΠ³Π΅.

Администратор рСсурсов β€” это сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ воспринимаСт ряд Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сообщСний. Π­Ρ‚ΠΈ сообщСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

БообщСния установлСния соСдинСния

ΠžΡ‚Π½ΠΎΡΡΡ‚ΡΡ ΠΊ опСрациям с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΡƒΡ‚Π΅ΠΉ, с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ контСкст для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹.

БообщСния Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°

ВсСгда ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π° сообщСниями установлСния соСдинСния ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, stat()).

ДСйствия администратора рСсурса ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ функциями ΠΏΡƒΠ»Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (ΠΌΡ‹ обсуТдали ΠΈΡ… Π² Π³Π»Π°Π²Π΅ Β«ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈΒ») ΠΈ функциями интСрфСйса диспСтчСризации.

QSSL Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ администратора рСсурсов прСдоставляСт ряд Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… POSIX-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π»ΡŒΠ²ΠΈΠ½ΡƒΡŽ долю Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ клиСнтских сообщСний установлСния соСдинСния ΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… Π² администратор рСсурсов.

БущСствуСт ряд структур Π΄Π°Π½Π½Ρ‹Ρ…, относящихся ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹ΠΌ администраторами рСсурсов устройствам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

OCB (Π±Π»ΠΎΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ контСкста)

ВыдСляСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Β«ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈΒ» рСсурса; содСрТат контСкст для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ смСщСниС lseek()).

Атрибутная запись

ВыдСляСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ устройства; содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± устройствС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΠ΅Ρ€ устройства, Ρ€Π΅ΠΆΠΈΠΌΡ‹ доступа, ΠΈ Ρ‚.Π΄.).

Π—Π°ΠΏΠΈΡΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ монтирования

РаспрСдСляСтся Π½Π° базисС ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ администратору рСсурса ΠΈ содСрТит ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ характСристиках администратора рСсурса.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ общаСтся с администраторами рСсурсов посрСдством ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ² имя ΠΏΡƒΡ‚ΠΈ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²) Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ администратору дСскриптор ΡƒΠ·Π»Π°, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ (handle).

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²Ρ‹ надСляСтС администратор рСсурса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ, пСрСопрСдСляя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ установлСния соСдинСния ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с QNX4 Π½Π° QNX/Neutrino

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с QNX4 Π½Π° QNX/Neutrino

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ рассмотрим ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ QSSL, QNX4, ΠΈ сравним Π΅Π΅ с QNX/Neutrino. Π”Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π°ΠΌ интСрСсно Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ ΡƒΠΆΠ΅ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ QNX4 ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ.

β€’ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² QNX/Neutrino?

β€’ ΠΊΠ°ΠΊΠΈΠ΅ слоТности связаны с пСрСносом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π² QNX/Neutrino?

Π° Ρ‚Π°ΠΊΠΆΠ΅ Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ (ΠΈΠ»ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для ΠΎΠ±Π΅ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.

Бходства

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ со ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚ этих Π΄Π²ΡƒΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм:

β€’ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° основС ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями;

β€’ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ сообщСниями Π² сСти;

β€’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя;

β€’ ΠΌΠΈΠΊΡ€ΠΎΡΠ΄Π΅Ρ€Π½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°;

β€’ Π·Π°Ρ‰ΠΈΡ‚Π° памяти Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСссов;

β€’ POSIX-ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ;

β€’ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простая модСль Β«Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° устройства»;

β€’ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… свойств Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ Π² этих Π΄Π²ΡƒΡ… ОБ, Π² Ρ†Π΅Π»ΠΎΠΌ QNX/Neutrino обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. НапримСр, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ POSIX Π² QNX/Neutrino большС, Ρ‡Π΅ΠΌ Π² QNX4, β€” просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· стандартов этой сСрии Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π° QNX4 Π±Ρ‹Π»ΠΈ Π΅Ρ‰Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. И хотя Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ QNX/Neutrino Π² состоянии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшая ΠΈΡ… Ρ‡Π°ΡΡ‚ΡŒ, постоянно ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅. Π­Ρ‚Π° бСсконСчная ΠΈΠ³Ρ€Π° Π² догонялки.

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ выяснили, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя ОБ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства QNX/Neutrino ΠΏΠ΅Ρ€Π΅Π΄ QNX4:

β€’ Π±ΠΎΠ»ΡŒΡˆΠ΅Π΅ число ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… стандартов POSIX;

β€’ Π»ΡƒΡ‡ΡˆΠ΅ встраиваСтся;

β€’ ΡΠ΄Ρ€ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ конфигурируСтся для Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ;

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° многопоточности;

β€’ Π±ΠΎΠ»Π΅Π΅ простая модСль Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° устройства;

β€’ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠ°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° (Π² настоящСС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΊΡ€ΠΎΠΌΠ΅ x86, процСссоры MIPS ΠΈ PPC) (Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ ΠΈ ARM, StrongARM ΠΈ SuperH-4 β€” ΠΏΡ€ΠΈΠΌ. Ρ€Π΅Π΄.),

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ SMP;

β€’ Π»ΡƒΡ‡ΡˆΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°.

ΠŸΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠΉ Β«Π²Π½Π΅ сравнСния», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² для Π½ΠΈΡ… Π² QNX4 Π½Π΅Ρ‚, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, Π½Π΅Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ совмСстимости (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ POSIX Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»Π°ΡΡŒ Π² QNX4), Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈ внСсСния Π² ОБ ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π‘Π½Π°Ρ‡Π°Π»Π° я Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ упомяну, ΠΊΠ°ΠΊΠΈΠ΅ классы ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±Ρ‹Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим возникшиС Π² связи с этим ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ совмСстимости ΠΈ прСдлоТСния ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² QNX/Neutrino (ΠΈΠ»ΠΈ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΎΠ±Π΅ΠΈΡ… ОБ).

Π’ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ

Π’ QNX/Neutrino ΠΊΠΎΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ пСрСсмотрСна стратСгия встраивания. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ QNX4 Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π»Π°ΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ частично. Π—Π°Ρ‚Π΅ΠΌ появилась QNX/Neutrino, которая с самого Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ ΠΊΠ°ΠΊ встраиваСмая. Π’ качСствС ΠΏΡ€Π΅ΠΌΠΈΠΈ, QNX4 ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π»Π°ΡΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° основС ΠΎΠΏΡ‹Ρ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ с QNX/Neutrino, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ являСтся Π² Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни встраиваСмой, Ρ‡Π΅ΠΌ Ρ€Π°Π½Π΅Π΅. Как Π±Ρ‹ Ρ‚Π°ΠΌ Π½ΠΈ Π±Ρ‹Π»ΠΎ, ΠΏΠΎ части встраиваСмости QNX/Neutrino ΠΈ QNX4 ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ дСнь ΠΈ Π½ΠΎΡ‡ΡŒ. QNX4 Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ ΠΊΠ°ΠΊ:

β€’ ΠΈΡΡ…одящиС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ядра (kernel callouts) (ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΉΠΌΠ΅Ρ€);

β€’ Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΠ° стартового ΠΊΠΎΠ΄Π°;

β€’ ΠΎΠ±Ρ€Π°Π·Π½Π°Ρ файловая систСма.

Π° Π²ΠΎΡ‚ Π² QNX/Neutrino всС это Π΅ΡΡ‚ΡŒ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊ встраивания QNX/Neutrino ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΠΊΠ½ΠΈΠ³Π΅ Β«ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ встраиваСмых систСм», входящСй Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° многопоточности

Π’ QNX4 Π΅ΡΡ‚ΡŒ функция, называСмая tfork(), которая позволяСт Π²Π°ΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΒ», создавая процСсс с сСгмСнтами ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ адрСсноС пространство, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ процСсса ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΊ Β«ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌΡƒΒ» Π²ΠΈΠ΄Ρƒ Π΄Π°Π΅Ρ‚ иллюзию создания ΠΏΠΎΡ‚ΠΎΠΊΠ°. И хотя Π² систСмС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ QSSL содСрТится Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для QNX4, само ядро ΠΏΠΎΡ‚ΠΎΠΊΠΈ нСпосрСдствСнно Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚.

Π’ QNX/Neutrino для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ многопоточности примСняСтся POSIX-модСль Β«Ρ€threadΒ». Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ (ΠΈ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅) Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΈΠΏΠ° pthread_create(), pthread_mutex_lock(), ΠΈ Ρ‚.ΠΏ.

ОбмСн сообщСниями

ΠŸΡ€ΠΈ Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ воздСйствиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π½Π° ΠΎΠ±ΠΌΠ΅Π½ сообщСниями ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, использованиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ измСнСнию Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями (Π½Π΅ самой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ SEND/RECEIVE/REPLY, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ).

Π’ QNX4 сообщСния Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ процСсса. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС, Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ просто Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСсса-адрСсата ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Send(). Π§Ρ‚ΠΎΠ±Ρ‹ сСрвСр ΠΌΠΎΠ³ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ сообщСниС Π² QNX4, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Receive(). Π­Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π»ΠΎ Π΅Π³ΠΎ Π΄ΠΎ прибытия сообщСния. Π—Π°Ρ‚Π΅ΠΌ сСрвСр ΠΎΡ‚Π²Π΅Ρ‡Π°Π» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Reply().

Π’ QNX/Neutrino ΠΎΠ±ΠΌΠ΅Π½ сообщСниями устроСн Ρ‚Π°ΠΊ ΠΆΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π§Ρ‚ΠΎ измСнилось, Ρ‚Π°ΠΊ это сам ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ спСрва ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ соСдинСниС с сСрвСром. А сСрвСр, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ½ смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, Π΄ΠΎΠ»ΠΆΠ΅Π½ сначала ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Π½Π°Π».

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠ°Ρ Π² QNX4 функция Creceive(), которая выполняла Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² Receive(), Π² QNX/Neutrino отсутствуСт. ΠœΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ одобряСм Ρ‚Π°ΠΊΠΈΠ΅ Β«ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅Β» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, особСнно ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ; Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Ссли Π²Ρ‹ настаиваСтС Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° MsgReceive(), посмотритС Π³Π»Π°Π²Ρƒ «Часы, Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΈ пСриодичСскиС увСдомлСния», Ρ€Π°Π·Π΄Π΅Π» Β«Π’Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρ‹ ядра». Π’ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π² качСствС ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ пояснСния:

TimerTimeout(CLOCK_REALTIME, _NTO_TIMEOUT_RECEIVE,