Tuhle otázku jsem slýchal skoro pokaždé, když jsem někomu vysvětloval, kde že to vlastně pracuju. Odpověď by se dala formulovat zhruba takto:
Mainframy jsou jedny z nejvýkonnějších počítačů, s jakými se můžeme setkat. Jejich hlavní síla ale není ve vysokém výpočetním výkonu (i když ani ten rozhodně není zanedbatelný), ale především ve vysoké spolehlivosti a ve schopnosti zpracovávat obrovská množství dat a transakcí. Ano, tohle jsou ty počítače o velikosti několika ledniček, co pracují v dobře opevněných sklepech letišť, bank a dalších velkých firem a institucí. Myslíte si, že mamutí "superpočítače" dávno patří na smetiště dějin a že dneska všechno jede na PCčkách? Kdepak. Bankomaty, rezervace letenek, elektronické platby přes internet - to, co vidíte, je jenom uživatelské rozhraní, ale všechnu podstatnou práci odvádějí mainframy. V době psaní tohoto článku vlastnilo svůj mainframe plných 95% nejbohatších firem světa. Z ekonomického hlediska je to sice pekelně drahá hračka, ale v konečném součtu vyjde levněji než nákup a údržba odpovídajícího množství PCček o stejném výkonu, o spolehlivosti nemluvě. A větší část zisků Velké Modré (IBM) pochází právě z mainframů.
Pokud by vás zajímal vznik a vývoj této platformy, doporučuji článek Complete history of mainframe computing od Riche Arzoomaniana.
Dobrá, konec neplacené reklamy, teď mainframům trochu nakoukneme pod kůži.
Architekturu "písíčka" známe nejspíš všichni: procesor s jedním nebo více jádry, nějaká ta RAMka, diskové jednotky a mechaniky, vstup z klávesnice a myši, výstup na monitor a do reproduktorů a to všechno je propojené sběrnicemi a kabely. Mainframe je na tom v základě podobně, jenom má všeho o trochu víc: pole procesorů, kupu paměti, disková pole a jiné úložné prostory a všechno má propojené a zazálohované tak, aby ho ani selhání hardwaru nerozhodilo. Jinými slovy: do mainframu můžete za chodu vrazit šroubovák a vyloupnout nějaký ten procesor nebo jiného "švába" a dosáhnete tím nanejvýš toho, že se rozsvítí pár červených kontrolek a zbytek procesorů se bude muset trochu víc snažit (toho je dosaženo paralelním prováděním každé instrukce na více procesorech zároveň a porovnáváním výsledků - pokud se liší, došlo k chybě).
Kromě klasických procesorů na počítání tu existují ještě tzv. kanálové procesory, což jsou v podstatě řadiče I/O operací. Vzhledem k tomu, že I/O bývá ze všech činností počítače ta časově nejnáročnější, přináší její oddělení od výpočtů poměrně výrazné urychlení (hlavně při práci s objemnými databázemi a podobně).
Dále tu máme operační paměť. Opět důkladně zálohovaná a modulární věc. Samozřejmě, skutečná paměť je relativně drahá, a proto se její zrovna nepoužívané úseky (stránky) odkládají na pevné disky, aby fyzické RAMky nemuselo být tolik. Tím vzniká virtuální paměť mnohem větší než ta reálná, stejně jak to známe z PC. Od té doby, co bylo zavedeno 64bitové adresování, se dá teoreticky naadresovat až 16 EB (exabytů) virtuální paměti. Tolik se jí ještě nikdy pohromadě nesešlo a asi ani hned tak nesejde, takže je rezerva do budoucna celkem dostatečná. Virtuální paměť je z důvodu zpětné kompatibility členěna skoro stejně složitě jako ta na PC: 24bitově adresovatelná oblast pod 16 MB, 31bitově adresovatelná oblast mezi 16 MB a 2 GB (která je rozdělena na spoustu podoblastí) a 64bitově adresovatelná oblast nad tím.
Trvalé úložiště dat zajišťují prakticky výhradně dva druhy zařízení: harddisky (alias DASD - direct access storage device) a magnetické pásky. Harddisky jsou obvykle seskupeny v diskových polích, která mají vlastní paměť a inteligenci a starají se o průběžné zálohování a hlášení závad. A pásky... ehm, cože? Dneska? Ano, přesně tak. Na ukládání záloh databází a jiných dlouho nepoužívaných terabytů jsou harddisky přece jenom zbytečně drahé a energeticky náročné a pásky už dnes mají takovou kapacitu (řádově gigabyty na metr), že to není problém. Pásky (vlastně kazety) jsou uloženy v automatizovaných úložištích, kde je na požádání vyhledává robot a celé to má nějakou tu vlastní inteligenci, takže navenek se to jeví jako jeden obrovský disk se sekvenčním přístupem a s dobou vyhledávání v řádu desítek sekund až jednotek minut. Zastánce pokroku teď ale přece jen trošku uklidním: dříve velmi rozšířené děrné štítky už se nepoužívají :-). Zbylo po nich jenom pár reliktů, například znaková sada EBCDIC nebo to, že se řádkům zdrojových kódů občas říká "štítky" a jsou dlouhé vždy 80 znaků, protože právě tolik se na jeden děrný štítek vešlo.
Na přímou interakci s programátory a správci má mainframe terminály. Jeden terminál je v podstatě klávesnice, monitor a pár drátů, ale protože tahle zařízení vyráběla pouze IBM a byla pekelně drahá, vytlačily je softwarové emulátory běžící na normálních PC. Jediná nevýhoda je, že originální terminál má dvakrát víc F-kláves než klávesnice písíčka (takže "Press F13 to continue" už není jenom vtip) a kromě nich ještě čtyři A-klávesy (A jako "attention") a pár extra kontrolek, ale to všechno se dá emulovat. A velká výhoda naopak je, že emulátor umí pracovat se schránkou, což origoš terminál nezvládal. Koncoví uživatelé s mainframem obvykle komunikují přes různá internetová rozhraní (front-endy). Divili byste se, kolik "internetových aplikací" je ve skutečnosti jenom maska s mainframem v pozadí.
Zpátky k procesoru, podíváme se na jeho hlavní odlišnosti od PC.
PC | mainframe | velikost v B |
---|---|---|
byte | character | 1 |
word | halfword | 2 |
dword | fullword | 4 |
qword | doubleword | 8 |
- | quadword | 16 |
Filosofie softwaru je na mainframech úplně jiná než na PC. Zatímco na písíčku obvykle zaplatíte za koupi programu a pak ho používáte jak je libo, na mainframu si program pronajmete a platíte za spotřebovaný strojový čas. Jsou to docela pálky (jednou jsem spustil asi pětiminutový job a kdyby to nebylo v testovacím systému, stálo by to přes 1000 dolarů), ale z pohledu zákazníka to má jednu velkou výhodu. Zatímco výrobci programu pro PC stačí nalákat lidi ke koupi a pak se o ně nestará, dokud nevydá novou verzi (která údajně vyřeší všechny problémy, na které si stěžovali), na mainframu je potřeba urdžet si každého zákazníka co nejdéle, a proto je stoprocentní zákaznická podpora samozřejmostí. Stačí nahlásit, že vám program při takové a takové situaci padá a támhle se chová jinak než by měl a za pár hodin, dní nebo týdnů (podle situace a závažnosti) dostanete opravný patch.
Další otázkou je kompatibilita. Zatímco na PC můžeme mluvit o štěstí, když se nám na nejnovějším stroji a OS podaří spustit tři roky starý program (no dobře, to přeháním), na nejmodernějším mainframu bez problémů poběží i třicet let staré vykopávky (a také často běhají, protože obchodníci, kteří je obvykle provozují, neradi předělávají něco, co dobře funguje, jenom proto, aby to bylo modernější). Obráceně to nejde (na architektuře /360 dnešní 64bitové věci nespustíte), ale zpětná kompatibilita je stoprocentní. Programátoři se proto stále setkávají s nejrůznějšími archaickými jazyky, například Cobolem (věděli jste, že je v něm napsána nadpoloviční většina všech obchodních aplikací, které jsou dnes v provozu?), ve kterých je potřeba sem tam něco opravit nebo připsat, když si zákazník vzpomene.
Co že na tom železe vlastně běhá?
Úplně první program, se kterým se každý mainframe setká, slouží ke konfiguraci hardwaru. Architektura mainframu sice umožňuje zapojování a vypojování komponentů za chodu, ale všechny musíme systému řádně ohlásit. Konfigurátor běží na PC, obvykle nějakém notebooku, který se pak spolu s mainframem zamkne do jedné skříně. Další věc, kterou tento program umí, je vytváření logických oddílů (logical partition - LPAR). Zjednodušeně řečeno se tím jeden fyzický stroj rozdělí na několik samostatných, nezávislých mainframů. Do každého LPARu můžeme nainstalovat jeden operační systém. Obvykle to bývá VM (Virtual Machine), kterým každý LPAR dále rozdělíme na prakticky libovolný počet virtuálních počítačů. Na každém z nich potom můžeme nainstalovat jiný OS (klidně i další VM) a kdyby nám náhodou jeden z nich zkolaboval, ostatních se to netýká.
Mainframy jsou určeny pro nonstop provoz, odstávky se obvykle měří v minutách, nanejvýš hodinách ročně. S hláškami typu "po dokončení instalace bude třeba restartovat počítač" se tu nesetkáte (maximálně tak v těch virtuálních, ale ne na úrovni celého mainframu). Občas to ztěžuje údržbu, protože někdy by se pořádný restart docela hodil, ale náš zákazník - náš pán, a když je ve smlouvě uvedena dostupnost 99,9999%, musí se to dodržet.
Operačních systémů pro mainframy je celá řada: z/OS, Solaris, z/Linux a hafo dalších, které mají místo jména jenom zkratku a které si nepamatuju (zájemci nechť zapátrají třeba na Wikipedii). Do styku jsem zatím přišel pouze se z/OSem, který si tu teď trošku rozebereme.
"z/" v názvu má znamenat "zero downtime", čili "nikdy nepadá" (podle jiných pramenů je to kód pro 64bitovou architekturu). Nebudu se rozepisovat o tom, jaký je to úžasně stabilní OS (náš testovací systém se nám dařilo zahlcovat a kousat skoro každý týden) a rovnou popíšu pár jeho nejzajímavějších vlastností a aplikací, které se v něm spouštějí.
Prakticky ve všech OS pro PC je soubor prostě hromada bajtů, která se libovolně nafukuje podle toho, jak do ní zapisujeme. O to, co je uvnitř za data a jak je interpretovat, se stará programátor. V z/OSu je to úplně jinak (začíná to už terminologií: souborům se neříká "file", ale "data set").
První ze dvou nejdůležitějších rozdílů je, že soubory mají předem danou velikost. Když soubor vytváříme (alokujeme), zvolíme si, kolik místa (v jednotkách "tracks" nebo "cylinders") pro něj chceme vyhradit rovnou (primary allocation) a po jak velkých kusech se má automaticky přialokovávat v případě, že se soubor zaplní (secondary allocation; těchto dodatečně alokovaných kousků může mít jeden soubor až na výjimky maximálně 16). To má za následek dvě věci: zaprvé víc práce při vytváření nového souboru a možné problémy při jeho zaplnění, a zadruhé větší bezpečnost (nehrozí, že by nějaký program nebo uživatel něčím zaplácal všechny dostupné disky) a žádnou fragmentaci.
Druhý hlavní rozdíl je ve vnitřní struktuře souborů. Tady je pevně definována už na úrovni systému. Existují soubory:
Dalším rozdílem oproti PC je, že tu nenajdeme adresáře. Soubory se rozlišují pouze jménem, které se skládá z několika tzv. kvalifikátorů oddělených tečkou, např.:
LOJZA.PRACE.PROGRAMY.LOAD
Případně, když se odkazujeme na member v knihovně, tak ještě jeho jméno v závorce:
LOJZA.PRACE.PROGRAMY.LOAD(PROG1)
Každý kvalifikátor nebo jméno memberu může mít max. 8 znaků (pro dosaře žádná novinka). První kvalifikátor (zvaný HLQ) obvykle tvoří jméno uživatele (ale není to podmínkou), další dle potřeby. Kdybychom si místo teček představili lomítka, dostali bychom v podstatě taky jakoby cestu k souboru, ale je tu jeden rozdíl: v z/OSu nás nezajímá, na kterém disku se soubor fyzicky nachází, přistupujeme k němu pouze přes jméno (za určitých podmínek jdou hodně velké soubory roztáhnout i přes několik disků). Jméno disku (obvykle šestiznakový identifikátor) můžeme zjistit nebo si ho při alokaci souboru explicitně nastavit, ale asi jediné, kvůli čemu bychom to mohli chtít dělat, jsou přístupová práva na jednotlivé disky.
V z/OSu programy fungují buď v režimu online, tj. na popředí a ve spolupráci s uživatelem, nebo v ražimu batch, tj. na pozadí a bez zásahu zvenčí. O řazení dávkových úloh do fronty a jejich postupné spouštění se stará subsystém JES (nebo JES2, znamená to Job Entry Subsystem). Na to, abychom mohli popsat, které programy chceme v dávkové úloze spustit a s jakými soubory mají pracovat, existuje jazyk JCL (Job Control Language). Je to takový zvláštní paskvil, kde každý řádek musí začínat dvěma lomítky (//), při dělení dlouhých příkazů do více řádků je potřeba dodržet správnou pozici a všechno musí být psáno velkými písmeny, jinak to nefunguje. Jeden job (tj. jeden JCL soubor) se skládá z hlavičky, kde je uveden identifikátor, účtovací číslo, jméno majitele a různé parametry, a jednoho nebo více tzv. kroků. Krok je několik příkazů, které říkají, jaký program (nebo JCLková procedura, což je v podstatě makro) se má spustit, jaké soubory má používat a případně ještě co se má dělat při jakém návratovém kódu. Propojování souborů s programem se řeší příkazy DD (Data Definition) a je to velice chytrá věc: v programu se na soubory odkazujeme přes symbolická "DDjména" a až v JCL k těmto jménům přiřadíme skutečné soubory, jejich vlastnosti a požadovaný způsob zpracování (otevřít pro čtení, přepsat, připsat na konec, vytvořit nový, smazat apod.). Kromě skutečných fyzických souborů můžeme DDjména napojit i na jiné věci: výstup se dá přesměrovat do spoolu (spool je fronta, do které se ukládají joby a jejich případné vstupy a výstupy), vstup přímo mezi příkazy JCL, kam se dají psát textová data (program si pak myslí, že čte z textového souboru s 80znakovými řádky) a všechno se dá v případě potřeby přesměrovat i úplně do pr- yč (DUMMY) a pak se veškeré I/O operace ignorují a program si myslí, že je všechno v pořádku (to se hodí třeba když se potřebujeme zbavit nějakého zbytečného, objemného výpisu). Skoky ani cykly v JCL nejsou; job prostě jede od začátku do konce, nanejvýš může některé kroky přeskočit.
Jsou věci, na které nám dávkové spouštění nestačí: textové editory, ruční práce se soubory a podobně. Takové programy běží v prostředí ISPF, což je v podstatě něco jako Turbo Vison nebo Norton Commander pro z/OS. Uživateli se na obrazovce terminálu zobrazují tzv. panely, což jsou textové obrazovky, ve kterých jsou některá pole aktivní a dá se do nich psát. Poslední výkřik estetiky spočívá v tom, že text může být barevný. Obsahy aktivních polí jsou přímo napojeny na proměnné, které si pak program zpracuje.
Chvíli mi trvalo, než jsem si zvykl na prodlevu po každém enteru (řádově několik desetin sekundy), ale co taky chtít, když sedím u terminálu v Praze a příslušný mainframe se nachází v New Yorku (dokáže tohle vaše Vzdálená plocha? :-) ).
CICS (vyslov "kiks") znamená Customer Information Control System a je to systém, který se stará - jak nečekaně - o provádění transakcí. Transakce je krátká výměna dat, která se musí buď povést celá nebo musí jít beze zbytku odvolat a zrušit. Nejčastěji jde o úkoly typu "vezmi x peněz z tohohle účtu a přesuň je na támhleten" (nesmí se stát, že by peníze někde přibyly a jinde neubyly nebo naopak). CICS je určen pro rychlé provádění obrovského množství těchto služeb. Až si někdy budete hrát s bankomatem, s největší pravděpodobností vás bude obsluhovat právě on.
Říká se, že se ještě nikdy nikomu nepodařilo hacknout mainframe. Také se říká, že je to proto, že nikdo neví, jak to udělat. Bezpečnost mainframů je prakticky absolutní, což je jeden z důvodů, proč si je firmy pořizují.
Z mnoha bezpečnostních softwarových balíků se stručně zmíním o dvou. První má poeticky znějící jméno RACF (vyslov "rakef"), které znamená Resource Access Control Facility. Řídí přístup uživatelů k jednotlivým zdrojům - diskům, paměti a tak. Druhý se jmenuje Top Secret a jak už název napovídá, neví o něm kromě jeho tvůrců nikdo nic. Údajně je ještě silnější než RACF, ale těžko říct.
USS neboli Unix System Services je emulátor plnohodnotného Unixu. Standard POSIX diktuje jenom jak se má systém chovat, ne jak má být naprogramován, takže zdrojáky USS pravděpodobně nemají se zdrojáky jiných Unixů vůbec nic společného, ale navenek se to chová úplně stejně. Nevýhoda USS je, že je příšerně pomalý, ale to může být problém té jedné konkrétní instalace, kterou jsem si vyzkoušel.
Systém souborů je uložen v hierarchickém VSAM souboru (HFS) a z pohledu uživatele se od PC nijak neliší. K dispozici máme dvě rozhraní: OMVS, což je klasický unixovský příkazový řádek, a ISHELL, což je takový hodně jednoduchý commander.
nebo alespoň stručný přehled těch nejpoužívanějších:
Tento článek berte pouze jako zběžné nakouknutí do světa mainframů, v žádném případě nebyl myšlený jako kompletní a vyčerpávající manuál. Ani nemůžu říct, že pokrývá to nejdůležitější, protože cílová oblast je velmi široká a já nejsem žádný mainframový guru. Zkrátka a prostě doufám, že aspoň vyvrátil pár obecně zažitých pověr (např. že mainframy jsou zastaralé a už se nepoužívají) a že jste se u něj moc nenudili :-).