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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 111

Автор РобачСвский АндрСй ΠœΠΈΡ…Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‡

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° STREAMS Π² большой стСпСни ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эти Π·Π°Π΄Π°Ρ‡ΠΈ. Она прСдоставляСт интСрфСйс ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, основанный Π½Π° сообщСниях, ΠΈ обСспСчиваСт стандартныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ STREAMS Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° сводится ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² нСзависимых модулях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ. Π‘Π°ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ обСспСчиваСт Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, связывая Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ качСство ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, связав нСсколько нСзависимых ΡƒΡ‚ΠΈΠ»ΠΈΡ‚.

БСгодня подсистСма STREAMS поддСрТиваСтся Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм UNIX ΠΈ являСтся основным способом Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСтСвых Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ². ИспользованиС STREAMS ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ устройства, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Π² UNIX SVR4.

АрхитСктура STREAMS

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° STREAMS обСспСчиваСт созданиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² β€” полнодуплСксных ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ процСссом ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ устройства [57]. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° STREAMS опрСдСляСт интСрфСйсы ΠΈ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ», Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для взаимодСйствия Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… частСй этой систСмы ΠΈ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ‚Π°ΠΊΠΎΠ΅ взаимодСйствиС ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ.

На рис. 5.13 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° общая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ процСссом ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ STREAMS. Π‘Π°ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ располагаСтся Π² пространствС ядра, соотвСтствСнно ΠΈ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² систСмном контСкстС. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ состоит ΠΈΠ· Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ модуля, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π“ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ взаимодСйствуСт с ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ процСссами Ρ‡Π΅Ρ€Π΅Π· интСрфСйс систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π”Ρ€Π°ΠΉΠ²Π΅Ρ€, Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, взаимодСйствуСт нСпосрСдствСнно с физичСским устройством ΠΈΠ»ΠΈ псСвдоустройством, Π² качСствС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_77.jpeg

Рис. 5.13. Базовая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°

ΠŸΡ€ΠΎΡ†Π΅ΡΡ взаимодСйствуСт с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартныС систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ open(2), close(2), read(2), write(2) ΠΈ ioctl(2). Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ poll(2), putmsg(2) ΠΈ getmsg(2). ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ осущСствляСтся Π² Π²ΠΈΠ΄Π΅ сообщСний, содСрТащих Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΈΠΏ сообщСния ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ сам Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ β€” ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ чтСния (read queue) ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ записи (write queue). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ обСспСчиваСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля. ΠŸΡ€ΠΈ этом ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ записи осущСствляСтся Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ (downstream), Π° Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ чтСния β€” Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ (upstream). НапримСр, Π½Π° рис. 5.13 ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ записи модуля 2 сообщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ записи модуля 1, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСниС ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ чтСния модуля 2 пСрСдаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ чтСния Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ модуля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ процСссу Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° систСмный Π²Ρ‹Π·ΠΎΠ² read(2). Когда процСсс выполняСт систСмный Π²Ρ‹Π·ΠΎΠ² write(2), Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΈ Π΄Π°Π»Π΅Π΅ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

БообщСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² ΠΏΠ°Ρ€Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ записи модуля 1 сообщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ чтСния Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ модуля, Π° Π·Π°Ρ‚Π΅ΠΌ, ΠΏΡ€ΠΈ нСобходимости, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. ΠŸΡ€ΠΈ этом ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π½Π΅Ρ‚ нСобходимости Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ части ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, ΠΈΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π·Π°Ρ‚Π΅ΠΌ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… комбинациях ΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ….

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° STREAMS обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ благодаря ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ динамичСского встраивания (push) модуля Π² ΠΏΠΎΡ‚ΠΎΠΊ. ВстраиваниС модуля Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ нСпосрСдствСнно послС Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ модуля. ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ установлСны связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ очСрСдями встраиваСмого модуля, Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ модуля ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. ПослС этого встроСнный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ проходящих Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π΅ΠΌ самым измСняя ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠŸΡ€ΠΈ нСобходимости ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ (pop) ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°.

На рис. 5.14 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, созданныС ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стандартных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сСтСвых ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² сСмСйства TCP/IP. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ IP, TCP ΠΈ UDP ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ, Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ Ethernet ΠΈΠ»ΠΈ Token Ring ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ производитСлями сСтСвых Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ΠΎΠ². Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ встраивания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° TCP Ρ‡Π΅Ρ€Π΅Π· Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Ethernet, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° UDP Ρ‡Π΅Ρ€Π΅Π· Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Token Ring.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_78.jpeg

Рис.Β 5.14. ИспользованиС ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для создания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° STREAMS Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ нСскольким модулям ΠΊΠ°ΠΊ Π²Π²Π΅Ρ€Ρ…, Ρ‚Π°ΠΊ ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€ΠΎΠ² β€” Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, Π½ΠΈΠΆΠ½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΈ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹ΡˆΠ΅ ΠΈ Π½ΠΈΠΆΠ΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΈ, прСдставлСнныС Π½Π° рис. 5.14, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ нСсколько ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ИмСнно Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сСти Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… вСрсиях ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы UNIX. ВозмоТная организация ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² STREAMS ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° рис. 5.15.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_79.jpeg

Рис.Β 5.15. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ сСтСвого доступа с использованиСм подсистСмы STREAMS

Π’ этом случаС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ TCP ΠΈ UDP ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π΅Ρ€Ρ…Π½ΠΈΠΌΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Π°ΠΌΠΈ, Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ IP Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π²ΠΈΠ΄Π΅ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠ³ΠΎ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Π° [58]. Вакая организация позволяСт прилоТСниям ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ сСтСвых ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² сСтСвых устройств. Π—Π°Π΄Π°Ρ‡Π° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ состояния всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, Ρ‚. Π΅. ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ модуля.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ

ΠœΠΎΠ΄ΡƒΠ»ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основными ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ состоит ΠΈΠ· ΠΏΠ°Ρ€Ρ‹ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ β€” ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ чтСния ΠΈ записи, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ. АрхитСктура модуля прСдставлСна Π½Π° рис. 5.16.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIX - img_80.jpeg

Рис. 5.16. ΠœΠΎΠ΄ΡƒΠ»ΡŒ STREAMS

КаТдая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ прСдставлСна структурой Π΄Π°Π½Π½Ρ‹Ρ…

queue
. НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ полями
queue
ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

q_qinfo
Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру
qinit
, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.
q_first
,
q_last
Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° связанный список сообщСний, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.
q_next
Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля Π²Π²Π΅Ρ€Ρ… ΠΈΠ»ΠΈ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.
q_ptr
Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ модуля (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ).