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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 138

Автор Π₯ьюз ΠšΠ°ΠΌΠ΅Ρ€ΠΎΠ½

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого Π²Ρ‹Π·ΠΎΠ²Π° информация ΠΎ курсах обучСния записываСтся Π½Π° Β«ΠΊΠ»Π°ΡΡΠ½ΡƒΡŽ доску». Аналогично ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

courses currentDegreePlan(); courses suggestedSchedule();

ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для считывания ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с «классной доски». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΎΠ± Ρ‰ Сния с «классной доской» источнику Π·Π½Π°Π½ΠΈΠΉ достаточно ΠΈΠΌΠ΅Ρ‚ΡŒ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Black_board. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Black_board ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² любом ΠΌ СстС сСти intranet ΠΈΠ»ΠΈ Internet. Найти Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌ СстополоТСниС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” Π·Π°Π±ΠΎΡ‚Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ORB-Π±ΠΎΡ€ΠΊΠ΅Ρ€Π°. (ΠŸΡ€ΠΎΡ†Π΅ΡΡ отыскания ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² расс ΠΌ атриваСтся Π² Π³Π»Π°Π²Π΅8.) ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Black_board ΠΈ ΠΌ Π΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π½ΠΎ ΠΌ Π΅Ρ€Π° PVM-Π·Π°Π΄Π°Ρ‡, ΠΎΠ½ ΠΌ ΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ эти ΠΌ ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ сообщСниями (ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΡ…) нСпосрСдствСнно с источниками Π·Π½Π°Π½ΠΈΠΉ. Аналогично источники Π·Π½Π°Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΎΠ±ΠΌΠ΅Π½ PVM-сообщСниями. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ окаТСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ сущСствуСт большС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… систСмных PVM-Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², дСструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Black_board Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌ Π΅Ρ‚ΠΎΠ΄ pvm_exit(), Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ источник Π·Π½Π°Π½ΠΈΠΉ β€” ΠΌ Π΅Ρ‚ΠΎΠ΄ pvm_exit (). Π’Π΅ ΠΌ са ΠΌ Ρ‹ ΠΌ ΠΈΠ· PVM-срСды Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ большС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ связанная с эти ΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌ ΠΈ, ΠΌ ΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ.

Активизация источников Π·Π½Π°Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ POSIX-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ spawn()

РСализация источников Π·Π½Π°Π½ΠΈΠΉ Π² Ρ€Π° ΠΌ ΠΊΠ°Ρ… PVM-Π·Π°Π΄Π°Ρ‡ особСнно ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ситуации, Ссли Π·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ источник Π·Π½Π°Π½ΠΈΠΉ Π² этом случаС ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами любого спСциализированного рСсурса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ оснащСн ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. К Ρ‚Π°ΠΊΠΈΠΌ рСсурсам ΠΌΠΎΠΆΠ½ΠΎ отнСсти Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ процСссор, Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссоров. PVM-Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с нСсколькими процСссорами. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ взаимодСйствиС с нашСй «классной доской» Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ ΠΏΠΎΡ€Ρ‚Ρƒ, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ источников Π·Π½Π°Π½ΠΈΠΉ, Π½Π΅ мудрствуя Π»ΡƒΠΊΠ°Π²ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ UNDC/Linux-процСссы. Если источники Π·Π½Π°Π½ΠΈΠΉ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² стандартных UNIX/Linux-процСссах, Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ содСрТит нСсколько процСссоров, Ρ‚ΠΎ источники Π·Π½Π°Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π½Π° этих процСссорах. Но Ссли источников Π·Π½Π°Π½ΠΈΠΉ большС, Ρ‡Π΅ΠΌ процСссоров, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² многозадачности. На рис. 13.6 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π΄Π²Π° простых Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с CORBA-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ «классной доской» ΠΈ UNIX/Linux-процСссами.

Рис. 13.6. Π”Π²Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° использования CORBA-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ «классной доски» ΠΈ UNIX/Linux-процСссов

Π’ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 1 CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ источники Π·Π½Π°Π½ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ источник Π·Π½Π°Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ собствСнноС адрСсноС пространство. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ источник Π·Π½Π°Π½ΠΈΠΉ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn() ΠΈΠ»ΠΈ сСмСйств Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ fork-exec. Π’ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 2 CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ размСщаСтся Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° всС источники Π·Π½Π°Π½ΠΈΠΉ β€” Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π½ΠΎ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… адрСсных пространствах. Π’ ΠΎΠ±ΠΎΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ дСйствуСт ΠΊΠ°ΠΊ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ памяти для источников Π·Π½Π°Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ доступ ΠΊ Π½Π΅ΠΌΡƒ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· Β«ΠΊΠ»Π°ΡΡΠ½ΡƒΡŽ доску». ΠŸΡ€ΠΈ этом Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ сущСствовании основного прСимущСства CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Π΅ΠΌ простой Π±Π»ΠΎΠΊ памяти. «Классная доска» β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· структур Π΄Π°Π½Π½Ρ‹Ρ… любого Ρ‚ΠΈΠΏΠ°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… «классных досок». Π’Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ простым использованиСм Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ доступа ΠΊ ΠΎΠ±Ρ‰Π΅ΠΉ памяти. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ CORBA-рСализация обСспСчиваСт ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ способ раздСлСния слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами. Π’ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ 13.5.3.1 описано созданиС PVM-Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ источники Π·Π½Π°Π½ΠΈΠΉ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ измСняСм конструктор, Π²ΠΊΠ»ΡŽΡ‡Π°Π» Π² Π½Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn () (с Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ for_each () ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn()). Π’ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 1 (см. рис. 13.6) «классная доска» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ источники Π·Π½Π°Π½ΠΈΠΉ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конструктора. Но Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 2 это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ «классная доска» располоТСна Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 2 «классной доскС» для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn () приходится ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΊ услугам посрСдника. ΠŸΠΎΡΡ€Π΅Π΄Π½ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «классная доска» ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ CORBA-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, располоТСнный Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с источниками Π·Π½Π°Π½ΠΈΠΉ. Π‘ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Remote Procedure Call β€” RPC) ΠΈΠ»ΠΈ MPI- Π»ΠΈΠ±ΠΎ PVM-Π·Π°Π΄Π°Ρ‡Ρƒ, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn (). (ОписаниС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn () ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Π³Π»Π°Π²Π΅ 3.) Как ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ posix_spawn() для Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· источников Π·Π½Π°Π½ΠΈΠΉ, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² листингС 13.8.

// Листинг 13.8. ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn() для

// запуска источников Π·Π½Π°Π½ΠΈΠΉ

#include <spawn.h> blackboard::blackboard(void) {

//.. .

pid_t Pid;

posix_spawnattr_t M;

posix_spawn_file_actions_t N;

posix_spawn_attr_init(&M);

posix_spawn_file_actions_init(&N);

char *const argv[] = {Β«knowledge_source1Β»,NULL};

posix_spawn(&Pid,Β«knowledge_source1Β»,&N,&M,argv,NULL);

//. . .

}

Π’ листингС 13.8 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ дСйствия, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для пороТдСния Π·Π°Π΄Π°Ρ‡, послС Ρ‡Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn() создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для выполнСния источника Π·Π½Π°Π½ΠΈΠΉ knowledge_source1. ПослС создания этого процСсса «классная доска» ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΊ Π½Π΅ΠΌΡƒ доступ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, сохраняСмый Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Pid. ΠšΡ€ΠΎΠΌΠ΅ «классной доски», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² качСствС срСдства связи, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ стандартноС мСТпроцСссноС взаимодСйствиС (IPC), Ссли «классная доска» располоТСна Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с источниками Π·Π½Π°Π½ΠΈΠΉ. «Классная доска» β€” самый простой способ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ источниками Π·Π½Π°Π½ΠΈΠΉ, хотя Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ размСщСния «классной доски» Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с этой Ρ†Π΅Π»ΡŒΡŽ сокСты. Π’ этом случаС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, осущСствляСмоС «классной доской» Π½Π°Π΄ источниками Π·Π½Π°Π½ΠΈΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ТСстким ΠΈ обусловлСнным Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ содСрТимым «классной доски», Π° Π½Π΅ сообщСниями, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ нСпосрСдствСнно источникам Π·Π½Π°Π½ΠΈΠΉ. ΠŸΡ€ΡΠΌΡƒΡŽ пСрСсылку сообщСний Π»Π΅Π³Ρ‡Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ использовании «классной доски» Π² сочСтании с PVM-Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ. Π’ этом случаС источники Π·Π½Π°Π½ΠΈΠΉ сами Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ сСбя Π½Π° основС содСрТимого «классной доски». Но «классная доска» всС ΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ «рычаг»управлСния источниками Π·Π½Π°Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅ΠΉ «извСстны» ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° всСх процСссов, содСрТащих источники Π·Π½Π°Π½ΠΈΠΉ. Как модСль MPMD (MIMD), Ρ‚Π°ΠΊ ΠΈ модСль SPMD (SIMD), Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ posix_spawn(). Π’ листингС 13.9 прСдставлСн класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° for_each ().

// Листинг 13.9. ИспользованиС класса child_process ΠΊΠ°ΠΊ

//Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ запускС источников

//Β Π·Π½Π°Π½ΠΈΠΉ

class child_process{

string Command;

posix_spawnattr_t M;

posix_spawn_file_actions_t N;

pid_t Pid;

//.. .

public:

child_process(void);

void operator()(string X);

void spawn(string X);

};

void child_process::operator()(string X) {

//.. .

posix_spawnattr_init(&M);

posix_spawn_file_actions_init(&N);