Конкурентно и дистрибуирано програмирање
Предговор
Област конкурентног и дистрибуираног програмирања се већ дужи низ година проучава у оквиру редовне наставе на Електротехничком факултету у Београду на одсеку за рачунарску технику и информатику и на одсеку за софтверско инжењерство. Проучавањем ове области прикупљен је и анализиран већи број практичних проблема синхронизације и комуникације. Ови проблеми су јединствени и омогућавају генерализацију честих проблема у пракси Сваком од проблема носи јединствено име ради лакшег праћења, али у упоређивања са постојећим решењима из ове области. Неки проблеми су тако конципирани да на шаљив начин обраде доста сложене механизме синхронизације и комуникације.
Као полазна основа за формирање ове књиге послужила је књига "Конкурентно програмирање: Теоријске основе са збирком решених задатака" аутора Игора Икодиновића и Зорана Јовановића. Та књига је допуњена и проширена новим проблемима и областима, уочене грешке су исправљене, али је начин излагања и обраде задатака остао исти.
Први део књиге је посвећен конкурентном програмирању помоћу дељен их променљивих. Други део књиге обухвата област дистрибуираног програмирања Трећи део је посвећен моделу програмирања коришћењем виртуелних простора. Четврти део се бави програмским нити ма, као координационом моделу који се данас најчешће примењује код писања конкурентних програма. Пери део књиге се односи на мрежно програмирање,
Програмске парадигме су представљене на Један од три начина: 1) коришћењем постојећих програмских библиотека и језика за конкурентно програмирање, 2) проширивањем секвенцијалних програмских језика одговараЈућим синтаксним елементима и 3) преко формалних програмских модела. Избор начина на који су одређене парадигме представљене бази ран је пре свега на критеријумима њихове једноставности, разумљивости и општости. У случају да пракса захтева примену одговарајућих парадигми коришћењем неких других имплементација од оних одабраних за њихов приказ у књизи, у већини случајева је могуће извршити директну синтаксну транслацију. Разумевање основних концепата из књиге ће чак и у случајевима када директна синтаксна транслација није могућа тај посао знатно олакшати.
Од постојећих програмских језика за конкурентно програмирање у оквиру ове књиге су коришћени: Ada за демонстрацију механизма рандевуа, Java за демонстрацију концепта програмских нити, као конкретан пример имплементације монитора, и као пример мрежног програмирања користећи размену порука и удаљене позиве метода и CONIC за демонстрацију парадигме асинхроног прослеђивања порука са индиректним именовањем процеса помоћу портова, У другим случајевима су коришћена проширења постојећих секвенцијалних програмских језика: проширени Pascal за демонстрацију концепта семафора, условних критичних региона и монитора и C-Linda за демонстрацију програмирања помоћу виртуелних простора. Од формалних програмских модела, BSP је коришћен за демонстрацију парадигме прослеђивања порука путем јавног емитовања, а CSP за демонстрацију парадигме прослеђивања порука са синхроним слањем и пријемом.
Један од проблема код упознавања са облашћу конкурентног и дистрибуираног програмирања је што читалац мора значајан део своје пажње да усмери на учење синтаксе и семантике везаних за имплементације разних парадигми. Да би се тај проблем ублажио, у уводном делу сваког поглавља jе поред прегледа карактеристика одговарајуће парадигме, дат и опис и анализа коришћене синтаксе. Након уводног дела дати су и задаци. Задаци који се налазе на почетку обично су изабрани тако да демонстрирају неке од главних особина парадигме и да покажу како се помоћу ње решавају типични проблеми. Они су посебно детаљно размотрени, како са теоријског тако и са практичног аспекта, јер представљају основ за разумевање материје у оквиру поглавља. Иза њих следе задаци који су по природи нешто сложенији и чија решења обично захтевају дубљу и дуготрајнију анализу, синтетишући стечено знање на вишем нивоу и дајући адекватну представу о величини и сложености реалних проблема. Након појединих задатака и на крају поглавља се могу наћи и задаци за самосталан рад. Препоручује се њихоsо решавање као најбоља вежба за проверу усвојеног знања.
Књига је писана на ћирилици, што је допринос очувању нашег језика и писма у области где су енглески језик и латиница често доминантни. Није се, међутим, могло избећи коришћење специфичних страних стручних израза и назива. У том смислу корИШћена терминологија одражава затечено стање у овој области код нас. Где је то било сврсисходно и могуће коришћени су термини нашег језика, уз навођење одговарајућих израза који се користе у страној литератури. Програми и примери су писани са именима променљивих, процедура и програмским коментарима који се ослањају на речи енглеског језика, јер је то данас већ стандардна пракса уведена због потребе за комуникацијом у широј стручној јавности Ово не би требало да има утицаја на разумљивост решења, с обзиром да су она праћена детаљним објашњењима ..
Захваљујемо рецензентима - наставницима ЕТФ-а - Јелици Протић и Драгану Милићеву и колеги Милошу Глигорићу на сугестијама којима су помогли да се текст књиге поправи и допуни пре издавања.
У Београду, фебруара 2008. године
Садржај
Увод, 1
Програмирање помоћу дељен их променљивих, 7
Семафори, 8
Проблем критичне секције, 10
Произвођач и потрошач: условна синхронизација процеса, 12
Произвођачи и потрошачи: комуникација помоћу кружног бафера, 15
Филозофи за ручком, 30
Читаоци и писци, 45
Недељиво емитовање, 53
Људождери за ручком, 60
Медвед и пчеле, 63
Одгајање птића, 65
Брига о деци, 68
Вожња тобоганом, 72
Изградња молекула воде, 74
Проблем преласка реке, 80
Студектска журка, 83
Условни критични региони, 85
Проблем критичнНе секције, 87
Произвођач и потрошвч синхронизација процеса, 89
Мост који има само једну коловозну траку, 92
Филозофи за ручком, 97
Анализа различитих варијанти решења проблема читалаца и писаца, 101
Претрага-уметање-брисање, 105
Дељени рачун, 109
Нервозни пушачи, 113
Проблем избора, 118
Монитори, 121
Улазак у авион, 124
Улазак у школу, 125
Читаоци и писци, 126
Тајмер, 132
Кружни FIFO бафер, 134
Сакупљање гајбица, 135
Прање веша, 137
Филозофи за ручком, 141
Недељива емитовање, 143
Алокација ресурса, 148
Дистрибуирано програмирање, 150
Увод у програмирање прослеђивањем порука, 152
Синхрона, асинхрона и условна комуникација, 153
Јавко емитовање, 155
Откривање топологије, 158
Филозофи за ручком, 160
Вожња тобоганом, 164
Игра живота, 166
Двоелемектни бафер, 169
Комуникација са поузданим везама, 171
Синхроно прослеђивање порука (CSP), 173
Реализација семафора, 177
Реформатирање текста (Conay-ов проблем), 178
Пријем, обрада и слање низа знакова, 179
Потпрограми: Остатак при дељењу, 181
Рекурзија: Факторијел, 182
Epaтocтeново сито, 183
Множење матрица, 185
Филозофи за ручком, 187
Бикарко стабло, 190
Скупови, 195
Израчукавање интеграла, 207
Изградња молекула воде, 209
Читаоци и писци, 211
Дељени рачун, 212
Јавно емитовање (BSP), 215
Стек, 218
Скуп, 219
Филозофи за ручком, 223
Радио такси, 225
Гониометарски систем, 227
Асинхроно прослеђивање порука (CONIC), 229
Бафер разделник, 232
Произвођачи и потрошачи: комуникација помоћу кружног бафера, 233
Промена конфигурације: звезда у прстен, 234
Бидирекциоки прстен типа FDDI, 235
Клијенти и сетвери, 237
Обрада података, 242
Филозофи за ручком, 244
Читаоци и писци, 246
Рандеву (Ada), 248
Селективна наредба, 253
Тimeout опција код селективне наредбе, 255
Реализација рандевуа помоћу примитива за слање и пријем порука, 256
Једноелементни бафер _ проблем коректног завршетка процеса, 259
Монитор, 261
Кружни FIFO бафер, 266
Произвођачи и потрошачи: комукикација помоћу кружног бафера, 268
Читаоци и писци, 271
Филозофи за ручком, 274
Нервозни пушачи, 276
Виртуелни простори, 280
Простор торки (С.Lindа), 281
Филозофи за ручком, 283
Клијенти и сервери _ обрада захтева по FIFO принципу (случај са једним cepвepoм), 284
Клијенти и сервери - обрада захтева по FIFO принципу (случај са више сервера), 286
Клијенти и сервери - селекција сервера по round robin редоследу, 288
Нервозни пушачи, 291
Читаоци и писци, 295
Проблем избора, 297
Проблем лифтова, 298
Заједнички тоалет, 301
Проблем пијаних филозофа, зоз
Израчунавање интеграла, 305
Проблем тела у гравитационом пољу, 307
Програмске нити, 311
Java, 313
Семафор, 315
Произвођач и потрошач: условна синхронизација процеса, 316
Произвођач и потрошач, 320
Филозофи за ручком, 322
Мост који има само једну коловозну траку, 327
Читаоци и писци, 333
Берберин који спава, 339
Вожња тобоганом, 342
Вожње аутобусом, 345
Брига о деци, 348
Јавни тоалет, 351
Деда Мраз, 355
Мрежно програмирање, 361
Java - Net, 362
Ћаскање, 365
Клијент сервер, 368
Java - RMI, З83
Дељени рачун, 387
Игра живота, 391
Литература, 395
Детаљни подаци о књизиНаслов: Конкурентно и дистрибуирано програмирање
Издавач: Akademska misao
Страна: 396 (cb)
Povez: meki
Писмо: ћирилица
Формат: 18x25.5 cm
Година издања: 2008
ИСБН: 978-86-7466-318-9