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

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

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

ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто «абстрагированиС» сСрвиса, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (Ρ‚Π°, которая нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сСрвис) Π½Π΅ Π·Π½Π°Π΅Ρ‚ (Π΄Π° ΠΈ Π½Π΅Π·Π°Ρ‡Π΅ΠΌ Π΅ΠΉ) ΠΎ микросхСмС UART ΠΈ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ВсС, Ρ‡Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚ клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, β€” Ρ‡Ρ‚ΠΎ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ символа ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fprintf() Π° для ΠΏΡ€ΠΈΠ΅ΠΌΠ° символов β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fgets(). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ взаимодСйствия с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ ΠΌΡ‹ использовали стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ POSIX.

Ѐайловая систСма

Π’ качСствС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° администратора рСсурса рассмотрим Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму. Она состоит ΠΈΠ· ряда Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: собствСнно Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π±Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ дискового Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ здСсь сСрвис состоит Π² способности ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ символы Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ. Абстракция здСсь Ρ‚Π° ΠΆΠ΅ самая, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ β€” клиСнтская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ самыС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, fprintf() ΠΈ fgets()) для доступа ΠΊ Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŽ. ЀактичСски, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ, с ΠΊΠ°ΠΊΠΈΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ администратором рСсурсов ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ.

Π₯арактСристики администраторов рСсурсов

Как ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΊ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ администраторов рСсурсов являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ POSIX β€” ΠΌΡ‹ вСдь Π½Π΅ использовали Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Β«ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅Β» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ‰Π°Π»ΠΈΡΡŒ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ. А Ссли Π²Π°ΠΌ понадобится ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ «особСнноС», Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для примСняСмого Π²Π°ΠΌΠΈ устройства? НапримСр, опСрация настройки скорости ΠΎΠ±ΠΌΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ Π² Π±ΠΎΠ΄Π°Ρ… спСцифична для администратора ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°, Π½ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСссмыслСнна для администратора Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Аналогично, опСрация ΠΏΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π² Ρ„Π°ΠΉΠ»Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lseek() ΠΈΠΌΠ΅Π΅Ρ‚ смысл для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Π½ΠΎ являСтся Π½Π΅ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°. Π’ POSIX эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ просто. НСкоторыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, lseek() β€” ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ устройству, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡ… Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠ΄ ошибки. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, спСцифичных для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ устройства, Π² POSIX прСдусмотрСна функция управлСния устройствами, devctl(). Если устройство Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡƒΡŽ Π΅ΠΌΡƒ посрСдством devctl(), ΠΎΠ½ΠΎ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠ΄ ошибки, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ устройствам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ lseek().

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΡƒΠΆΠ΅ упомянули Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lseek() ΠΈ devctl() ΠΊΠ°ΠΊ ΠΎΠ±Ρ‰Π΅ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, слСдуСт Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ администраторы рСсурсов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ вСсь спСктр Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с дСскрипторами Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΈΠ»ΠΈ FILE* stream).

Π­Ρ‚ΠΎ СстСствСнно ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ администраторы рСсурсов Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ с Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ дСскриптор-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ QNX/Neutrino β€” опСрационная систСма, организованная Π½Π° основС ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, ΠΈΠ· этого слСдуСт, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ POSIX-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΡΡ‹Π»Π°ΡŽΡ‚ΡΡ администраторам рСсурсов.

ИмСнно эта трансляция Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² POSIX Π² сообщСния позволяСт Π½Π°ΠΌ ΠΎΡ‚Π²ΡΠ·Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡƒΡ€Ρƒ ΠΎΡ‚ администраторов рСсурсов. ВсС, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ администратор рСсурса, β€” это ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ряд строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сообщСний. ВсС, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, β€” это Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти самыС строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ администратор рСсурса ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡƒΡ€ΠΎΠΉ ΠΈ администраторами рСсурсов основано Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π΅ сообщСниями, ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π΄Π΅Π»Π°Ρ‚ΡŒ этот Β«ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒΒ» ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Β«Ρ‚ΠΎΠ½ΡŒΡˆΠ΅Β». НапримСр, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ выполняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open() ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² ΠΎΡ‚Π²Π΅Ρ‚ дСскриптор Ρ„Π°ΠΉΠ»Π°, этот дСскриптор фактичСски являСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ соСдинСния! Π”Π°Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ соСдинСния (ΠΎΠ½ ΠΆΠ΅ дСскриптор Ρ„Π°ΠΉΠ»Π°) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π°Ρ‚Π΅ΠΌ функциями клиСнтской Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ read()) ΠΏΡ€ΠΈ создании ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ сообщСния для администратора рСсурсов.

Взгляд со стороны ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

ΠœΡ‹ ΡƒΠΆΠ΅ Π½Π°ΠΌΠ΅ΠΊΠ½ΡƒΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Он ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ интСрфСйс Π½Π° основС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ POSIX.

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Β«ΠΏΠΎΠ΄ ΠΊΠΎΠ»ΠΏΠ°ΠΊΠΎΠΌΒ» происходит Π΅Ρ‰Π΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ.

НапримСр, ΠΊΠ°ΠΊ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ соСдиняСтся с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ администратором рСсурса? Π§Ρ‚ΠΎ происходит Π² случаС ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Ρ‘Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм (ΠΊΠΎΠ³Π΄Π° нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСм отвСтствСнны Π·Π° Ρ‚ΠΎ ΠΆΠ΅ самоС пространство ΠΈΠΌΠ΅Π½)? Как ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ?

Поиск сСрвСра

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, β€” это Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ open(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ дСскриптор Ρ„Π°ΠΉΠ»Π°. (Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ вмСсто этого Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ высокого уровня β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, fopen() β€” ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ остаСтся справСдливым, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ fopen() Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ open()).

РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open() Π² Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ создаСт сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ‚Π΅ΠΌ пСрСсылаСтся администратору процСссов (procnto).

Администратор процСссов ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ пространствС ΠΈΠΌΠ΅Π½ ΠΏΡƒΡ‚Π΅ΠΉ. Данная информация прСдставляСт собой Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру ΠΈΠΌΠ΅Π½ ΠΏΡƒΡ‚Π΅ΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ связаны дСскрипторы ΡƒΠ·Π»ΠΎΠ² (node descriptors), ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ процСссов (process IDs), ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠ°Π½Π°Π»ΠΎΠ² (channel IDs) ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ (handles):

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΡƒΡ‚Π΅ΠΉ Π² QNX/Neutrino.

ΠžΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π° прСдставлСнном Π²Ρ‹ΡˆΠ΅ рисункС ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… описаниях для обозначСния администратора рСсурса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму QNX4, я использовал имя fsys-qnx4. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ всС Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π³Ρ€ΡƒΠΏΠΏΡ‹ связанных ΠΌΠ΅ΠΆΠ΄Ρƒ собой динамичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (DLL), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΈΠΌΠ΅Π½Π΅ΠΌ fsys-qnx4 Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ сущСствуСт; ΠΌΡ‹ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ это имя Π² качСствС «заполнитСля» для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open():

fd = open("/dev/ser1", O_WRONLY);

РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open() Π² клиСнтской Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ создаСт сообщСниС ΠΈ пСрСсылаСт Π΅Π³ΠΎ администратору процСссов. Π­Ρ‚ΠΎ сообщСниС гласит: Β«Π₯ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ /dev/ser1. К ΠΊΠΎΠΌΡƒ ΠΌΠ½Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ этому вопросу?Β»

ΠŸΠ΅Ρ€Π²Π°Ρ стадия Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ.

Администратор процСссов ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ запрос ΠΈ просматриваСт Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΈΠΌΠ΅Π½ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ соотвСтствия (Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ здСсь, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ соотвСтствиС). Имя ΠΏΡƒΡ‚ΠΈ Β«/dev/ser1Β» Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚, ΠΈ администратор процСссов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ: «НашСл /dev/ser1. Π—Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» 1 процСсса 44 Π½Π° ΡƒΠ·Π»Π΅ 0, спроси Π΅Π³ΠΎ!Β»

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅: ΠΌΡ‹ всС Π΅Ρ‰Π΅ Π² клиСнтском ΠΊΠΎΠ΄Π΅ open()!

Ѐункция open() создаСт Π΄Ρ€ΡƒΠ³ΠΎΠ΅ сообщСниС ΠΈ соСдиняСтся с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ процСссом (PID 44) Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΡƒΠ·Π»Π΅ (NID 0 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ·Π΅Π») ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ (CHID 1), помСщая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ (handle) нСпосрСдствСнно Π² сообщСниС. Π­Ρ‚ΠΎ воистину «сообщСниС установки соСдинСния» β€” Ρ‚ΠΎ самоС сообщСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ клиСнтская функция open() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для установлСния связи с администратором рСсурса (3 стадия Π½Π° рисункС Π½ΠΈΠΆΠ΅) Когда администратор рСсурса ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС установки соСдинСния, ΠΎΠ½ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈ провСряСт Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ. НапримСр, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ записи ΠΊ администратору рСсурса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму с доступом Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния β€” Π² этом случаС Π²Ρ‹ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ошибки (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” EROFS). Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, администратор ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° смотрит Π½Π° запрос (ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Ρ‚Π°ΠΌ O_WRONLY, Ρ‡Ρ‚ΠΎ для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΊΠΎΡˆΠ΅Ρ€Π½ΠΎ) ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ EOK (4 стадия Π½Π° рисункС Π½ΠΈΠΆΠ΅).

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ _IO_CONNECT.

Π—Π°Ρ‚Π΅ΠΌ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, клиСнтская функция open() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ дСскриптор Ρ„Π°ΠΉΠ»Π°.

На самом Π΄Π΅Π»Π΅ этот дСскриптор Ρ„Π°ΠΉΠ»Π° прСдставляСт собой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ соСдинСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ использовали для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСния администратору рСсурса! Если Π±Ρ‹ администратор рСсурса Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ EOK, ΠΌΡ‹ Π±Ρ‹ сообщили ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка (open() Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΠ»Π° Π±Ρ‹ -1 ΠΈ установила ΠΊΠΎΠ΄ ошибки Π² errno).

Поиск администратора процСссов

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ основныС этапы поиска ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ администратора рСсурса, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΉΠ½Ρƒ поиска администратора процСсса, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всС начинаСтся. На самом Π΄Π΅Π»Π΅ всС ΠΎΡ‡Π΅Π½ΡŒ просто. По ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, администратору процСссов соотвСтствуСт дСскриптор ΡƒΠ·Π»Π° 0 (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠ·Π΅Π»), ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ процСсса 1 ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ°Π½Π°Π»Π° 1. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ администратор процСссов всСгда идСнтифицируСтся Ρ‚Ρ€ΠΈΠΏΠ»Π΅Ρ‚ΠΎΠΌ ND/PID/CHID, Ρ€Π°Π²Π½Ρ‹ΠΌ 0/1/1.