My title - Łukasz Papiewski

Transkrypt

My title - Łukasz Papiewski
POLITECHNIKA ŁÓDZKA
DMCS
Wprowadzenie do architektury mainframe:
Komputer IBM z800
w Katedrze Informatyki Stosowanej
Łukasz Papiewski
PRACA DYPLOMOWA
wykonana pod kierunkiem
dr Macieja Szmita
Łódź 2010
Spis treści
Wstęp
Cel pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Układ pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Podziękowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
4
4
1 Mainframe
1.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Procesor . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2 Pamięć . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.3 Dysk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Wirtalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4 Mainframe IBM z800 . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5 Administracja mainframem . . . . . . . . . . . . . . . . . . . . . .
1.5.1 Support Element . . . . . . . . . . . . . . . . . . . . . . . .
1.5.2 Instalowanie systemu operacyjnego za pomocą SE Workplace
1.5.3 HMC - Hardware Management Console . . . . . . . . . . . .
1.5.4 Logowanie do SE . . . . . . . . . . . . . . . . . . . . . . . .
1.6 System Linux na mainframie . . . . . . . . . . . . . . . . . . . . . .
1.6.1 Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.2 Przebieg instalacji . . . . . . . . . . . . . . . . . . . . . . .
1.7 Hercules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.8 Instalacja MVS 3.8J na emulatorze Hercules . . . . . . . . . . . . .
1.8.1 Licencja . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.8.2 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
7
8
8
11
15
15
17
18
20
20
20
21
23
24
24
25
2 Mainframe jako serwer szachowy
2.1 Przegląd dostępnych serwerów szachowych . . .
2.1.1 Pierwsza linia serwera FICS . . . . . . .
2.1.2 Wersja A. Tridgella serwera FICS . . . .
2.1.3 Wersja Chessd serwera FICS . . . . . . .
2.1.4 Analiza bazy danych serwera Chessd . .
2.2 Użytkowanie serwera ICS . . . . . . . . . . . . .
2.2.1 Polecenia użytkownika . . . . . . . . . .
2.2.2 Polecenia administratora . . . . . . . . .
2.2.3 Organizowanie terniejów na serwerze ICS
2.3 Informacje dodatkowe . . . . . . . . . . . . . .
2.3.1 PGN . . . . . . . . . . . . . . . . . . . .
2.3.2 Ranking szachowy ELO . . . . . . . . .
2.3.3 Ranking szachowy Glicko . . . . . . . . .
2.4 Silniki szachowe . . . . . . . . . . . . . . . . . .
2.4.1 Program szachowy - Crafty . . . . . . .
2.4.2 Program szachowy Stockfish . . . . . . .
2.5 Opis dodatkowych wymaganych programów . .
2.5.1 Polyglot . . . . . . . . . . . . . . . . . .
2.5.2 Winboard . . . . . . . . . . . . . . . . .
2.5.3 Dekoder różnicy czasu serwera ICS . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
34
34
35
38
42
49
49
52
53
56
56
57
59
60
60
62
63
63
64
65
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Implementacja
3.1 Komputery PC jako silniki szachowe . . . . . . . . . . . .
3.2 Automatyzacja zadań serwera Chessd . . . . . . . . . . . .
3.3 Implementacja skryptów dla silników szachowych . . . . .
3.4 Implementacja strony internetowej serwera . . . . . . . . .
3.4.1 Projekt strony w Zend Framework . . . . . . . . .
3.4.2 Analiza bazy danych . . . . . . . . . . . . . . . . .
3.4.3 Opracowany moduł chessd . . . . . . . . . . . . . .
3.4.4 Dodatkowe funkcje . . . . . . . . . . . . . . . . . .
3.5 Testy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.1 Test przy pomocy serwera szachowego . . . . . . .
3.5.2 Testy procesora przy pomocy programu szachowego
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
66
67
67
69
70
70
74
74
79
81
81
81
Zakończenie
84
Załącznik 1. Literatura
85
Załącznik 2. Spis kodów źródłowych
86
Załącznik 3. Spis rysunków
86
Załącznik 4. Spis tablic
87
Załącznik 5. Spis wydruków
87
Załącznik 6. Spis terminów
88
Załącznik 7. Wykaz elementów konsoli HMC Workplace
93
Załącznik 8. Wykaz elementów konfiguracyjnych SE Workplace
97
Załącznik 9. Log z instalacji MVS 3.8J
101
3
Wstęp
W 2010 r KIS Politechnika Łódzka otrzymała od firmy A. i Z. Maryniak CPU-Service komputer
IBM z800. Został on przy współpracy z sekcją mainframe PTI uruchomiony i skonfigurowany
do pracy z macierzą dyskową. Niniejsza praca przedstawia opis architektury mainframe, a także
przykład wykorzystania tego komputera. Dodatkowo opisano instalację systemu MVS 3.8j na
emulatorze Hercules, który użyty był w czasie i przed rozpoczęciem omawianego projektu.
Cel pracy
Celem pracy była instalacja i konfiguracja komputera z800 w KIS PŁ oraz jego wykorzystanie
jako serwera szachowego.
Układ pracy
Praca podzielona jest na cztery rozdziały: pierwszy dotyczy architektury mainframe oraz
sprzętu; drugi analizuje zagadnienia potrzebne do realizacji projektu serwera szachowego; trzeci
przedstawia zastosowane rozwiązanie; czwarty prezentuje przeprowadzone testy.
Rozdział pierwszy składa się z wstępnej analizy mainframe’ów wraz z przedstawieniem
aspektów tej architektury, obsługi komputera IBM z800 i dodatkowego sprzętu, instalacji systemu operacyjnego na emulatorze oraz mainframie.
Rozdział drugi dotyczy zagadnień związanych z implementacją serwera programów szachowych, jako praktycznego zastosowania i wykorzystanie zdobytej wiedzy o mainframe’ach.
Wyszczególnione tu zostały istniejące rozwiązania oraz omówione oprogramowanie jakie można
wykorzystać. Opisane zostały dostępne serwery szachowe wraz z instalacją. Podjęta została
analiza bazy danych serwera chessd wykorzystanego w projekcie.
Rozdział trzeci opisuje proces implementacji projektu. Ukazana jest strona internetowa,
znajdująca się na serwerze Apache’a na komputerze mainframe, zaprogramowana przy pomocy
narzędzia Zend. Opracowano moduł dla tego frameworka oparty o wcześniejszą analizę serwera
szachowego.
Rozdział czwarty prezentuje przeprowadzone testy wydajności mocy procesora opartych na
wydajności działania silników szachowych.
Podziękowania
Serdecznie dziękuję Panom: Zbigniewowi Maryniakowi, prezesowi Mainframe sp. z.o.o. oraz
Grzegorzowi Plucińskiemu - przewodniczącemu Sekcji Mainframe PTI za okazaną pomoc i
wsparcie podczas realizacji niniejszej pracy.
4
Rozdział 1
1.1
Mainframe
Historia (według: [3, 4, 5])
Pierwszy komputer typu mainframe, IBM 701 (de facto pierwszy komputer IBM-a), powstał w
roku 1953. Posiadał możliwości obliczeniowe w przybliżeniu równe 14000 instrukcji na sekundę.
Ten historyczny mainframe składał się z kilku żelaznych szafek zawierających urządzenia peryferyjne takie jak: układy zasilania, dyski, czytniki kart, drukarki itp. Główna z nich zawierała
układy dokonujące różnorakich obliczeń i była nazywana main frame - stąd też przyjęła się
nazwa tego typu maszyn.
Następcą linii 700 (opartej na lampach próżniowych) była seria 7000 wykonana w technologii
tranzystorowej.
W latach sześćdziesiątych istniało wiele różnorakich systemów komputerów dedykowanych
dla specyficznych zastosowań. Niektóre były zoptymalizowane np. dla bankowości, inne do
rozwiązywania problemów inżynieryjnych, a jeszcze inne pomagały naukowcom w złożonych
obliczeniach. W tym czasie około 80 procent kosztów dotyczyło sprzętu i aby efektywnie wykorzystywać zasoby sprzętowe często wymagane było przenoszenie aplikacji na inną architekturę.
Z związku z rosnącym zapotrzebowaniem na taką funkcjonalność Gene Amdahl, Fred Brook i
Gerry Blaauw zaprojektowali i zaimplementowali architekturę IBM System/360 1 . Podstawą
dla tej architektury była idea, że specyfikacja działania dowolnego komputera może być przedstawiona w formie trzech operacji: pobierz dane, dokonaj obliczeń, zapisz dane. Owocem tych
prac było pojawienie się w 1964 komputera IBM S/360.
IBM jako producent komputerów mainframe posiada około 90% udziału rynkowego w sprzedaży (dane z roku 2010). Sama nazwa mainframe odnosi się do urządzeń kompatybilnych z
architekturą S/360. Wszystkie następujące po S/360 architektury są wstecznie kompatybilne,
co oznacza, że aplikacje napisane dla wcześniejszych modeli mogą nadal bez przeszkód być
używane na nowszych.
IBM System Z jest obecnie produkowanym mainframem. Jest to seria komputerów architektury Z (z/Architecture). Wcześniejsza nazwa tej serii to IBM eServer zSeries.
Poniżej przedstawiono wykaz architektur komputerów mainframe2 :
• System/360,
• System/370,
• S/370-XA,
• ESA/370,
• ESA/390 (ARCHLVL 1),
1
Numer 360 w IBM System/360 oznaczał 360 stopniowe wykorzystanie tej architektury. System/360 jest
zarówno nazwą mainframe’a jak i architektury (podobnie jak System/370). S/360 jest dopuszczalnym i często
stosowanym skrótem oznaczającym System/360 (podobnie jak i nazwa S/370).
2
Źródło http://en.wikipedia.org/wiki/IBM System Z, odnośnik sprawdzony 2010 X.
5
• z/Architecture 1 (ARCHLVL 2),
• z/Architecture 2 (ARCHLVL 3).
1.2
Charakterystyka (według: [11])
Architektura S/360 bazuje na modelu komputera von Neumanna, czyli:
• procesor jest odpowiedzialny za wykonywanie instrukcji,
• pamięć zawiera dane,
• urządzenia wejścia/wyjścia komunikują się z urządzeniami zewnętrznymi.
1.2.1
Procesor
W architekturze S/360 procesor zapewnia integralność danych oraz separację pracy. Integralność danych oznacza, że instrukcja w razie błędnego wykonania będzie odpowiednio obsłużona
i ewentualnie poprawiona. Separacja pracy natomiast, że oddzielone zostaną zasoby systemowe
od zasobów użytkownika. Poprzedziło to takie późniejsze rozwiązania jak wirtualna pamięć
oraz wirtualna przestrzeń adresowania.
W specyfikacji S/360 określona jest kolejność, w jakiej mają być wykonywane instrukcje
jako NSI (ang. Next Sequential Instruction). Wyjątkami są skok i przerwanie. Statystycznie co
piąta instrukcja to skok, dlatego, pomimo prostego modelu, uwzględniono w projekcie procesora
dodatkowe mechanizmy optymalizujące.
Mainframe’y zostały od początku zaprojektowane aby wspierać wielu użytkowników pracujących równocześnie. Wprowadzona została wielozadaniowość. W przypadku gdy jakiś proces
czekał na operację wejścia/wyjścia, zostawały zapisywane zasoby procesora i wykonywana następna instrukcja. Technika ta pozwalała na późniejsze wznowienia zaniechanej operacji, tym
samym umożliwiając stałą pracę procesora.
Wieloprocesorowość została zaprezentowana wraz z architekturą S/370 w roku 1970. Wraz
z pierwszymi modelami IBM System Z pojawiała się także wieloprocesorowość symetryczna3 ,
w skrócie SMP (ang. Symmetric Multiprocessing). Polega ona na rozkładzie zadania na kilka
dostępnych procesorów. Najważniejszym aspektem jest tutaj współczynnik skalowalności określający jak dobrze ten mechanizm funkcjonuje. Zagadnienie ilustruje wykres 1.
3
SMP (ang. Symmetric Multiprocessing, przetwarzanie symetryczne) - architektura komputerowa, która
pozwala na znaczne zwiększenie mocy obliczeniowej systemu komputerowego poprzez wykorzystanie 2 lub więcej
procesorów do jednoczesnego wykonywania zadań.
6
Rysunek 1. Skalowalność mocy obliczeniowej minframe’ów. Wykres trzech wartości: liczby procesów (górna oś odciętych), liczby procesorów (dolna oś odciętych), oraz czasu odpowiedzi systemu (oś rzędnych). Przedstawia wydajność skalowania na mainframie:
w przypadku ośmiu procesorów i ośmiu procesów czas odpowiedzi jest porównywalnie identyczny z tym dla jednego procesora i jednego procesu. Wraz z dodawaniem
zadań czas odpowiedzi wzrasta liniowo, wraz z dodawaniem kolejnych procesorów
liniowo maleje. Symetryczność charakteryzuje tu architekturę dobrze skalowalną.
Źródło: [11]
1.2.2
Pamięć
W trakcie rozwoju architektury mainframe adresowanie pamięci stopniowo zwiększało swoją
wartość od jednego do czterech bajtów. Zaimplementowano technikę pamięci wirtualnej oraz
stronicowania, zapewniono separację wielu procesów na poziomie przestrzeni adresowania.
Jednym z ważniejszych punktów rozwoju mainframe’ów było wprowadzenie pamięci cache4 .
W odróżnieniu od innych architektur, tutaj system operacyjny nie musiał już implementować
żadnej dodatkowej logiki związanej z zarządzaniem tą pamięcią. Takie zagadnienia jak koherencja (pomiędzy procesorami) była ukryta dla programisty i rozwiązywana sprzętowo, co
pozwoliło uzyskać lepszą wydajność.
4
Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o wysokiej
latencji i niższej przepustowości są przechowywane w pamięci o lepszych parametrach. Na współczesnych
procesorach są 2 lub 3 poziomy pamięci cache: L1 (zintegrowana z procesorem), a także L2 i L3 (umieszczone
w jednym chipie razem z procesorem, lub na płycie głównej).
7
Tablica 1. Rozwój pamięci operacyjnej w mainframe’ach. Źródło: [11]
Architektura
Sposób adresowania
S/360
24-bitowe
adresowanie Model 30 posiadał 64-KB pamięć.
pozwala na wykorzystanie Mainframe 360/85 w roki 1969
16MB pamięci
był pierwszą maszyną posiadającą cache
S/370
24-bitowe
adresowanie Model 158 oraz 168 zaprezenpozwala na wykorzystanie towały wieloporcesorowość oraz
16MB pamięci
wirtualną pamięć
S/390
31-bitowe adresowanie po- Komputery G5 oraz G6 wraz z
zwalające na wykorzystanie pamięcią do 32GB
2GB pamięci
z/Architecture
64-bitowe
adresowanie IBM eServer zSeries 900 posiada
16EB (ExaByte)
od 5GB do 64GB pamięci
1.2.3
Przykład zastosowania
Dysk
Mainframe’y używają kanałów wejścia wyjścia (ang. I/O channels) jako rozwiązania alternatywnego dla szyny wejscia/wyjscia (ang. I/O bus). Każdy kanał jest logiczną jednostką, w
skład której wchodzi oddzielny procesor. Zarządza transferem danych pomiędzy pamięcią i
urządzeniami zewnętrznymi.
1.3
Wirtalizacja
Pod koniec roku 1964 rozpoczęte zostały prace przez Cambridg Scientific Center nad systemem
umożliwiającym wirtualizację całego mainframe’a wraz z procesorem i dyskami, umożliwiając
tym samym tworzenie wirtualnych maszyn (ang. Virtual Machine5 , VM).
W 1972 pojawił się system SVS (Single Virtual Storage) dostarczający 16MB wirtualnego
adresowania podzielonego na wszystkie zadania. Sześć miesięcy później ukazał się MVS (Miltiple Virtual Storage) pozwalający aby każdy program mógł używać 16MB przestrzeni adresowania.
Także w tym roku został wydany VM/370 - system operacyjny dostarczany razem z modelami S/370, który dzisiaj wyewoluował do systemu z/VM6 . Następnie IBM wprowadził sprzętową wirtulizację w postaci partycjonowania logicznego (ang. Logical Partition7 , LPAR). Dzięki
5
Wirtualna Maszyna (ang. Virtual Machine) odnosi się przede wszystkich do programowego emulowania
architektury. Tutaj autor miał na myśli sprzętową emulację, która jest podklasą typów wirtualizacji.
6
z/VM jest to system stworzony przez studentów z MIT, zaadaptowany i rozwijany przez IBM-a. Pozwala
użytkownikowi na pracę w własnej maszynie wirtualnej poprzez współdzielenie fizycznych zasobów mainframe
takich jak pamięć dyskowa, pamięć RAM, karty sieciowe oraz procesor. Zasoby te zarządzane są przez zarządcę
CP (Control Program).
7
LPAR (ang. Logical PARtition) - podzbiór sprzętu związanego z procesorem i systemem operacyjnym. Zawiera takie wydzielone zasoby jak procesor, pamięć oraz urządzenia I/O. Działa niezależnie od innych LPAR’ów
które także mogą być wydzielone.
8
temu możliwy stał się podział sprzętu na kilkanaście odrębnych logicznych jednostek wraz z
przydzielonymi określonymi zasobami procesora, dysku i pamięci. Sytuację taką uwidacznia
schemat przedstawiony na rysunku 2.
Rysunek 2. Rozkład obciążenia na poszczególne zasoby systemu. Programy mogą w różnym
stopniu obciążać procesor, dysk, pamięć. Dzięki sprawnej organizacji zadań i wirtualizacji można w pełni wykorzystać zasoby systemu. Fakt ten staje wyraźnie
istotny przy zastosowaniach biznesowych, gdzie jedna maszyna podzielona jest na
setki VM, które w różnym stopniu wykorzystują poszczególne zasoby. Na powyższym rysunku wyszczególniono cztery rodzaje zasobów: procesor wejścia/wyjścia,
procesor obliczeniowy, dysk oraz pamięć. Ukazany został rozkład obciążenia typu
procesor, pamięć, dysk. Źródło: [10]
Często spotykanym podejściem wirtualizacji maszyn nie posiadających sprzętowego wspomagania jest programowa emulacja przy pomocy odpowiednich aplikacji typu Virtual Private
Server8 .
Zalety wirtualizacji 9 :
• Większe wykorzystanie zasobów – pozwala na dynamiczny podział zasobów, dzięki czemu
uzyskuje się ich efektywniejsze wykorzystanie, zwłaszcza dla mało przeciążonych urządzeń, które posiadają więcej zasobów niż potrzebują.
• Mniejsze koszty zarządzania – zwiększa efektywność personelu poprzez redukcję fizycznych zasobów, które muszą być obsługiwane. Upraszcza zarządzanie zadaniami poprzez
ich automatyzacje, wszystko jest bardziej scentralizowane.
• Zwiększona elastyczność – pozwala włączać zasoby i dynamicznie je konfigurować, co
jest bardzo przydatne w rozwiązaniach biznesowych, gdzie potrzeby bardzo szybko się
zmieniają.
• Zwiększone bezpieczeństwo – pozwala na separację maszyn od siebie, co nie jest możliwe
przy prostych mechanizmach współdzielenia. Dostarcza również kontrolę nad dostępem
do danych i urządzeń. Każda wirtualna maszyna może być kompletnie odizolowana od
8
VPS (ang. Virtual Private Server) - jest to podział maszyny, jaką jest serwer, na kilka mniejszych, wirtualnych. VPS umożliwia pełny dostęp do konta root. Do zarządzania VPS-ami najczęściej wykorzystuje się
oprogramowanie Xen, VMware, FreeVPS, Virtuozzo, OpenVZ.
9
Według http://en.wikipedia.org/wiki/IBM System Z, sprawdzone X 2010.
9
głównego systemu i innych wirtualnych maszyn. Jeśli jedna maszyna zawiedzie lub zostanie zaatakowana nie wpływa to na pozostałe maszyny. Wirtualizacja chroni dane i zapewnia komunikację aplikacji tylko ze skonfigurowanymi połączeniami sieciowymi, ustalonymi
przez operatora.
• Większa dostępność – pozwala na fizyczne zmiany zasobów sprzętowych bez wiedzy użytkownika.
• Zwiększona skalowalność – partycjonowanie i agregacja wirtualnych zasobów, polegającej na zmniejszaniu i zwiększaniu zasobów dla maszyny. Można skalować zasobami bez
zmiany jakichkolwiek zasobów fizycznych.
• Interoperacyjność i inwestycja w bezpieczeństwo – wirtualne zasoby mogą być kompatybilne z interfejsami i protokołami które są niedostępne dla ukrytych fizycznych zasobów.
Obecnie komputery tego typu są komputerami najwyższej klasy i wysokiej ceny. Ich scentralizowana właściwość pozwala na uniknięcie dodatkowych kosztów związanych z energią oraz
personelem, a także pozwala na sprawne wykorzystanie sprzętu w całości (zobacz Rysunek 2).
Poniżej wypunktowano wykaz mainframów IBM serii Z:
• IBM zSeries 900 - dla dużych firm, urzędów, 2000 r.,
• IBM zSeries 800 – tańszy, mainframe klasy podstawowej, 2002 r.,
• IBM zSeries 990 – następca rozbudowanych modeli z900,
• IBM zSeries 890 - następca z800 oraz mniejszych modeli z900 (2004 r.),
• IBM System z9 Enterprise Class, 2005 r.,
• IBM System z9 Business Class, 2006 r.,
• IBM System z10 Enterprise Class, 2008 r.,
• IBM System z10 Business Class, 2008 r.
Specyfikę architektury mainframe mogą ukazywać benchmarki definiowane prze organizację
Transaction Processing Performance Council10 (TPC) dla systemów typu Online Transaction
Processing11 (OLTP). Przekładają się one na jakość usług działalności wykorzystujących dużą
i dynamiczną bazę danych, często o znaczeniu narodowym, gdzie klientami są miliony lub
miliardy ludzi na świecie (zobacz [8]). Dla przykładu można tu podać: rezerwację biletów lotniczych, przelewy bankowe, handel i wymiana towarowa, giełdy, raporty kredytowe czy serwisy
rządowe.
10
Transaction Processing Performance Council (TPC) jest organizacją typu non-profit założoną w 1985 w
celu zdefiniowania testów wydajnościowych w dziedzinie przetwarzania danych. Organizacja ta publikuje wyniki
testów, które dzięki dobrze zdefiniowanej metodyce są uważane za obiektywne i weryfikowalne.
11
OLTP (ang. Online Transaction Processing) – kategoria aplikacji klient-serwer dotyczących baz danych
w ramach bieżącego przetwarzania transakcji obejmujących takie zastosowania jak systemy rezerwacji, obsługa
punktów sprzedaży, systemy śledzące itp. W systemach tych klient współpracuje z serwerem transakcji, zamiast
z serwerem bazy danych.
10
1.4
Mainframe IBM z800
W roku 2000 został zaprezentowany wysoce wydajny w porównaniu do poprzednich wersji, system IBM z900. Następnie pojawiła się tańsza wersja z800 oferująca bardzo dobry współczynnik
ceny do jakości. Platforma ta została oznaczona numerem 2066.
Ta seria posiada pięć 64-bitowych jednostek procesora (PUs - Processor Units) w tym jedna
do obsługi I/O oraz maksymalnie 3 dedykowane dla Linuksa (Integrated Facility for Linux1213
- IFL) . Są one zawarte w jednym bądź kliku klastrach procesora o nazwie Central Processing
Complex14 (CPC). Wyposażone są w szynę wejścia/wyjścia o prędkości 6GB/s.
Tabela 2 przedstawia różnice w poszczególnych modelach serii 2066 komputera z800. Jednostka MSU jest angielskim skrótem od Milion Service Units, co informuje o milionach równoległych usługach na sekundę, nie wprost przekłada się na miliony instrukcji na sekundę (ang.
Milion Instruction Per Second, MIPS).
Tablica 2. Wykaz modeli mainframe’a zSeries 800 (model 2066)15 .
Model
OE1
OA1
OB1
OC1
OX2
OO1
OA2
OO2
OO3
OO4
0LF
0LF
0LF
0LF
MIPS
w/IFL 41
80
115
143
160
192
259
350
499
600
3605 192
3606 350
3607 499
3608 636
MSU
7
13
20
25
28
32
44
60
84
108
CPCs
koszt ($)
1+1 IFL
1
1
1
2
1
2
2
3
4
1
2
3
4
3,500.00
2,350.00
3,300.00
3,800.00
4,450.00
4,830.00
5,700.00
7,500.00
10,000.00
12,900.00
410,000
560,000
710,000
860,000
12
Linux jest rodziną uniksopodobnych systemów operacyjnych opartych na jądrze GNU/Linux. Linux jest
jednym z przykładów wolnego i otwartego oprogramowania - jego kod źródłowy może być dowolnie wykorzystywany, modyfikowany i rozpowszechniany
13
IFL (ang. Integrated Facility for Linux) - jest to udostępniona przez firmę IBM, tańsza wersja procesora
CPs (prcesora ogólnego przeznaczenia) na który można instalować system operacyjny Linuks.
14
CPC (ang. Central Processing Complex) to główna część mainframe’a zajmująca się wykonywaniem operacji
- składają się na nią procesory ogólnego zastosowania, procesory specjalistyczne oraz dodatkowy osprzęt m.in.
odpowiedzialny za operacje wejścia/wyjścia.
11
W Katedrze Informatyki Stosowanej znajduje się mainframe z800 (dostarczony dzięki uprzejmości firmy CPU Service).
Ze stanowiska SE (Podrozdział 1.5.1) można odczytać w zakładce z klastrem (CPs), jaka
jest specyfikacja danego mainframe’a, w tym jaki jest jego model (Wydruk 1).
P0022FA Details :
Instance Of Information
CP Status : Operating
CHPID Status : Exceptions
Group: CPC
IOCDS identifier : A0
IOCDS name linuxy d
Activation profile : default
Last used profile : not set vi activate
Service Status : Disabled
Maximum CPs:1
Maximum ICFPs: 0
Lockout disruptive tasks: Yes/No
Dual AC power maintance : Fully Redundant
Alternate SE Status : Operating
Product Information
Machine type : model 002066 - 0A1
Machine Serial : 83 -0022Faa
Macine sequence : 000000022faa
Plant of manufacture: 83
Manufacturer: IBM
CPC Serial : 00830022ffaa
CPC location : a20b
CPC identifier : 00
Wydruk 1. Informacje o klastrze procesorów komputera z800 w KIS.
Na podstawie tabeli z dostępnymi modelami tej serii komputerów IBM-a (patrz Tabela 2)
można dalej wnioskować o parametrach tej maszyny: moc obliczeniowa 80 MIPS-ów, jeden
klaster procesorów, orientacyjny koszt ok. 7000zł.
12
Przy obliczaniu wydajności operacji na procesorze w BogoMIPS16 system Linux podaje
następujące wartości: 104.65 dla LPAR 1 oraz 276.88 dla LPAR2 i LPAR3.
Dodatkowym wyposażeniem jest macierz typu 3390 połączona światłowodem ESCON17 .
Rysunek 3. Widok na IBM z800 z dwoma zamkniętymi laptopami służącymi do administracji.
Źródło: opracowanie własne
Test macierzy dyskowej
W pierwszej kolejności test został wykonany programem dbench. Umożliwiło to określenie
jaka jest docelowa orientacyjna prędkość dysku. Jako parametr należało wpisać ilość procesów
(przy bardzo dużej ilości procesów dochodziło do zawieszenia programu).
16
BogoMIPS to jednostka testu wydajności procesora, wykonywanego przez jądro systemu operacyjnego Linux
podczas jego startu, używany do kalibracji wewnętrznej pętli opóźniającej (ang. busy-loop). Nazwa powstała
ze złączenia ang. słowa bogus (nieprawdziwy) i skrótu MIPS.
17
ESCON (ang. Enterprise Systems Connection) - jest łączem z dyskiem lub urządzeniami peryferyjnymi,
opartym na łączu światłowodowym, pół dupleksowe, szeregowy interfejs, oryginalne prędkość 10 MB/s, później
zwiększona do 17Mbyte/s, maksymalna odległość: 43 kilometry.
13
kis081:/home/papi# dbench 999
dbench version 3.04 - Copyright Andrew Tridgell 1999-2004
Running for 600 seconds with load ’/usr/share/dbench/client.txt’ and minimum warmup 120
999 clients started
999
97
17.43 MB/sec warmup 94 sec
999
97
17.24 MB/sec warmup 95 sec
999
97
17.07 MB/sec warmup 96 sec
999
98
16.91 MB/sec warmup 97 sec
999
98
16.73 MB/sec warmup 98 sec
999
98
16.67 MB/sec warmup 99 sec
999
99
16.99 MB/sec warmup 101 sec
999
100
17.24 MB/sec warmup 103 sec
999
101
17.09 MB/sec warmup 104 sec
999
101
16.93 MB/sec warmup 105 sec
999
101
16.79 MB/sec warmup 106 sec
999
101
16.72 MB/sec warmup 107 sec
999
101
16.60 MB/sec warmup 108 sec
999
101
16.62 MB/sec warmup 109 sec
999
103
16.89 MB/sec warmup 112 sec
999
104
17.00 MB/sec warmup 113 sec
999
104
16.85 MB/sec warmup 114 sec
Program Iozone pozwolił na bardzo szczegółową analizę dysku oraz mechanizmu buforowania. Zasada testów polegała na badaniu szybkości operacji wejścia/wyjścia zależności od
wielkości pliku i zapisywanego rekordu. W parametrach należało podać wartość pliku większą
od wartości pamięci aby uwzględnić sytuację, kiedy dysk pracuje bez bufora pamięci.
./iozone -Rab file.wks
Tak wykonana komenda dokonuje pomiaru z pominięciem testów dla względnie małych
rekordów w porównaniu z całym plikiem (uwidaczniać się to może na wykresach w postaci
wartości zerowych w prawym dolnym rogu).
Dodać należy, że parametry te są po części związane z systemem operacyjnym, przez co
wiele czynników systemowych (sterowniki, obsługa pamięci, procesora) może mieć wpływ na
wyniki testów.
Wykres wynikowy ukazuje szybkość operacji odczytu na podstawie istniejących plików o
różnych rozmiarach.
14
Rysunek 4. Prędkość odczytu macierzy dyskowej badanego mainframe’a wykonana programem
Iozone. Pomiar ukazuje szybkość odczytu rekordu przy pomocy zadanego rekordu.
Oś odciętych dolna to poszczególne potęgi liczby dwa będące całkowitym rozmiarem
pliku, oś odciętych po prawej stronie reprezentuje rozmiar rekordu, a oś rzędnych
prędkość zapisu w kilo bajtach na sekundę.
Na podstawie tego pomiaru można stwierdzić, że prędkość macierzy dyskowej wynosi ok 16
MB/s, co świadczy o bardzo słabej, w porównaniu nawet do domowego PC, macierzy dyskowej.
Z drugiej strony jednak odpowiednia dystrybucja danych dysku, przy wykorzystaniu pamięci
RAM oraz mechanizmów buforowania, pozwala w większości uzyskać bardzo dobre wartości.
Gładkość wykresu świadczy o jednakowej wartości niezależnie od rekordu i pliku co w przypadku tego typu testów jest ważne, gdyż obrazuje, że system jest przystosowany do szerokiej
gamy zastosowań, a nie wspiera dobrze tylko określony zakres operacji (często systemy są dostosowywane do wąskiego przedziału operacji np. bazodanowych kosztem operacji innego typu,
narażając się tym samym na możliwe spadki wydajności i mniejszą uniwersalność).
1.5
Administracja mainframem
1.5.1
Support Element (według: [1])
Support Elements (SEs) są laptopami, znajdującymi się za przednią klapą komputera typu
mainframe (Rysunek 5). Pierwszy z nich dla odróżnienia nazywany jest Primary SE, drugi pełni
rolę urządzenia zastępczego. Na SE można w pełni administrować i konfigurować mainframem.
Nazwa programu administracyjnego znajdującego się na każdym z laptopów to Primary
Support Element Workplace. Za pośrednictwem tej graficznej aplikacji administruje się mainframem oraz konfiguruje jego procesory.
15
Zadaniem SE Workplace jest:
• zarządzanie odczytem urządzeń peryferyjnych (w tym IPL),
• konfiguracja I/O,
• zmiana ustawień i podział LPAR,
• aktualizowanie mikrokodu.
SE Workplace składa się z trzech obszarów: View Area, Task Area oraz Work Area (Rysunek 5).
Kolor zielony identyfikuje aktywne połączenie do mainframe, czerwony natomiast, że takowego nie ma lub, że występują jakieś błędy.
Na górze jest View Area reprezentująca grupy obiektów, które składają się na system.
Task Area znajduje się po prawej stronie i zawiera ikony reprezentujące operacje jakie można
wykonywać na obiektach.
Work Area w dolnej lewej części wyświetla obiekty lub grupy, postępujące zadania, listy zadań czy pomocnicze informacje. Jest ściśle związana z opcjami w górnym panelu - w zależności
od zaznaczonego elementu w View Area zmienia się widok Work Area.
Aby wykonać czynność na obiekcie przeciągamy obiekt z pola Work Area na wybraną ikonę
z Task Area. Można również to samo wykonać dwukrotnie klikając w pierwszej kolejności na
zadanie w Task Area, po czym pojawi się okno wyboru obiektu. 18
CPC Images - wyświetla aktualne skonfigurowane obrazy w klastrze procesora, w zależności
od trybu: dla LPAR widoczne będą partycje a dla non-LPAR (tryb oparty na systemie z/VM)
będzie wyświetlony system.
18
Pełen opis funkcji można znaleźć w literaturze do rozdziału. Spis wszystkich elementów dla omawianej
konsoli uwzględniono w załączniku do tej pracy.
16
Rysunek 5. Support Element Workplace Źródło: opracowanie własne
Dokładnie jedna osoba może wykonywać czynności administracyjne SE. Zdalna administracja jest widoczna na ekranie SE.
1.5.2
Instalowanie systemu operacyjnego za pomocą SE Workplace
Z obszaru Task List należy wybrać CPC Recovery. Zaktualizuje się okno po prawej stronie
z wymagnymi funkcjami. Następnie przechodzimy do widoku dostępnych LPAR-ów poprzez
kliknięcie dwa razy na ikonie o nazwie Groups i dalej ikonie Images. Kolejnym etapem jest
aktywowanie zadania Load from CD-ROM or Server. Można to zrobić klikając na samym
zadaniu dwa razy bądź przenosząc ikonę w wybranym LPAR-em do instalacji na ikonę tego
zadania. W obu przypadkach ukaże się okno z polami do uzupełnienia dotyczącymi źródła
instalacji. Gdy instalator sytemu znajdzie wymagane pliki rozpocznię się właściwa instalacjia
systemu (Rysunek 6). Więcej informacji znajduję się w rozdziale z instalacją systemu Linuks
(Podrozdział 1.6)
17
Rysunek 6. SE Workplace - Instalacja Linuksa z zasobów FTP. Źródło: opracowanie własne
1.5.3
HMC - Hardware Management Console (według: [2])
HMC jest komputerem klasy PC wraz z odpowiednim oprogramowaniem, służącym do komunikacji z mainframem. Konsola wykorzystywana jest do podstawowych funkcji związanych
z administracją. Komunikacja odbywa się za pośrednictwem sieci LAN oraz głównego stanowiska administracyjnego mainframe’a jakim jest wewnętrzny laptop nazwany Primary SE
(Rysunek 7).
Rysunek 7. HMC - schemat połączeń
18
Kiedy wykonywane jest zadanie na HMC19 , jest ono przesyłane do SE, stąd dalej inicjowane
są zadane operacje konfiguracyjne. HMC umożliwia także bezpośrednie podłączenie się do SE
i posiadania szerszego zakresu możliwości administracyjnych.
Systemem operacyjnym na stanowisku HMC jest zazwyczaj OS2/Warp dla starszych wersji,
bądź Linux dla nowszych. Sam system posiada różne programy a wśród nich HMC Workplace,
czyli główny program konfiguracyjny (Rysunek 8).
Wraz z kolejnymi wersjami HMC Workplace, zmieniają się graficzne interfejsy tej aplikacji
oraz liczba opcji, czy sposoby zarządzania. Opisywana wersja to 1.7.3.
Istnieje możliwość zalogowania do SE za pośrednictwem wbudowanej opcji wykorzystującej
wirtualny pulpit (ang. Virtual Network Computing20 , VNC).
Rysunek 8. Konsola HMC w systemie OS/2. Zielony kolor oznacza aktywne połączenie. Z
panelu Views wybrana jest opcja Console Actions, reprezentowana przez ikony w
obszarze roboczym (Console Actions Work Area). W obszarze po prawej stronie
jest menu wybierane z listy zadań (ang. Task List) Źródło: opracowanie własne.
Po uruchomieniu HMC Workplace ukazuje się okno logowania. Występuje kilka poziomów
autoryzacji (Wydruk 2)
19
HMC - Hardware Managment Console jest systemem dostarczającym narzędzia administracyjne do planowania, rozbudowywania i zarządzania systemami komputerowymi mainframe’ami IBM-a (definicja z podręcznika
elektronicznego
http://www.redbooks.ibm.com/redbooks/pdfs/sg247491.pdf str. XIII , odnośnik sprawdzony 31 listopada
2010).
20
VNC (ang. Virtual Network Computing) – system przekazywania obrazu z wirtualnego, bądź fizycznego
środowiska graficznego.
19
Operator OPERATOR PASSWORD
Advanced Operator ADVANCED PASSWORD
System Programmer SYSPROG PASSWORD
Access Administrator ACSADMIN PASSWORD
Service Representative SERVICE SERVMODE
Wydruk 2. Nazwy, kategorie oraz domyślne hasła użytkowników konsoli HMC. Źródło: [2]
Zasada użytkowania interfejsu graficznego (ang. Graphical User Interface21 , GUI) jest taka
sama jak dla SE (Podrozdział 1.5.1)22 .
1.5.4
Logowanie do SE
Jako przykład pracy z HMC zostanie ukazana operacja logowania do SE. Pierwszą czynnością
jaką należy wykonać jest poprawne zalogowanie się (z odpowiednim poziomem uprawnień) do
HMC. Następnie należy kliknąć na ikonę Defined CPCs. Po tej czynności w obszarze roboczym
wyświetlą się zdefiniowane klastry procesorów mainframe’a. Nazwa takiego klastra może być
przykładowo reprezentowana ciągiem ’P0022FA’. Kolejnym krokiem jest wybranie z widoku
Task List elementu CPC Recovery. Zaktualizuje to listę poleceń w obszarze Taks Area. Po
przeciągnięciu ikony z klastrem na Single Object Operations wyświetli się monitu z treścią
o kontynuowania polecenia (zobacz poniższy wydruk 3). Odpowiedź twierdząca nawiązuje
połączenie z SE i uruchamia na nim Primary Support Element Workplace (Podrozdział 1.5.1).
About to establish session with single CPC Console.
Do you want to continue with this task?
Object names : P0022FA
Yes/No
Wydruk 3. Tekst okna dialogowego. Źródło: opracowanie własne
1.6
1.6.1
System Linux na mainframie (według: [13, 11])
Historia
W roku 1999 IBM i SUSE rozpoczęli pracę, efektem której był w pełni kompatybilny i funkcjonalny Suse Linux Enterprise Server dla linii S/390, wprowadzając tym samym pionierską
dystrybucję systemu Linux na mainframe’a. Pierwszym dużym i liczącym się użytkownikiem
tego rozwiązania była Telia - skandynawska organizacja telekomunikacyjna.
Na początku były problemy z udostępnianiem sterowników na licencji GPL ale później w
pełni to rozwiązano udostępniając binarne poprawki w postaci kodu na tej samej licencji.
21
22
GUI (ang. Graphical UserInterface) - termin określający graficzny interfejs użytkownika w aplikacji.
Lista wszystkich elementów została umieszczony w dodatku.
20
Aby możliwe było uruchomienie Linuksa na architekturze S/390 potrzebne były poprawki
do samego jądra systemu (ok. 2% dodatkowego lub zmienionego kodu). Dotyczyły one przede
wszystkim architektury nowego procesora oraz urządzeń.
Zostały także wprowadzone niewielkie modyfikację (ok. 0.5%) takich programów jak glibc,
gdb, gcc i strace.
Zaraz po wprowadzeniu na rynek Linuksa, IBM wprowadził tańszą wersję procesora GPPU23
(ang. General Purpose Processor Unit) o nazwie IFL. Specjalnie dla administratorów Linuksa
IBM udostępnił alternatywę systemu z/VM o nazwie Virtual Image Facility, która w założeniu
miała ułatwić pracę administratorom systemów Unixowych i pochodnych. Zaprzestano dalszego
rozwoju tego systemu gdyż z/VM został łatwo zaadoptowany przez tę społeczność.
Aż do 2004 roku udziały SUSE były stuprocentowe, dopóki na rynek nie wszedł RedHat
wraz ze swoją wersją Linux Enterprise. W tym roku też SUSE zostało przejęte przez Novela.
W 2008 udziały RedHata wynosiły 20 procent.
1.6.2
Przebieg instalacji (według: [13, 9])
W celu rozpoczęcia procesu instalacyjnego trzeba posiadać zmodyfikowaną wersję jądra Linuksa
dla architektury mainframe. Architektura jest identyfikowana jako s390 dla 31 bitowej wersji
jądra oraz s390x dla 64-bitowej. Wersja 64-bitowa jest wspierana od wersji G7 (Generation 7)
systemów mainframe.
Jądro dystrybuowane jest w postaci obrazu dla wirtualnego czytnika bądź jako obrazu dla
czytnika taśmowego.
Wraz z jądrem potrzebny jest plik zawierający podstawowe komendy i strukturę FHS nazywany initrd. Jest to system plików rezydujący przy starcie systemu w RAM-ie, pozwalający
na dostęp do powłoki i skonfigurowanie mini-systemu potrzebnego do przygotowania sieci, repozytoriów, konfiguracji i rozpoczęcia właściwego procesu instalacji.
Instalację należy rozpocząć z SE jak to zostało pokazane w rozdziale 1.5.2. Następnie po
wstępnej konfiguracji interfejsu sieciowego i ustaleniu adresu IP (Rysunek 9) można podłączyć się za pośrednictwem protokołu telnet i kontynuwać instalację Linuksa w terminalu za
pośrednictwem standardowego dystrybucyjnego instalatora.
23
GPPU (ang. General Purpose Processor Unit).
21
Rysunek 9. SE Workplace - Instalacja Linuksa. Źródło: opracowanie własne
W trakcie instalacji partycja może być niewidoczna dlatego powinna być odpowiednio sformatowana aby została dalej rozpoznana [13, str. 72]. Na wydruku 4 pokazano przebieg tego
procesu.
22
/dev # dasdfmt /dev/dasdb
Please enter the blocksize of the formatting [4096]:
Drive Geometry: 10017 Cylinders * 15 Heads = 150255 Tracks
I am going to format the device /dev/dasdb in the following way:
Device number of device : 0x6020
Labelling device
: yes
Disk label
: VOL1
Disk identifier
: 0X6020
Extent start (trk no)
: 0
Extent end (trk no)
: 150254
Compatible Disk Layout : yes
Blocksize
: 4096
--->> ATTENTION! <<--All data of that device will be lost.
Type "yes" to continue, no will leave the disk untouched: yes
Formatting the device. This may take a while (get yourself a coffee).
Wydruk 4. Przebieg formatowania macierzy dyskowej mainframe’a z800.
Na końcu procesu instalacji dokonywany jest ponowny rozruch. Proces uruchomienia systemu następuje po przeniesieniu ikony z danym LPAR-em na akcje Load w Task List.
1.7
Hercules (według: [14, 15])
Hercules jest implementacją architektury lini ESA/390 , System/370 oraz z/Architecture. Przeznaczony jest do emulacji sprzętu takich mainframe’ów jak: System/370, System/390 oraz
zSeries. Działa pod Linux, Windows i Mac OS X i został wydany na wolnej licencji QPL. Hercules jest emulatorem sprzętu i procesora, nie emuluje natomiast systemu, który musi zostać
dostarczony przez użytkownika.
Wolnodostępne systemy takie jak OS/360, DOS, DOS/VS , MVS, VM/CMS oraz TSS/370
mogą być instalowane, nowsze takie jak OS/390, z/OS24 , VM/ESA25 i z/VM też są wspierane
ale mają legalne restrykcje.
Linux/390 jest jest dobrze wspomagany i wiele pracy zostało włożone w sam emulator aby
wywindować wydajność pracy tego systemu.
Podstawowym wykorzystaniem Herculesa jest emulacja 64-bitowego środowiska dla celów
deweloperskich - np. testy kompatybilności kodu lub zgodności programów z SMP (Symmetric
24
z/OS to system dla serii Z stworzony i rozwijany z naciskiem na potrzeby jakości usług dla e-biznesu.
VM/ESA jest systemem operacyjnym, zaprojektowanym przez studentów MIT we współpracy z programistami i inżynierami z IBM-a, którego zadaniem jest uruchamianie maszyn wirtualnych, na których dopiero
instaluje się systemy operacyjne; ideą projektu jest to, aby każdy użytkownik mógł pracować na własnej maszynie wirtualnej, mimo iż wszystko dzieje się w obrębie jednej maszyny fizycznej), http://www.vm.ibm.com/,
http://en.wikipedia.org/wiki/VM/ESA, odnośnik spr. 26 kwi 2009.
25
23
Multiprocessing).
Hercules jest bardzo dobrym środowiskiem do nauki obsługi i działania mainframe’ów. Generalnie w postaci konsolowej emuluje on HMC lub SE, na których wykonuję się wszystkie
prace związane z zarządzaniem prawdziwym mainframe’em. Niektóre komendy odpowiadają
czynnością (np. zmiana płyty) inne poleceniom HMC (np. IPL26 ). Praca na konsoli nie należy do najbardziej przyjaznych użytkownikowi. Aplikacja graficzna odzwierciedlająca interfejs
HMC mogłaby tu dość znacząco zwiększyć potencjał dydaktyczny emulatora.
Hercules znajduje zastosowaniu w przetwarzaniu programów napisanych stricte dla mainframe’a na komputerach x86 wyposażonych np. w procesory Intel lub AMD.
Istnieją podobne komercyjne programy. Sam IBM wspominał w Red Bookach 27 o emulatorze
Hercules i sposobie korzystania z tej opcji w razie potrzeby kopii zapasowej całego systemu.
Następnie wprowadził własnego klona w postaci emulatora zPDT.
Wspomnieć należy w tym miejscu o sporach pomiędzy IBM a małą firmą TurboHercules,
dotyczącego komercyjnego wykorzystania zmodyfikowanego emulatora [7]. W roku 2010 IBM
oskarżył tę firmę o naruszenie 137 patentów, bezprawną próbę tworzenia rynku tanich usług
oraz wykorzystania technologii firmy do nieuczciwego zarabiania.
Z punktu marketingowego było to dość niefortunna decyzja, gdyż podważyła wcześniejszą
dobrą opinię na temat wspierania przez IBM ruchu wolnego oprogramowania (open-source).
1.8
Instalacja MVS 3.8J na emulatorze Hercules
MVS jest kolejnym członkiem rodziny systemów wsadowych (OS/360, OS/VS2). Wspierał
zarówno przetwarzanie wsadowe (ang. batch) jak i transakcyjne. Nowym elementem w stosunku do poprzedników było wprowadzenie koncepcji wirtualnej przestrzeni adresowej. Został
zastąpiony przez OS/390.
1.8.1
Licencja
MVS3.8j jest systemem, którego prawa autorskie należały do IBM-a, ale od niedawna jest
udostępniany za darmo i ma na terenie USA ma statut domeny publicznej (ang. public domain).
Cytat ze strony hercules.org:
„The legal status outside the USA, where something like public domain or software without
copyright doesn’t exist, is ćopyrighted software provided at no charge”. (...) But law had been
changed over that time, so its not clear if the same legal status applies in your country right
now.”
W polskim systemie prawa autorskiego termin domena publiczna nie występuje. Całość
można natomiast zaliczyć jako freeware lub częściowo open-source, co pozwala na instalowanie
i wykorzystywanie kodu i bibliotek dla własnych celów.
26
IPL (ang. Initial Program Load) w terminologii mainframe oznacza odczyt bajtów rozruchowych urządzenia
np. dysku, taśmy itp.
27
Red Booki są darmowymi (w odróznieniu od Blue Book) książkach elektronicznych publikowanych przez
IBM-a i dostępnych poprzez Internet
24
1.8.2
Instalacja (według: [6])
Instalacja systemu MVS na emulatorze Hercules składa się z serii wykonywanych skryptów
JCL28 wykonujących operacje na taśmach instalacyjnych. Potrzebne pliki zostały pobrane ze
strony http://www.jaymoseley.com/hercules/download. Lista wymaganych plików (do pobrania
także ze strony cbtape.org):
• mvsstarter.tgz (6.23 MB)
• mvsdist.tgz (15.5 MB)
• installmvs.tgz (429 KB)
Struktura katalogów
W pierwszej kolejności należy przygotować katalog pod instalację MVS3.8j, określony tu
zmienną mvsDir. Następnie dodać podkatalogi: tape na taśmy (urządzenia nr 1442), jcs
na skrypty języka JCS oraz dasd, w którym będą znajdować się pliki na dyski. Dodatkowo
ustawiono zmienną mvsSrc zawierającą adres URL katalogu z rozpakowanymi plikami instalacyjnymi.
export mvsDir=/opt/mvs
export mvsSrc=http://papiewski.pl/pliki/hercules/mvs/
mkdir $mvsDir;
mkdir $mvsDir/tape;
mkdir $mvsDir/jcl;
mkdir $mvsDir/dasd;
Wirtualne dyski
Puste dyski generuje się za pomocą polecenia dasdinit:
cd $mvsDir/dasd &&
dasdinit -a -z smp001.3350
dasdinit -a -z mvsres.3350
dasdinit -a -z work02.3350
dasdinit -a -z spool1.3350
dasdinit -a -z page00.3350
3350
3350
3350
3350
3350
smp001
mvsres
work02
spool1
page00
&&
&&
&&
&&
Przełącznik ’-z’ włącza kompresję. Zaoszczędzi to 2GB miejsca na dysku, jednak może
spowolnić zapis/odczyt i intensywnie obciążać procesor.
28
Job Control Language - język opisu zadań, jest zbiorem wyrażeń (poleceń), które są przekazywane do systemu aby wykonać program podążając według pewnych instrukcji wyjściowych i wejściowych. Takie wyrażenia
przekazują systemowi, gdzie znajdują się odpowiednie wejścia i jak należy przetworzyć owo wejście (uruchomienie programu) i co z rezultatem działania programu. Job pozwala na wykonanie zadania (zadań) w tle pracy
systemu.
25
3350 znajduje się wśród grupy numerów oznaczających urządzenia dyskowe typu CKD29 .
Skompresowane taśmy AWS mają rozszerzenie ’.het’ zamiast ’.aws’. Obie są kompatybilne
z Herculesem.
Inicjalizacja dysków polega na zapisaniu w pierwszych bajtach Volume Table of Contents
- tabel zawierających informacje o danych: plikach i katalogach (odpowiednik Master Boot
Record30 ). Dokonuje się tego za pośrednictwem skryptu JCL, po wcześniejszym wczytaniu
taśmy startowej.
Wymagana jest w tym miejscu taśma ibcdasdi.het oraz skrypt języka JCL ibcdasdi.00c,
mający za zadanie wykonanie odczytanej instrukcji z tejże taśmy.
Dalej wykorzystany jest skrypt konfiguracyjny Herculesa ibcdasdi.cnf z odpowiednio ustawionymi urządzeniami np. czytnikiem taśmowym o numerze 3420, czy czytnikiem kart 1442
służącym do odczytu skryptu JCL.
mkdir $mvsDir/tape
cd $mvsDir/tape; wget -nc $mvsURL/tape/ibcdasdi.het
cd $mvsDir && wget -nc $mvsURL/{ibcdasdi.cnf,ibcdasdi.00c}
W pliku konfiguracyjnym przełącznik CNSLPORT ustawiony jest domyślnie na port 3270 - to
do niego będzie można podłączać się terminalem i wydawać polecenia. Tutaj należy wspomnieć,
że połączenie najlepiej wykonać przy pomocy programu emulującego terminal IBM 3270, gdyż
różni się on nieznacznie od popularnych terminali konsolowych wykorzystujących VT200.
Uruchomienie emulatora:
cd $mvsDir && hercules -f ibcdasdi.cnf
W tym momencie można już za pośrednictwem telnetu łączyć się z portem 3270 localhosta
(lub zdalnie, w zależności gdzie znajduje się serwer).
telnet localhost 3270
Aby wszystko przebiegało zgodnie z polityką emulatora Hercules należy najpierw połączyć
się telnetem, a potem odczytać bajty rozruchowe danego urządzenia. Prawdopodobnie związane
jest to z kwestiami bezpieczeństwa lub po prostu tak to zostało zaprojektowane.
Po połączeniu konsoli z emulatora Hercules uruchamiamy urządzenie (ipl) spod adresu
0280. Jest to czytnik taśm z poprzednio skonfigurowaną taśmą:
ipl 0280
W terminalu wyświetli się zapytanie o wejściowe komendy, a dokładniej o ich źródło. Odpowiedzią w tym wypadku jest urządzenie typu 1442 o adresie 00c - skrypt z komendami
(poprzedzone ewentualnym klawiszem enter), jak pokazano poniżej:
29
Jeden z dwóch rodzajów dysków wykorzystywany przez Herculesa. CKD z ang. Count Key Data, drugi to
FBA z ang. Fixed Block Architecture.
30
MBR (ang. Master Boot Record) – główny rekord startowy, czyli umowna struktura zapisana w pierwszym
sektorze dysku twardego. Często nazywany też Master Boot Block (pol. główny blok startowy). Zawiera on
program rozruchowy oraz główną tablicę partycji (w przypadku dysku twardego – dyskietki zwykle nie posiadają
tablicy partycji).
26
#enter
input 1442,00c
Efekt polecenia:
Connected to device 0:0009
IBC105A DEFINE INPUT DEVICE. DASDI 7.80
HHCTE006A Enter input for console device 0009
input=1442,00c
DASDI 7.80
SMP001 JOB ’INITIALIZE SMP001 3350 VOLUME’
MSG TODEV=1052,TOADDR=009
DADEF TODEV=3350,TOADDR=148,IPL=NO,VOLID=SMP001,BYPASS=YES
VLD NEWVOLID=SMP001,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
IBC163A
END OF JOB.
DASDI 7.80
WORK02 JOB ’INITIALIZE WORK02 3350 VOLUME’
MSG TODEV=1052,TOADDR=009
DADEF TODEV=3350,TOADDR=149,IPL=NO,VOLID=WORK02,BYPASS=YES
VLD NEWVOLID=WORK02,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
IBC163A
END OF JOB.
DASDI 7.80
MVSRES JOB ’INITIALIZE MVSRES 3350 VOLUME’
MSG TODEV=1052,TOADDR=009
DADEF TODEV=3350,TOADDR=14A,IPL=NO,VOLID=MVSRES,BYPASS=YES
VLD NEWVOLID=MVSRES,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
IBC163A END OF JOB.
DASDI 7.80
PAGE00 JOB ’INITIALIZE PAGE00 3350 VOLUME’
MSG TODEV=1052,TOADDR=009
DADEF TODEV=3350,TOADDR=14B,IPL=NO,VOLID=PAGE00,BYPASS=YES
VLD NEWVOLID=PAGE00,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
27
END
IBC163A END OF JOB.
DASDI 7.80
SPOOL1 JOB ’INITIALIZE SPOOL1 3350 VOLUME’
MSG TODEV=1052,TOADDR=009
DADEF TODEV=3350,TOADDR=14C,IPL=NO,VOLID=SPOOL1,BYPASS=YES
VLD NEWVOLID=SPOOL1,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
IBC163A END OF JOB.
Oryginalnie instalator systemu MVS jest udostępniany na taśmach. W celu skonwertowania go do trzech plików typu DADS wykonuje się kilka operacji przy pomocy skryptów JCL
(tutaj nie zostało to omówione). Należy skorzystać w tym miejscu z gotowych plików DASD31 ,
pobierając i kopiując je do odpowiednich miejsc jak poniżej:
cd $mvsDir && wget -nc $mvsURL/smp.cnf
cd $mvsDir/dasd &&
wget -nc $mvsURL/dasd/{start1.150,spool0.151, work01.152}
Pierwszy plik to system startowy - służący do rozpoczęcia i uruchomienia procesu instalacyjnego, drugi spool jest podręcznym plikiem wymiany (swap), a work miejscem na pliki
użytkowników i programy.
Po uruchomieniu Herculesa wymagane jest podanie adresu urządzenia, z którego emulator
będzie czytać instrukcje rozruchowe. Wykonuje się to za pomocą polecenia IPL (ang. Initial
Program Load). Na marginesie, ma to swój odpowiednik w komputerze mainframe w postaci
komendy Load w SE (Podrozdział 1.5.1).
cd $mvsDir && hercules -f smp.cnf
Czytanie bajtów rozruchowych rozpoczyna się od 0 bajta do 23 bajta, czyli łącznie 24B.
Dane z pierwszych ośmiu bajtów ustawiają się w rejestrze PSW32 Herculesa. Dalej spod tego
adresu wykonywany jest dalszy proces startowy. Po zakończeniu ostatnie cztery bajty PSW
powinny wskazywać na FFFF. W tym momencie należy połączyć się protokołem telnet na port
3270. W terminalu, po połączeniu, należy uruchomić program startowy spod urządzenia dyskowego o adresie 0150. Urządzenie to jest instalacyjnym obrazem systemu MVS (plik o nazwie
start01.150).
telnet localhost 3270
ipl 150
31
DASD (ang. Direct Access Storage Device) - jest to określenie i nazwa dysku, historycznie odwołująca się
do faktu szybkiego w odróżnieniu od sekwencyjnego taśmowego, dostępu, dzisiaj określającą po prostu macierze
dyskowe mainframe’a.
32
Program Status Word - rejestr sprzętowy zawierający stan wykonywania obecnego programu oraz adres
instrukcji która obecnie jest wykonywana.
28
W konsoli ukaże się informacja dotycząca wpisania komendy po wyrazie input. W przypadku gdy pierwszy raz uruchomiono obraz instalacyjny należy przebudować Link Pack Area
- mapowane na dysk miejsce w pamięci zawierające często wykonywane programy systemowe.
r 0,clpa
Efekt polecenia na terminalu przedstawia poniższy log:
Trying 127.0.0.1...
Connected to localhost.
Escape character is ’^]’.
Hercules version 3.06 built on May 14 2009 11:28:14
running on otos.pl (Linux-2.6.24.5-grsec-xxxx.#3 SMP Wed May 28 09:09:25 CEST 2008 i686
Connected to device 0:001F
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 03.70.VS2
HHCTE006A Enter input for console device 001F
r 0,clpa
IEF165I // START JES2
IEE351I SMF SYS1.MAN RECORDING NOT BEING USED
*00 $HASP426 SPECIFY OPTIONS - HASP-II, VERSION JES2 4.0
Pojawia się informacja od podsystemu JES (ang. Job Entry System) odpowiedzialnego za
kolejkowanie zadań i przyjmowanie komend:
IEF165I // START JES2
IEE351I SMF SYS1.MAN RECORDING NOT BEING USED
*00 $HASP426 SPECIFY OPTIONS - HASP-II, VERSION JES2 4.0
Symbol * oznacza tu znak oczekiwania na odpowiedź, a numer zapytania, na które trzeba
odpowiedzieć systemowi, identyfikowany jest następną w kolejności dwucyfrową liczbą. Decyzję
trzeba tu dodatkowo potwierdzić. Obie komendy ukazane są poniżej:
r 0,format,noreq
r 1,y
Efekt poleceń:
r 0,format,noreq
IEE600I REPLY TO 00 IS;SUPPRESSED
*01 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE
r 1,y
IEE600I REPLY TO 01 IS;SUPPRESSED
$HASP423 SPOOL0 IS BEING FORMATTED
IEE041I THE SYSTEM LOG IS NOW ACTIVE
29
$HASP160
$HASP160
$HASP100
$HASP373
$HASP100
$HASP373
$HASP100
$HASP373
$HASP309
$HASP309
$HASP309
$HASP099
PRINTER1 INACTIVE - CLASS=AJ
PUNCH1
INACTIVE - CLASS=BK
INIT
ON STCINRDR
INIT
STARTED
INIT
ON STCINRDR
INIT
STARTED
INIT
ON STCINRDR
INIT
STARTED
INIT 1 INACTIVE ******** C=A
INIT 2 INACTIVE ******** C=BA
INIT 3 INACTIVE ******** C=CBA
ALL AVAILABLE FUNCTIONS COMPLETE
Wolumen spool1 jest przeznaczony jako miejsce dla bibliotek dystrybucyjnych. Istnieje potrzeba zarezerwowania tego miejsca jako prywatnego, gdyż domyślnie MVS klasyfikuje wszystkie dodatkowo zamontowane dyski jako publiczne.
m 148,vol=(sl,smp001),use=private
Log systemowy polecenia:
m 148,vol=(sl,smp001),use=private
$HASP100 MOUNT
ON STCINRDR
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE - CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
Kolejnym krokiem jest wykonanie skryptu, który zainstaluje biblioteki SMP znajdujące się
na dystrybucyjnych taśmach smp4.het oraz zdlib1.het. W pierwszej kolejności trzeba ustawić
taśmę zdlib1.het w czytniku (type 3420) o adresie ustawionym w pliku konfiguracyjnym np.
170.
Dalszą czynnością jest dodanie wymaganej taśmy do katalogu tape oraz skryptu do katalogu
jcs:
cd $mvsDir/tape &&
wget $mvsURL/tape/{smp4.het,zdlib1.het}
cd $mvsDir/jcl && wget $mvsURL/jcl/smp4p44.jcl
Poniżej krok emulacji włożenia karty do czytnika i jej aktywacji za pośrednictwem skryptu
JCL:
30
devinit 170 tape/zdlib1.het
devinit 012 jcl/smp4p44.jcl eof
Przebieg tego procesu jak poniżej:
HHCPN098I Device 0:0012 initialized
$HASP100 SMP4P44 ON READER1
SMP 4.44 from MVS38J
$HASP104 SMP4P44 ************************************************************
$HASP104 SMP4P44 * An IPL is required after this job has completed!!!
*
$HASP104 SMP4P44 ************************************************************
$HASP373 SMP4P44 STARTED - INIT 1 - CLASS A - SYS H158
IEF244I SMP4P44 S1 - UNABLE TO ALLOCATE 1 UNIT(S)
AT LEAST 1 OFFLINE UNIT(S) NEEDED.
IEF489I SMP4P44 - 1 UNIT(S) NEEDED FOR I1
IEF247I SMP4P44 - 182,183,184,170,171 OFFLINE
IEF247I SMP4P44 - 282,283,284,382,383,384,482,483,484,582 NOT ACCESSIBLE
IEF247I SMP4P44 - 583,584,682,683,684,270,271,370,371,470 NOT ACCESSIBLE
IEF247I SMP4P44 - 471,570,571,670,671 NOT ACCESSIBLE
Na karcie zdlib1.het znajduje się polecenie, które po odczytaniu wymaga podania w terminalu danych konfiguracyjnych (tu numeru urządzenia). Odpowiedź o wartości 170 identyfikuje
wirtualny czytnik taśmowym, w którym znajduję się ta karta.
r 2,170
Wyświetli się kilka informacji oraz zapytanie informujące aby włożyć dyskietkę T74172 do
stacji 170.
*02 IEF238D SMP4P44 - REPLY DEVICE NAME OR ’CANCEL’.
r 2,170
IEE600I
IEC502E
*IEC501A
IEC501A
REPLY TO 02 IS;170
K 170,MVS38J,SL,SMP4P44,S2
M 170,T74172,SL,6250 BPI,
SMP4P44,S2
Poniżej symulacja czynności włożenia woluminu:
devinit 170 tape/smp4.het
Przebieg poprawnego wykonania:
EF234E K 170,T74172,PVT,SMP4P44,S2
IEF471E FOLLOWING RETAINED VOLUMES NO LONGER NEEDED BY SMP4P44
31
MVS38J.
$HASP395 SMP4P44 ENDED
$HASP309
INIT 1 INACTIVE ******** C=A
$HASP150 SMP4P44 ON PRINTER1
$HASP160 PRINTER1 INACTIVE - CLASS=AJ
$HASP250 SMP4P44 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
W tym punkcie wymagany jest reset poprzedzony poleceniami zwalniającymi pewne wymagane zasoby:
$p jes2
z eod
quiesce
Pierwsze powyższe polecenie wyłącza podsystem JES, drugie zamyka pliki, a trzecia opróżnia bufory 33 .
$p jes2
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A
IEE037I LOG NOT ACTIVE
2000 10.16.29 CONSOLE
IEE142I 01F NOW RECEIVING HARDCOPY
4000 10.16.29
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A
4000 10.16.29
IEE037I LOG NOT ACTIVE
0000 10.16.29
IEF196I IEF142I JES2 JES2 - STEP WAS EXECUTED - COND CODE 0000
0000 10.16.29
IEF196I IEF285I
SYS1.PROCLIB
K
0000 10.16.29
IEF196I IEF285I
VOL SER NOS= START1.
0000 10.16.29
IEF196I IEF285I
SYS1.HASPCKPT
K
0000 10.16.29
IEF196I IEF285I
VOL SER NOS= SPOOL0.
0000 10.16.29
IEF196I IEF285I
SYS1.HASPACE
K
0000 10.16.29
IEF196I IEF285I
VOL SER NOS= SPOOL0.
z eod
4000 10.16.45
quiesce
33
IEE334I HALT
EOD SUCCESSFUL
Kompletny log instalacyjny można znaleźć w dodatku
32
Rozdział 2
Mainframe jako serwer szachowy
ICS jest skrótem od Internet Chess Server (Internetowego Serwera Szachów). Jest to klasa
serwerów obsługujących za pośrednictwem udokumentowanego ale nie ustandaryzowanego protokołu ICS grę w szachy wielu użytkowników dokonywaną za pośrednictwem Internetu.
Serwery tego typu zaczęły pojawiać się od początku lat osiemdziesiątych. Zrzeszały wielu
użytkowników, którzy bezpłatnie mogli się zarejestrować, utworzyć konto, grać, czy obserwować
statystyki.
W tych czasach pojęcie wolnego oprogramowania (open source34 , free software) jeszcze nie
miało jednoznacznej kwestii prawnej. Projekt tworzony przez ogół dla ogółu, z braku regulacji
został w końcu przejęty, skomercjalizowany i konsekwentnie płatny (ICC). Chris Petroff wraz
z grupą ludzi temu przeciwną zaprogramował (po części na wcześniejszym kodzie) w pełni
darmowego ICS-a. Już od 1995 r. każdy mógł grać w szachy bez dodatkowych obligacji.
Projekt ten został wydany pod nazwą Free Internet Chess Server (FICS) a jego obecna licencja
to GPL. Następnie był rozwijany i utrzymywany przez wolontariuszy jako oprogramowaniem o
otwartym kodzie 35 .
Projekt fics z racji natury wolnego oprogramowania był następnie rozwijany przez wielu
niezrzeszonych ze sobą programistów. Powstawało też wiele rozwidleń podstawowego kodu
źródłowego. Z braku formalnego w tych czasach, określenia protokołu jakim posługiwał się
klient w komunikacji z serwerem, wyklarował się ostatecznie ogólnie uznawany protokół ICS. Był
to tekstowy wariant protokołu telnet, służący do komunikacji z ICS-ami (w większości z reguły
niezależnie od ich rodzaju). Umożliwiło to tym samym wykorzystanie wielu istniejących odmian
aplikacji oraz ustandaryzowało specyfikację projektów. Pomogło w konsolidacji i rozwijaniu
dalej kodu serwera.
Istniejąca wcześniejsza fragmentacja kodu źle wpłynęła na jego spójności oraz ostateczną
możliwość dalszego scalania różnorakich rozwiązań. Doprowadziło to nawet do wieloletniej
stagnacji w dalszej historii FICS. Z drugiej strony serwer był już w pełni rozwinięty i oferował
o wiele więcej niż zwyczajną grę w szachy przez Internet.
Na początku tego stulecia pojawiły się dwie próby dalszego rozwinięcia kodu źródłowego
poprzednich wersji: jedna przez Andrew Tridgella oraz druga przez studentów Uniwersytetu w
Paraná (projekt chessd). Te dwie wersje, które się wyłoniły, są dzisiaj podstawą serwera ICS.
Poniżej wypunktowano wersje serwerów FICS oraz ich orientacyjne lata powstania:
• Wersja oryginalna
– FICS 1.0
– FICS 1.2.18
34
Otwarte oprogramowanie (ang. open source movement, czyli otwarte źródła) - odłam ruchu wolnego oprogramowania (ang. free software), który proponuje nazwę open source software jako alternatywną dla free
software, głównie z przyczyn praktycznych, a nie filozoficznych.
35
Słówko free podkreślało tu, że projekt został zainicjowany jako free software - w skrócie, ruch propagujący
rozwój aplikacji przez chętne osoby i uznający taką postać rzeczy za lepszą dla ogółu (programistów, użytkowników) od komercyjnego rozwijania aplikacji.
33
– FICS 1.6.2
– FICS 1.2
– FICS 1.2.23
– FICS 1.7.4
• Wersja poprawiona przez A. Tridgella
– FICS 2.0 (2002 r.)
– FICS 2.0.1
– FICS 2.1.0
– FICS 2.1.1
– FICS 2.2.0
– FICS 2.2.1
– FICS 2.2.2
– FICS 2.2.3 (2004 r.)
• Wersja portugalska (oparte na serwerze FICS)
– Chessd 0.1 John 6
– Chessd 0.2 Chrysalis (2006 r.)
– Chessd 0.3 Chrysalis
– Chessd 0.3.1 Chrysalis (2007 r.)
2.1
2.1.1
Przegląd dostępnych serwerów szachowych
Pierwsza linia serwera FICS
Oryginalna linia serwera FICS jest dostępna w wersjach od 1.0 do 1.7. Na podstawie tej wersji
wyklarował się nieoficjalny protokół ICS, następnie wykorzystywany przede wszystkim jako
standard w komunikacji różnorakich klientów.
Oryginalna strona projektu jak i sam ICS znajdują się pod adresem freechess.org. Aktualnie (na rok 2010) zainstalowana tam wersja serwera to 1.25.17. Na FTP pod tą domeną
(ftp.freechess.org) znaleźć można dostępne wersję FICS jak i liczne aplikacje szachowe (jak
choćby robofics).
Instalacja wersji 1.6.3
Aby przystąpić do kompilacji należy dokonać poprawek :
• usunąć stare linijki kodu dotyczące np. extern fprintf(),
34
• z pliku Makefile usunąć opcję -lcompact.
Przed kompilacją można skonfigurować plik config.h. Dwa najważniejsze parametry w tym
pliku to nazwa klienta poczty (np. sendmail) oraz nazwa domyślnego katalogu instalacyjnego.
Poniżej znajduje się wydruk serwera po jego uruchomieniu.
[papi@turnip /home/fics/FICS.DIST/FICS]$ ./fics
FICS: Initialized on port 5000 at Wed Aug 4, 21:58 CEST.
FICS: commands_init()
FICS: rating_init()
FICS: Can’t read ratings data!
FICS: wild_init()
FICS: book init()
1004 entries in ECO book
1086 entries in NIC book
4038 entries in LONG book
FICS: player_array_init()
Wydruk 5. Uruchomienie serwera fics 1.6.3 po udanej instalacji. W trakcie inicjalizacji serwera
ustawiany jest standardowy port 5000, skanowane są pliki tekstowe z komendami,
dalej wczytywane dane partii otwierających oraz kolejno aktywowana baza danych
graczy. Następnie serwer przechodzi w tryb nasłuchu na otwartym porcie.
2.1.2
Wersja A. Tridgella serwera FICS
Jest to wersja poprawiona i wywodzi się z poprzedniej linii. W całości rozwijana przez Andrew
Tridgella. Strona projektu znajduję się na http://chess.samba.org/.
Wersja ta wg autora konsoliduje poprzednie wersje oraz poprawia wcześniejsze błędy. Nie
różni się znacznie w funkcjonalności od poprzednich wersji, jednak elementy bazy danych nie
są już kompatybilne, gdyż zostały opracowane na podstawie innej struktury.
Projekt zaowocował czterema wersjami 2.0, 2.1, 2.2 oraz 2.3. Ta linia serwerów obok serwera
chessd jest najczęściej rekomendowana jako typowy FICS.36
Instalacja
Pliki można pobrać ze strony w postaci bądź z CVS-a (komenda jak poniżej).
cvs -z5 -d :pserver:[email protected]:/cvsroot co lasker
cd lasker
cvs -z5 update -dP
36
Taką rekomendację podał na swojej stronie Tim Mann (http://www.tim-mann.org/ics.html). Wg autora
lista owych FICS zamyka się na trzech liniach oraz kliku ich modyfikacjach.
35
Zastosowano tu dodatkową bazę danych TDB37 (zmienne konfiguracyjne) oraz dodano
skrypt do generowania struktur danych w C. Poniżej standardowa sekwencja instalacyjna podana wraz z instrukcjami instalacyjnymi (plik INSTALL):
cd src
./configure --prefix=/usr/local/
make
make install
Poniżej wykaz hierarchii oraz struktury katalogów i plików, ukazanej na podstawie logu
instalacyjnego.
37
TDB (ang. Trivial Database) - baza danych, której z jednym z aspektów jest jednoczesna obsługa wielu
użytkowników operujących na możliwych tych samych rekordach, wykorzystująca do tego mechanizm wewnętrznego blokowania aby oddzielić nachodzące się zapisy, charakteryzująca się niewielkim rozmiarami kodu.
36
root@server:~/pkg/lasker/src$ make install
install -d -m0755 /home/chessd
install -d -m0755 /home/chessd/bin
install -d -m0755 /home/chessd/lib
install -m0755 chessd /home/chessd/bin
install -m0755 chessd.so /home/chessd/lib
install -m0755 makerank /home/chessd/bin
install -m0755 chessd_addplayer /home/chessd/bin
install -d -m0755 /home/chessd/players
install -d -m0755 /home/chessd/spool
install -d -m0755 /home/chessd/data/admin
install -d -m0755 /home/chessd/data/book
install -d -m0755 /home/chessd/data/help
install -d -m0755 /home/chessd/data/usage
install -d -m0755 /home/chessd/data/messages
install -d -m0755 /home/chessd/data/stats
install -d -m0755 /home/chessd/data/boards/wild
install -d -m0755 /home/chessd/games/history
install -d -m0755 /home/chessd/games/journal
install -d -m0755 /home/chessd/games/adjourned
install -d -m0755 /home/chessd/data/stats/player_data
cp -r ./../data/admin/[a-z]* /home/chessd/data/admin
cp -r ./../data/book/[a-z]* /home/chessd/data/book
cp -r ./../data/help/[a-z]* /home/chessd/data/help
cp -r ./../data/usage/[a-z]* /home/chessd/data/usage
cp -r ./../data/messages/[a-z]* /home/chessd/data/messages
perl -e ’mkdir("/home/chessd/players/$_",0755) for ("a".."z")’
perl -e ’mkdir("/home/chessd/games/history/$_",0755) for ("0".."99")’
perl -e ’mkdir("/home/chessd/games/journal/$_",0755) for ("a".."z")’
perl -e ’mkdir("/home/chessd/data/stats/player_data/$_",0755) for ("a".."z")’
perl -e ’mkdir("/home/chessd/games/adjourned/$_",0755) for ("a".."z")’
Nawet ostatnia wersja projektu (2.2.3) nie jest już taka aktualna i w związku z tym pojawiają
się błędy w czasie kompilacji. Wynikają np. z niewspomaganego zdefiniowania danych w plikach
nagłówkowych (extern zamiast static).
Niekompatybilny z obecną wersja parsera Perl może okazać się plik parsers/genstruct.pl
odpowiedzialny za generacje struktur, co tym samym może uniemożliwić dalszą kompilację.
Opracowanym rozwiązaniem jest tu zastosowanie wygenerowanych plików wyjściowych z wcześniejszych wersji.
37
Przy samej instalacji może wystąpić błąd spowodowany brakującą opcją kaskadowego kopiowania. Należy w takiej sytuacji w odpowiednim miejscu w Makefile zastąpić ’cp -u’ frazą
’cp -u -r’.
W katalogu z zainstalowanym serwerem znajdują się następujące podkatalogi:
• bin - przechowuję wykonywalny plik ’chessd’
• data - zawiera pliki tekstowe i opisy komend
• games - miejsce na historię gier
• players - katalog z baza tekstowa statystyk graczy, każdy w oddzielnym podkatalogu
• spool - miejsce na pocztę, związaną np. z instalacją
Uruchomienie serwera
Aby uruchomić należy z głównego katalogu wywołać ’chessd’ z odpowiednimi parametrami.
Domyślnie uruchamia się wykorzystując port 5000.
root@server:/home/chessd$ bin/chessd -f -p 5000
CHESSD: Initialized on port 5000
Wed Apr 14, 21:32 CEST 2010 CHESSD: Loaded 166 commands (admin=46 normal=120)
Wed Apr 14, 21:32 CEST 2010 CHESSD: Can’t read ratings data!
Wed Apr 14, 21:32 CEST 2010 CHESSD: Loaded books
2.1.3
Wersja Chessd serwera FICS
Historia
Na podstawie zainicjowanego przez brazylijski urząd programu Szachy w szkole, grupa studentów z Publicznego Uniwersytetu w Paraná rozpoczęła pracę nad rozwojem serwera szachowego chessd. W projekcie uwzględnione zostały poprzednie rozwiązania oraz kody źródłowe
tego typu wolnodostępnych serwerów, w tym oryginalnej linii FICS. Pierwszym efektem prac
był serwer o nazwie kodowej John 6. Jak zapewniano, miał się cechować większą odpornością
na błędy.
Jednak z powodów praktycznych program nadal nie oferował przyjaznej funkcjonalności i
był mało intuicyjny dla docelowego użytkownika (od ucznia szkoły podstawowej wzwyż). Nie
spełniał tym samym postawionych wymagań projektowych, co w kolejności wymusiło kolejne
zmiany. Pojawiła się idea dodania interfejsu WWW oraz nowoczesnej relacyjne bazy danych.
Efektem prac była kolejna wersja o nazwie kodowej Chrysalis, która została wdrożona i
służył kilka lat, jako efekt wcześniej zapoczątkowanej inicjatywy rządowej 38 .
38
Historia na podstawie pliku README dostarczonego wraz z projektem chessd
38
Grupa go rozwijająca po pewnym czasie zaprzestała dalszej pracy z powodu braku środków
finansowych.
Opis
Jak sami autorzy określili, ostateczna wersja chessd jest adaptacją starych projektów dla nowoczesnego środowiska programistycznego. Z uwagi na wykorzystanie relacyjnej bazy danych,
prezentuje nowsze podejście w stosunku do poprzednich rozwiązań.
Pierwsza stabilna wersją ma numer 0.2, ostania 0.3.1. Od wersji 0.3 jest włączone wsparcie
dla bazy MySQL39 . Z założenia serwer ma ograniczoną liczbę komend dostępnych z protokołu
telnet. Mimo tego serwer nadal jest w większości kompatybilny z protokołem ICS - można
z niego tak samo korzystać jak w przypadku innych popularnych serwerów. Wymagana jest
wcześniejsza rejestracja z poziomu strony internetowej.
Po stronie klienta interfejs webowy dodatkowo umożliwia oglądanie statystyk, komunikację,
przeglądanie historii rozgrywek itp. Zaimplementowano także rozwiązania umożliwiające grę w
szachy oraz inne dodatkowe funkcje, oferowane wcześniej przez popularne interfejsy użytkownika
typu Winboard.
Strona techniczna
Zmiany wprowadzone w chessd w stosunku do oryginalnej wersji serwer FICS były dość
liczne. W większości polegały na podmianie zapytań do bazy danych (w kodzie C) oraz usunięciu niektórych części, które miały się znaleźć w kodzie PHP40 strony WWW.
Dzięki oddzieleniu serwera telnet odbierającego i wysyłającego zapytania, od warstwy prezentującej wyniki i statystyki poszczególnych graczy, całość stała się z punktu programistycznego bardziej przejrzysta.
Funkcjonalność związana z administracją i zarządzaniem została zrealizowana jako funkcje
PHP oraz zapytania SQL strony internetowej. Sprawiło to, że sam kod serwera stał się bardziej
stabilny, spójny i łatwiejszy w dalszym utrzymaniu. Wiele poprzednich błędów, czy znane
wcześniej sposoby zawieszania programu zostały wyeliminowane.
Wykorzystanie relacyjnej bazy w przeciwieństwie do tekstowej pozwoliło na większą liczbę
równoczesnych transakcji, zwiększyło szybkość pobierania i zapisywania rekordów. Umożliwiło także łatwą zmianę struktury danych oraz dodanie nowej funkcjonalności. Dzięki temu
możliwa stała się łatwiejsza modyfikacja serwera. Ważna rzeczą jest tu prowadzenie statystyk
oraz dokonywania różnorakich porównań graczy, co dzięki bazie stało się bardziej wygodne niż
przeszukiwanie plików, czy parsowanie odpowiedzi serwera.
We wszystkich wersjach serwerów FICS rozszerzanie programu o nowe komendy dla użytkownika związane jest z ingerowaniem w kod źródłowy języka C. Nową funkcjonalność w projekcie chessd można dodać wstawiając i obsługując odpowiednie formularze na stronie (co jest
39
MySQL - wolnodostępny system zarządzania relacyjnymi bazami danych
PHP – obiektowy, skryptowy język programowania zaprojektowany do generowania stron internetowych w
czasie rzeczywistym.
40
39
prostsze i bardziej funkcjonalne).
Wprowadzenie i przeniesienia części kodu w kierunku strony internetowej ukazało nowy
kierunek w rozwoju platformy szachowej FICS.
Obok poprawionej wersji serwera FICS przez A. Tridgella (Podrozdział 2.1.2) jest to najczęściej rekomendowana opcja.
Instalacja serwera ze źródeł
Poniżej opisana jest instalacja serwera chessd na systemie Linux. Skorzystano tutaj z wersji
0.3.1. Źródła można pobrać ze strony chessd.sourceforge.net.
Niezbędne do przeprowadzenia instalacji pakiety:
• PostgreSQL lub MySQL
• libdbi >= 0.8.0
• libdbi-drivers (MySQL lub PostgreSQL)
• libxml2-dev
• libltdl3-dev
Najważniejszymi zależnościami jest libdbi (czyli API języka C) oraz biblioteki pozwalające
na łączenie się z bazą danych. Należy do tego pobrać i zainstalować sterowniki odpowiedniej
bazy danych: libdibi-drivers-mysql lub libdbi-drivers-postgres. Poniżej znajduję się sposób na
sprawdzenie, bądź zaktualizowanie, bądź zainstalowanie wymaganych pakietów dla wybranych
dystrybucji Linux:
Dla ArchLinux:
#archlinux
yaourt -S libdbi libdbi-drivers-postgresql libdbi-drivers-mysql libxml2
Dla Debiana:
sudo apt-get install libdbi0 libdbi0-dev libdb-mysql libdb-postgres libxml2-dev libxml2
Przed przystąpieniem do procesu zalecane jest sprawdzenie istnienia wymaganych i opcjonalnych narzędzi programistycznych systemu Linux:
• GCC
• pkgconfig
• libtool
• gettext
• Make
40
Gdy nie ma pliku configure lub Makefile należy go wygenerować za pośrednictwem programów pakietu autotools:
#rm -R automate.cache auxdir -R
#mkdir auxdir
libtoolize --copy --force
#uaktualnienie narzędzia (auxdir/ltmain.sh)
aclocal
#przetwarzanie pliku .ac
autoconf
#generacja pliku configure
#autoreconf
#rekonfiguracja (potrzebne gdy inna wersja)
automake
#generacja wejściowych plików, Makefile.am
automake --add-missing
#aktualizacja
Powyższa sekwencja jest także przydatna, gdy jest potrzeba zaktualizowania samych plików
wejściowych dla autotools takich jak Makefile.am, configure.ac (z czym można się spotkać we
wcześniejszych wersjach serwera).
Dalej standardowy proces instalacyjny systemu GNU/Linux:
configure
make
#z roota lub sudo
make install
Przy instalacji może pojawić się błąd związany z referencją do @MKINSTALLDIRS@ w
pliku Makefile. W takim wypadku podmienia się tę zmienną ręcznie wyrażeniem ../auxdir/mkinstalldirs, jak poniżej:
sed -s ’s/@MKINSTALLDIRS@/..\/auxdir\/mkinstalldirs/’
> po/Makefile
Konfiguracja bazy Serwer współpracuje z bazą danych więc przed uruchomieniem należy
ją skonfigurować.
Dla PostgresSQL:
su postgres
createuser chessd -D -P
createdb -O chessd chessd
psql chessd chessd < create-psql.sql
#./sql/dbinstall.sh create #ta komenda powinna zrobić to co powyżej
Dla MySQL:
./sql/dbinstall.sh -m create
W pliku chessd.conf (w katalogu /usr/local/etc lub /etc/ ) znajdują się hasła, które należy
zaktualizować.
41
Podsumowanie
Sam projekt interfejsu graficznego poprzez trudny do utrzymania, wprowadzania poprawek
oraz słabo udokumentowany kod (m.in napisany większości w języku portugalskim) jest od
2007 roku nierozwijany. Sami autorzy w dokumentacji projektu Chrysalis przyznają, że jest on
niedopracowany od strony nowo wprowadzonego interfejsu graficznego i potrzebna jest nowa
propozycja implementacji (z braku dalszych inicjatyw, taki też pozostał). Nowe dystrybucje
wraz z nowymi aplikacjami i wersjami wymaganych do uruchomienia programów takich jak
PostgreSQL41 , MySQL, Adodb i PHP5 stały się dla chessd niekompatybilne. Niemożliwe stało
się uruchomienie strony internetowej projektu na najnowszych dystrybucjach Linuksa.
Z małymi poprawkami kodu i zmianami w konfiguracji PHP oraz bibliotek AdoDB autorowi
udało się po części uruchomić stronę WWW chessd na bazie PostgreSQL7. Jednak poza widokiem startowym i kilkoma działającymi formularzami interfejs nie oferował zaprojektowanej
funkcjonalności. W celu wykorzystania elementów strony zostały opracowane poprawki umożliwiające uruchomienie w oparciu o serwer MySQL. Mimo tego nadal wiele funkcji nie działało
z racji błędu w mechanizmie obsługi danych z POST42 .
W trakcie używania serwera nie wszystkie standardowe funkcje ICS-a są dostępne, mimo
tego, że są wyświetlane w liście komend (polecenie help commands). Ukazuje się wtedy monit,
że użytkownik nie nasłuchuje na danym kanale. Dotoczy to wszystkich wersji i związane jest
to z tym, że lista komend oraz dokumentacja bazują na wcześniejszych plikach serwera FICS.
Nie wszystkie działają spod serwera z racji przeniesienia ich na interfejs WWW. Dodatkowo
pojawia się błąd przy wykonywaniu niektórych poleceń (w tym nieaktualnych) objawiający się
wyjątkiem serwera przy zwalnianiu pamięci.
2.1.4
Analiza bazy danych serwera Chessd
Tabela UserLogon
Tabela UserLogon zawiera aktualne informacje o tym kto jest zalogowany. Zawiera klucz
prywatny userloginid oraz referencję do tabeli ChessdUser - userid. Tabela składuje informacje na temat czasów logowania użytkowników oraz ich adresów IP.
41
PostgreSQL to, obok MySQL i Firebird, jeden z trzech najpopularniejszych wolnodostępnych systemów
zarządzania relacyjnymi bazami danych. Początkowo opracowywany na Uniwersytecie Kalifornijskim w Berkeley
i opublikowany pod nazwą Ingres. W miarę rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy
Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL.
42
Wprowadzone zminy są udostępnione na serwerze SVN (https://svn.3ii.eu/chess/chessd), a opracowana przez autora wersja dystrybucyjna dla systemu Debian znajduje się w załączniku lub pod adresem
http://papiewski.pl/dl/lfs. Można wykorzystać ten adres w pliku apt.sources Debiana w celu automatcznej
instalacji
42
mysql> select * from UserLogon;
+-------------+--------+---------+---------------------+-----------+---------+
| userlogonid | userid | islogin | eventtime
| fromip
| whereat |
+-------------+--------+---------+---------------------+-----------+---------+
|
1 |
1 | 1
| 2010-05-17 15:17:24 | 127.0.0.1 |
1 |
|
2 |
1 | 1
| 2010-05-17 15:32:53 | 127.0.0.1 |
1 |
|
3 |
1 | 1
| 2010-05-17 15:34:26 | 127.0.0.1 |
1 |
+----------------------------------------------------------------------------+
Wydruk 6. Tabela UserLogon - przykładowe rekordy. Źródło: opracowanie własne
Tabela UserStats
Tabela UserStats posiada identyfikator w postaci pola userstatsid. Kolejnym w kolejności polem jest userid, czyli referencja do tabeli ChessdUser określająca zarejestrowanych
użytkowników.
Relacja ChessdUser do UserStats jest jak jeden do wielu.
Statystyki znajdujące się w tabeli UserStats przedstawiają rozgrywane rodzaje meczy, określone przez pole gametypeid, które jest referencją do tabeli GameType, zawierającej 7 wpisów
identyfikujących rodzaje gry.
Tabela zawiera także kolumny mówiące o liczbie wszystkich wygranych, przegranych oraz
zremisowanych meczy (kolejno num, wins, loses, draws)
Następna kolumna rating posiada informację o rankingu Glicko - wpisie charakteryzującym
siłę gracza (Zobacz rozdział 2.3.3 na stronie 59).
43
mysql> select * from UserStats;
+-------------+--------+------------+------+------+--------+-------+--------+
| userstatsid | userid | gametypeid | num | wins | losses | draws | rating |
+-------------+--------+------------+------+------+--------+-------+--------+
|
1 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
|
2 |
2 |
5 |
10 |
3 |
6 |
1 |
1489 |
|
3 |
3 |
5 |
4 |
4 |
0 |
0 |
2018 |
|
4 |
4 |
5 |
1 |
0 |
1 |
0 |
1488 |
|
5 |
4 |
1 |
0 |
0 |
0 |
0 |
0 |
|
6 |
5 |
5 |
11 |
5 |
5 |
1 |
1765 |
+-------------+--------+------------+------+------+--------+-------+--------+
+------------+----------+------+------------+
| lasttime
| whenbest | best | sterr
|
+------------+----------+------+------------+
|
0 |
0 |
0 |
350 |
| 1280327950 |
0 |
0 | 136.896702 |
| 1280327353 |
0 |
0 | 230.284249 |
| 1280326778 |
0 |
0 | 286.811547 |
|
0 |
0 |
0 |
350 |
| 1280327950 |
0 |
0 | 135.948221 |
+------------+----------+------+------------+
Wydruk 7. Tabela UserStats - przykładowe rekordy. Źródło: opracowanie własne
GameType Tabela GameType zawiera identyfikatory rozgrywek. Na serwerze najczęstszym typem jest TYPE BLITZ, który określa mecze od 3 do 11 minut. Do tej tabeli odwołuje się
m.in pole gametypeid w tabeli UserStats.
44
mysql> select * from GameType;
+------------+------------------+
| gametypeid | name
|
+------------+------------------+
|
0 | TYPE_UNTIMED
|
|
1 | TYPE_BLITZ
|
|
2 | TYPE_STAND
|
|
3 | TYPE_NONSTANDARD |
|
4 | TYPE_WILD
|
|
5 | TYPE_LIGHT
|
|
6 | TYPE_BUGHOUSE
|
+------------+------------------+
Wydruk 9. Elementy tabeli GameType serwera Chessd. Źródło: opracowanie własne
Move
Każdy ruch identyfikowany jest poprzez swój właściwy identyfikator będący kluczem głównym tabeli, identyfikator gry - liczbą określającą pozycję w sekwencji ruchów (moveorder) oraz
kolor. Znajduje się tu także pole tekstowe w formacie FEN (ang Forsyth-Edwards Notation)
będącego częścią specyfikacji PGN (Podrozdział 2.3.1) i określającego stan figur na szachownicy.
45
mysql> describe Move;
+------------+-------------+------+-----+---------+----------------+
| Field
| Type
| Null | Key | Default | Extra
|
+------------+-------------+------+-----+---------+----------------+
| moveid
| int(11)
| NO
| PRI | NULL
| auto_increment |
| gameid
| int(11)
| YES | MUL | NULL
|
|
| movorder
| int(11)
| YES |
| NULL
|
|
| color
| int(11)
| YES |
| NULL
|
|
| fromfile
| int(11)
| YES |
| NULL
|
|
| fromrank
| int(11)
| YES |
| NULL
|
|
| tofile
| int(11)
| YES |
| NULL
|
|
| torank
| int(11)
| YES |
| NULL
|
|
| doublepawn | int(11)
| YES |
| NULL
|
|
| movestring | varchar(8) | YES |
| NULL
|
|
| algstring | varchar(8) | YES |
| NULL
|
|
| fenpos
| varchar(64) | YES |
| NULL
|
|
| attime
| int(11)
| YES |
| NULL
|
|
| tooktime
| int(11)
| YES |
| NULL
|
|
+------------+-------------+------+-----+---------+----------------+
14 rows in set (0.01 sec)
Wydruk 10. Tabela Move - opis pól
Dzięki tej tabeli możliwe jest późniejsze wyświetlenie historii rozgrywek i ich analiza.
46
mysql> select * from Move limit 5;
+--------+--------+----------+-------+----------+----------+--------+--------+
| moveid | gameid | movorder | color | fromfile | fromrank | tofile | torank |
+--------+--------+----------+-------+----------+----------+--------+--------+
|
1 |
1 |
0 |
0 |
3 |
1 |
3 |
3 |
|
2 |
1 |
1 |
128 |
1 |
6 |
1 |
5 |
|
3 |
1 |
2 |
0 |
4 |
1 |
4 |
3 |
|
4 |
1 |
3 |
128 |
3 |
6 |
3 |
4 |
|
5 |
1 |
4 |
0 |
4 |
3 |
3 |
4 |
+--------+--------+----------+-------+----------+----------+--------+--------+
+-----------------------------------------------------+-----------+----------+
| fenpos
| attime
| tooktime |
+-----------------------------------------------------+-----------+----------+
| rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b
| 893913151 |
6 |
| rnbqkbnr/p1pppppp/1p6/8/3P4/8/PPP1PPPP/RNBQKBNR w
| 893913160 |
9 |
| rnbqkbnr/p1pppppp/1p6/8/3PP3/8/PPP2PPP/RNBQKBNR b
| 893913184 |
24 |
| rnbqkbnr/p1p1pppp/1p6/3p4/3PP3/8/PPP2PPP/RNBQKBNR w | 893913190 |
6 |
| rnbqkbnr/p1p1pppp/1p6/3P4/3P4/8/PPP2PPP/RNBQKBNR b | 893913208 |
18 |
+-----------------------------------------------------+-----------+----------+
+------------+------------+-----------+
| doublepawn | movestring | algstring |
+------------+------------+-----------+
|
0 | P/d2-d4
| d4
|
|
0 | P/b7-b6
| b6
|
|
0 | P/e2-e4
| e4
|
|
0 | P/d7-d5
| d5
|
|
0 | P/e4-d5
| exd5
|
+------------+------------+-----------+
5 rows in set (0.00 sec)
Wydruk 11. Tabela Move - przykładowe elementy. Źródło: opracowanie własne
Kolumna attime jest zapisem daty i czasu w systemie POSIX. tooktime reprezentuje ile
sekund było potrzebne na dany ruch. movestring i algstring jest zapisem ruchu.
Game
Zawiera historię wszystkich rozgrywek oraz informacje z nimi powiązane.
47
mysql> describe Game;
+-----------------+-------------+------+-----+---------+----------------+
| Field
| Type
| Null | Key | Default | Extra
|
+-----------------+-------------+------+-----+---------+----------------+
| gameid
| int(11)
| NO
| PRI | NULL
| auto_increment |
| gametypeid
| int(11)
| YES | MUL | NULL
|
|
| gamestatusid
| int(11)
| YES | MUL | NULL
|
|
| gameresultid
| int(11)
| YES | MUL | NULL
|
|
| whiteplayerid
| int(11)
| YES | MUL | NULL
|
|
| blackplayerid
| int(11)
| YES | MUL | NULL
|
|
| whiterating
| int(11)
| YES |
| NULL
|
|
| blackrating
| int(11)
| YES |
| NULL
|
|
| winner
| int(11)
| YES |
| NULL
|
|
| winittime
| int(11)
| YES |
| NULL
|
|
| wincrement
| int(11)
| YES |
| NULL
|
|
| binittime
| int(11)
| YES |
| NULL
|
|
| bincrement
| int(11)
| YES |
| NULL
|
|
| timeofstart
| int(11)
| YES |
| NULL
|
|
| wtime
| int(11)
| YES |
| NULL
|
|
| btime
| int(11)
| YES |
| NULL
|
|
| rated
| int(11)
| YES |
| NULL
|
|
| private
| int(11)
| YES |
| NULL
|
|
| clockstopped
| int(11)
| YES |
| NULL
|
|
| flag_check_time | int(11)
| YES |
| NULL
|
|
| passes
| int(11)
| YES |
| NULL
|
|
| numhalfmoves
| int(11)
| YES |
| NULL
|
|
| fenstartpos
| varchar(74) | YES |
| NULL
|
|
| whiteplayername | varchar(50) | YES | MUL | NULL
|
|
| blackplayername | varchar(50) | YES | MUL | NULL
|
|
| adjudicatorname | varchar(50) | YES |
| NULL
|
|
| adjudicatorid
| int(11)
| YES | MUL | NULL
|
|
+-----------------+-------------+------+-----+---------+----------------+
27 rows in set (0.01 sec)
Wydruk 12. Tabela Game. Źródło: opracowanie własne
48
2.2
2.2.1
Użytkowanie serwera ICS
Polecenia użytkownika
Korzystanie z serwera FICS po stronie użytkownika polega na przesyłaniu odpowiednich komend protokołem telnet.Na poniższym wydruku przedstawiono spis podstawowych komend
wchodzących w skład protokołu ICS.
xboard -ics -icshost 212.191.89.82
fics% help commands
abort
accept
alias
allobservers
bell
best
bsetup
clearmessages
date
decline
examine
finger
fmessage
forward
getpi
goboard
help
history
iset
it
jsave
kibitz
logons
ltell
mailstored
match
moretime
moves
observe
oldmoves
password
pause
prefresh
promote
ptime
qtell
refresh
remote
rmatch
say
shout
showlist
simallabort
simalladjourn
simnext
simopen
addlist
assess
bname
clrsquare
draw
flag
games
handles
hrank
jkill
limits
mailmoves
messages
news
open
pending
pstat
quit
resign
seek
simabort
simgames
simpass
adjourn
backward
boards
cshout
eco
flip
getgi
hbest
inchannel
journal
llogons
mailoldmoves
mexamine
next
partner
play
ptell
rank
revert
set
simadjourn
simmatch
simprev
Anglojęzyczne informacje odnośnie każdej z nich uzyskuje się po wpisaniu help z argumentem szukanego słowa
Komenda who
Komenda who wyświetla dostępnych użytkowników zalogowanych na serwerze. Przy wyświetlaniu listy daszek (^) oznacza grających, gwiazdka (*) administratorów, a plusy (++++)
49
gości. Po lewo może znajdować się punktacja wyświetlana dla systemu blitz, czyli uwzględniająca grę od 3 do 10 minut.
fics% who
1907^stockfishDell 1783 gnuchessZ800
1292 admin(*)(TD)
1814^stockfishXeon 1575 gnuchessOtos
----:mamer(*)(TD)
++++.GuestUAVA
++++ papi
8 players displayed (of 8). (*) indicates system administrator.
Komenda match
Wpisując z wiersza poleceń chessd komendę match z parametrem będącym nazwą dostępnego użytkownika (można podać dodatkowe parametry odnośnie rodzaju gry, typie planszy,
koloru, czasu) zostanie wysłane zapytania do danego przeciwnika. Po zaakceptowaniu rozpoczyna się właściwa gra.
$fics% help match
Usage: match user [rated|unrated] [Start] [Inc] [Black_Start Black_Inc]
[White|Black] [board_category board]
fics% match stockfishDell
You accept the challenge of stockfishDell.
Creating: GuestUAVA (0) papi (0) unrated blitz 1200 120
{Game 1 (GuestUAVA vs. papi) Creating unrated blitz match.}
Rejestracja
Oryginalny serwer FICS ma rejestrację na bazie skrzynki pocztowej. Informacje na temat
tego jak wygląda proces rejestracyjny można uzyskać po zalogowaniu się jako guest do ICSa i podaniu komendy help register z poziomu linii komend. Odpowiedzią może być tekst
mówiący, że należy wysłać email na podany adres wraz z odpowiednim tematem i wiadomością
w celu dokonania rejestracji nowego użytkownika. Wiadomość email powinna zawierać przede
wszystkim unikatowy login, imię, nazwisko oraz typ gracza (komputer lub człowiek).
50
fics% help register
Registering on FICS:
Membership with FICS is completely free.
To register on FICS, simply press the ’Register’ button in the menu on
the left side of our homepage, http://www.freechess.org press the
’registration form’ button, complete the registration form and press
the ’send information’ button.
You will need to supply:
- your full name.
- a handle (the name you will use while on the server).
- your e-mail address (which may not be a free e-mail address
such as hotmail).
Your email address and name will remain confidential, and will only be
shared with the FICS administration and yourself.
Please remember:
You must enter both the First Name and your Family Name fields. The
Middle Initial is optional; do not use non-letter characters, such as
accents or hooks in the First Name and Family Name.
Type [next] to see next page.
fics%
Wydruk 13. Rejestracja na freechess.org
W przypadku serwera chessd rejestracja z założenia odbywa się za pomocą strony internetowej.
Komenda game
Polecenie game wyświetla bieżące gry. Można je obserwować wpisując observe z nazwą
gracza.
51
fics% games
1 1393 crafty
---- rybka
[ br
2
12]
3:29 -
2:29 (12-10) W: 46
1 game displayed.
fics%
2.2.2
Polecenia administratora
Standardowa wersja posiada poniższy zestaw komend dla użytkownika typu administrator (istnieją różne poziomy uprawnień):
fics% ahelp
acheckhelp
adjudicate
anews
asetadmin
asethandle
asetstd
canewse
canewst
cnewsi
hideinfo
raisedead
aconfig
admin
announce
asetblitz
asetlight
asetv
canewsf
cnewsd
cnewsp
nuke
remplayer
addcomment
adump
annunreg
asetbughouse
asetpasswd
asetwild
canewsi
cnewse
cnewst
pose
rerank
addplayer
ahelp
areload
asetemail
asetrealname
canewsd
canewsp
cnewsf
ftell
quota
showcomment
Komenda pose
Jedną z często wykorzystywanych poleceń jest komenda pose, która niejako pozoruje wykonanie komendy przez innego użytkownika. Przydatna przy wymuszaniu pewnych komend
na użytkowniku, umożliwia (zautomatyzowane) wydawania poleceń silnikom szachowym lub
innym użytkownikom.
Poniższa komenda wykonuje na użytkowniku komendę poszukiwanie chętnych do gry (rozgrywek o długości 1 min z przyrostem czasu równym 0 sekund):
pose craftyDell seek 1 0 rated
pose craftyDell seek 2 0 rated
Komenda addplayer
Komenda przyjmuje cztery parametry: nazwę użytkownika, e-mail oraz opis:
addplayer stockfishDell [email protected] 1.8GHZ 1GB
52
Komenda asetpasswd
Zmienia (dodaje) hasło dla użytkownika. Pierwszym parametrem jest nazwa istniejącego
użytkownika, drugim hasło.
asetpasswd stockfishDell password
2.2.3
Organizowanie terniejów na serwerze ICS
Mamer jest programem, za pośrednictwem którego odpowiednio uprawnieni użytkownicy serwera z listy TM (Tourney Manager) mogą organizować turnieje szachowe. Jest programem z
uprawnieniami administratora podłączonym zdalnie do serwera ICS.
Instalacja
Aby umożliwić poprawną pracę bota mamer należy wykonać następujące czynności:
• na serwerze ICS:
– dodać użytkownika mamer na serwerze,
– nadać mu hasło,
– dodać go do listy TD,
– nadać prawa administratora i wartości powyżej 10.
• w katalogu domowy mamera:
– zaktualizować hasło w pliku mamer.config,
– dodać w pliku data/managers listę użytkowników typu TM, którzy będą mogli zarządzać z pośrednictwem mamera turniejami na serwerze.
Czynności na serwerze należy wykonać z konta superadministratora (uprawnienia o wartości
100). Wymagane komendy jak poniżej:
addplayer mamer [email protected] mamer
asetpasswd mamer password
+td mamer
asetadmin mamer 10
Poniżej przykładowa sekwencja poleceń konsoli jaką należy wykonać w katalogu domowym
mamera:
echo "admin" >data/managers
sed -i ’s/ 0/ 75/g’ players/a/admin
53
Mamer po pierwszym połączeniu doda w swoim katalogu players/a/ plik admin z wyzerowanymi uprawnieniami. Dla każdego użytkownika z listy TM należy odpowiednio zmodyfikować
uprawnienia (zmiana poszczególnych kolumn na liczby z zakresu 0 100) aby umożliwić im pełen
zakres komend dla mamera.
Mamer korzysta z możliwości wykonywania poleceń administratora np. komendy pose
wymuszającą automatycznie akcję gracza w turnieju
Użytkowanie
Poniższa sekwencja serwera ICS tworzy turniej, który oznaczony został tu przez mamera
numerem jeden.
mam
mam
mam
mam
mam
create
stv 1 P 4
stv 1 R 3
stv 1 T 1
open 1
Komenda mam att (Add To Tourney) dodająca użytkownika do otwartego turnieju.
mam
mam
mam
mam
att
att
att
att
gnuchessDell 1
gnuchessDellA 1
craftyDell 1
craftyDellA 1
Dodawany użytkownik nie powinien w tym momencie brać udziału w rozgrywce z innym
graczem, dlatego przed jego dodaniem zaleca się przerwać wszystkie bieżące gry.
Każdy uczestnik turnieju ma ustawioną zmienną, informującą czy w danym turnieju się
znajduje. Powoduj to, że nie akceptowane są zaproszenia od użytkowników nie znajdujących
się w turnieju, czyli takiej ustawionej zmiennej nie posiadający.
Poniżej widnieje statystyka poszczególnych rozgrywek w przeprowadzonym przykładowym
turnieju.
54
:Tourney Players: Round
:
:
Name
:
----------------: 1 +wcrafty
: 2 +stockfish
: 3 +craftyA
: 4 +crafty
:
:
Average Rating
fics%
:Tourney Players: Round
:
:
Name
:
----------------: 1 +stockfish
: 2 +wcrafty
: 3 +craftyA
: 4 +crafty
:
:
Average Rating
:
1 of 3
Rating Score Perfrm Upset
------ ----- ------ -----[1876] 1.0 [1870] [
0]
[1898] 0.0 [
0] [
0]
[1819] 0.0 [
0] [
0]
[1470] 0.0 [1476] [
0]
Results
------+04b
*03w
*02b
-01w
1765.8
3 of 3
Rating Score Perfrm Upset
------ ----- ------ -----[1898] 3.0 [2121] [
0]
[1876] 1.5 [1729] [
0]
[1819] 1.5 [1748] [ 28]
[1470] 0.0 [1464] [
0]
Results
------+03w +02b
+04b -01w
-01b +04w
-02w -03b
+04w
=03w
=02b
-01b
1765.8
Wartość końcowa turnieju naliczana jest na podstawie wzoru (Podrozdział 2.3.2):
Perf. Rating = Avg. opp. rating + 400 * ((wins-losses)/rounds)
gdzie:
wins - to liczba reprezentująca wygrane rozgrywki w turnieju
losses - liczba z przegranymi
rounds - ilość rund
Avg. opp. rating - średnia wartość ELO zawodników
Opisy wszystkich komend użytkownika mamer można uzyskać po wpisaniu mam help z
argumentem będącym szukaną frazą.
55
chessd2%
:
:The index Help File:
:
: about
forfeit
: addchaos
help
: addtotourney
index
: announce
join
: chaos
keep
: close
listmanagers
: create
listplayers
: delete
listtourneys
: finger
listtourneyvars
: forfeit
loadedusers
:
manager_commands
manager_help
manager_level
messman
open
performance
rating
setmanagerlevel
setres
setstat
settourneyvar
showcommands
showhelpfile
shutdown
swiss
upset
user_commands
who
withdraw
Listę rozgrywanych turniejów można uzyskać pow wpisaniu mam lt
fics% mam listtourneys
(told mamer)
fics%
:mamer Notes:
: No. Rds Sty Time Inc Md Vrnt Rtng Rnge Status
Started at
Ended at
: --- --- --- ---- --- -- ---- --------- ------ -------------- -------------:
1
3
s
4
0 r
r
0-9999
open n/a
n/a
:
2
0
s
4
0 r
r
0-9999
open n/a
n/a
:
3
3
s
4
0 r
r
0-9999
done 11:25 08/09/110 11:51 08/09/110
:
2.3
2.3.1
Informacje dodatkowe
PGN
PGN jest skrótem Portable Game Notation. Jest notacją używaną do zapisywania przebiegu
gry wraz z dodatkowymi informacjami.
Na początku pliku PGN, mającego najczęściej rozszerzenie .pgn, znajduje się siedem tagów. Każdy tag rozpoczyna się i kończy nawiasem kwadratowym oraz zawiera identyfikator i
wartość.
56
[Event "F/S Return Match"]
[Site "Belgrade, Serbia Yugoslavia|JUG"]
[Date "1992.11.04"]
[Round "29"]
[White "Fischer, Robert J."]
[Black "Spassky, Boris V."]
[Result "1/2-1/2"]
Wydruk 14. Przykładowe siedem tagów formatu PGN. Znajdują się tu informacje o typie i
nazwie gry, miejscu, dacie, przeciwnikach i wyniku.
Dalej umieszczana jest tekst ruchów. Każdy ruch składa się z numeru, rodzaju piona i
przesunięcia. Przesunięcie określane jest na podstawie pozycji na szachownicy. Piony określane
są dużymi literami : P - pion, K - król, Q - hetman, R - wieża , B -goniec, N - skoczek. Istnieje
możliwość umieszczania komentarzy.
1.d3 b4 2.Nf3 d4 3.b3 e4 4.Ne1 a4 5.bxa4? [5.Nd2 and 6.Nd2-c4+ Nbcxc4 7.b3xc4
with a good game] 5...Nxa4 6.Kd2? Nc3 7.Nxc3 bxc3+ 8.Kd1 f4 9.a3 Rb6 10.a4
Ra6 11.a5 Kd5 12.Qa3 Qb5 13.Qa2+ Ke5 14.Rb1 Rxa5 15.Rxb5 Rxa2 16.Rb1 [to
prevent 16...Ra1 mate!] 16...Ra5 17.f3 Ra4 18.fxe4 c4 19.Nf3+ Kd6 20.e5+ Kd5
21.exf6Q Nc5 22.Qf6xd4+ Kc6 23.Nf3-e5 mate.
Wydruk 15. Format PGN - zapis przebiegu gry (tu druga historyczna rozgrywka pomiędzy człowiekiem i komputerem : mainframe MANIAC 1 przeciwko szachiście, Los Alamos
1956 r. )
Powyższa zmodyfikowana i dostosowana do potrzeb specyfikacja została wykorzystywana w
protokole ICS do określania ruchów w czasie gry.
2.3.2
Ranking szachowy ELO
Ranking szachowy ELO jest metodą obliczania relatywnej siły gry szachistów w punktacji
elo. Nazwa ELO pochodzi od nazwiska Arpada Elo – amerykańskiego naukowca węgierskiego
pochodzenia, którego prace ukształtowały szachowy system rankingowy oparty na naukowych
podstawach. Profesor Arpad Elo był szachistą i aktywnym członkiem Federacji Szachowej
Stanów Zjednoczonych (USCF43 ) od chwili jej założenia w 1939 roku.
Ocena siły gry szachisty jest zadaniem dość trudnym, ponieważ nie istnieją metody bezwzględnej oceny wartości poszczególnych posunięć w partii szachów. Można jedynie porównać
poziom gry dwóch szachistów, biorąc pod uwagę wynik partii pomiędzy nimi. Jeśli zawodnik
wygrał partię, należy założyć, że w tej partii zagrał na wyższym poziomie niż jego przeciwnik.
43
Federacja Szachowa Stanów Zjednoczonych (United States Chess Federation, USCF) – organizacja zarządzająca rozgrywkami szachowymi w Stanach Zjednoczonych, członek Międzynarodowej Federacji Szachowej
(FIDE).
57
Jeśli przegrał – na niższym. Remis w partii oznacza, że obaj szachiści grali na tym samym
poziomie.
USCF używała opracowanego przez Kennetha Harknessa liczbowego systemu rankingowego,
który umożliwiał szachistom śledzenie własnych postępów w porównaniu z osiągnięciami innych
szachistów. System Harknessa był prosty, lecz w niektórych okolicznościach dawał wyniki
sprzeczne z intuicyjną oceną siły gry poszczególnych szachistów. Na zamówienie USCF profesor
Elo opracował nowy system, oparty na regułach stosowanych w statystyce.
Profesor Elo zaproponował model, w którym zmiana rankingu szachisty jest bezpośrednio
zależna od rankingów przeciwników i rezultatów partii z nimi rozegranych. Porównanie przed
turniejem rankingu zawodnika i jego przeciwników powinno określić oczekiwany rezultat tego
zawodnika. Jeśli w turnieju uzyskał wynik lepszy od oczekiwanego, jego ranking powinien
wzrosnąć, jeśli gorszy – zmaleć. Najistotniejszym pytaniem w tym modelu było: jak różnica
rankingów przekłada się na oczekiwany wynik? Do tego wyliczenia Elo zaproponował potraktowanie oczekiwanego wyniku jako zmiennej losowej o rozkładzie normalnym.
Centralnym założeniem jest, że wartość średnia z rozkładu normalnego osiągnięć gracza
zmienia się w niewielkim stopniu między kolejnymi rozgrywkami. W każdej rozgrywce wartość jest mierzona na podstawie wyniku: jeśli przegrał zakładane jest, że w tym meczu gracz
cechował się niższą punktacją; jeśli wygrał to wyższą; jeśli zremisował to taką samą jak przeciwnik. Punktacja względna jest uzależniona od odchylenia standardowego związanego z ilością
rozegranych partii.
Algorytm ELO mimo dość rozwiniętej teorii cechuje prosta implementacja. W dzisiejszych
czasach nie jest to już zaleta, gdyż moc obliczeniowa znacznie wzrosła, jednak w tamtych
czasach powszechną praktyką było obliczanie wyniku ELO na kalkulatorze. Dlatego też wprowadzono rozwinięcie rankingu ELO - ranking Glicko.
Rankin ELO opiera się na poniższym równaniu:
P R = OR + 400 ×
(W ins − Loses)
G
(1)
,gdzie PR oznacza wynik określający siłę gracza (performance rating), OR - punkty przeciwnika (opponent’s rating), G - liczba rozegranych partii, Wins - liczba wygranych, Loses liczba przegranych partii.
USCF wprowadziła w życie system zaproponowany przez profesora Elo w 1960 roku. Dość
szybko okazało się, że nowy system rankingowy jest znacznie bardziej precyzyjny od dotychczas
stosowanego. W 1970 roku Międzynarodowa Federacja Szachowa (FIDE44 ) wprowadziła system
rankingowy oparty na tym samym modelu. W obu systemach nastąpiły pewne zmiany w
stosunku do oryginału, skutkiem czego rankingi liczone przez FIDE i USCF dla tych samych
szachistów znacznie się różnią. Swoje niezależne systemy rankingowe wprowadziły również
44
Międzynarodowa Federacja Szachowa (fr. Fédération Internationale des Échecs, FIDE) – utworzona 20
lipca 1924 roku w Paryżu organizacja międzynarodowa zrzeszająca narodowe związki szachowe z całego świata,
w tym Polski Związek Szachowy. Mottem FIDE jest Gens una sumus (łac. Jesteśmy jedną rodziną). Od roku
1995 na czele FIDE stoi Kirsan Ilumżynow, prezydent rosyjskiej republiki autonomicznej Kałmucji.
58
inne organizacje, np. Stowarzyszenie Zawodowych Szachistów (PCA) czy Internet Chess Club
(ICC). Wszystkie te odmiany są oparte na tym samym modelu, lecz różnią się w szczegółach.
W związku z tym określenie ranking ELO szachisty może niekiedy prowadzić do nieporozumień.
Przykładowo, amerykański arcymistrz Grigorij Kajdanow w sierpniu 2002 roku miał ranking
FIDE 2638 punktów i ranking USCF 2742 punkty (ranking USCF jest średnio o 100 punktów
wyższy od rankingu FIDE). W rozgrywkach międzynarodowych powszechnie obowiązującym
jest ranking FIDE, dlatego ranking ELO bez określenia konkretnej organizacji domyślnie odnosi
się do listy rankingowej FIDE.
Poniżej wypunktowano określenia graczy w zależności od punktów ELO stosowane przez
USCF:
• 2400 i powyżej: Senior Master
• 2200–2399 dodać 300 gier powyżej 2200: Original Life Master
• 2200–2399: National Master
• 2000–2199: Expert
• 1800–1999: Class A
• 1600–1799: Class B
• 1400–1599: Class C
• 1200–1399: Class D
• 1000–1199: Class E
• 800-999: Class F
• 600-799: Class G
• 400-599: Class H
• 200-399: Class I
• 100-200: Class J
2.3.3
Ranking szachowy Glicko
Punktacja Glicko wyznaczana jest na podstawie algorytmu i wartości początkowej. Obarczona
jest błędem odwrotnie proporcjonalnym do ilości rozgrywek. Ranking ten wykorzystywany jest
m.in przez serwer szachowy chessd (Podrozdział 2.1.3) oraz wcześniejsze wersje serwerów FICS.
Wspomniany błąd umieszczany jest w kolumnie sterr w tabeli UserStats tego serwera, a jego
początkowa wartość wynosi 350.
59
2.4
Silniki szachowe
Silniki szachowe to programy grające w szachy. Nie posiadają własnego interfejsu graficznego
(GUI), lecz komunikują się z zewnętrznymi aplikacjami, które go obsługują.
W celu oszacowania siły gry silników szachowych organizuje się pomiędzy nimi turnieje
szachowe. W ten sposób staje się możliwe nadanie każdemu z programów rankingu odpowiadającemu jego sile gry. Dodatkowy czynnik decydujący o sprawności silnika stanowi konfiguracja
sprzętowa i oprogramowanie zainstalowane na komputerze.
Poniższy rysunek przedstawia schemat podłączenia silnika za pośrednictwem jednego z protokołów UCI (ang. Universal Chess Interface) lub CECP (ang. Chess Engine Communication
Protocol) do interfejsu, który następnie może dalej komunikować się z serwerem szachowym.
Polyglot jest translatorem protokołu UCI nie do końca wspieranego przez Winboarda.
Rysunek 10. Schemat połączenia silnika szachowego. Na powyższym schemacie przedstawiony
są: gnuchess - popularny opensourcowy program szachowy; Books - książki z bazą
standardowych ruchów otwierających w szachach; UCI - Universal Chess Interface;
CECP - Chess Engine Communiction Protocol Źródło: opracowanie własne
2.4.1
Program szachowy - Crafty
Crafty jest programem szachowym napisanym przez profesora Roberta Hyatta. Program pochodzi od silnika Cray Blitz, zwycięzcy Światowych Zawodów Szachowych (WCC, ang. World
Computer Chess Championships) w roku 1982 oraz 1986.
W WCCC w roku 2004 Crafty zajął czwarte miejsce uzyskując tyle samo punktów co silnik
Fritz 8 grający na lepszym sprzęcie komputerowym. W 2007 roku w rankingu ELO przeprowadzonym przez SSDF (ang. Swedish Chess Computer Association) crafty miał 34 pozycję z
wynikiem 2608.
Silnik używa do komunikacji CECP (ang. Chess Engine Communication Protocol) i może
być używany w połączeniu z popularnymi interfejsami szachowymi takimi jak XBoard lub
Arena.
60
Program został napisany w ANSI C z dodatkowymi wstawkami asemblerowymi dla niektórych procesorów. Charakteryzuje się dużym zakresem wspieranych architektur. Kod źródłowy
jest dostępny ale program jest wyłącznie do użytku niekomercyjnego.
Jest to dzisiaj jeden z lepszych w rankingu silników szachowych. Zawiera także funkcję do
testowania procesora.
Crafty v23.3 (1 cpus)
White(1): bench
Running benchmark. . .
......
Total nodes: 500169253
Raw nodes per second: 369,696
Total elapsed time: 1352.92
Wydruk 16. Testowanie procesora programem Crafty.
Test ten ukazuje, że 50M gałęzi w drzewie ruchów zostało dokonanych w ok 370k NPS.
Crafty, podobnie jak inne silniki szachowe, pozwala na konfigurację wielu podstawowych
opcji gry. Jedną z ważniejszych jest opcja ponder pozwalająca na wykorzystywania czasu
przeciwnika
ponder on (Allows Crafty to think on your time)
hash=256m (Increases Crafty’s position hash to 256MB)
hashp=64m (Increases Crafty’s pawn hash to 64MB)
egtb (Tells Crafty to use Nalimov Endgame Tables (up to 6-Men))
cache=32m (Increases Crafty’s Endgame Table Cache to 32MB)
swindle on (Allows Crafty to try to win drawn games (according to Endgame Tables))
mt=2 (Increases Crafty’s MaxThreads to 2 for a dual CPU computer)
timebook 80 8 (Tells Crafty to think 80% longer on the first move out of book,
then decrease the time over the next 8 moves)
Wydruk 17. Spis zmiennych konfiguracyjnych programu szachowego Crafty
Test wydajności przeprowadzany przez ten program szachowy trwa około kilku minut. W
trakcie trwania testu procesor jest wykorzystywany w 100 procentach, natomiast nie ma żadnych
znaczących operacji I/O.
Przy niepoprawnie skompilowanym programie benchmark45 może pokazywać 0 NPS. Rozwiązaniem może być wtedy wtedy dodanie lub odjęcie niektórych flag kompilacyjnych.
45
Benchmark, testowanie wzorcowe jest to test wydajności systemu komputerowego: sprzętu lub oprogramowania.
61
Nie ma obecnie pakietu dystrybucyjnego na architekturę s390, a próby skompilowania tego
programu z parametrami zakończyły się jego nieprawidłowym działaniem w postaci zerowego
wyniku testy wydajności.
W trakcie kompilacji pod s390 dodane zostały flagi SMP, ustawiona architektura generic
oraz uwzględniona opcja TARGET jako system Linux.
2.4.2
Program szachowy Stockfish
Stockfish jest silnikiem na licencji GPL3 rozwijanym przez Tord Romstad, Joona Kiiski i Marco
Costalba. Wersja 1.9 wydana w 2010 roku jest dostępna w postaci kodu źródłowego C++ oraz
skompilowanych wersji dla Microsoft Windows, Linuksa 32 i 64-bitowego, Mac OS X Snow
Leopard 64 bit. Program wykorzystuje protokół UCI - do komunikacji z Xboard/Winboard
wymaga translatora tego protokołu, programu polyglot. Ma wbudowane mechanizmy wykorzystujące wieloprocesorowość i może wykorzystywać do ośmiu rdzeni procesora. Maksymalny
rozmiar tabel transpozycji (haszującyh) wynosi 8GB. Stockfish implementuje zaawansowany
algorytm przeszukiwania - alpha-beta. 46
W różnych rankingach komputerowych Stockfish 1.7.1 zajmuje drugie miejsce po komercyjnym programie Rybka
Program wywodzi się z innego projektu open source - Glaurang (nie rozwijany od 2008 r.),
a dokładniej został wydzielony z wersji 2.1.
Komenda bench
Poniższy wydruk ukazuje jakie są możliwe konfiguracje wywołania programu w celu przeprowadzenia testów:
stockfish bench
[time = 60s]
[fen positions file = default]
[time, depth, perft or node limited = time]
[timing file name = none]
Hash size określa rozmiar tablicy haszującej w MB, możliwe wartości w granicach od 4 do
1024
threads liczba wątków od 1 do 8
time=60 jest opcjonalne określa wartość parametru time,depth,perft; domyślnie jest to time
fen posistons file domyślnie default, plik do pozycji startowej
time, depth, perft, node limited różne parametry testów
46
Opracowane na podstawie http://en.wikipedia.org/wiki/Stockfish (chess)
62
timing file name plik z określonymi czasami
Przykładowo:
Test z 4MB haszu i jednym wątkiem i czasem 1 sekunda:
./stockfish bench 4 1 1
Test na 8 wątkach ograniczony czasem 1s:
./stockfish bench 1024 8 1 default 1GB hash,
Test do osiągnięcia głębokości drzewa przeszukiwania równego 30:
./stockfish bench 4 2 30 default depth
2.5
2.5.1
Opis dodatkowych wymaganych programów
Polyglot
Polyglot jest uniksowym programem umożliwiającym podłączenie silnika komunikującego się
w protokole UCI do popularnych interfejsów graficznych lub ogólnie programów korzystających
z protokołu WB (Winboard/Xboard).
Argumentem dla polyglota jest plik konfiguracyjny określający program, jego ścieżki i wspierane komendy. Najczęściej taki plik udostępniany jest ze źródłem danego silnika szachowego.
63
[PolyGlot]
EngineDir = .
EngineCommand = stockfish
Book = false
BookFile = book.bin
Log = true
LogFile = stockfish.log
Resign = true
ResignScore = 600
[Engine]
Hash = 128
Threads = 1
OwnBook = false
Book File = book.bin
Use Search Log = false
Mobility (Middle Game) = 100
Mobility (Endgame) = 100
Pawn Structure (Middle Game) = 100
Pawn Structure (Endgame) = 100
Passed Pawns (Middle Game) = 100
Wydruk 18. Przykładowy plik konfiguracyjny programu polyglot dla silnika szachowego Stockfish.
W swej funkcjonalności posiada także:
• obsługę ruchów otwierających,
• wspiera Chess960,
• ma wbudowaną konwersję PGN do formatu ruchów otwierających,
• zarządza plikami typu book.bin,
• rozwiązuje konfilkty (np. zasada 50 ruchów).
2.5.2
Winboard
WinBoard (skrót WB) jest front-endową aplikacja pozwalającą na graficzne użytkowania dowolnego serwera ICS. Jest to ta sama aplikacja co Xboard (XB), lecz skompilowana pod system
Windows. Różnice w użytkowaniu występują w podawaniu flag: po slashu dla WB oraz po
myślniku dla XB. Przy podawaniu wartość dla WB trzeba postawić znak ’=’ natomiast w XB
można dodatkowko podać wartość po spacji.
64
xboard - X graphical user interface for chess
SYNOPSIS
xboard [options]
xboard -ics -icshost hostname [options]
xboard -ncp [options]
|pxboard
cmail [options]
Opcja zp oznacza ZippyMode. Zippy jest wbudowanym w XBoarda (WinBoarda) mechanizmem nadzorującym komunikacje silnik szachowy - ICS. Sekwencja ics icshost wraz z opdpowiednimi parametrami aktywuje połączenie z serwerem.
2.5.3
Dekoder różnicy czasu serwera ICS
Jednym z krytycznych elementów serwerów szachowych jest timeseal decoder. Analizuje on
pakiety TCP i oblicza na ich podstawie bezwzględną wartość czasu pomiędzy otrzymanym
pakietem z serwera i wysłanym od klient. Program ten jest udostępniany tylko w wersji binarnej
ze względów bezpieczeństwa. Aktualnie nie ma wersji pod architekturę s390/s390x. Dlatego
też wysoce wiarygodne wyniki pomiarów nie mogą zostać osiągnięte ze względu na mogące
występować opóźnienia w transmisji. Wykaz dostępnych wersji orz informacje kontaktowe
znajdują się pod adresem www.unix-ag.uni-kl.de.
65
Rozdział 3
Implementacja
Na podstawie serwera FICS (Rozdział 2) oraz wiadomości o mainframe’ach (Rozdział 1) został
zaimplementowany serwer dla programów szachowych.
Serwer ten w obecnej formie jest dostępny pod adresem IP 212.191.89.82 na porcie 5001.
Można dzięki niemu rejestrować silniki szachowe oraz mierzyć ich wydajność.
Rysunek 11. Serwer programów szachowych. Źródło: opracowanie własne Powyżej przedstawiono aplikacje (wymagane lub opcjonalne) potrzebne do zrealizowania serwera
programów szchowych na mainframie. Są to m.in system operacyjny Linux (Debian lub Slack390), serwer WWW - Apache, parser PHP, serwer szachowy - Chessd,
oraz baza danych (MySQL lub PostrgreSQL). Proces instalacji przebiaga za pośrednictwem HMC (system operacyjny) oraz poprzez zdalne połączenie SSH w
terminalu (reszta aplikacji).
W związku, że cała platforma jest oparta na architekturze s390, aplikacje które nie były
dostępne wraz z dystrybucją Linux musiały zostać skompilowany ze źródeł. Tak było m.in w
przypadku serwera chessd (Podrozdział 2.1.3).
Należy podkreślić, że rynek aplikacji dla komputera mainframe wraz z wprowadzeniem systemu z/Linux bardzo się poszerzył, umożliwiając tym samym realizacje tego projektu. Jednak
mimo wprowadzenia pierwszej wersji systemu ok. 10 lat temu, nadal wielu deweloperów aplikacji nie w pełni wspiera architektury s390 (zobacz rozdział Dekoder różnicy czasu serwera
ICS).
66
3.1
Komputery PC jako silniki szachowe
Skonfigurowano i przygotowano do pracy pięć komputerów klasy PC, jako klientów serwera
szachowego (wraz z mocą procesora i ilością pamięci RAM):
• 2 x Compaq - 1.2 GHz, 512MB
• 2 x Dell - 1.8 GHz, 512 MB
• 1 x IBM x445 4 x 1.8 GHz, 4GB
Zainstalowano na nich systemy operacyjne Linux (Slackware, Gentoo, Debian) oraz Windows (XP). Na każdym skonfigurowano i uruchomiono silnik szachowy (Stockfish, Crafty, Gnuchess, Rybka). Wszystkie Komputery umieszczono w racku. Znajdują się w KIS na ul. Stefanowskiego. Poglądowy schemat połączeń silników wraz z serwerem na mainframie z800 przedstawia rysunek 12.
Rysunek 12. Schemat projektu serwera programów szachowych na mainframie w KIS. Po prawej
znajduje się rack z pięcioma skonfigurowanymi komputerami (programami szachowymi) podłączonymi do serwera na mainframie (po lewej stroni). Chmura reprezentuje sieć internetową łącząca zewnętrznych klientów z serwerem. Mogą to być
użytkownicy bądź silniki szachowe. Źródło: opracowanie własne
3.2
Automatyzacja zadań serwera Chessd
W związku z potrzebą automatyzacji zadań na serwerze chessd opracowano dodatkowe skrypty.
Poniżej plik telnet.sh mający za zadanie połączenia się z serwerem ICS jako użytkownik
typu admin oraz wykonania podskryptu pose-match.sh z dalszymi komendami.
Kod 1. telnet.sh
1
2
3
4
sleep 2
echo ”roboAdmin”
sleep 2
echo ” 49 g9 ”
67
5
6
7
8
sleep 2
. / pose−match . sh ‘ cat l i s t . t x t | xargs ‘
sleep 2
echo ” e x i t ”
Powyższy skrypt należy wywołać poleceniem:
./telnet.sh | telnet 212.191.89.82 5000
Dla każdego danego użytkownika wykonywana jest wbudowana komenda match rozpoczynająca grę z podanym przeciwnikiem.
Kod 2. pose-match.sh
1
2
3
4
5
#! / b i n / sh
l i s t 1 =$ ( p r i n t f ”%s \n” $@ | . / r a n d o m S h u f f l e . sh )
l i s t 2 =$ ( p r i n t f ”%s \n” $@ | . / r a n d o m S h u f f l e . sh )
f o r i i n $ l i s t 1 ; do p o s e=$ p o s e ” p o s e $ i s e e k 5 0 r a t e d ; ” ; done ;
echo $ p o s e ;
Kod 3. Skrypt roboAdmin - komenda mecz
1
2
3
4
5
6
7
8
#! / b i n / sh
l i s t =$@
for i in $ l i s t ;
do f o r j i n $ l i s t ;
do echo ” p o s e $ i match $ j 1 0 r a t e d ” ;
sleep 1 ;
done ;
done ;
Lista podana jako pierwszy parametr jest plikiem tekstowym zawierającym oddzielone znakiem końca linii nazwy silników szachowych.
W przypadku gdy silnik szachowy jest administrowany z poziomu strony internetowej na serwerze należy sprawdzić, czy dozwolone jest z poziomu PHP operowania na plikach tekstowych,
gdyż często funkcja ta w związku z bezpieczeństwem jest zablokowana.
Alternatywnym sposobem pobierania listy jest komenda SQL wykonywana za pośrednictwem konsolowego klienta bazy danych (tylko dla serwera chessd ) np. jak mysql:
mysql -s chessd -e "select username from ChessdList where action=’seek’"
Przełącznik -s usuwa ramki i separuje kolumny tabulatorem, chessd jest tu bazą danych,
a komenda po przełączniku -e zwraca nazwy użytkowników z tabeli ChessdList spełniający
warunek (action) odpowiedni dla zadanej listy (tu seek, czyli użytkowników, którzy zadeklarowali grę z każdym chętnym do gry).
Inicjacja całej sekwencji wykonywana jest w pętli while. Uwzględniono wartość pauzy
(komenda sleep) tu średnio równej długości najkrótszego pojedynku, czyli ok. 60 sekund, w
celu zapewnienia optymalnego czasu ponownego logowania.
while true; do ./telnet.sh | telnet localhost 5000; sleep 60; done;
68
3.3
Implementacja skryptów dla silników szachowych
Skrypt crafty.sh uruchamia silnik z odpowiednimi parametrami. Crafty potrafi się bezpośrednio
komunikować z Xboardem, więc można to wykorzystać w celu łączenia się za jego pośrednictwem
z ICS-em. Skrypt startowy jest podobny do przedstawionego niżej sryptu startowego dla silnika
Stockfish. Ten drugi wymaga programu polyglot (linijka 11), gdyż komunikuje się protokołem
UCI (9). Linijki 17 i 18 poniższego skryptu zapewniają, że w przypadku jakiegoś błędnego
ruchu lub wyjątku program nie będzie wyświetlał informacji blokujących dalszą aktywność.
Linijka 14 wskazuje na plik z dwoma linijkami zawierającymi login i hasło (znak końca linii
pliku musi być w formacie unix).
Kod 4. stockfish.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
while true ;
do
xboard
−s i z e small
−zp
−i c s
−i c s h o s t 2 1 2 . 1 9 1 . 8 9 . 8 2
−a u t o f l a g
−fUCI
−f d ” s t o c k f i s h −171− l i n u x / s r c / ”
−f c p ” p o l y g l o t s t o c k f i s h . i n i ”
−z i p p y P l a y True
−zippyGameEnd ” say t h a k s ; ; s e e k 1 0 r a t e d ; ”
−i c s l o g o n . s t o c k f i s h
−u s e P o l y g l o t B o o k true
−i c s h e l p e r ” t i m e s e a l ”
−popupMoveErrors f a l s e
−popupExitMessage f a l s e
;
sleep 10;
done ;
Analogiczny jak dla systemu Linuks skrypt wsadowy dla systemu Windows (tu dla programu
gnuchess) przedstawiono poniżej:
Kod 5. gnuchess.bat
1
2
3
4
5
6
7
8
9
” c : \ Program F i l e s \WinBoard − 4 . 2 . 7 \ winboard . exe ”
/ zp / i c s
/ i c s h o s t =212.191.89.82
/zippyGameEnd=” say thanks ! ; s e e k 1 0 ; s e e k 2 0 ; s e e k 5 0 ; ”
/ f c p=GNUChess . exe
/ f d=”C: \ Program F i l e s \WinBoard − 4 . 2 . 7 ”
/ i c s l o g o n=” c : \ Documents and S e t t i n g s \ e n g i n e \My Documents \ g n u c h e s s . t x t ”
/ popupExitMessage=f a l s e
/ i c s h e l p e r=t i m e s e a l
69
Przydatną rzeczą jest uruchomienie silnika pod Windowsem wykorzystując komende while.
Rozwiązaniem może być tu biblioteka cygwin.dll oraz pakiet BASH taką komende zawierający.
Dzięki temu można uruchomić skrypt .bat następująco:
while true; do gnuchess.bat; sleep 10; done;
Pętla zapewnia, w wypadku jakiegoś czynnika rozłączającego połącznie, automatyczne wznowienie pracy.
3.4
Implementacja strony internetowej serwera
Strona internetowa jest wymaganym komponentem do działania serwera chessd (Podrozdział 2.1.3).
Dostępne, gotowe rozwiązanie nie spełniało funkcjonalności, a dodatkowo pojawiła się potrzeba
umieszczenia informacji odnośnie projektu serwera szachowego. W związku z tym opracowano
i zaimplementowano taką stronę przy pomocy nadzędzia Zend.
3.4.1
Projekt strony w Zend Framework
Zend jest szkieletem zawierającym narzędzia, zdefiniowane struktury, czy komponenty wspomagająca tworzenie, rozwój i testowanie aplikacji. Wykorzystuje (stosowany sukcesywnie także w
innych frameworkach) wzorzec projektowy MVC (ang. Model-View-Controller). Model-ViewController zakłada podział aplikacji na trzy główne warstwy:
• Model - jest pewną reprezentacją problemu bądź logiki aplikacji.
• Widok - opisuje, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika.
Może składać się z podwidoków odpowiedzialnych za mniejsze części interfejsu.
• Kontroler - przyjmuje dane wejściowe od użytkownika i reaguje na jego poczynania, zarządzając aktualizacje modelu oraz odświeżenie widoków.
W przypadku ZF model oznacza bazę danych i wszystkie zagadnienia z nią związane, widok
jest warstwą prezentacyjną skupiającą przede wszystkim kod HTML, a kontroler zarządza
zapytaniami użytkownika i zwraca odpowiedni model do odpowiedniego widoku.
Widok jest obiektem wykorzystującym plik o nazwie będącej nazwą funkcji kontrolera. Plik
ten znajduję się w podkatalogu views/scripts o nazwie takiej samej jak nazwa kontrolera (zob.
Kod 3.5.2).
Jako jeden z elementów narzucających pewną jednolitą strukturę wprowadzono mechanizm
modułowy. Moduł to podaplikacja ze standardową strukturą katalogów taką jak w głównej
aplikacji. Wszystkie pliki modułu znajdują się w appication/modules w katalogu z odpowiednią
nazwą. Tym samym moduł umożliwia wygodne dodawanie lub usuwanie do innego projektu
poprzez zwyczajne skopiowanie lub usunięcie katalogu. Wszelka potrzebna konfiguracja jest
umieszczana w pliku Bootstrap.php (podobnie jak w aplikacji głównej).
70
Jednym z elementów globalnych dla całej aplikacji jest plugin. Jest to klasa (obiekt) wykonywujący pewne krytyczne czynności jeszcze przed wykonaniem funkcji kontrolera. Przykładowo
plugin rozszerzający standardową klasę Zend Acl umożliwia kontrolowanie poziomu dostępu.
Inne zaawansowane funkcje to np. kontrola trasy - routing, pozwalająca na ustawienie
własnych reguł adresowanie poszczególnych akcji kontrolera.
Do jednych z podstawowych i często wykorzystywanych należy klasa Zend Form, która
znacznie upraszcza budowanie formularzy i ich obsługę.
Cały framework zawiera ciągle rosnącą liczbę użytecznych klas (np. XML Parser, AJAX,
Lucene Search) będących zbiorami (wrappers) na istniejące podstawowe funkcje lub powszechne
rozwiązania PHP.
Wymagane i opcjonalne klasy przedstawiono na rysunku 13.
Rysunek 13. Klasy PHP narzędzia Zend. Jest tu przedstawiona droga (Zend Route) od zapytania do uzyskania odpowiedniego widoku. Na początku są aktywowane kontrolery
główne, następnie kontroler odpowiedzialny za odpowiednią akcję. Przy konstruowaniu widoku może być wykorzystany zestaw dodatkowych klas i komponentów.
Biblioteka komponentów składa się z różnorakich klas odpowiedzialnych np. za
generowanie danych, współpracę z bazą danych, sesję użytkownika, czy inne odpowiedzialne za wiadomości e-mail lub powiadomienia RSS. Źródło: na podstawie
informacji na stronie zendframework.com.
Uzasadnienie wyboru
Programiści PHP dość długo wykorzystywali strukturalny model programowania jaki oferuje ten skryptowy język. Mimo tego, że w wersji 3 i 4 PHP istniało pojęcie klasy i obiektu
to było traktowane jako zwykły typ (przez co stosowanie klas było mało wydajne - nie było
71
referencji). Wraz z ciągle rozwijającymi się wersjami PHP została dodana możliwość wydajniejszego programowania obiektowego. Od wersji 5 język PHP oferuję szerszy i wydajniejszy
zakres wsparcia dla obiektowości.
Biorąc pod uwagę wcześniejsze innowacyjne i sukcesywnie wprowadzone techniki programowania oparte o obiektową strukturę danych (np. w języku Java, takie jak mapowanie obiektoworelacyjne47 ), możliwa stała się ich implementacja także w PHP. Dzięki odpowiednim zabiegom
programistycznym uzyskać można prostą i intuicyjną reprezentację klasy odzwierciedlającą np.
tabelę bazy danych. Takie m.in rozwiązanie zostało zaimplementowane w warstwie modelu w
Zend Framework, umożliwiając łatwe operowanie tablicami bazy danych (informując tym samym o przeznaczeniu i ułatwiając same mechanizmy współpracy z bazą). Ten same zasady
zostały wykorzystany do budowy warstwy kontrolera oraz widoku.
Uproszczenie samego procesu zarządzania projektem (a zwłaszcza bardzo rozbudowanego)
stanowi istotę ZF. Dodatkowo sprawia, że raz napisany kod może być łatwo wykorzystany w
następnych rozwiązaniach lub łatwo modyfikowany przez osoby trzecie. Zend wprowadza też
zespół reguł i dobrych nawyków dotyczących nazewnictwa klas, czy dokumentacji.
Szkieletu projektu
Przed rozpoczęciem prazy z Zend Framework należy pobrać go ze strony zendframework.com.
Minimalny pakiet (ok. 4MB) zawiera wszystkie potrzebne klasy PHP. Po rozpakowaniu można
przystąpić do utworzenia nowego projektu. W pierwszej kolejności należy umieścić katalog bin
w zmiennej $PATH.
W katalogu tym znajduję się skrypt BASH zf.sh wykonujący czynności automatycznego
tworzenia i zarządzania projektem. Bazuje on na klasie PHP znajdującej się w pliku zf.php
w tym samym katalogu. Wymaga to w związku z tym posiadania parsera tego języka na
komputerze.
Poniżej umieszczona jest lista zmiennych, dodanych dla potrzeb organizacji pracy:
PROJECT_NAME=skel
ZEND_PATH=/path/to/zend
NEW_PROJECT=/path/to/project
ZEND_LIB=$ZEND_PATH/library
ZEND_BIN=$ZEND_PATH/bin
PATH=$PATH:$ZEND_BIN
ZEND PATH to zmienna do rozpakowanego pliku z Zend Framework. Zmienna ZEND BIN
wskazuje na położenie skryptu wykonywalnego zf.sh. Kolejna linijka umieszcza w zmiennej
PATH poprzednio zdefiniowaną lokalizację. Umożliwia to wykonanie skryptu podając jego
nazwę z dowolnego miejsca nowego projektu.
Poniżej znajduję się sekwencja inicjowania projektu, pozwalająca na utworzenie wymaganego drzewa katalogów i ustawienie odpowiednich linków do katalogów z biblioteką Zend.
47
Mapowanie obiektowo-relacyjne (ang. Object-Relational Mapping ORM) - sposób odwzorowania obiektowej
architektury systemu informatycznego na bazę danych (lub inny element systemu) o relacyjnym charakterze.
72
mkdir -p $NEW_PROJECT && cd $NEW_PROJECT
zf create project $PROJECT_NAME
ln -s $ZEND_LIB/Zend library/Zend
zf create layout
Pierwsza linijka oznacza przejście do nowo dodanego katalogu z projektem, który jest określony obraną dowolnie wcześniej zmienną NEW PROJECT. W drugiej linijce znajduję się komenda
wywołująca program zf (alias do zf.php) z parametrami, które określają polecenie dodania
nowego projektu o nazwie $PROJECT NAME.
Poniżej praca ze skryptem zf.sh ukazująca podstawowe komendy do zarządzania modelem,
widokiem oraz kontrolerem.
$ zf create model Person
Creating a model at /home/papi/web/zend/new/application/models/Person.php
Updating project profile ’/home/papi/web/zend/new/.zfproject.xml’
[papi ~/web/zend/new]$ zf create controller Person
Creating a controller at
/home/papi/web/zend/new/application/controllers/PersonController.php
Creating an index action method in controller Person
Creating a view script for the index action method at
/home/papi/web/zend/new/application/views/scripts/person/index.phtml
Creating a controller test file at
/home/papi/web/zend/new/tests/application/controllers/PersonControllerTest.php
Updating project profile ’/home/papi/web/zend/new/.zfproject.xml’
Wydruk 19. Przykład zarządzania projektem Zend Framework
Pierwsza komenda dodaje model o nazwie Person. Automatycznie dodawane są odpowiednie katalogi oraz pliki. Nazwa kontrolera przyjmuję postać PersonController. Zaktualizowany
zostaje wewnętrzny plik konfiguracyjny projektu oraz dodatkowo dodane są klasy wykorzystywane do ewentualnego testowania.
Konfiguracja serwera WWW
Po umieszczeniu projektu na serwerze zalecane jest dodatkowe dodanie wpisu wirtualnego
adresu (Virtual Host). W przypadku Apache’a należy dodać do odpowiedniego pliku konfiguracyjnego serwera sekwencję przypisującą wybranemu adresowi WWW odpowiedni katalog
projektu.
Kod 6. apache.conf
1
2
<V i r t u a l H o s t ∗:80 >
ServerName zend . l o c a l h o s t
73
3
DocumentRoot / path / t o / p r o j e c t
4
5
SetEnv APPLICATION ENV ” development ”
6
7
8
9
10
11
12
13
<D i r e c t o r y / path / t o / p r o j e c t / p u b l i c >
D i r e c t o r y I n d e x i n d e x . php
AllowOverride All
Order a l l o w , deny
Allow from a l l
</D i r e c t o r y >
</V i r t u a l H o s t >
W zależności od wersji systemu lub dystrybucji najbezpieczniej umieścić ten wpis w głównym pliku o nazwie apache.conf lub httpd.conf, rezydującym najczęściej w katalogu /etc/apache2 lub /etc/httpd.conf. Szczegółowy opis znaleźć można w dokumentacji danej dystrybucji
lub wersji serwera.
W ramach testów w przypadku serwera znajdującego się na np. na komputerze domowym
można przypisać adres np. zend.localhost i ustawić lokalną translację nazw DNS (ang. Domain
Name System) na adres 127.0.0.1, co pod systemem Linux reprezentowane może być linijką
127.0.0.1 localhost zend.localhost w pliku /etc/hosts.
Po zresetowaniu serwera, w przeglądarce adres http://zend.localhost/person/index wywoła
domyślną akcję index na kontrolerze Person. Przy poprawnej konfiguracji powinien ukazać się
standardowy widok znajdujący się w person/index.phtml :
View script for controller Person and script/action name index
3.4.2
Analiza bazy danych
Specyfikacja bazy danych nie była podana wraz z dokumentacją projektu chessd. Całość analizy
jest oparta na badaniu poszczególnych pól oraz przykładowych wpisów. Zostało to wykorzystane przy programowaniu strony internetowej. Większość operacji wykonuję się właśnie na
bazie danych. (Podrozdział 2.1.4)
3.4.3
Opracowany moduł chessd
Ten zaimplementowany moduł obsługuje podstawowe czynności na bazie danych serwera chessd
(Podrozdział 2.1.3). Wykorzystuje strukturę narzuconą w Zend Framework (Podrozdział 3.4.1).
Służy pośrednio, dzięki opracowanym skryptom (Podrozdział 3.2), do komunikacji z serwerem
i jego zarządzania.
Serwer chessd jest programem napisanym w języku C wykorzystującym połączenie TCP
oraz bazę danych. Każda tabela tego serwera została tu zamodelowana w postaci oddzielnej
klasy PHP. Wykorzystano w tym celu dziedziczenie po klasie Zend Db Abstract znajdującej
się w bibliotece Zend.
74
Opis klasy modelu użytkownika
Zmienna name określa tabele z bazy. Klasa jest dziedziczy po Zend Db Table Abstract i
dzięki temu można używać takich funkcji jak:
• find - wyszukiwanie,
• save - zapisywanie,
• insert - dodawania danych,
• select - specyfikowanie rekordów,
• fetchAll - pobierania określonych rekordów.
Określone jest tu także połączenie z bazą, będące obiektem Zend Db w zmiennej o nazwie
db.
W linijkach 7-13 jest inicjowany obiekt Zend Db dla oddzielnego połączenia z bazą danych
serwera chessd. Funkcja w linijce 15 ma za zadanie aktualizowanie wpisów użytkownika serwera
ICS. Dane POST są uzyskiwane dzięki formularzowi wykorzystującemu klasę Zend Form. Jeśli
użytkownik został odnaleziony (17) to zwracany jest obiekt Zend Db Table Row reprezentujący
znaleziony wiersz tabeli. Następnie modyfikowane są zmienne tego obiektu na podstawie zweryfikowanych wcześniej danych POST (20, 22, 25, 29). Funkcja save tego obiektu zapisuje
zmiany do bazy (22). W przypadku jakichkolwiek nieprzewidzianych problemów zgłaszany jest
wyjątek (35).
Kod 7. Chessd Model User
1
2
3
<?php
c l a s s Chessd Model User e x t e n d s Z e n d D b T a b l e A b s t r a c t
{
4
5
p r o t e c t e d $ name=’ ChessdUser ’ ;
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function s e t u p D a t a b a s e A d a p t e r ( ) {
$ t h i s −> db = Zend Db : : f a c t o r y ( ’ Pdo Mysql ’ , a r r a y (
’ host ’
=> ’ l o c a l h o s t ’ ,
’ username ’ => ’ c h e s s d ’ ,
’ password ’ => ’ ∗ ∗ ∗ ∗ ∗ ∗ ’ ,
’ dbname ’
=> ’ c h e s s d ’
));
}
p u b l i c function updateUser2 ( $u )
{
$rowUser=$ t h i s −>f i n d ( $u [ ’ id ’ ] )−>c u r r e n t ( ) ;
i f ( $rowUser ) {
i f ( i s s e t ( $u [ ’ username ’ ] ) && ! empty ( $u [ ’ username ’ ] ) )
$rowUser−>username=$u [ ’ username ’ ] ;
i f ( i s s e t ( $u [ ’ f u l l n a m e ’ ] ) && ! empty ( $u [ ’ f u l l n a m e ’ ] ) )
75
$rowUser−>f u l l n a m e=$u [ ’ f u l l n a m e ’ ] ;
22
23
i f ( i s s e t ( $u [ ’ e m a i l a d d r e s s ’ ] ) && ! empty ( $u [ ’ e m a i l a d d r e s s ’ ] ) )
$rowUser−>e m a i l a d d r e s s=$u [ ’ e m a i l a d d r e s s ’ ] ;
e l s e i f ( i s s e t ( $u [ ’ email ’ ] ) && ! empty ( $u [ ’ email ’ ] ) )
$rowUser−>e m a i l a d d r e s s=$u [ ’ email ’ ] ;
i f ( i s s e t ( $u [ ’ d e l e t e d ’ ] ) && ! empty ( $u [ ’ d e l e t e d ’ ] ) )
$rowUser−>d e l e t e d=$u [ ’ d e l e t e d ’ ] ;
else
$rowUser−>d e l e t e d = ’ 0 ’ ;
$rowUser−>s a v e ( ) ;
return $rowUser ;
} else {
throw new Z e nd E x c e pt i o n ( ’ Error ’ ) ;
}
24
25
26
27
28
29
30
31
32
33
34
35
36
37
}
38
39
}
Opis klasy formularza użytkownika
Jak pokazuje Kod 8, formularz zawiera elementy (Zend Form Element) określone nazwą i
typem (linijki 8, 12, 16, 23, 28). Przykładowo w linijce 10 typem jest text a nazwą username.
Typy wprost przekładają się na podstawowe elemety HTML formularza: pole tekstowe, wiersz,
pole ukryte, lista itp. Każdy element jest konstruowany funkcją createElement a następnie
dodawany do obiektu funkcją addElement. Klasa zawiera wbudowane mechanizmy ułatwiające
sprawdzanie, filtrowanie i wyświetlanie. Można określić czy dane pole jest wymagane funkcją
setRequired. W przypadku jakichkolwiek błędów zostaną zwrócone zdefiniowane komunikaty.
Obiekt może być wyświetlony w postaci gotowego formularza przy użyciu podstawowych funkcji
print lub echo (np. print new Chessd Form User()).
Kod 8. Chessd Form User
1
2
3
<?php
c l a s s Chessd Form User e x t e n d s Zend Form
{
4
5
6
7
8
9
10
p u b l i c function i n i t ( )
{
$ t h i s −>setmethod ( ’ post ’ ) ;
$ i d=$ t h i s −>c r e a t e e l e m e n t ( ’ hidden ’ , ’ id ’ ) ;
$id−>s e t d e c o r a t o r s ( a r r a y ( ’ ViewHelper ’ ) ) ;
$ t h i s −>addelement ( $ i d ) ;
11
12
13
14
$ i d=$ t h i s −>c r e a t e e l e m e n t ( ’ hidden ’ , ’ u s e r i d ’ ) ;
$id−>s e t d e c o r a t o r s ( a r r a y ( ’ ViewHelper ’ ) ) ;
$ t h i s −>addelement ( $ i d ) ;
76
15
$username=$ t h i s −>c r e a t e e l e m e n t ( ’ t e x t ’ , ’ username ’ ) ;
$username−>s e t l a b e l ( ’ nazwa uzytkownika : ’ ) ;
$username−>s e t r e q u i r e d ( true ) ;
$username−>a d d f i l t e r ( ’ S t r i p T a g s ’ ) ;
$username−>a d d e r r o r m e s s a g e ( ’ wymagana j e s t nazwa uzytkownika ! ’ ) ;
$ t h i s −>addelement ( $username ) ;
16
17
18
19
20
21
22
$password=$ t h i s −>c r e a t e e l e m e n t ( ’ password ’ , ’ password ’ ) ;
$password−>s e t l a b e l ( ’ h a s l o : ’ ) ;
$password−>s e t r e q u i r e d ( true ) ;
$ t h i s −>addelement ( $password ) ;
23
24
25
26
27
$ e m a i l=$ t h i s −>c r e a t e e l e m e n t ( ’ t e x t ’ , ’ email ’ ) ;
$email −>s e t l a b e l ( ’ e m a i l : ’ ) ;
$email −>s e t r e q u i r e d ( f a l s e ) ;
$email −>a d d f i l t e r ( ’ S t r i p T a g s ’ ) ;
$email −>a d d v a l i d a t o r ( new Z e n d V a l i d a t e E m a i l A d d r e s s ( ) ) ;
$email −>s e t r e q u i r e d ( true ) ;
$ t h i s −>addelement ( $ e m a i l ) ;
28
29
30
31
32
33
34
35
$ f u l l n a m e=$ t h i s −>c r e a t e e l e m e n t ( ’ t e x t ’ , ’ f u l l n a m e ’ ) ;
$ f u l l n a m e −>s e t l a b e l ( ’ Parametry s i l n i k a : ’ ) ;
$ f u l l n a m e −>s e t r e q u i r e d ( true ) ;
$ f u l l n a m e −>a d d f i l t e r ( ’ s t r i p t a g s ’ ) ;
$ t h i s −>addelement ( $ f u l l n a m e ) ;
$ t h i s −>getElement ( ’ f u l l n a m e ’ )−>s e t R e q u i r e d ( true ) ;
36
37
38
39
40
41
42
$prompt=$ t h i s −>c r e a t e E l e m e n t ( ’ t e x t ’ , ’ prompt ’ ) ;
$prompt−>s e t L a b e l ( ’ Prompt ’ ) ;
$ t h i s −>addElement ( $prompt ) ;
43
44
45
46
$submit=$ t h i s −>addelement ( ’ submit ’ , ’ submit ’ , a r r a y ( ’ l a b e l ’=>’ z a t w i e r d z
’) ) ;
47
48
}
49
50
51
52
53
54
55
56
p u b l i c function toPasswordForm ( ) {
$ t h i s −>removeElement ( ’ f u l l n a m e ’ ) ;
$ t h i s −>removeElement ( ’ e m a i l a d d r e s s ’ ) ;
$ t h i s −>removeElement ( ’ username ’ ) ;
$ t h i s −>removeElement ( ’ prompt ’ ) ;
$ t h i s −>removeElement ( ’ email ’ ) ;
}
57
58
59
60
61
62
p u b l i c function addActivetionCheckbox ( )
{
$ a c t i v e=$ t h i s −>c r e a t e E l e m e n t ( ’ checkbox ’ , ’ a c t i v a t e ’ ) ;
$ a c t i v e −>s e t L a b e l ( ’ Aktywny ’ ) ;
$ t h i s −>addElement ( $ a c t i v e ) ;
77
}
63
64
65
66
}
Opis klasy kontrolera użytkownika
Opracowana klasa wykonuje wszystkie operacje związane z logiką użytkownika serwera
chessd (przykładową komendę ukazuje Kod 9).
Kod 9. updateAction
1
2
3
p u b l i c function updateAction ( )
{
// a c t i o n body
4
5
$userForm=new Chessd Form User ( ) ;
$userForm−>removeElement ( ’ password ’ ) ;
$userModel=new Chessd Model User ( ) ;
6
7
8
9
i f ( $ t h i s −> r e q u e s t −>i s P o s t ( ) ) {
i f ( $userForm−>i s V a l i d ( $ POST ) ) {
10
11
12
$ i d e n t=Zend Auth : : g e t I n s t a n c e ( )−>g e t I d e n t i t y ( ) ;
$userModel−>updateUser2 ( a r r a y (
’ id ’=>$userForm−>g e t V a l u e ( ’ id ’ ) ,
’ u s e r i d ’=> $ i d e n t −>id ,
’ username ’=>$userForm−>g e t V a l u e ( ’ username ’ ) ,
’ e m a i l a d d r e s s ’=>$userForm−>g e t V a l u e ( ’ email ’ ) ,
’ f u l l n a m e ’=>$userForm−>g e t V a l u e ( ’ f u l l n a m e ’ ) ,
));
return $ t h i s −> f o r w a r d ( ’ m y l i s t ’ ) ;
13
14
15
16
17
18
19
20
21
}
} else {
$ i d=$ t h i s −> r e q u e s t −>getParam ( ’ id ’ ) ;
$ c u r r e n t U s e r=$userModel−>f i n d ( $ i d )−>c u r r e n t ( ) ;
22
23
24
25
26
$userForm−>p o p u l a t e ( $ c u r r e n t U s e r −>toArray ( ) ) ;
$userForm−>getElement ( ’ email ’ )
−>s e t V a l u e ( $ c u r r e n t U s e r −>e m a i l a d d r e s s ) ;
$userForm−>getElement ( ’ id ’ )
−>s e t V a l u e ( $ c u r r e n t U s e r −>c h e s s d u s e r i d ) ;
27
28
29
30
31
32
}
$userForm−>s e t A c t i o n ( ’ / c h e s s d / u s e r / update ’ ) ;
$ t h i s −>view−>form=$userForm ;
33
34
35
36
}
78
W linijce 6 konstruowany jest nowy obiekt dziedziczący po Zend Form. Obiekt reprezentuje
formularz wraz z funkcjami i danymi z nim związanymi. Np. formularz ten posiada funkcję
sprawdzającą obecność danych POST (10) oraz ich poprawność (11). Wszystkie dane z obiektu
Chessd Form User są pobierane za pomocą metody getValue.
W linijce (7) metody updateUser kontrolera User Controller modułu Chessd, jest zwracany obiekt Chessd Model User dziedziczący po Zend Db Table Abstract. Klasa abstrakcyjna
dostarcza funkcje do wybierania i zapisywania danych z tabeli. W linijce 14 wykorzystana jest
napisana funkcja oparta o te metody i zapisująca zaktualizowany rekord w bazie.
W linijce 25 przekazywane są aktualne dane do formularza, wykorzystując do tego funkcję:
toArray oraz populate. Dane, tu formularz, są przekazywane dalej do widoku, który jest
zawsze identyfikowany jako zmienna view (34).
Poniżej plik renderujący dla danego widoku
Kod 10. Plik views/scripts/update.phtml
1
2
3
4
5
<h2>Edycja uzytkownika FICS</h2>
<?php echo $ t h i s −>form ; ?>
<p>
<a h r e f= ’ / c h e s s d / u s e r / password / i d /<?php echo $ t h i s −>form−>getElement ( ’ i d ’ )−>
g e t V a l u e ( ) ;? > ’>Zmien h a s l o </a>
</p>
Z reguły widok wyświetla dane z odpowiedniego kontrolera, tu formularz i link do następnego
kontrolera.
3.4.4
Dodatkowe funkcje
Strona oferuje także funkcje informacyjne związane z projektem. Posiada także wbudowany
system CMS (ang. Content Management System) co pozwala na edycję treści. Wygląd strony
(stylistyka) oraz rozkład menu i dodatkowych funkcji użytkownika ( tu administratora) ukazuje
poniższy rysunek:
79
Rysunek 14. Gotowy projekt strony internetowej wykorzystujący opracowany modul chessd.
W menu głownym są odnośniki do spisu stron, formularza rejestracyjnego, czy
formularza zgłaszania błędów. Funkcjonalność modułu chessd jest reprezentowana
przez ’Menu Serwera’.
80
3.5
3.5.1
Testy
Test przy pomocy serwera szachowego
Idea realizacji platformy dla testowania programów szachowych na mainframie była przede
wszystkim dyktowana praktycznym wykorzystaniem oferowanej technologii mainframe. Charakterystyka serwera mającego takie usługi realizować skupia się przede wszystkim na liczbie
obsługiwanych klientów co w terminologii IBM przekłada się na MSU - milionach usług na
godzinę.
Typowy serwer FICS może obsługiwać tysiące podłączonych klientów. Poszczególny klient
wysyła małe porcje danych w postaci komendy lub sekwencji ruchów, z częstotliwością średnio
kilku sekund.
Serwer programów szachowych jest zmodyfikowaną wersją FICS-a opierającego się na tymże
kodzie. Program szachowy może wysyłać dane w ułamku sekundy z faktu, że zamiast człowieka
jest postawiony o wiele szybszy komputer. Uwidacznia się to np. w potyczkach jednominutowych gdzie szybkość podjętej decyzji ma podstawowy wpływ na wynik gry. Dodatkowo program
jest podłączony na stałe. W ustawieniach na stronie można dodać opcję ’Graj ze wszystkimi’
co sprawia, że ciągle będzie uczestniczył w rozgrywkach.
Oprócz zdalnie podłączonych graczy na mainframie można wewnętrznie podłączyć zadaną
liczbę silników szachowych gotowych do gry z przeciwnikiem. Poszczególny grający program
obciąża wydzielony procesor w 100 procentach a w trybie ponder oblicza własny ruch nawet w
czasie przeznaczonym dla oponenta. Stwarza to warunki testowe dla sprawdzania jak przykładowo wydajność serwera zachowuje się przy 100% wykorzystaniu procesorów.
Na innym wydzielonych zasobach sprzętu (LPAR) rezydują pojedynczo znane wersje popularnych silników szachowych w celu pomiaru wydajności z komplementarnymi programami na
maszynach przeciwnych.
Z faktu jednak braku wymaganego programu pod tę architekturę (Podrozdział 2.5.3) powyższe przedstawia propozycję do ewentualnej implementacji. Testy zostały wykonane w oparciu o
skompilowany silnik szachowy z wbudowanym mechanizmem do testowania (Podrozdział 2.4.2).
3.5.2
Testy procesora przy pomocy programu szachowego
System Linux wykrywa typ procesora jako SMP. Na każdym wydzielonym LPAR-rze jest dostęp do całkowitej mocy obliczeniowej procesora (gwarantują to mechanizmy wirtualizacji procesora). W testach dało się zauważyć że dwa, trzy równoległe pomiary wartości procesora na
poszczególnych LPAR-ach skutkowały analogicznie zmniejszeniem mocy procesora dwu, trzykrotnie.
Testy zostały wykonane przy pomocy silnika szachowego stockfish. Został skompilowany
pod architekturę s390 z flagą generic-64. Wykorzystano wbudowaną komendę bench tego
silnika. Podrozdział 2.4.2 zawiera opis kompilacji, komend i samego sposobu użytkowania tego
programu.
81
Dla potrzeb zautomatyzowania samego procesu przeprowadzania testów został opracowany
skrypt:
Kod 11. stockbench.sh
1
#! / b i n / b a s h
2
3
4
5
6
#f u n c t i o n f o r CPU u s a g e
function cpuusage {
(...)
}
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
maxcpu=15 # maximal CPU u s a g e l i m i t f o r t e s t
f o r hash i n echo { 4 , 1 6 , 3 2 , 6 4 } #c h e s s e n g i n e hash s i z e
do
f o r t h r e a d i n echo { 1 , 2 , 4 , 8 } #s t o c k f i s h t h r e a d s number
do
f o r depth i n echo { 2 , 4 , 8 , 1 6 } #d e p t h o f t r e e
do
l o o p s =15; #how manu measurement o f
c o u n t e r =1; #s e t c o u n t e r
while [ $ c o u n t e r − l t $ l o o p s ] ;
do
cpu=$ ( cpuusage )
i f [ $cpu − l t $maxcpu ] ; then #i d CPU u s a g e i s l e s s than
echo ”CPU: ” $cpu ”%” | t e e −a s t o c k b e n c h 1 . l o g
. / s t o c k f i s h bench $hash $ t h r e a d $depth d e f a u l t depth 1>/dev /
null | \
t e e −a s t o c k b e n c h . d e f a u l t −depth . $hash . $ t h r e a d . $depth . l o g
( ( c o u n t e r++)) ;
fi ;
s l e e p 1 2 0 ; #w a i t a moment
done ; #end o f measure
#p a r s e u s e f u l l v a l u e s and s t o r e f o r f u r t h e r a n a l y s i s
cat s t o c k b e n c h . d e f a u l t −depth . $hash . $ t h r e a d . $depth . l o g | g r e p T o t a l | c u t
−s −d ’ : ’ −f 2 > s t o c k b e n c h . d e f a u l t −depth . $hash . $ t h r e a d . $depth . t x t
done ;
done ;
done ;
Wyniki testów prezentuje wykres (Rysunek 15).
82
Rysunek 15. Wykres czasu przeszukiwania zadanej głębokości drzewa szachowego. Oś odciętych określa głębokość drzewa przeszukiwania, a oś rzędnych reprezentuje czas
przeszukania elementów do zadanej głębokości w skali logarytmicznej. Poszczególne testy dotyczyły pojedynczych procesorów. I tak od dołu mamy :2.8, 2.0, 1.8,
1.5 GHZ. Wartym podkreślenia jest tu uwaga, że większa pamięć cache sprawiła
w przypadku procesora 1.5 zrównanie z procesorem 1.8.
Z powyższego wykresu można wywnioskować, że moc względna procesora jest ok 10-krotnie
mniejsza od średniej klasy komputera typu desktop.
83
Zakończenie
Celem niniejszej pracy było wykorzystanie i omówienie architektury mainframe. W ramach
pracy:
• zainstalowano komputer z800 w KIS,
• skonifgurowano maszyny logiczne działające na tym komputerze,
• zainstalowano na nich system operacyjny Debian GNU/Linux,
• przy pomocy narzędzia Zend Framework przygotowano projekt serwera szachowego,
• wykorzystano oprogramowanie chessd w wersji 0.3.1, zainstalowano i uruchomiono serwer
szachowy pod adreses IP 212.191.89.82,
• zainstalowano i skonfigurowano 5 klientów szachowych : Stockfish, Gnuchess, Crafty,
Rybka,
• rozegrano 12000 partii, których statystyki są dostępne na stronie pod adresem
http://212.191.89:82:5001/chessd/game/list.
Powyższe pozwala na stwierdzenie, że założony cel pracy został osiągnięty.
84
Załącznik 1. Literatura
[1] zSeries 990 Support Element Operations Guide. IBM, 2003.
[2] Hardware Management Console Operations Guide Version 1.7.3. IBM, 2004.
[3] http://en.wikipedia.org/wiki/Mainframe_computer, IX 2010.
[4] http://pl.wikipedia.org/wiki/Mainframe, 2010.
[5] http://en.wikipedia.org/wiki/IBM, 2010.
[6] Installing mvs 3.8j. http://www.jaymoseley.com/hercules/installmvs, V 2010.
[7] Roger bowler responds to ibm patent attack on open source. http://www.turbohercules.
com/news/permalink/a-statement-from-roger-bowler-about-hercules-and-ibm,
VI 2010.
[8] Transaction processing performance council. http://www.tpc.org, 2010.
[9] Erich Amrehn, Joerg Arndt, Dave Bennin, Mark Cathcart, Richard Higson, Cliff Laking,
Richard Lewis, Michael MacIsaac, Susan Matuszewski, Eugene Ong, Hans Dieter Mertiens
i Eric Schabell. Linux for S/390. IBM, 2000.
[10] Monte Bauman, Bob Vik, Bob Neidig, Terry Weinberg, Scott Lundell i Eduardo Oliveira.
Server Virtualization Cost & Value Analysis Tool - RACEv Overview Guide. 2010.
R on the
[11] John Eilert, Maria Eisenhaendler, Dorothea Matthaeus i Ingolf Salm. Linux
Mainframe. Prentice Hall PTR, 2003.
[12] David A. Patterson i John L. Hennessy. Computer Organization and Design. Elsevier Inc,
2005.
[13] Michael MacIsaac, Ronald Annuss, Wolfgang Engel, Chris Gombola, Timothy Nunes,
Mark Post, Don Stubbs, Egon Terwedow i Craig Vernon. Linux for IBM zSeries and
S/390: Distributions. International Technical Support Organization, 2000.
[14] Hercules Organization. Hercules General Information Guide. X 2010.
[15] Hercules Organization. Hercules User reference Guide. X 2010.
[16] David Watts, Jure Arzensek, Antony Collins, Jian Yong Wang i Russ Weiner. IBM Eserver
xSeries 445 Planning and Installation Guide. International Technical Support Organization, 2003.
85
Załącznik 2. Spis kodów źródłowych
1
2
3
4
5
6
7
8
9
10
11
telnet.sh . . . . . . . . . . . . . . .
pose-match.sh . . . . . . . . . . . .
Skrypt roboAdmin - komenda mecz
stockfish.sh . . . . . . . . . . . . .
gnuchess.bat . . . . . . . . . . . . .
apache.conf . . . . . . . . . . . . .
Chessd Model User . . . . . . . . .
Chessd Form User . . . . . . . . .
updateAction . . . . . . . . . . . .
Plik views/scripts/update.phtml . .
stockbench.sh . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
67
68
68
69
69
73
75
76
78
79
82
Załącznik 3. Spis rysunków
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Skalowalność mocy obliczeniowej minframe’ów . . . . . . . . . . . . . . . . . . .
Rozkład obciążenia na poszczególne zasoby systemu . . . . . . . . . . . . . . . .
Widok na IBM z800 z dwoma zamkniętymi laptopami służącymi do administracji
Prędkość odczytu macierzy dyskowej badanego mainframe’a wykonana programem Iozone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Support Element Workplace Źródło: opracowanie własne . . . . . . . . . . . . .
SE Workplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
HMC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Konsola HMC w systemie OS/2 . . . . . . . . . . . . . . . . . . . . . . . . . . .
SE Workplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schemat połączenia silnika szachowego . . . . . . . . . . . . . . . . . . . . . . .
Serwer programów szachowych . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schemat projektu serwera programów szachowych na mainframie w KIS . . . . .
Klasy PHP narzędzia Zend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gotowy projekt strony internetowej wykorzystujący opracowany modul chessd .
Wykres czasu przeszukiwania zadanej głębokości drzewa szachowego . . . . . . .
86
7
9
13
15
17
18
18
19
22
60
66
67
71
80
83
Załącznik 4. Spis tablic
1
2
Rozwój pamięci operacyjnej w mainframe’ach . . . . . . . . . . . . . . . . . . . 8
Wykaz modeli mainframe’a zSeries 800 (model 2066) . . . . . . . . . . . . . . . 11
Załącznik 5. Spis wydruków
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Informacje o klastrze procesorów komputera z800 w KIS . . . . . . . . . . . . .
Nazwy, kategorie oraz domyślne hasła użytkowników konsoli HMC . . . . . . . .
Tekst okna dialogowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przebieg formatowania macierzy dyskowej mainframe’a z800 . . . . . . . . . . .
Uruchomienie serwera fics 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tabela UserLogon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tabela UserStats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Typy rozgrywek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Elementy tabeli GameType serwera Chessd . . . . . . . . . . . . . . . . . . . . .
Tabela Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tabela Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tabela Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rejestracja na freechess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przykładowe siedem tagów formatu PGN . . . . . . . . . . . . . . . . . . . . . .
Format PGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Testowanie procesora programem Crafty . . . . . . . . . . . . . . . . . . . . . .
Spis zmiennych konfiguracyjnych programu szachowego Crafty . . . . . . . . . .
Przykładowy plik konfiguracyjny programu polyglot dla silnika szachowego Stockfish . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przykład zarządzania projektem Zend Framework . . . . . . . . . . . . . . . . .
87
12
20
20
23
35
43
44
45
45
46
47
48
51
57
57
61
61
64
73
Załącznik 6. Spis terminów
• AJAX (ang. Asynchronous JavaScript and XML, asynchroniczny JavaScript i XML) –
technologia tworzenia aplikacji internetowych, w której interakcja użytkownika z serwerem
odbywa się bez przeładowywania całego dokumentu, w sposób asynchroniczny. Ma to
umożliwiać bardziej dynamiczną interakcję z użytkownikiem niż w tradycyjnym modelu,
w którym każde żądanie nowych danych wiąże się z przesłaniem całej strony HTML.
• Back-end jest częścią aplikacji, najczęściej niewidoczną dla użytkownika, zawierającą na
przykład logikę bazodanową i inne funkcję nie związane z graficznym interfejsem.
• Benchmark, testowanie wzorcowe jest to test wydajności systemu komputerowego: sprzętu
lub oprogramowania.
• BogoMIPS to jednostka testu wydajności procesora, wykonywanego przez jądro systemu
operacyjnego Linux podczas jego startu, używany do kalibracji wewnętrznej pętli opóźniającej (ang. busy-loop). Nazwa powstała ze złączenia ang. słowa bogus (nieprawdziwy)
i skrótu MIPS.
• Bot - nazwa pochodzi od słowa robot. Programy takie działają na przykład na IRC
(Internet Relay Chat). Powstały, aby działać w czasie nieobecności operatorów kanału
dyskusyjnego, pilnować porządku na kanale oraz chronić kanał przed przejęciem.
• CPC (ang. Central Processing Complex) to główna część mainframe’a zajmująca się
wykonywaniem operacji - składają się na nią procesory ogólnego zastosowania, procesory
specjalistyczne oraz dodatkowy osprzęt m.in. odpowiedzialny za operacje wejścia/wyjścia.
• Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne
ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w pamięci o
lepszych parametrach. Na współczesnych procesorach są 2 lub 3 poziomy pamięci cache:
L1 (zintegrowana z procesorem), a także L2 i L3 (umieszczone w jednym chipie razem z
procesorem, lub na płycie głównej).
• Cambridge Scientific Center został założony w 1964 przez Norm Rasmussen, znajdował
się w budynku MIT. Późnej nazwa została zmieniona na IBM Scientific Center.
• Connector (ang. konektor) - wirtualnych maszynach łącznik ten pełni fukcję mostu wymiany zasobów.
• DASD (ang. Direct Access Storage Device) - jest to określenie i nazwa dysku, historycznie
odwołująca się do faktu szybkiego w odróżnieniu od sekwencyjnego taśmowego, dostępu,
dzisiaj określającą po prostu macierze dyskowe mainframe’a.
• Dispatcher (Dyspozytor) - jest odpowiednikiem zarządcy procesów (scheduller) w terminologii intelowskie.
• ESCON (ang. Enterprise Systems Connection) - jest łączem z dyskiem lub urządzeniami
peryferyjnymi, opartym na łączu światłowodowym, pół dupleksowe, szeregowy interfejs,
oryginalne prędkość 10 MB/s, później zwiększona do 17Mbyte/s, maksymalna odległość:
43 kilometry.
• FICON ulepszona wersja ESCON, prędkość 512 MB/s ,odległość 10 do 20km, adresacja
do 16,384 urządzeń , zmienna wielkośc bloku w operacjach I/O.
88
• Federacja Szachowa Stanów Zjednoczonych (United States Chess Federation, USCF) –
organizacja zarządzająca rozgrywkami szachowymi w Stanach Zjednoczonych, członek
Międzynarodowej Federacji Szachowej (FIDE).
• Front-end odnosi się do części aplikacji, odpowiedzialnej za komunikację z użytkownikiem.
Jest ona najczęściej reprozentowana w formie graficznego interfejsu użytkownika.
• GET to sposób przekazywania danych pomiędzy kolejnymi odsłonami dokumentów sieciowych w protokole HTTP. Polega na umieszczeniu par parametr=wartość w adresie
URI strony.
• GPPU (ang. General Purpose Processor Unit).
• GUI (ang. Graphical UserInterface) - termin określający graficzny interfejs użytkownika
w aplikacji.
• HMC - Hardware Managment Console jest systemem dostarczającym narzędzia administracyjne do planowania, rozbudowywania i zarządzania systemami komputerowymi
mainframe’ami IBM-a (definicja z podręcznika elektronicznego
http://www.redbooks.ibm.com/redbooks/pdfs/sg247491.pdf str. XIII , odnośnik sprawdzony 31 listopada 2010).
• IFL (ang. Integrated Facility for Linux) - jest to udostępniona przez firmę IBM, tańsza wersja procesora CPs (prcesora ogólnego przeznaczenia) na który można instalować
system operacyjny Linuks.
• IPL (ang. Initial Program Load) w terminologii mainframe oznacza odczyt bajtów rozruchowych urządzenia np. dysku, taśmy itp.
• JCL (ang. Job Control Language) - jest językiek skryptowym używanym przez systemy
operayjne mainframe.
• Job Control Language - język opisu zadań, jest zbiorem wyrażeń (poleceń), które są
przekazywane do systemu aby wykonać program podążając według pewnych instrukcji
wyjściowych i wejściowych. Takie wyrażenia przekazują systemowi, gdzie znajdują się
odpowiednie wejścia i jak należy przetworzyć owo wejście (uruchomienie programu) i co z
rezultatem działania programu. Job pozwala na wykonanie zadania (zadań) w tle pracy
systemu.
• LPAR (ang. Logical PARtition) - podzbiór sprzętu związanego z procesorem i systemem
operacyjnym. Zawiera takie wydzielone zasoby jak procesor, pamięć oraz urządzenia I/O.
Działa niezależnie od innych LPAR’ów które także mogą być wydzielone.
• Linux jest rodziną uniksopodobnych systemów operacyjnych opartych na jądrze GNU/Linux. Linux jest jednym z przykładów wolnego i otwartego oprogramowania - jego kod
źródłowy może być dowolnie wykorzystywany, modyfikowany i rozpowszechniany
• Linux/Z (Linuks na systemie Z) określenie na system operacyjny Linux, skompilowany
pod architekturę mainframe’ów IBM-a, przede wszystkim serii Z. Inne terminy dotyczącego tego samego zagadnienia to Linux na Systemie z10, Linux na Systemi z9, Linux
na zSeries, Linux/390, zLinux, z/Linux, itd. Wszystkie odnoszą się do poszczególnych
modeli mainframów serii Z.
89
• MBR (ang. Master Boot Record) – główny rekord startowy, czyli umowna struktura
zapisana w pierwszym sektorze dysku twardego. Często nazywany też Master Boot Block
(pol. główny blok startowy). Zawiera on program rozruchowy oraz główną tablicę partycji
(w przypadku dysku twardego – dyskietki zwykle nie posiadają tablicy partycji).
• MSU (ang. Million Service Units) miliona usług na godzinę.
• MTU - Maximum Transfer Unit to rozmiar największej jednostki protokołu, którą można
przekazać przez warstwę komunikacyjną.
• Main Storage (magazyn główny) - oznacza główną pamięć.
• Mapowanie obiektowo-relacyjne (ang. Object-Relational Mapping ORM) - sposób odwzorowania obiektowej architektury systemu informatycznego na bazę danych (lub inny
element systemu) o relacyjnym charakterze.
• Międzynarodowa Federacja Szachowa (fr. Fédération Internationale des Échecs, FIDE)
– utworzona 20 lipca 1924 roku w Paryżu organizacja międzynarodowa zrzeszająca narodowe związki szachowe z całego świata, w tym Polski Związek Szachowy. Mottem FIDE
jest Gens una sumus (łac. Jesteśmy jedną rodziną). Od roku 1995 na czele FIDE stoi
Kirsan Ilumżynow, prezydent rosyjskiej republiki autonomicznej Kałmucji.
• Multiple Virtual Storage jest kolejnym członkiem rodziny systemów wsadowych (OS/360,
OS/VS2). Wspierał zarówno przetwarzanie wsadowe (ang. batch) jak i transakcyjne.
Nowym elementem w stosunku do poprzedników było wprowadzenie koncepcji wirtualnej
przestrzeni adresowej. Został zastąpiony przez OS/390. Ostatnia wersja tego systemu to
MVS 3.8J wydana w 1970r.
• MySQL - wolnodostępny system zarządzania relacyjnymi bazami danych
• Numer 360 w IBM System/360 oznaczał 360 stopniowe wykorzystanie tej architektury.
System/360 jest zarówno nazwą mainframe’a jak i architektury (podobnie jak System/370).
S/360 jest dopuszczalnym i często stosowanym skrótem oznaczającym System/360 (podobnie jak i nazwa S/370).
• OLTP (ang. Online Transaction Processing) – kategoria aplikacji klient-serwer dotyczących baz danych w ramach bieżącego przetwarzania transakcji obejmujących takie
zastosowania jak systemy rezerwacji, obsługa punktów sprzedaży, systemy śledzące itp.
W systemach tych klient współpracuje z serwerem transakcji, zamiast z serwerem bazy
danych.
• Open Source Initiative - Amerykańska organizacja pozarządowa zajmująca się promowaniem i wspieraniem Wolnego Oprogramowania. Strona domowa projektu:
http://www.opensource.org odnośnik sprawdzony 29-X-2010.
• Otwarte oprogramowanie (ang. open source movement, czyli otwarte źródła) - odłam
ruchu wolnego oprogramowania (ang. free software), który proponuje nazwę open source
software jako alternatywną dla free software, głównie z przyczyn praktycznych, a nie
filozoficznych.
• PHP – obiektowy, skryptowy język programowania zaprojektowany do generowania stron
internetowych w czasie rzeczywistym.
• Patch (ang. łatka) format plików do umieszczenia listy poprawek i zmian dla poszczególnych linijek plików poprawianych, wykorzystywany przez program patch.
90
• PostgreSQL to, obok MySQL i Firebird, jeden z trzech najpopularniejszych wolnodostępnych systemów zarządzania relacyjnymi bazami danych. Początkowo opracowywany
na Uniwersytecie Kalifornijskim w Berkeley i opublikowany pod nazwą Ingres. W miarę
rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem
SQL.
• Program Status Word - rejestr sprzętowy zawierający stan wykonywania obecnego programu oraz adres instrukcji która obecnie jest wykonywana.
• RAS (reliability, availability, servicability) - niezawodność, dostępność i serwisowalność.
• REXX (ang. Restricted Extended Executor) - język interpretowany, używany w z/VM
do automatyzowania zadań, programowania.
• Rack - wspólna nazwa dla szaf, stojaków oraz urządzeń przemysłowych wykonanych w
postaci modułów. Standardowa szerokość szyn mocujących ma 19 calu jednak istnieją
również szafy o szerokości 10 cali oraz szafy o szerokości 24 cali (produkowane przez IBM)
i zazwyczaj wykorzystywane są przez serwery i osprzęt IBM np: RS/6000.
• SMP (ang. Symmetric Multiprocessing, przetwarzanie symetryczne) - architektura komputerowa, która pozwala na znaczne zwiększenie mocy obliczeniowej systemu komputerowego poprzez wykorzystanie 2 lub więcej procesorów do jednoczesnego wykonywania
zadań.
• Setuid oraz setgid – to skrótowce powstałe z ang. zdań: ’Set User ID (identity)’ (Ustaw
Identyfikator Użytkownika) oraz ’Set Group ID’ (Ustaw Identyfikator Grupy). Termin
setuid jest często skracany do suid, zaś termin setgid do sgid.
Źródło: http://en.wikipedia.org/wiki/Setuid.
• Skalowalność (ang. scalability), umiejętność systemu do przystosowywanie się do większej
lub mniejszej intensywności użytkowania.
• System programmer (pol. Programista systemu) - w kontekście terminologii mainframe
oznacza administratora systemu.
• TDB (ang. Trivial Database) - baza danych, której z jednym z aspektów jest jednoczesna
obsługa wielu użytkowników operujących na możliwych tych samych rekordach, wykorzystująca do tego mechanizm wewnętrznego blokowania aby oddzielić nachodzące się zapisy,
charakteryzująca się niewielkim rozmiarami kodu.
• TSO (ang. Time Sharing Options) - funkcja z/OS pozwalająca na podłaczenie zdalnego
terminala lub kilku działajacych równocześnie (wielozadaniowość).
• Transaction Processing Performance Council (TPC) jest organizacją typu non-profit założoną w 1985 w celu zdefiniowania testów wydajnościowych w dziedzinie przetwarzania
danych. Organizacja ta publikuje wyniki testów, które dzięki dobrze zdefiniowanej metodyce są uważane za obiektywne i weryfikowalne.
• URI, ang. Uniform Resource Identifier jest standardem internetowym umożliwiającym
łatwą identyfikację zasobów w sieci. Zdefiniowany jest w dokumencie RFC 2396.
91
• VM/ESA jest systemem operacyjnym, zaprojektowanym przez studentów MIT we współpracy z programistami i inżynierami z IBM-a, którego zadaniem jest uruchamianie maszyn wirtualnych, na których dopiero instaluje się systemy operacyjne; ideą projektu
jest to, aby każdy użytkownik mógł pracować na własnej maszynie wirtualnej, mimo
iż wszystko dzieje się w obrębie jednej maszyny fizycznej), http://www.vm.ibm.com/,
http://en.wikipedia.org/wiki/VM/ESA, odnośnik spr. 26 kwi 2009.
• VNC (ang. Virtual Network Computing) – system przekazywania obrazu z wirtualnego,
bądź fizycznego środowiska graficznego.
• VPS (ang. Virtual Private Server) - jest to podział maszyny, jaką jest serwer, na kilka
mniejszych, wirtualnych. VPS umożliwia pełny dostęp do konta root. Do zarządzania
VPS-ami najczęściej wykorzystuje się oprogramowanie Xen, VMware, FreeVPS, Virtuozzo, OpenVZ.
• Virtual Storage Extended/Enterprise System Architecture - ogólne określenie na systemy
z kontrolnym programem (DOS/VSE) i zaawansowanymi licencjonowanymi funkcjami
(VSE/Advenced Functions).
• Volume Table Of Contents, w skrócie VTOC, jest strukturą danych, w której zapisane
jest rozmieszczenie poszczególnych danych na dysku. Możne znajdować się na pierwszych
64K bajtach nośnika. Zawiera listę nazw wszystkich plików wraz z rozmiarem, położeniem
oraz uprawnieniami.
• Wirtualna Maszyna (ang. Virtual Machine) odnosi się przede wszystkich do programowego emulowania architektury. Tutaj autor miał na myśli sprzętową emulację, która jest
podklasą typów wirtualizacji.
• XMPP (Extensible Messaging and Presence Protocol, dawniej Jabber) jest to protokół
bazujący na języku XML umożliwiający przesyłanie w czasie rzeczywistym wiadomości
oraz statusu. Protokół ma zastosowanie nie tylko w komunikatorach, ale również w innych
systemach natychmiastowej wymiany informacji.
• z/OS to system dla serii Z stworzony i rozwijany z naciskiem na potrzeby jakości usług
dla e-biznesu.
• z/VM jest to system stworzony przez studentów z MIT, zaadaptowany i rozwijany przez
IBM-a. Pozwala użytkownikowi na pracę w własnej maszynie wirtualnej poprzez współdzielenie fizycznych zasobów mainframe takich jak pamięć dyskowa, pamięć RAM, karty
sieciowe oraz procesor. Zasoby te zarządzane są przez zarządcę CP (Control Program).
92
Załącznik 7. Wykaz elementów konsoli HMC
Workplace
• Views
– Groups
– Exceptions
– ActiveTasks
– ConsoleActions
– TaskList
– Books
• Task List
– DAILY
∗
∗
∗
∗
∗
∗
∗
∗
Hardware Message
Operating System Messages
Activate
Reset Normal
Deactivate
Grouping
Activity
Help
– CPC RECOVERY
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
hm
OSM
Single Object Operations
Start
Stop
Reset Normal
PSW restart
Reset Clear
Load
Help
– Service
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Service status
Perform Problem Analysis
View Service History
Backup Critical Dara
Report A Problem
Transmit Service Data
93
∗ Archive Security Logs
∗ Format Security Logs to DVD
∗ help
– Change Management
∗
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Engineering Changes (ECs)
Retrieve Internal Code
Change Internal Code
Single Step Internal Code Changes
System Information
Alternate Support Element
Help
– CPC Remote Customization
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSm
Remote Service
Problem Management
Operations Management
Account Information
Support Element Operations Guide
Help
– CPC Operationl Customization
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Customize/Delete Activtion Profiles
Customize Activity PRofiles
Automatic Activation
Scheduled Operations
Customize Support Element Date/Time
Change LPAR Controls
Configure Channel Path On/Off
Ressign Channel PAth
OSA Advenced Facilities
Enable I/O Priority Queuing
Change LPAR I/O Priority Queuing
Help
– CPC Configuration
∗
∗
∗
∗
HM
OSM
Transmit Vital Product Data
View frame Layout
94
∗ Help
• GROUPS
– CPC Images
– Defined CPC
– HMC1
• Exceptions
– P0022FA Linux3
• Active Tasks
• Console Actions
– view console events
– View Console Service History
– Customize Console Date/Time
– Change Console Internal Code
– Single Step Console Internal Code Changes
– Bckup Criticl Console Dat
– View Console Information
– Hardware Management Console Settings
– Enable Hardware Management Console Service
– Customize Scheduled Operations
– Remote Suppport Telephone Queue
– Trnsmit Console Service Data
– Authorize Internal Code Changes
– Customize Account Information
– Customize Dial Informations
– Customize Problem Management
– Enable Pager Notification
– Report a Problem
– Configure 3270 Emulators
– Network Diagnostic Informations
– Archive Security Logs
– View Security Logs
– Format DVD Catridge
– Log Off
• Books
– Hardware Management Console Opertions Guide
– Programming Interfaces
95
– Application Programming Interfaces for JAva (API-JAV-00)
– Support Element Guide
– Coupling Facility Control Code Commands
– Coupling Facility Control Code Messages
– Library Reader/2
96
Załącznik 8. Wykaz elementów konfiguracyjnych SE Workplace
• Views
– Groups
– Exceptions
– ActiveTasks
– ConsoleActions
– TaskList
– Books
• Taksk list
– DAILY
∗
∗
∗
∗
∗
∗
∗
∗
Hardware Messages
Operating System Messages
Activate
Reset Normal
Deactivate
Grouping
Activity
Help
– CPC RECOVERY
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Start all
Stop All
Reset normal
Reset clear
Load
Power-on reset
Load from CD-ROM or Server
Help
– Service
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Service status
Perform Problem Analysis
View Service History
Checkout Tests
Report a Problem
Transmit Service Data
97
∗
∗
∗
∗
Dump LPAR Data
Delete LPAR Dump Data
Off-load Retain Data to HMC-DVD
Help
– Change Management
∗
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Change Internal Code
System Information
Force Channel Internal Code Change
Authorize Internet Code Changes
Authorize Concurrent Internet Code Change
Alternate Support Element
Help
– CPC Remote Customization
–
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Remote Service
Problem Management
Operations Management
Account Information
Help
– CPC Operational Customization
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Customize/Delete Activtion Profiles
Automatic Activation
Scheduled Operations
Enable TOD
Change LPAR Controls
Change LPAR Security
Storage Information
System Activity Profiles
Enable/Disable Dynamic Channel Subsytem
Change LPAR Cryptographic Controls
Change LPAR Susplex Test Datasource
Export/Import Profile Data
Ebable I/O Priority Queuing
Change LPAR I/O Priority Queing
Help
– CPC Configuration
∗ HM
98
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
OSM
Perform Model Conversion
Transmit Vital Product Data
View frame Layout
System Complex (Sysplex ) timer
I/O Configuration
View Hardware Configuration
Hardware Configuration Details
Cryptographic Processor Configuration
PCI Cryptographic Configuration
PCI Cryptographic Management
View CBU Feature Information
Change CHPID Assignment
Help
– CP Toolbox
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Start
Stop
Change Operation Rate
Display or Alter
PSW REstart
Stop on CP Address MAtch
Stop on I/O Address Match
Stop on I/O event
Stop on PSW Event
Trace
Interrupt
Store Status
Help
– CHPID Operations
∗
∗
∗
∗
∗
∗
∗
∗
∗
HM
OSM
Configure On/Off
Release
Service On/Off
Advanced Facilities
Reassign Channel Path
Channel Problem Determination
Help
– Groups
∗ CPC
99
· P002FA
∗ Images
· Linux 1
· Linux 2
· Linux 3
• Exceptions
– 02 Reserved Not Defined
– 03 Reserved not defined
– 61 Online Shared Not Operational link
– 62 Online Shared Loss of Signal
– 63 Online Shared Loss of signal
– 70 Online Shared Offline Signal received
– 72 Online Shared Loss of signal
– Linux 1
– Linux 2
– Linux 3
• Console Actions
– view console events
– support elements settings
– enable console services
– customize data/time
– hsa estimation Tool
– network diangostic information
– view security log
– log off
• books
– Support Element Operations Guide
– Coupling Facility Control Code Commands
– Coupling Facility Control Code Messages
– ZSeries Reference Summary
100
Załącznik 9. Log z instalacji MVS 3.8J
1
2
#G a t h e r i n g M a t e r i a l s and C r e a t i n g DASD Volumes
#i n s t m v s 1 . htm
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
papi@otos : ˜ / h e r c u l e s /mvs$ l s
i n s t a l l m v s . t g z m v s d i s t . t g z m v s s t a r t e r . t g z smpsnap . t g z
papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f i n s t a l l m v s . t g z
condcode
dasd /
docs /
ibcdasdi .00 c
ibcdasdi . cnf
jcl/
j c l / az58122 . j c l
jcl / ickdsfg . jcl
j c l / sgnreset . j c l
j c l /smp4p44 . j c l
j c l / smpjob00 . j c l
j c l / smpjob01 . j c l
j c l / smpjob02 . j c l
j c l / smpjob03 . j c l
j c l / smpjob04 . j c l
j c l / smpjob05 . j c l
j c l / smpjob06 . j c l
j c l / sysgen00 . j c l
j c l / sysgen01 . j c l
j c l / sysgen02 . j c l
j c l / sysgen03 . j c l
j c l / sysgen04 . j c l
j c l / sysgen05 . j c l
j c l / sysgen06 . j c l
j c l / sysgen07 . j c l
j c l / sysgen08 . j c l
jcl / writeipl . jcl
mvs . c n f
mvsdasd
smp . c n f
source /
sysgen . cnf
tape /
tape / i b c d a s d i . het
tape / mvs38jptfs . het
papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f mvs
mvsdist . tgz
mvsstarter . tgz
papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f m v s d i s t . t g z
tape /
t a p e /smp4 . h e t
tape / z d l i b 1 . het
papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f m v s s t a r t e r . t g z
dasd /
dasd / s p o o l 0 . 1 5 1
dasd / s t a r t 1 . 1 5 0
dasd / work01 . 1 5 2
papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f smpsnap . t g z
backsmp . j c l
r es t sm p . j c l
57
101
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#c r e a t i n g dasd volumes
papi@otos : ˜ / h e r c u l e s /mvs$ . / mvsdasd
This s c r i p t c r e a t e s DASD volumes f o r MVS 3 . 8 j .
Changed d i r e c t o r y t o : /home/ p a p i / h e r c u l e s /mvs/ dasd
HHCDU044I C r e a t i n g 3350 volume SMP001 : 560 c y l s , 30 t r k s / c y l , 19456
track
HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e smp001 . 3 3 5 0
HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed .
HHCDU044I C r e a t i n g 3350 volume MVSRES: 560 c y l s , 30 t r k s / c y l , 19456
track
HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e mvsres . 3 3 5 0
HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed .
HHCDU044I C r e a t i n g 3350 volume WORK02: 560 c y l s , 30 t r k s / c y l , 19456
track
HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e work02 . 3 3 5 0
HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed .
HHCDU044I C r e a t i n g 3350 volume SPOOL1 : 560 c y l s , 30 t r k s / c y l , 19456
track
HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e s p o o l 1 . 3 3 5 0
HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed .
HHCDU044I C r e a t i n g 3350 volume PAGE00 : 560 c y l s , 30 t r k s / c y l , 19456
track
HHCDU041I 560 c y l i n d e r s s u c c e s s f u l l y w r i t t e n t o f i l e page00 . 3 3 5 0
HHCDI001I DASD i n i t i a l i z a t i o n s u c c e s s f u l l y completed .
S c r i p t completed s u c c e s s f u l l y !
bytes /
bytes /
bytes /
bytes /
bytes /
78
79
80
81
82
83
#i n s t m v s 2 . htm
#i n i t i a l i z i n g DASD volumes
#r e a d i n g i n s t r u c t i o n s from t a p e t y p e 1442 a d d r e s s 00 c
84
85
86
87
88
89
90
91
92
93
h e r c u l e s −370 −f i b c d a s d i . c n f >h e r c u l e s . l o g
ipl280
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
Connected t o d e v i c e 0 : 0 0 0 9
94
95
96
97
98
99
100
101
102
103
104
IBC105A DEFINE INPUT DEVICE . DASDI 7 . 8 0
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 0009
i n p u t =1442 ,00 c
DASDI 7 . 8 0
SMP001 JOB ’ INITIALIZE SMP001 3350 VOLUME’
MSG TODEV=1052 ,TOADDR=009
DADEF TODEV=3350 ,TOADDR=148 ,IPL=NO, VOLID=SMP001 , BYPASS=YES
VLD NEWVOLID=SMP001 ,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
105
106
IBC163A
107
DASDI 7 . 8 0
WORK02 JOB ’ INITIALIZE WORK02 3350 VOLUME’
MSG TODEV=1052 ,TOADDR=009
DADEF TODEV=3350 ,TOADDR=149 ,IPL=NO, VOLID=WORK02, BYPASS=YES
VLD NEWVOLID=WORK02,OWNERID=HERCULES
108
109
110
111
END OF JOB .
102
112
113
VTOCD STRTADR=1,EXTENT=15
END
114
115
IBC163A
116
DASDI 7 . 8 0
MVSRES JOB ’ INITIALIZE MVSRES 3350 VOLUME’
MSG TODEV=1052 ,TOADDR=009
DADEF TODEV=3350 ,TOADDR=14A, IPL=NO, VOLID=MVSRES, BYPASS=YES
VLD NEWVOLID=MVSRES,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
IBC163A END OF JOB .
DASDI 7 . 8 0
PAGE00 JOB ’ INITIALIZE PAGE00 3350 VOLUME’
MSG TODEV=1052 ,TOADDR=009
DADEF TODEV=3350 ,TOADDR=14B, IPL=NO, VOLID=PAGE00, BYPASS=YES
VLD NEWVOLID=PAGE00,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
IBC163A END OF JOB .
DASDI 7 . 8 0
SPOOL1 JOB ’ INITIALIZE SPOOL1 3350 VOLUME’
MSG TODEV=1052 ,TOADDR=009
DADEF TODEV=3350 ,TOADDR=14C, IPL=NO, VOLID=SPOOL1, BYPASS=YES
VLD NEWVOLID=SPOOL1,OWNERID=HERCULES
VTOCD STRTADR=1,EXTENT=15
END
IBC163A END OF JOB .
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
END OF JOB .
140
141
142
143
144
145
146
147
#u n p a c k i n g s t a r t e r system
papi@otos : ˜ / h e r c u l e s /mvs$ t a r −z x v f m v s s t a r t e r . t g z
dasd /
dasd / s p o o l 0 . 1 5 1
dasd / s t a r t 1 . 1 5 0
dasd / work01 . 1 5 2
148
149
150
151
152
153
154
155
156
#I n s t a l l i n g SMP4 on t h e S t a r t e r System
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
Connected t o d e v i c e 0 : 0 0 1F
157
158
159
160
161
162
163
164
165
166
167
168
169
170
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
r 0 , clpa
IEF165I // START JES2
IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED
∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0
r 0 , format , noreq
IEE600I REPLY TO 00 IS ; SUPPRESSED
∗01 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE
r 1 ,y
IEE600I REPLY TO 01 IS ; SUPPRESSED
$HASP423 SPOOL0 IS BEING FORMATTED
IEE041I THE SYSTEM LOG IS NOW ACTIVE
103
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP160 PUNCH1
INACTIVE − CLASS=BK
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP309
INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e
$HASP100 MOUNT
ON STCINRDR
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
192
193
194
195
196
#d e v i n i t 012 j c l /smp4p44 . j c l e o f
HHCPN098I D ev i ce 0 : 0 0 1 2 i n i t i a l i z e d
197
198
199
200
201
202
203
204
205
206
207
208
209
210
$HASP100 SMP4P44 ON READER1
SMP 4 . 4 4 from MVS38J
$HASP104 SMP4P44
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP104 SMP4P44 ∗ An IPL i s r e q u i r e d a f t e r t h i s j o b has completed ! ! !
∗
$HASP104 SMP4P44
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP373 SMP4P44 STARTED − INIT 1 − CLASS A − SYS H158
IEF244I SMP4P44 S1 − UNABLE TO ALLOCATE 1 UNIT( S )
AT LEAST 1 OFFLINE UNIT( S ) NEEDED.
IEF489I SMP4P44 − 1 UNIT( S ) NEEDED FOR I 1
IEF247I SMP4P44 − 1 8 2 , 1 8 3 , 1 8 4 , 1 7 0 , 1 7 1 OFFLINE
IEF247I SMP4P44 − 2 8 2 , 2 8 3 , 2 8 4 , 3 8 2 , 3 8 3 , 3 8 4 , 4 8 2 , 4 8 3 , 4 8 4 , 5 8 2 NOT ACCESSIBLE
IEF247I SMP4P44 − 5 8 3 , 5 8 4 , 6 8 2 , 6 8 3 , 6 8 4 , 2 7 0 , 2 7 1 , 3 7 0 , 3 7 1 , 4 7 0 NOT ACCESSIBLE
IEF247I SMP4P44 − 4 7 1 , 5 7 0 , 5 7 1 , 6 7 0 , 6 7 1 NOT ACCESSIBLE
∗02 IEF238D SMP4P44 − REPLY DEVICE NAME OR ’CANCEL’ .
211
212
#d e v i n i t 170 t a p e / z d l i b 1 . h e t
213
214
215
216
217
218
r 2 ,170
IEE600I
IEC502E
∗IEC501A
IEC501A
REPLY TO 02 IS ; 1 7 0
K 1 7 0 ,MVS38J , SL , SMP4P44 , S2
M 1 7 0 , T74172 , SL , 6 2 5 0 BPI ,
SMP4P44 , S2
219
220
221
222
#d e v i n i t 170 t a p e /smp4 . h e t
223
224
225
226
227
EF234E K 1 7 0 , T74172 ,PVT, SMP4P44 , S2
IEF471E FOLLOWING RETAINED VOLUMES NO LONGER NEEDED BY SMP4P44
MVS38J .
104
228
229
230
231
232
233
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
SMP4P44 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SMP4P44 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SMP4P44 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
$p j e s 2
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A
IEE037I LOG NOT ACTIVE
2000 1 0 . 1 6 . 2 9 CONSOLE
IEE142I 01F NOW RECEIVING HARDCOPY
4000 1 0 . 1 6 . 2 9
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO
SYSOUT CLASS A
4000 1 0 . 1 6 . 2 9
IEE037I LOG NOT ACTIVE
0000 1 0 . 1 6 . 2 9
IEF196I IEF142I JES2 JES2 − STEP WAS EXECUTED − COND
CODE 0000
0000 1 0 . 1 6 . 2 9
IEF196I IEF285I
SYS1 . PROCLIB
KEPT
0000 1 0 . 1 6 . 2 9
IEF196I IEF285I
VOL SER NOS= START1 .
0000 1 0 . 1 6 . 2 9
IEF196I IEF285I
SYS1 .HASPCKPT
KEPT
0000 1 0 . 1 6 . 2 9
IEF196I IEF285I
VOL SER NOS= SPOOL0 .
0000 1 0 . 1 6 . 2 9
IEF196I IEF285I
SYS1 .HASPACE
KEPT
0000 1 0 . 1 6 . 2 9
IEF196I IEF285I
VOL SER NOS= SPOOL0 .
251
252
253
254
z eod
4000 1 0 . 1 6 . 4 5
quiesce
IEE334I HALT
EOD SUCCESSFUL
255
256
257
258
259
260
261
262
263
264
265
266
267
268
#Using SMP4 t o B u i l d t h e D i s t r i b u t i o n L i b r a r i e s
#i n s t m v s 3 . htm
i p l 150
d e v i n i t 012 j c l / smpjob00 . j c l e o f
d e v i n i t 012 j c l / smpjob01 . j c l e o f
d e v i n i t 012 j c l / smpjob02 . j c l e o f
d e v i n i t 012 j c l / smpjob03 . j c l e o f
d e v i n i t 170 t a p e / z d l i b 1 . h e t
r 1 ,170
7 d e v i n i t 170 t a p e / m v s 3 8 j p t f s . h e t
$p j e s 2
z eod
quiesc
269
270
271
272
m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e
r 1 ,170
273
274
#Long v e r s i o n
275
276
277
278
279
280
281
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
105
282
283
284
Connected t o d e v i c e 0 : 0 0 1F
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
IEA939D QUICK AND WARM START DATA IS INVALID ,
RE−IPL OR REPLY ’GO’ FOR COLD START
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
Connection c l o s e d by f o r e i g n h o s t .
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
Connected t o d e v i c e 0 : 0 0 1F
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
r 0 , clpa
IEF165I // START JES2
IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED
∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0
r 0 , format , noreq
IEE600I REPLY TO 00 IS ; SUPPRESSED
∗01 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD CHANGE
r 1 ,y
IEE600I REPLY TO 01 IS ; SUPPRESSED
$HASP423 SPOOL0 IS BEING FORMATTED
IEE041I THE SYSTEM LOG IS NOW ACTIVE
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP160 PUNCH1
INACTIVE − CLASS=BK
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP309
INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
322
323
324
325
326
327
328
329
330
331
332
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e
$HASP100 MOUNT
ON STCINRDR
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
333
334
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
335
336
337
338
$HASP100 SMP4P44 ON READER1
SMP 4 . 4 4 from MVS38J
$HASP104 SMP4P44
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP104 SMP4P44 ∗ An IPL i s r e q u i r e d a f t e r t h i s j o b has completed ! ! !
∗
106
339
340
341
342
343
344
345
346
347
348
$HASP104 SMP4P44
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP373 SMP4P44 STARTED − INIT 1 − CLASS A − SYS H158
IEF244I SMP4P44 S1 − UNABLE TO ALLOCATE 1 UNIT( S )
AT LEAST 1 OFFLINE UNIT( S ) NEEDED.
IEF489I SMP4P44 − 1 UNIT( S ) NEEDED FOR I 1
IEF247I SMP4P44 − 1 8 2 , 1 8 3 , 1 8 4 , 1 7 0 , 1 7 1 OFFLINE
IEF247I SMP4P44 − 2 8 2 , 2 8 3 , 2 8 4 , 3 8 2 , 3 8 3 , 3 8 4 , 4 8 2 , 4 8 3 , 4 8 4 , 5 8 2 NOT ACCESSIBLE
IEF247I SMP4P44 − 5 8 3 , 5 8 4 , 6 8 2 , 6 8 3 , 6 8 4 , 2 7 0 , 2 7 1 , 3 7 0 , 3 7 1 , 4 7 0 NOT ACCESSIBLE
IEF247I SMP4P44 − 4 7 1 , 5 7 0 , 5 7 1 , 6 7 0 , 6 7 1 NOT ACCESSIBLE
∗02 IEF238D SMP4P44 − REPLY DEVICE NAME OR ’CANCEL’ .
349
350
351
352
353
354
355
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
r 2 ,170
IEE600I REPLY TO 02 IS ; 1 7 0
IEC502E K 1 7 0 ,MVS38J , SL , SMP4P44 , S2
∗IEC501A M 1 7 0 , T74172 , SL , 6 2 5 0 BPI ,
IEC501A SMP4P44 , S2
356
357
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
358
359
360
361
362
363
364
365
366
367
IEF234E K 1 7 0 , T74172 ,PVT, SMP4P44 , S2
IEF471E FOLLOWING RETAINED VOLUMES NO LONGER NEEDED BY SMP4P44
MVS38J .
$HASP395 SMP4P44 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SMP4P44 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SMP4P44 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
$p j e s 2
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A
IEE037I LOG NOT ACTIVE
2000 1 5 . 2 6 . 3 0 CONSOLE
IEE142I 01F NOW RECEIVING HARDCOPY
4000 1 5 . 2 6 . 3 0
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO
SYSOUT CLASS A
4000 1 5 . 2 6 . 3 0
IEE037I LOG NOT ACTIVE
0000 1 5 . 2 6 . 3 0
IEF196I IEF142I JES2 JES2 − STEP WAS EXECUTED − COND
CODE 0000
0000 1 5 . 2 6 . 3 0
IEF196I IEF285I
SYS1 . PROCLIB
KEPT
0000 1 5 . 2 6 . 3 0
IEF196I IEF285I
VOL SER NOS= START1 .
0000 1 5 . 2 6 . 3 0
IEF196I IEF285I
SYS1 .HASPCKPT
KEPT
0000 1 5 . 2 6 . 3 0
IEF196I IEF285I
VOL SER NOS= SPOOL0 .
0000 1 5 . 2 6 . 3 0
IEF196I IEF285I
SYS1 .HASPACE
KEPT
0000 1 5 . 2 6 . 3 0
IEF196I IEF285I
VOL SER NOS= SPOOL0 .
386
387
388
389
390
391
392
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
z eod
4000 1 5 . 2 6 . 3 9
IEE334I HALT
EOD SUCCESSFUL
quiesce
Connection c l o s e d by f o r e i g n h o s t .
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
107
393
394
395
396
397
398
399
400
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
Connected t o d e v i c e 0 : 0 0 1F
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
IEF165I // START JES2
IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED
∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0
r 0 , noreq
IEE600I REPLY TO 00 IS ; SUPPRESSED
IEE041I THE SYSTEM LOG IS NOW ACTIVE
$HASP160 PUNCH1
INACTIVE − CLASS=BK
$HASP150 SYSLOG
ON PRINTER1
$HASP150 INIT
ON PRINTER1
$HASP250 SYSLOG
IS PURGED
$HASP150 INIT
ON PRINTER1
$HASP250 INIT
IS PURGED
$HASP150 INIT
ON PRINTER1
$HASP250 INIT
IS PURGED
$HASP100 INIT
ON STCINRDR
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 INIT
IS PURGED
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP309
INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
m 1 4 8 , v o l =( s l , smp001 ) , u s e=p r i v a t e
$HASP100 MOUNT
ON STCINRDR
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
437
438
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
439
440
441
442
443
444
445
446
447
448
449
450
451
$HASP100
$HASP373
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
$HASP100
$HASP373
$HASP395
$HASP309
SMPJOB00 ON READER1
SMPJOB00 STARTED − INIT 1 − CLASS A − SYS H158
SMPJOB00 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SMPJOB00 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SMPJOB00 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
SMPJOB01 ON READER1
SMPJOB01 STARTED − INIT 1 − CLASS A − SYS H158
SMPJOB01 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
108
452
453
454
455
$HASP150
$HASP160
$HASP250
$HASP099
SMPJOB01 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SMPJOB01 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
456
457
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
458
459
460
461
462
463
464
465
466
$HASP100
$HASP373
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
SMPJOB02 ON READER1
SMPJOB02 STARTED − INIT 1 − CLASS A − SYS H158
SMPJOB02 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SMPJOB02 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SMPJOB02 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
467
468
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
469
470
471
472
473
474
475
476
477
478
479
$HASP100 SMPJOB03 ON READER1
$HASP373 SMPJOB03 STARTED − INIT 1 − CLASS A − SYS H158
IEF244I SMPJOB03 SMP DLBUCL − UNABLE TO ALLOCATE 1 UNIT( S )
AT LEAST 1 OFFLINE UNIT( S ) NEEDED.
IEF489I SMPJOB03 − 1 UNIT( S ) NEEDED FOR SMPPTFIN
IEF247I SMPJOB03 − 1 8 2 , 1 8 3 , 1 8 4 , 1 7 0 , 1 7 1 OFFLINE
IEF247I SMPJOB03 − 2 8 2 , 2 8 3 , 2 8 4 , 3 8 2 , 3 8 3 , 3 8 4 , 4 8 2 , 4 8 3 , 4 8 4 , 5 8 2 NOT ACCESSIBLE
IEF247I SMPJOB03 − 5 8 3 , 5 8 4 , 6 8 2 , 6 8 3 , 6 8 4 , 2 7 0 , 2 7 1 , 3 7 0 , 3 7 1 , 4 7 0 NOT ACCESSIBLE
IEF247I SMPJOB03 − 4 7 1 , 5 7 0 , 5 7 1 , 6 7 0 , 6 7 1 NOT ACCESSIBLE
∗01 IEF238D SMPJOB03 − REPLY DEVICE NAME OR ’CANCEL’ .
480
481
482
483
484
485
486
487
488
489
r 1 ,170
IEE600I REPLY TO 01 IS ; 1 7 0
IEF234E K 1 7 0 ,MVS38J ,PVT, SMPJOB03
$HASP395 SMPJOB03 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SMPJOB03 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SMPJOB03 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
490
491
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
$HASP100 SMPJOB04 ON READER1
$HASP373 SMPJOB04 STARTED − INIT 1 − CLASS A − SYS H158
IEF234E K 1 7 0 , 2 0 0 8 0 1 ,PVT, SMPJOB04,SMP
$HASP395 SMPJOB04 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SMPJOB04 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SMPJOB04 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP100 SMPJOB05 ON READER1
$HASP373 SMPJOB05 STARTED − INIT 1 − CLASS A − SYS H158
$HASP395 SMPJOB05 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SMPJOB05 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP250 SMPJOB05 IS PURGED
$HASP100 SMPJOB06 ON READER1
$HASP373 SMPJOB06 STARTED − INIT 1 − CLASS A − SYS H158
109
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
$HASP395 SMPJOB06 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SMPJOB06 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SMPJOB06 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP100 ICKDSFG ON READER1
$HASP104 ICKDSFG
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP104 ICKDSFG ∗ AN IPL IS REQUIRED AFTER THIS JOB HAS COMPLETED ! ! !
∗
$HASP104 ICKDSFG
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP373 ICKDSFG STARTED − INIT 1 − CLASS A − SYS H158
$HASP100 ICKDSFL ON INTRDR
$HASP373 ICKDSFL STARTED − INIT 2 − CLASS A − SYS H158
$HASP395 ICKDSFG ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 ICKDSFG ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 ICKDSFG IS PURGED
$HASP395 ICKDSFL ENDED
$HASP309
INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA
$HASP150 ICKDSFL ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 ICKDSFL IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
536
537
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
$HASP100 SMPDUMP ON READER1
$HASP373 SMPDUMP STARTED − INIT 1 − CLASS A − SYS H158
∗IEC501A M 1 7 0 , 0 0 0 2 5 6 , SL , 6 2 5 0 BPI ,
IEC501A SMPDUMP,IEHDASDR
IEC512I LBL ERR 1 7 0 , ,NL, 0 0 0 2 5 6 , SL ,
IEC512I SMPDUMP,IEHDASDR
∗IEC704A L 1 7 0 , 0 0 0 2 5 6 , SL , 6 2 5 0 BPI ,
IEC704A SMPDUMP,IEHDASDR
∗02 IEC704A REPLY ’VOLSER,OWNER INFORMATION’ , ’M’OR’ U’
#PART I I
h e r c u l e s −370 −f s y s g e n . c n f > s y s g e n . l o g
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
Connected t o d e v i c e 0 : 0 0 1F
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
559
560
561
562
563
564
565
566
567
IEF165I // START JES2
IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED
∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0
r 0 , noreq
IEE600I REPLY TO 00 IS ; SUPPRESSED
IEE041I THE SYSTEM LOG IS NOW ACTIVE
$HASP160 PUNCH1
INACTIVE − CLASS=BK
$HASP150 SYSLOG
ON PRINTER1
110
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
$HASP150
$HASP250
$HASP150
$HASP250
$HASP100
$HASP150
$HASP250
$HASP100
$HASP160
$HASP250
$HASP373
$HASP373
$HASP100
$HASP373
$HASP309
$HASP309
$HASP309
$HASP099
INIT
ON PRINTER1
SYSLOG
IS PURGED
INIT
ON PRINTER1
INIT
IS PURGED
INIT
ON STCINRDR
INIT
ON PRINTER1
INIT
IS PURGED
INIT
ON STCINRDR
PRINTER1 INACTIVE − CLASS=AJ
INIT
IS PURGED
INIT
STARTED
INIT
STARTED
INIT
ON STCINRDR
INIT
STARTED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
ALL AVAILABLE FUNCTIONS COMPLETE
586
587
588
589
590
591
592
593
594
595
m 14 a , v o l =( s l , mvsres ) , u s e=p r i v a t e
m 14b , v o l =( s l , page00 ) , u s e=p r i v a t e $HASP100 MOUNT
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
ON STCINRDR
596
597
598
599
600
601
602
603
604
$HASP100
$HASP099
$HASP373
$HASP395
$HASP150
$HASP160
$HASP250
$HASP099
MOUNT
ON STCINRDR
ALL AVAILABLE FUNCTIONS COMPLETE
MOUNT
STARTED
MOUNT
ENDED
MOUNT
ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
MOUNT
IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
605
606
607
608
609
610
611
612
613
614
615
616
617
d e v i n i t 012 j c l / w r i t e i p l . j c l e o f
$HASP100 WRITEIPL ON READER1
$HASP104 WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP104 WRITEIPL ∗ WRITING IPL TEXT ONTO MVSRES ∗
$HASP104 WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
$HASP373 WRITEIPL STARTED − INIT 1 − CLASS A − SYS H158
$HASP395 WRITEIPL ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 WRITEIPL ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 WRITEIPL IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
618
619
620
621
622
623
624
625
626
627
d e v i n i t 012 j c l / s y s g e n 0 0 . j c l e o f
$HASP100 SYSGEN00 ON READER1
$HASP373 SYSGEN00 STARTED − INIT 1 − CLASS A − SYS H158
$HASP395 SYSGEN00 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SYSGEN00 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN00 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
111
628
629
630
631
632
633
634
635
636
637
d e v i n i t 012 j c l / s y s g e n 0 1 . j c l e o f
$HASP100 SYSGEN01 ON READER1
$HASP373 SYSGEN01 STARTED − INIT 1 − CLASS A − SYS H158
$HASP395 SYSGEN01 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SYSGEN01 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN01 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
638
639
640
d e v i n i t 012 j c l / s y s g e n 0 2 . j c l e o f
HHCPN098I D ev i ce 0 : 0 0 1 2 i n i t i a l i z e d
641
642
643
644
645
646
647
648
649
650
651
652
$HASP100 SYSGEN02 ON READER1
$HASP373 SYSGEN02 STARTED − INIT 1 − CLASS A − SYS H158
IEC143I 213 −04 ,IFG0195G , SYSGEN02 ,PUNCH, SYSUT1, 1 4 8 , SMP001 ,
IEC143I SYS2 . STAGE1 .OUTPUT
IEF450I SYSGEN02 PUNCH − ABEND S213 U0000
$HASP395 SYSGEN02 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SYSGEN02 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN02 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
653
654
655
656
d e v i n i t 012 j c l / s g n r e s e t . j c l e o f
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
$HASP100 SYSGEN02 ON READER1
$HASP373 SYSGEN02 STARTED − INIT 1 − CLASS A − SYS H158
IEC143I 213 −04 ,IFG0195G , SYSGEN02 ,PUNCH, SYSUT1, 1 4 8 , SMP001 ,
IEC143I SYS2 . STAGE1 .OUTPUT
IEF450I SYSGEN02 PUNCH − ABEND S213 U0000
$HASP395 SYSGEN02 ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SYSGEN02 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN02 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP100 SGNRESET ON READER1
$HASP373 SGNRESET STARTED − INIT 1 − CLASS A − SYS H158
$HASP395 SGNRESET ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SGNRESET ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SGNRESET IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
677
678
679
680
681
682
683
684
685
686
#some e r r o r s
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
Connected t o d e v i c e 0 : 0 0 1F
112
687
688
689
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
IEF165I // START JES2
IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED
ILR001I DYNAMIC ALLOCATION OF SYS1 .STGINDEX FAILED , NO VIO JOURNALING
∗00 ILR022A REPLY ’U’ TO CONTINUE WITHOUT VIO JOURNALING
r 0 ,U
IEE600I REPLY TO 00 IS ;U
∗01 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0
r 1 , noreq
IEE600I REPLY TO 01 IS ; SUPPRESSED
$HASP406 STC
6 WAS EXECUTING
$HASP406 STC
7 WAS EXECUTING
IEE041I THE SYSTEM LOG IS NOW ACTIVE
$HASP406 STC
8 WAS EXECUTING
$HASP406 STC
9 WAS EXECUTING
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP160 PUNCH1
INACTIVE − CLASS=BK
$HASP150 SYSLOG
ON PRINTER1
$HASP185 PRINTER1 TERMINATED
$HASP150 INIT
ON PRINTER1
$HASP250 SYSLOG
IS PURGED
$HASP150 INIT
ON PRINTER1
$HASP250 INIT
IS PURGED
$HASP150 INIT
ON PRINTER1
$HASP250 INIT
IS PURGED
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 INIT
IS PURGED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP309
INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
727
728
729
730
731
732
733
#OK
cp pch013 . t x t s t a g e 2 . j c l
awk −f s t a g e 2 . awk s t a g e 2 . j c l >s t a g e 2 a . j c l
cp s t a g e 2 a . j c l j c l / s t a g e 2 . j c l
734
735
736
737
738
739
740
741
742
743
papi@otos : ˜ $ t e l n e t l o c a l h o s t 3270
Trying 1 2 7 . 0 . 0 . 1 . . .
Connected t o l o c a l h o s t .
Escape c h a r a c t e r i s ’ ˆ ] ’ .
H e r c u l e s v e r s i o n 3 . 0 6 b u i l t on May 14 2009 1 1 : 2 8 : 1 4
r u n n i n g on o t o s . p l ( Linux −2.6.24.5 − g r s e c −xxxx .#3 SMP Wed May 28 0 9 : 0 9 : 2 5 CEST
2008 i 6 8 6 MP=2)
Connected t o d e v i c e 0 : 0 0 1F
IEA101A SPECIFY SYSTEM PARAMETERS FOR RELEASE 0 3 . 7 0 . VS2
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
744
745
IEF165I // START JES2
113
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
IEE351I SMF SYS1 .MAN RECORDING NOT BEING USED
∗00 $HASP426 SPECIFY OPTIONS − HASP−I I , VERSION JES2 4 . 0
r 0 , noreq
IEE600I REPLY TO 00 IS ; SUPPRESSED
$HASP406 JOB
11 WAS EXECUTING
$HASP408 JOB
11 QUEUED FOR RE−EXECUTION
$HASP406 STC
7 WAS EXECUTING
$HASP406 STC
8 WAS EXECUTING
IEE041I THE SYSTEM LOG IS NOW ACTIVE
$HASP406 STC
9 WAS EXECUTING
$HASP160 PUNCH1
INACTIVE − CLASS=BK
$HASP150 SYSLOG
ON PRINTER1
$HASP100 INIT
ON STCINRDR
$HASP150 INIT
ON PRINTER1
$HASP250 SYSLOG
IS PURGED
$HASP150 INIT
ON PRINTER1
$HASP250 INIT
IS PURGED
$HASP150 INIT
ON PRINTER1
$HASP250 INIT
IS PURGED
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 INIT
IS PURGED
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP100 INIT
ON STCINRDR
$HASP373 INIT
STARTED
$HASP309
INIT 2 INACTIVE ∗∗∗∗∗∗∗∗ C=BA
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP373 SMPDUMP STARTED − INIT 1 − CLASS A − SYS H158
IEF450I SMPDUMP IEHDASDR − ABEND S2F3 U0000
$HASP395 SMPDUMP ENDED
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
$HASP150 SMPDUMP ON PRINTER1
$HASP185 PRINTER1 TERMINATED
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SMPDUMP IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
783
784
785
786
787
788
789
790
791
792
793
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
m 14 a , v o l =( s l , mvsres ) , u s e=p r i v a t e
$HASP100 MOUNT
ON STCINRDR
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
794
795
796
797
798
799
800
801
802
803
804
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
m 14b , v o l =( s l , page00 ) , u s e=p r i v a t e
$HASP100 MOUNT
ON STCINRDR
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
805
114
806
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
807
808
809
810
811
812
813
814
815
816
817
818
$HASP100
$HASP104
$HASP104
$HASP104
$HASP373
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
WRITEIPL ON READER1
WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
WRITEIPL ∗ WRITING IPL TEXT ONTO MVSRES ∗
WRITEIPL ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
WRITEIPL STARTED − INIT 1 − CLASS A − SYS H158
WRITEIPL ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
WRITEIPL ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
WRITEIPL IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
819
820
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
821
822
823
824
825
826
827
828
829
830
831
$HASP100
$HASP373
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
$HASP100
$HASP373
SYSGEN00 ON READER1
SYSGEN00 STARTED − INIT 1 − CLASS A − SYS H158
SYSGEN00 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SYSGEN00 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SYSGEN00 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
SYSGEN01 ON READER1
SYSGEN01 STARTED − INIT 1 − CLASS A − SYS H158
832
833
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
$HASP100
$HASP373
$HASP395
$HASP309
$HASP150
$HASP150
$HASP160
$HASP160
$HASP250
SYSGEN01 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SYSGEN01 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SYSGEN01 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
SYSGEN02 ON READER1
SYSGEN02 STARTED − INIT 1 − CLASS A − SYS H158
SYSGEN02 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SYSGEN02 ON PUNCH1
SYSGEN02 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
PUNCH1
INACTIVE − CLASS=BK
SYSGEN02 IS PURGED
850
851
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
852
853
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
854
855
856
857
858
859
860
861
862
863
864
865
$HASP100
$HASP100
$HASP100
$HASP100
$HASP100
$HASP100
$HASP101
$HASP101
$HASP101
$HASP101
$HASP101
SYSGEN1
SYSGEN2
SYSGEN3
SYSGEN4
SYSGEN5
SYSGEN6
SYSGEN1
SYSGEN2
SYSGEN3
SYSGEN4
SYSGEN5
ON READER1
ON READER1
ON READER1
ON READER1
ON READER1
ON READER1
HELD
HELD
HELD
HELD
HELD
SYSTEM
SYSTEM
SYSTEM
SYSTEM
SYSTEM
SYSTEM
115
GENERATION
GENERATION
GENERATION
GENERATION
GENERATION
GENERATION
866
867
$HASP101 SYSGEN6 HELD
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
868
869
870
871
872
873
874
875
876
877
878
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
$a ’ sysgen1 ’
$HASP000 SYSGEN1 RELEASED
$HASP373 SYSGEN1 STARTED − INIT 3 − CLASS C − SYS H158
$HASP395 SYSGEN1 ENDED
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP150 SYSGEN1 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
$HASP250 SYSGEN1 IS PURGED
879
880
881
882
883
884
885
886
887
888
889
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
$a ’ sysgen2 ’
$HASP000 SYSGEN2 RELEASED
$HASP373 SYSGEN2 STARTED − INIT 3 − CLASS C − SYS H158
$HASP395 SYSGEN2 ENDED
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP150 SYSGEN2 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN2 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
890
891
892
893
894
895
896
897
898
899
900
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
$a ’ sysgen3 ’
$HASP000 SYSGEN3 RELEASED
$HASP373 SYSGEN3 STARTED − INIT 3 − CLASS C − SYS H158
$HASP395 SYSGEN3 ENDED
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP150 SYSGEN3 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN3 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
901
902
903
904
905
906
907
908
909
910
911
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
$a ’ sysgen4 ’
$HASP000 SYSGEN4 RELEASED
$HASP373 SYSGEN4 STARTED − INIT 3 − CLASS C − SYS H158
$HASP395 SYSGEN4 ENDED
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP150 SYSGEN4 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN4 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
912
913
914
915
916
917
918
919
920
921
922
923
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
$a ’ sysgen5 ’
$HASP000 SYSGEN5 RELEASED
$HASP373 SYSGEN5 STARTED − INIT 3 − CLASS C − SYS H158
+IFC001I D=3350 N=0B F=011D0000 L=011D0017 S=011D000002 DIP COMPLETE
$HASP395 SYSGEN5 ENDED
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP150 SYSGEN5 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN5 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
924
925
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
116
926
927
928
929
930
931
932
933
934
$a ’ sysgen6 ’
$HASP000 SYSGEN6 RELEASED
$HASP373 SYSGEN6 STARTED − INIT 3 − CLASS C − SYS H158
$HASP395 SYSGEN6 ENDED
$HASP309
INIT 3 INACTIVE ∗∗∗∗∗∗∗∗ C=CBA
$HASP150 SYSGEN6 ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 SYSGEN6 IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
935
936
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
937
938
939
940
941
942
943
944
945
$HASP100
$HASP373
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
SYSGEN03 ON READER1
SYSGEN03 STARTED − INIT 1 − CLASS A − SYS H158
SYSGEN03 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SYSGEN03 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SYSGEN03 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
946
947
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
948
949
950
951
952
953
954
955
956
957
958
v 14 c , o n l i n e
IEE302I 14C
ONLINE
m 14 c , v o l =( s l , s p o o l 1 ) , u s e=p r i v a t e
$HASP100 MOUNT
ON STCINRDR
$HASP373 MOUNT
STARTED
$HASP395 MOUNT
ENDED
$HASP150 MOUNT
ON PRINTER1
$HASP160 PRINTER1 INACTIVE − CLASS=AJ
$HASP250 MOUNT
IS PURGED
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
959
960
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
961
962
963
964
965
966
967
968
969
$HASP100
$HASP373
$HASP395
$HASP309
$HASP150
$HASP160
$HASP250
$HASP099
SYSGEN04 ON READER1
SYSGEN04 STARTED − INIT 1 − CLASS A − SYS H158
SYSGEN04 ENDED
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
SYSGEN04 ON PRINTER1
PRINTER1 INACTIVE − CLASS=AJ
SYSGEN04 IS PURGED
ALL AVAILABLE FUNCTIONS COMPLETE
970
971
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
972
973
974
975
976
977
978
979
980
981
982
$p j e s 2
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
$HASP395 INIT
ENDED
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO SYSOUT CLASS A
IEE037I LOG NOT ACTIVE
2000 1 6 . 4 0 . 3 8 CONSOLE
IEE142I 01F NOW RECEIVING HARDCOPY
4000 1 6 . 4 0 . 3 8
IEE043I A SYSTEM LOG DATA SET HAS BEEN QUEUED TO
SYSOUT CLASS A
4000 1 6 . 4 0 . 3 8
IEE037I LOG NOT ACTIVE
0000 1 6 . 4 0 . 3 8
IEF196I IEF142I JES2 JES2 − STEP WAS EXECUTED − COND
CODE 0000
117
983
0000 1 6 . 4 0 . 3 8
984
0000 1 6 . 4 0 . 3 8
0000 1 6 . 4 0 . 3 8
985
987
0000 1 6 . 4 0 . 3 8
0000 1 6 . 4 0 . 3 8
988
0000 1 6 . 4 0 . 3 8
986
IEF196I IEF285I
KEPT
IEF196I IEF285I
IEF196I IEF285I
KEPT
IEF196I IEF285I
IEF196I IEF285I
KEPT
IEF196I IEF285I
SYS1 . PROCLIB
VOL SER NOS= START1 .
SYS1 .HASPCKPT
VOL SER NOS= SPOOL0 .
SYS1 .HASPACE
VOL SER NOS= SPOOL0 .
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
HHCTE006A Enter i n p u t f o r c o n s o l e d e v i c e 001F
z eod
4000 1 6 . 4 0 . 5 5
IEE334I HALT
EOD SUCCESSFUL
quiesce
#
1 i p l 150
#
2 d e v i n i t 012 j c l / w r i t e i p l . j c l e o f
#
3 d e v i n i t 012 j c l / s y s g e n 0 0 . j c l e o f
#
4 d e v i n i t 012 j c l / s y s g e n 0 1 . j c l e o f
#
5 d e v i n i t 012 j c l / s y s g e n 0 2 . j c l e o f
#
6 d e v i n i t 012 j c l / s t a g e 2 . j c l e o f
#
7 d e v i n i t 012 j c l / s y s g e n 0 3 . j c l e o f
#
8 a t t a c h 14 c 3350 dasd / s p o o l 1 . 3 3 5 0
#
9 d e v i n i t 012 j c l / s y s g e n 0 4 . j c l e o f
#
#
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
#Almost End
#i n s t m v s 5 . htm
4000 1 2 . 2 4 . 5 4
4000 1 2 . 2 4 . 5 4
4000 1 2 . 2 4 . 5 4
4000 1 2 . 2 4 . 5 4
4000 1 2 . 2 4 . 5 4
4000 1 2 . 2 4 . 5 4
4000 1 2 . 2 4 . 5 4
8000 1 2 . 2 4 . 5 4
8000 1 2 . 2 4 . 5 4
0000 1 2 . 2 7 . 1 0
=001 ’)
8000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
4000 1 2 . 3 1 . 4 7
=12.31.47
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
0000 1 2 . 3 1 . 4 7
IEE354I SID=H155
IEE354I JWT=10
IEE354I BUF=2000
IEE354I MAN=ALL
IEE354I EXT=YES
IEE354I OPT=2
IEE354I OPI=YES
∗00 IEE357A REPLY WITH SMF VALUES OR U
∗01 IFB010D ENTER ’ IPL REASON,SUBSYSTEM ID ’ OR ’U’
K N,PFK=(12 ,CMD=’K S ,DEL=RD, SEG=19 ,CON=N,RNUM=19 ,RTME
IEE600I REPLY TO 00 IS ;U
R 0 ,U
IEE360I SMF NOW RECORDING ON SYS1 .MANX ON MVSRES TIME
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
IEF196I
1
2
3
4
118
//JES2
JOB MSGLEVEL=1
//STARTING EXEC JES2
XXJES2
PROC M=JES2PARM,
01700000
XX
N=SYS1 ,
01710000
XX
L=LINKLIB ,
01720000
XX
U=3350 ,
01730000
XX
N1=SYS1 ,
01740000
XX
P=PARMLIB
01750000
XXIEFPROC EXEC PGM=HASJES20 ,
01760000
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
0000 1 2 . 3 1 . 4 7
IEF196I
XX
TIME=1440 ,
0000 1 2 . 3 1 . 4 7
IEF196I
01770000
0000 1 2 . 3 1 . 4 7
IEF196I
XX
DPRTY=(15 ,15)
0000 1 2 . 3 1 . 4 7
IEF196I
01780000
0000 1 2 . 3 1 . 4 7
IEF196I
5
XXSTEPLIB DD UNIT=&U, DISP=SHR,DSN
=&N. . & L
0000 1 2 . 3 1 . 4 7
IEF196I
01790000
0000 1 2 . 3 1 . 4 7
IEF196I STMT NO. MESSAGE
0000 1 2 . 3 1 . 4 7
IEF196I −
0000 1 2 . 3 1 . 4 7
IEF196I
5
IEF653I SUBSTITUTION JCL − UNIT
=3350 ,DISP=SHR,
0000 1 2 . 3 1 . 4 7
IEF196I DSN=SYS1 . LINKLIB
0000 1 2 . 3 1 . 4 7
IEF196I
6
XXPROC00
DD DSN=SYS1 . PROCLIB,
DISP=SHR
0000 1 2 . 3 1 . 4 7
IEF196I
01800000
0000 1 2 . 3 1 . 4 7
IEF196I
7
XXHASPPARM DD DSN=&N1 . . &P(&M) , DISP
=SHR
0000 1 2 . 3 1 . 4 7
IEF196I
01810000
0000 1 2 . 3 1 . 4 7
IEF196I
7
IEF653I SUBSTITUTION JCL − DSN=SYS1
.PARMLIB(JES2PARM) ,
0000 1 2 . 3 1 . 4 7
IEF196I DISP=SHR
0000 1 2 . 3 1 . 4 7
IEF196I
8
XXHASPLIST DD DDNAME=IEFRDER
0000 1 2 . 3 1 . 4 7
IEF196I
01820000
0000 1 2 . 3 2 . 3 4
IEF196I $HASP479 UNABLE TO OBTAIN CKPT DATA SET LOCK
− IO ERROR
0000 1 2 . 3 2 . 3 4
IEF196I
− REPLY Y OR N TO CONTINUE
FFFF 1 2 . 3 3 . 0 9
IEE600I REPLY TO 03 IS ; SUPPRESSED
0000 1 2 . 3 3 . 0 9
R 3 ,SUPPRESSED
FFFF 1 2 . 3 3 . 0 9
∗04 $HASP436 REPLY Y OR N TO CONFIRM CHECKPOINT RECORD
CHANGE
0200 1 2 . 3 9 . 1 2 JOB
2 $HASP100 SYSGEN06 ON READER1
INSTALL IEFACTRT
FC00 1 2 . 3 9 . 1 2 JOB
2 $HASP104 SYSGEN06
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
FC00 1 2 . 3 9 . 1 2 JOB
2 $HASP104 SYSGEN06 ∗
∗
FC00 1 2 . 3 9 . 1 2 JOB
2 $HASP104 SYSGEN06 ∗ This Usermod becomes e f f e c t i v e
only
∗
FC00 1 2 . 3 9 . 1 2 JOB
2 $HASP104 SYSGEN06 ∗ i f you do an IPL with t h e CLPA
option
∗
FC00 1 2 . 3 9 . 1 2 JOB
2 $HASP104 SYSGEN06 ∗
∗
FC00 1 2 . 3 9 . 1 2 JOB
2 $HASP104 SYSGEN06
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
4000 1 2 . 3 9 . 1 2 JOB
2 $HASP373 SYSGEN06 STARTED − INIT 1 − CLASS A − SYS
H155
4000 1 2 . 3 9 . 2 0 JOB
2 $HASP395 SYSGEN06 ENDED
C000 1 2 . 3 9 . 2 0
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
0200 1 2 . 3 9 . 2 0 JOB
2 $HASP150 SYSGEN06 ON PRINTER2
4 , 9 2 5 LINES
0200 1 2 . 3 9 . 2 0
$HASP160 PRINTER2 INACTIVE − CLASS=A
0200 1 2 . 3 9 . 2 0 JOB
2 $HASP250 SYSGEN06 IS PURGED
FF40 1 2 . 3 9 . 2 0
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
0200 1 2 . 4 1 . 0 4 JOB
3 $HASP100 SYSGEN07 ON READER1
INSTALL SMF MODS
FC00 1 2 . 4 1 . 0 4 JOB
3 $HASP104 SYSGEN07
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
FC00 1 2 . 4 1 . 0 4 JOB
3 $HASP104 SYSGEN07 ∗
∗
FC00 1 2 . 4 1 . 0 4 JOB
3 $HASP104 SYSGEN07 ∗ THIS USERMOD BECOMES EFFECTIVE
ONLY
∗
FC00 1 2 . 4 1 . 0 4 JOB
3 $HASP104 SYSGEN07 ∗ IF YOU DO AN IPL WITH THE CLPA
OPTION
∗
119
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
FC00 1 2 . 4 1 . 0 4 JOB
3
$HASP104 SYSGEN07 ∗
∗
FC00 1 2 . 4 1 . 0 4 JOB
3 $HASP104 SYSGEN07
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
4000 1 2 . 4 1 . 0 4 JOB
3 $HASP373 SYSGEN07 STARTED − INIT 1 − CLASS A − SYS
H155
4000 1 2 . 4 1 . 1 1 JOB
3 $HASP395 SYSGEN07 ENDED
C000 1 2 . 4 1 . 1 1
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
0200 1 2 . 4 1 . 1 1 JOB
3 $HASP150 SYSGEN07 ON PRINTER2
1 , 1 9 9 LINES
0200 1 2 . 4 1 . 1 1
$HASP160 PRINTER2 INACTIVE − CLASS=A
0200 1 2 . 4 1 . 1 1 JOB
3 $HASP250 SYSGEN07 IS PURGED
FF40 1 2 . 4 1 . 1 1
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
0200 1 2 . 4 1 . 5 4 JOB
4 $HASP100 SYSGEN08 ON READER1
INSTALL VTAM/TSO
4000 1 2 . 4 1 . 5 4 JOB
4 $HASP373 SYSGEN08 STARTED − INIT 1 − CLASS A − SYS
H155
0200 1 2 . 4 1 . 5 5 JOB
5 $HASP100 SYSGEN08 ON INTRDR
ASSEMBLE VTAM
C000 1 2 . 4 1 . 5 5
$HASP301 SYSGEN08 − DUPLICATE JOB NAME − JOB DELAYED
4000 1 2 . 4 1 . 5 5 JOB
4 $HASP395 SYSGEN08 ENDED
0200 1 2 . 4 1 . 5 5 JOB
4 $HASP150 SYSGEN08 ON PRINTER2
520 LINES
0200 1 2 . 4 1 . 5 5
$HASP160 PRINTER2 INACTIVE − CLASS=A
0200 1 2 . 4 1 . 5 5 JOB
4 $HASP250 SYSGEN08 IS PURGED
4000 1 2 . 4 1 . 5 5 JOB
5 IEF677I WARNING MESSAGE( S ) FOR JOB SYSGEN08 ISSUED
4000 1 2 . 4 1 . 5 5 JOB
5 $HASP373 SYSGEN08 STARTED − INIT 1 − CLASS A − SYS
H155
4000 1 2 . 4 1 . 5 5 JOB
5 $HASP395 SYSGEN08 ENDED
C000 1 2 . 4 1 . 5 5
$HASP309
INIT 1 INACTIVE ∗∗∗∗∗∗∗∗ C=A
0200 1 2 . 4 1 . 5 5 JOB
5 $HASP150 SYSGEN08 ON PRINTER2
224 LINES
0200 1 2 . 4 1 . 5 5
$HASP160 PRINTER2 INACTIVE − CLASS=A
0200 1 2 . 4 1 . 5 5 JOB
5 $HASP250 SYSGEN08 IS PURGED
FF40 1 2 . 4 1 . 5 5
$HASP099 ALL AVAILABLE FUNCTIONS COMPLETE
1105
1106
1107
1108
1109
#d e v i n i t
#d e v i n i t
#d e v i n i t
#d e v i n i t
00 c
00 c
00 c
00 c
j c l / sysgen05 .
j c l / sysgen06 .
j c l / sysgen07 .
j c l / sysgen08 .
jcl
jcl
jcl
jcl
eof
eof
eof
eof
120

Podobne dokumenty