SGP — system grupowego przetwarzania programów szkoleniowych
Zaprojektowany i zbudowany w Centrum Obliczeniowym Politechniki Wrocławskiej, system SGP służy do szybkiego wsadowego przetwarzania dużej liczby programów szkoleniowych w Fortranie na komputerach Jednolitego Systemu i IBM 360/370. Został on zaprojektowany przez J. Salamona i implementowany przez J. Kaźmierczyka, D. Krajewskiego i J. Salamona.
Typowe programy szkoleniowe, np. studenckie z nauki programowania, są małe (20–50 instrukcji źródłowych), o krótkim czasie wykonania (na ogół nie przekraczającym 1 s czasu procesora). Programy te z reguły nie odwołują się do plików pamięci dyskowej lub taśmowej, korzystają z czytnika kart (urządzenie wejścia) i drukarki wierszowej (urządzenie wyjścia). Przetwarzanie wsadowe dużej liczby tego typu programów z użyciem kompilatorów G lub H Fortranu IV jest bardzo nieefektywne (proces kompilacji i generowania programu wykonawczego jest wielofazowy i dość powolny). Ponadto, dla każdego z programów wsadu, etap kompilacji i wykonania wymaga każdorazowo załadowania do pamięci operacyjnej odpowiedniego kompilatora, a następnie programu ładującego, co znacznie przedłuża czas przetwarzania. Wad tych i innych niedogodności związanych z przygotowaniem i uruchomieniem zadania oraz analizą wyników przetwarzania przez użytkowników korzystających z firmowych kompilatorów Fortranu IV nie ma system SGP.
W porównaniu z kompilatorem Fortranu G, system SGP zapewnia takie udogodnienia: skraca 8–krotnie czas przetwarzania wsadu (ściśle — czas pracy procesora, gdyż rzeczywisty czas, zależnie od obciążenia systemu komputerowego, zmniejsza się 20–krotnie i więcej), przy czym czas kompilacji programów wsadu skraca się co najmniej 10–krotnie; dysponuje bogatą diagnostyką umożliwiającą natychmiastowe wykrycie błędów kompilacji i wykonania; nie wymaga od użytkownika przygotowania opisu zadania dla systemu operacyjnego OS; zapewnia środki umożliwiające testowanie i śledzenie wykonywania programu; daje komunikaty i wyników przejrzystej postaci; przetwarza, dowolnie wiele programów wsadu, sam sterując ich wykonaniem.
Tak znaczne zwiększenie szybkości kompilacji osiąga się niewielkim kosztem. Ogranicza się dostęp do niektórych zasobów systemu komputerowego, zwłaszcza do bibliotek podprogramów i plików pamięci zewnętrznej. Przetwarzane programy mogą korzystać tylko z funkcji standardowych i innych procedur użytkowych z biblioteki SGP. Wszystkie moduły systemu SGP napisano w Assemblerze.
Podstawową przetwarzaną jednostką jest zadanie, w skład którego wchodzą: program źródłowy, dane wejściowe programu i dyrektywy systemowe do identyfikacji programu i danych. Wsad zadań na kartach wprowadza się z czytnika do roboczego pliku wejściowego na dysku za pomocą programu czytającego RDR. System SGP pobiera kolejne zadanie z pliku wejściowego, przetwarza je, a wyniki przetwarzania umieszcza w roboczym pliku wyjściowym na dysku. Wyniki te są wyprowadzane do drukarki wierszowej za pomocą programu wypisującego WTR. Przetwarzanie zadania składa się z kompilacji programu i wykonania wygenerowanego podczas niej programu wykonywalnego.
Jeśli podczas kompilacji nie wystąpiły błędy, wygenerowany program jest wykonywany automatycznie. Błąd kompilacji przerywa proces generowania programu wykonywalnego, jednak analiza syntaktyczno–semantyczna programu jest nadal kontynuowana. Błąd wykonania przerywa obliczenia i system rozpoczyna przetwarzanie kolejnego zadania wsadu.
System SGP, po załadowaniu do pamięci operacyjnej, zajmuje 122 KB, z tego 32 KB są przydzielone zmiennym i tablicom programu, a 16 KB programowi wykonywalnemu (wystarcza to na poprawną translację programu o 400 do 500 instrukcjach źródłowych).
Wykonanie programu wygenerowanego przez system SGP jest ok. 5–6–krotnie wolniejsze niż analogicznego programu utworzonego przez kompilator Fortranu G. Jest to związane z interpretacyjnym charakterem wykonania wygenerowanego programu oraz rozbudowanymi środkami testowania i śledzenia jego wykonania, umożliwiającymi wykrycie niemal wszystkich sytuacji powodujących błędne wykonanie programu, m. in.: przekroczenia zakresu indeksu tablicy; niedozwolonego skoku z zewnątrz do instrukcji DO; wystąpienia rekursji pośredniej; braku odpowiedniości między parametrami formalnymi i aktualnymi; niedozwolonego typu lub wartości argumentu funkcji standardowej lub innej procedury bibliotecznej; nadmiaru; niedozwolonej wartości argumentu w operacjach dzielenia i potęgowania; niezgodności między typem elementu listy WE/WY a odpowiadającym mu kodem konwersji; niedopuszczalnej postaci danej liczbowej.
Przy zapętleniu się programu jedynym środkiem chroniącym przed nieskończoną pętlą wewnętrzną jest sygnalizacja przekroczenia limitu czasu na wykonanie programu, który użytkownik może sam ustalić w odpowiedniej dyrektywie systemowej. Może on również określić, czy podczas wykonywania programu ma być wyprowadzany ślad programu.
System SGP minimalizuje czynności organizacyjne związane z przygotowaniem wsadu zadań. Każdy przetwarzany program zawiera tylko jedną lub dwie (jeśli występują dane wejściowe) dyrektywy systemowe użytkownika. Natomiast operator lub nauczyciel grupy studenckiej jest zobowiązany dołączyć na początku wsadu dodatkowo 4 karty opisu zadania dla systemu OS i 2 karty na końcu wsadu. Użytkownik nie musi więc sam przygotowywać opisu zadania, co nie tylko zmniejsza o 10–15% objętość wsadu, lecz także nie jest źródłem dodatkowych błędów. Protokół przetwarzania programów wsadu jest przejrzysty i ok. 40% krótszy niż mało czytelny tabulogram z wynikami przetwarzania otrzymanymi jako wynik pracy kompilatora Fortranu G i programu ładującego.
Również istotne są efekty ekonomiczne wynikające z wdrożenia systemu SGP w szkołach wyższych. Koszt przetwarzania programów studenckich z użyciem systemu SGP zmniejsza się prawie o 50%.
System SGP jest udostępniany szkołom wyższym nieodpłatnie, na pisemne zamówienie skierowane do Centrum Obliczeniowego Politechniki Wrocławskiej.
Jerzy Salamon