Programowanie współbieżności
W szarych, smutnych czasach początku lat 80-tych czasem zadawałem sobie pytanie, po co uczę studentów zaawansowanych metod i struktur oprogramowania komputerów, dla których w praktyce w Polsce nie było zastosowania. Jakże się myliłem…
Opublikowane w CRN nr 10/2023
W drugiej połowie lat 70-tych wraz z Markiem Manieckim wprowadziliśmy do programu studiów na kierunku informatyka Wydziału Elektroniki Politechniki Warszawskiej wykład z Systemów Operacyjnych, a potem uzupełniający obieralny wykład z Programowania Współbieżnego. Po dwóch semestrach mieliśmy już dobrze opracowane notatki do wykładów, ale studenci nie mieli, oprócz własnych notatek, tekstów do nauki. Na wszelki wypadek przypominam, że internetu jeszcze nie było. Postanowiliśmy zatem napisać podręcznik-monografię, opisujący zasady programowania współbieżności oraz wykonywania współbieżnego i równoległego programów.
Już wtedy programy mogły być wieloprocesowe, gdzie każdy z procesów mógł być wykonywany współbieżnie w stosunku do innego procesu, w rzeczywistości lub naprzemiennie, zależnie od liczby procesorów. Ze względu na wspólne dla danego programu zasoby (obszary danych, urządzenia), konieczne było synchronizowanie fragmentów sekwencji działania tych procesów. Z czasem dodano pojęcie wątków, części instrukcji wykonywanych wspólnie w ramach danego procesu, podlegających synchronizacji. Pozostał przy tym podział programu oraz aplikacji na procesy tworzone hierarchicznie… No dobrze, może wystarczy tej wiedzy.
Chcę przy tym podkreślić, że nasza wiedza nie była tylko teoretyczna.
Uczestniczyliśmy w zespole wykonującym wieloprocesowy system operacyjny dla prototypu minikomputera UMC-20, który miał być wielostanowiskowym rejestratorem danych na taśmach magnetycznych (KRTM-20). Niestety prototyp nie wszedł do produkcji, ale doświadczenie praktyczne w pisaniu takich systemów uzyskaliśmy. Jeden z nas miał też okazję programować w Concurrent Pascalu na maszynie PDP-10 na Uniwersytecie w Aarhus. Zebraliśmy też sporo literatury zagranicznej, co też nie było proste w tamtych czasach.
Jak na tamte czasy i trudności z dostępem do papieru (tak, tak) dość szybko Wydawnictwo Naukowo Techniczne (WNT) w 1983 roku wydało naszą (Wacław Iszkowski, Marek Maniecki) książkę pod tytułem „Programowanie Współbieżne” w tzw. serii z jamnikami w nakładzie 3000 egzemplarzy.
W podręczniku opisaliśmy współbieżność, proste i strukturalne metody synchronizacji, operacje semaforowe i monitory. Analizowaliśmy kilka klasycznych przykładów, w tym problem pięciu filozofów (kto go nie zna, nie może się nazywać informatykiem… no dobrze, żartuję). Pokazaliśmy język Concurrent Pascal na podstawie książki Per Brinch Hansena „The Architecture of Concurrent Pascal”. Książkę tę zamówiliśmy do zakupienia. Biblioteka Główna PW dość szybko sfinalizowała transakcję, ale książka zniknęła. Dopiero po kilku tygodniach odnalazł ją jeden z naszych studentów w bibliotece na Wydziale Architektury! Opisaliśmy też język Modula opracowany przez autora języka Pascal, N. Wirtha. Zrobiliśmy przegląd kilku innych języków programowania współbieżnego (raczej powinno być współbieżności), niestety jeszcze bez wiedzy o języku Ada. Z teorii wyjaśniliśmy Sieci Petroego oraz Model automatowy.
W tych szarych, smutnych czasach początku lat 80-tych czasem zadawaliśmy sobie pytanie, po co uczymy naszych studentów takich zaawansowanych metod i struktur oprogramowania komputerów, dla których w praktyce w Polsce nie było zastosowania. A przepraszam – były dwie instalacje superkomputera CDC 6400, każdy z 10 procesorami centralnymi oraz procesorami peryferyjnymi, ale one działały w trybie wielozadaniowym, wykonując równolegle kilka programów równocześnie. Część studentów również zadawała sobie i nam podobne pytania – „a po co nam to wiedzieć, do czego może mi się to przydać?”.
Przyszłości nie mogliśmy przewidzieć,
ale już z początkiem lat 90-tych spotykaliśmy naszych już byłych studentów, którzy chwalili się, że z tą pozyskaną na naszych zajęciach wiedzą są doceniani w lokujących się na polskim rynku oddziałach amerykańskich korporacji. I rzeczywiście – po rewolucji 4 czerwca 1989 roku – tu w Polsce nie mieliśmy wiele pojęcia o zasadach sprzedaży, marketingu, zarządzaniu, ale świetnie dawaliśmy sobie radę ze zrozumieniem najnowszych technik informatycznych. Było to dużym zaskoczeniem dla menedżerów z korporacji, gdyż wtedy oni myśleli, że za tą, do niedawna żelazną kurtyną, jest tylko siermiężna wiedza o działaniu siermiężnych komputerów, głównie rodem jeszczez ZSRR.
I tak minęło 40 lat. W maju 2023 r. profesor z uznanej uczelni technicznej zapytał mnie, czy byśmy nie zgodzili się na II wydanie książki. Stwierdził, że ten nasz podręcznik jest stale używany, a jego treść prawie w całości odpowiada prowadzonym obecnie wykładom z Programowania Współbieżnego. Nieco się zdziwiliśmy, bo już od 30 lat nie prowadzimy zajęć na uczelni. Co prawda docierało do nas, że nasza książka jest wciąż wypożyczana, kserowana oraz można ją kupić na Allegro za 26,51 w stanie silnie używanym.
Wiemy też, że w 1996 r. pojawiło się tłumaczenie podręcznika Menachema Ben-Ariego „Podstawy programowania współbieżnego i rozproszonego” (WNT), zaś w 2010 r. Zbigniewa Czecha „Wprowadzenie do obliczeń równoległych” (PWN), a z kolei w roku 2012 Pawła Majdzika „Programowanie współbieżne", Systemy czasu rzeczywistego” (ebook Helion) i kilka innych o podobnej tematyce. Podobno jednak żadna z nich nie jest monografią taką, jak nasz podręcznik.
Ten przypadek świadczy o tym, że w informatyce, tak jak w każdej z innych dyscyplin, istnieje kanon wiedzy podstawowej, praktycznie niezmienny przez lata, który każdy zajmujący się daną dyscypliną powinien znać. W informatyce jest to maszyna Turinga, algebra Boole’a, architektura komputera von Neumanna, algorytmy i struktury danych, procesy, wątki i metody ich synchronizacji, oprogramowanie podstawowe, relacyjne bazy danych itd. W bieżącej pracy informatycznej ta podstawowa wiedza ujawnia się w podświadomości pozwalając intuicyjnie zrozumieć i zaimplementować działania systemów teleinformatycznych. I między innymi dlatego zdajemy sobie sprawę, że „potęga” systemu sztucznej inteligencji tak naprawdę drzemie w komputerze wykonującym program będący sekwencją rozkazów zapisanych binarnie i działających na wskazanych danych również będących sekwencjami zero-jedynkowych bitów. A ten komputer oraz ten program, a także zbiór danych został przygotowany przez człowieka, dzięki jego umiejętnościom informatycznym, prawdziwej inteligencji, intuicji oraz zawodowym doświadczeniom i podstawowej wiedzy o tej dziedzinie nauki i techniki.
Czy podejmiemy się przygotowania II wydania poprawionego naszego podręcznika sprzed 40 lat? Tego jeszcze nie wiem. To zależy czy znajdziemy odpowiednie wsparcie z kilku uczelni oraz czy zaakceptuje to Polskie Wydawnictwo Naukowe, mające obecnie prawa wydawnicze, przejęte od Wydawnictw Naukowo-Technicznych, do tej książki.
Niemniej jednak satysfakcja już się pojawiła – nasza monografia jest klasykiem informatyki, a my klasykami.
Podziękowanie dla dra inż. Marka Manieckiego.