informatyka
N r 5
M iesięcznik Maj
Rok X X
1985
Organ K om itetu Inform atyki MNSZWiT oraz Kom itetu Naukowo-Technicznego NOT ds. Inform atyki
K O L E G IU M R E D A K C Y J N E :
M g r in ż . Z b i g n i e w G L U Z A , d r in ż . W a c ła w IS Z K O W S K I, m g r T e r e s a J A B Ł O Ń S K A ( s e k r e t a r z r e d a k c j i ) , W ł a d y s ł a w K L E P A C Z ( z a s t ę p c a r e d a k t o r a n a c z e l n e g o ) , p r o f . d r h a b . L e o n Ł U K A S Z E W IC Z ( r e d a k t o r n a c z e l n y ) , m g r i n ż . A n d r z e j J . P I O T R O W S K I , d r in ż . J a n u s z Z A L E W S K I
S T A L E W S P Ó Ł P R A C U J Ą :
M g r In ż . W i t o l d A B R A M O W IC Z ( S z w a j c a r i a ) , m g r i n ż . R y s z a r d K . K O T T ( W ie lk a B r y t a n i a ) , d r J a c e k O W C Z A R - C Z Y K , d r A n d r z e j S Z A Ł A S , d r J a k u b T A T A R K IE W IC Z , m g r in ż . T e r e s a W I L C Z E K
P R Z E W O D N IC Z Ą C Y R A D Y P R O G R A M O W E J :
P r o f . d r h a b . T a d e u s z P E C H E
M a t e r i a ł ó w n i e z a m ó w i o n y c h r e d a k c j a n i e z w r a c a
R e d a k c j a : 00-041 W a r s z a w a , u l . J a s n a 14/16, p o k . 243 i 244, t e l . 27-71-40 lu b 26-82-61 w . 1-34
Z a k ł . G r a f . „ T a m k a ” . Z a m . 0265-1300/85.
O b j. 4,0 a r k . d r u k . N a k ł a d 6100 e g z . N-2G
I S S N 0542-9351,
C e n a e g z e m p l a r z a z ł 100,—
P r e n u m e r a t a r o c z n a z ł 1200,-
3 W YD A W N IC TW O
I N D E K S 36124
SIGMA
0 0 -9 5 0 Warszawa skrytka pocztow a 1 0 04
u l Biała 4
5 1985
W NUMERZE:
Superkom puter CRAY W acław Iszkow ski
ADA — standard operacji wejścia-wyjścia Jan Bielecki
Język program ow ania C (2) Julian W iniew ski DYDAKTYKA
K oncepcja nauczania m ikroinform atyki 'Wojciech Cellary, Jan Węglarz mikroKLAN
COMMODORE C 64 czy ZX SPECTRUM?
Akademia mikroKLANU (6) — D ekada
POMYSŁ! — Ja k odzyskać kontrolę nad program em realizow anym z pamięci, której nie ma?
Program ow any generator dźwięków AY-3-8910/12 G rafika IBM-PC (2)
Standard RS 232C
Z KRAJU
57 MTP. Pogoń za m ikro RATFOR na ODRZE 1305 ZE ŚWIATA
SICOB ’84
PICK — tajem nica inform atyki TERMINOLOGIA
Uwagi o terminologii języka ADA LISTY
Mówić o sobie POGLĄDY
Nożyce norym berskie
CZWARTA OKŁADKA — Piotr Zielczyński
Strona
1 4 7
11 13
23
29
30
III okł.
W N A J B L I Ż S Z Y C H N U M E R A C H :
O J e r z y K a r c z m a r c z u k o e f e k t y w n o ś c i o b lic z e ń n u m e r y c z n y c h
© M a r i a n F u r m a n , Z b i g n i e w M . N o w ic k i i J e r z y S o l a k o p a k i e c i e d o p r z e t w a r z a n i a i n f o r m a c j i z a p o m o c ą M E R Y 400
© J a c e k I r l i k o k w a l i f i k a c j i p r a w n e j p r o g r a m u k o m p u t e r o w e g o
© S t a n i s ł a w W a l i g ó r s k i o j ę z y k u p r o g r a m o w a n i a C
0 J a n B i e l e c k i o d e f i n i o w a n i u k o m p i l a t o r ó w i i n s t r u k c j i s t r u k t u r a l n y c h w j ę z y k u F O R T H
• Z b i g n i e w S u r a j o p r o b l e m a c h n a u c z a n i a i n f o r m a t y k i w s z k o ł a c h ś r e d n i c h
W A C Ł A W ISZKOWSKI W a rsz a w a
’V . \
Superkomputer C R A Y
Zwiększenie mocy obliczeniowej i szybkości obliczeń moż
na osiągnąć dzięki zwielokrotnieniu liczby procesorów, tw o
rząc systemy wieloprocesorowe, lub też przez skonstruow a
nie komputerów' o architekturze innej niż konwencjonalna.
Tak więc, obok gwałtownie rozszerzającego się św iata m ikro- inform atyki, następuje rozwój superkom puterów , których podstawowym celem jest w ykonanie m aksym alnie wielu operacji w najkrótszym czasie. H istoria rozwoju maszyn tej kategorii biegnie w raz z całą inform atyką, chociaż do
piero w drugiej połowie lat siedemdziesiątych pojawiły się tu instalacje produkowane seryjnie. O w ybranych zastoso
w aniach tego rodzaju maszyn trak tu je interesujący esej [3]
oraz arty k u ł w INFORMATYCE [2].
Obecnie najpopularniejszym i superkom puteram i są: poto
kowo działające CRAY i CDC CYBER 205, tablicowy ICL DAP oraz BURROUGIIS BSP [3]. O ich protoplastach oraz o niektórych innych rozw iązaniach można przeczytać w książce Enslowa [1]. Oczywiście, nadal są opracowywane nowe koncepcje superkom puterów o coraz większej mocy obliczeniowej. W tym artykule przedstaw ię bliżej pierwszy z tej rodziny superkom puterów CRAY-maszynę CRAY-1 z 1976 roku.
Uzyskanie m aksym alnej szybkości działania maszyny jest możliwe dzięki zaprojektow aniu odpowiedniej architektury oraz zastosowaniu najnow szych technologii sprzętowych.
W architekturze maszyny CRAY-1 celowi tem u służy praktycznie każdy element, a zwłaszcza:
— wielomodułowa pamięć operacyjna,
— potokowo działające jednostki arytmetyczno-logiczne,
— w ew nętrzne pam ięci rejestrów skalarnych i w ektoro
wych,
— w ew nętrzne pamięci sekwencji instrukcji,
— nakładkow ane w ykonywanie rozkazów.
Tabela 1. Przetw arzanie potokowe
K l a s y c z n y m p r z y k ł a d e m p r z e t w a r z a n i a p o t o k o w e g o j e s t s u m o w a n i e d w ó c h w e k t o r ó w n - e l e m e n t o w y c h z a w i e r a j ą c y c h l i c z b y z m i e n n o p r z e c i n k o w e . Z w y k ł a j e d n o s t k a d o d a w a n i a z m ie n n o p r z e c i n k o w e g o w y k o n a s u m o w a n i e p a r lic z b w p o s t a c i : X “= e • 2p , y = f • 2q — w c z t e r e c h c y k l a c h z e g a r a , d o k o n u j ą c k o l e j n o n a s t ę p u j ą c y c h o p e r a c j i :
— p o r ó w n a n i a w y k ł a d n i k ó w (p— q)
— p r z e s u n i ę c i a m a n t y s y z g o d n ie z r ó ż n i c ą w y k ł a d n i k ó w
— d o d a n i a m a n t y s
— n o r m a l i z a c j i w y n i k u .
W p r z y p a d k u w e k t o r ó w , z a k o ń c z e n i e o b lic z e ń n a s t ą p i p o 4 n c y k l a c h z e g a r a .
Z m i e n n o p r z e c i n k o w a , J e d n o s t k a d o d a w a n i a p o t o k o w e g o , d z i a ł a j ą c a n a l o g i c z n i e j a k p o p r z e d n i o , p o w y k o n a n i u p i e r w s z e g o k r o k u d l a p i e r w s z e j p a r y lic z b p r z e c h o d z i d o w y k o n y w a n i a d r u g i e g o k r o k u d l a t e j p a r y i j e d n o c z e ś n i e m o ż e w y k o n a ć p i e r w s z y k r o k d l a n a s t ę p n e j p a r y lic z b :
X i + y j 1 2 3 4 = > Zi x s + y 2 1 2 3 4 =■ > z2 x 3+ y 3 1 2 3 4 = > z 3
1 2 3 4 5 6
T a k w ię c p i e r w s z y w y n i k o t r z y m a m y p o c z t e r e c h c y k l a c h z e g a r a , a k a ż d y n a s t ę p n y — w k o l e j n y c h c y k l a c h . D la c a ł e g o w e k t o r a z a k o ń c z e n i e o b lic z e ń n a s t ą p i p o n + 3 c y k l a c h z e g a r a , a w ię c J u ż d l a n = 3 o b l i c z e n i a z o s t a n ą w y k o n a n e d w a r a z y s z y b c ie j!
Zanim przedstaw ię dokładniej architekturę maszyny, zw ra
cając szczególną uwagę na sposoby spełnienia podstawowe
go założenia projektowego, przypom nę zasadę przetw arzania potokowego (ang. pipelining), zilustrow aną w tabeli 1.
ARCHITEKTURA
Podstawowym i param etram i kom putera CRAY-1 są: czas cyklu zegara równy 12,5 ns oraz dostępu do pam ięci opera
cyjnej — 50 ns.
Pam ięć operacyjna o pojemności 1 M słów (^ 048 576 słów) 64-bitowych, uzupełnionych 8-bitowym rozszerzeniem korek
cyjnym, jest podzielona na 16 modułów (ang. bank). A dre- sacja słów przebiega kolejne moduły modulo 16. Właściwość ta (szerokość dostępu) umożliwia równoczesny dostęp do 16 kolejnych słów na każde 50 |is. Szybokość przesłań z (do) pamięci może więc wynosić 16/50 • 103 = 320 M słów/s. Pełna szerokość dostępu jest wykorzystyw ana jedynie przy pobie
ran iu instrukcji. Dla danych w ykorzystyw ana jest szybkość rów na 1/12,5-103 = 80 M słów/s (słów 64-bitowych).
Schem at architektury kom putera CRAY-1 przedstaw ia ry sunek. W m aszynie dostępnych jest 12 różnych jednostek funkcjonalnych, podzielonych n a cztery grupy ze względu na rodzaj operacji: adresowych, skalarnych, zmiennoprze-
Tabela 2. Jednostki arytmetyczno-logiczne
J E D N O S T K I A D R E S O W E (2 4 -b lto w e ) — o b l i c z e n i a m o d y f i k a c j i a d r e s ó w , i n d e k s ó w , o p e r a c j i n a l i c z b a c h c a ł k o w l t o - I l c z b o w y c h o m a ł y c h a d r e s a c h p r z e c h o w y w a n y c h w r e j e s t r a c h a d r e s o w y c h :
O d o d a w a n i e c a l k o w l t o l i c z b o w e — 2 c y k l e (25 ns) O m n o ż e n i e c a ł k o w i t o l i c z b o w e — 6 c y k l i (75 |is)
J E D N O S T K I S K A L A R N E (6 4 -b ito w e ) — w y k o n y w a n i e o p e r a c j i a r y t m e t y c z n y c h c a ł k o w i t o l i c z b o w y c h 1 l o g i c z n y c h n a w a r t o ś c i a c h p r z e c h o w y w a n y c h w r e j e s t r a c h s k a l a r n y c h : 9 d o d a w a n i e c a l k o w l to lic z b o w e
© p r z e s u n i ę c i e z a w a r t o ś c i :
— p o j e d y n c z e g o r e j e s t r u S x
— d w ó c h s ą s i e d n i c h r e j e s t r ó w S x , S y O l o g ic z n e d z i a ł a n i e b e z p o ś r e d n i o
n a r e j e s t r z e
O w y z n a c z e n i e w a r g u m e n c i e l i c z b y b i t ó w r ó w n y c h :
— j e d n o ś c i
— z e r o , p o p r z e d z a j ą c y c h j e d y n k ę
3 c y k l e (7,5 |is)
— 2 c y k l e (25 j»s)
— 3 c y k l e (37,5 n*)
— 1 c y k l (12,5 ns)
— 4 c y k l e (50 ns)
— 3 c y k l e (37,5 ns)
J E D N O S T K I Z M IE N N O P R Z E C I N K O W E (G l-b ito w e ) — w y k o n y w a n i e o p e r a c j i z m i e n n o p r z e c i n k o w y c h n a a r g u m e n t a c h p o b i e r a n y c h z r e j e s t r ó w s k a l a r n y c h 1 (iu b ) w e k t o r o w y c h w a r y t m e t y c e 4 8 -b it o w e j m a n t y s y ( d o k ł a d n o ś ć 14 c y f r d z i e s i ę t n y c h ) i 1 6 -b it o w y m w y k ł a d n i k u ( z a k r e s l i c z b y lOe—2500...
I0e+ 2 5 0 0 ):
® d o d a w a n i e — 6 c y k l i (74 ns)
© m n o ż e n i e — 7 c y k l i (97,5 ys)
0 a p r o k s y m a c j a o d w r o tn o ś c i
( d l a d z i e l e n i a ) — 14 c y k l i (175 ns)
J E D N O S T K I W E K T O R O W E (6 4 -b ito w e ) — w y k o n y w a n i e p o t o k o w e , p r z y u w z g l ę d n i e n i u z a w a r t o ś c i r e j e s t r u m a s k i V M 1 r e j e s t r u d łu g o ś c i V L :
0 d o d a w a n i e c a ł k o w i t o l i c z b o w e
© p r z e s u n i ę c i e w p o j e d y n c z y c h lu b w d w ó c h k o l e j n y c h r e j e s t r a c h w e d ł u g z a w a r t o ś c i r e j e s t r u A x
© o p e r a c j e l o g ic z n e n a e l e m e n t a c h
w e k t o r a — 2 c y k l c (25 (is)
— 3 c y k l e (37,5 ns)
— 4 c y k l e (50 (is)
cinkowych I wektorowych. Jednostki te mogą działać rów no
cześnie oraz w trybie przetw arzania potokowego, akceptu
jąc kolejne argum enty w każdym cyklu zegara. Wykaz tych jednostek oraz liczbą cykli zegara (12,5 us) potrzebnych do uzyskania pierwszego wyniku podano w tabeli 2.
Aby możliwe było natychm iastow e dostarczenie argum en
tów i odebranie wyników, z grupam i jednostek funkcjo
nalnych, związano zestawy rejestrów roboczych przechow u
jących przetw arzane dane. Zestaw ośm iu rejestrów adreso
wych A0.A7 jest przeznaczony do przechowywania 24-bito- wych adresów podlegających modyfikacji. Zestaw ośmiu rejestrów skalarnych S9..S7 przechowuje pojedyncze, 64-bi- toWe liczby całkowite lub zmiennoprzecinkowe, a zestaw ośmiu rejestrów w ektorowych V0..V7 jest przeznaczony do przechowywania w ektorów (maksym alnie 64-elementowych) zawierających 64-bitowe liczby całkowite lub zm iennoprze
cinkowe.
Bezpośrednie jednokierunkow e powiązanie rejestrów adre
sowych i skalarnych z pam ięcią operacyjną umożliwia prze
syłanie danych z m aksym alną prędkością 40 M słów/s z opóźnieniem 11 cykli (137,5 (is). Dla zwiększenia elastycz
ności w przechowywaniu danych, dołączono dodatkową p a
mięć w ew nętrzną utworzoną przez zestaw G4 pomocniczych rejestrów adresowych 24-bitowych B0..B63 oraz zestaw 64 pomocniczych rejestrów skalarnych 64-bitowych T0..T63.
Rejestry te m ają bezpośrednie połączenie z pamięcią ope
racyjną; możliwe jest tu jednokierunkow e przesyłanie d a
nych z szybkością 80 M słów/s. W ymiana zawartości między rejestram i roboczymi a pomocniczymi odbywa się w jed nym cyklu zegara.
R ejestry w ektorow e m ają również jednokierunkow e po
w iązanie z pam ięcią operacyjną — z możliwością przesyła
nia danych z m aksym alną szybkością 80 M słów/s, z opóź
nieniem 7 cykli (87,5 ns). Dodatkowy 7-bitowy rejestr dłu
gości (VL — Vector Length) zawiera liczbę elem entów w ek
tora zapisaną w danym rejestrze wektorowym. Drugi 64-bi- towy rejestr m aski (VM — Vector Mask) specyiikuje, które spośród elementów danego rejestru wektorowego m ają być argum entam i kolejnej wykonywanej operacji.
Czasy w ykonywania operacji w jednostkach funkcjonal
nych są podane w tabeli 2. Dla rejestrów adresowych i skalarnych czasy te uw zględniają pobranie argum entów z rejestrów oraz złożenie wyniku w rejestrze. Dla rejestrów wektorowych dodatkowy cykl zegra jest konieczny na prze
słanie każdego z argum entów z rejestru na wejście jed
nostki; konieczny też — dodatkowy cykl n a odesłanie wyniku. Interesująca jest realizacja dzielenia zmienno
przecinkowego pokazana w tabeli 3.
Tabela 3. Realizacja dzielenia zmienno-przecinkowego
R e a l i z a c j a d z i e l e n i a d w ó c h r e j e s t r ó w s k a l a r n y c h S1/S2 a p r o k s y m a c j a o d w r o t n o ś c i
I t e r a c j a o d w r o t n o ś c i m n o ż e n i e p r z e z n u m e r a t o r m n o ż e n i e p r z e z k o r e k c j ą
5 3 - 1 /S 2 54-=(2—S 3X S2) S 5 “ S 1 X S 3 S 6 - S 4 X S 5
14 c y k l i 7 c y k l i 7 c y k l i 7 c y k l i
35 c y k l i
Na przyspieszenie działania kom putera m a też wpływ szybkość dostarczania nowych rozkazów wykonawczych. Dla uniknięcia pojednyczych odwołań do pamięci, cztery bufory instrukcji mogą przechowywać cyklicznie po 64 16-bito- wych paczek instrukcji (ang. instruktion parcel). Instrukcje mogą być złożone z jednej (16-bitów) lub dwóch (32 bity) paczek, w ypełniając dokładnie po cztery paczki kolejne słowa w pam ięci operacyjnej. Każdy z czterech buforów instrukcji może być całkowicie wypełniony słowami z kolej
nych 16 modułów pamięci w jednym cyklu, w ykorzystując pełną szybkość dostępu 320 M słów/s.
Instrukcje są pobierane z bufora instrukcji według 22-bi- towego licznika program u (PC — Program Counter) do 16-bitowego rejestru następnej paczki instrukcji (NIP — N ext Instruction Parcel). W rejestrze tym instrukcja jest dekodowana oraz spraw dzana jest możliwość jest w ykona
nia w aktualnym stanie działania maszyny. Instrukcja w y
konalna jest umieszczona w aktualnym 16-bitowym rejestrze instrukcji (CIP — C urrent Instruction Parcel); ew entualnie z drugą częścią paczki instrukcji w rejestrze dodatkowym (LIP — Lower Instruction Parcel) — dla instrukcji złożo
nych z dwóch paczek. Instrukcja z rejestru aktualnego jest w pełni dekodowana i rozpoczyna się jej wykonanie.
W przypadku zmiany sekwencji sterow ania (wykonanie in
strukcji skoku), kolejny bufor instrukcji jest wypełniany z pamięci operacyjnej.
Badanie wykonalności instrukcji polega nd sprawdzeniu, czy elem enty sprzętu (szyny, rejestry, jednostki funkcjonalne) wykorzystyw ane w badanej instrukcji nie są zajęte przez w ykonywane jeszcze instrukcje. Ograniczenia te odnoszą się jedynie do rejestrów skalarnych i adresowych, blokowanych dla zapam iętania w yniku obliczeń, oraz dla rejestrów w ek
torowych będących argum entam i lub przeznaczonymi n a wynik. Zawartości rejestrów skalarnych i adresowych będą
cych argum entam i są kopiowane do jednostek funkcjonal
S c h e m & t a r c h i t e k t u r y s u p e r k o m p u t e r a C E A T - l
2
nych. Również zawartość rejestru długości w ektora jest kopiowana, a więc nie musi być on blokowany. W przy
padku rejestrów w ektorowych dopuszczono realizację łań
cuchowania instrukcji, polegającą n a odblokowywaniu do
stępu do kolejnych elementów w ektorów już wykorzystanych w aktualnie wykonywanych operacjach (patrz przykład w tabeli 4).
Tabela 4. Łańcuchowanie instrukcji
S e k % v e n c ja i n s t r u k c j i : V 1 + V 2 “ V3
V 2 X V 3 = V 4
d l a d ł u g o ś c i w e k t o r a r ó w n e j 10, b e z w y k o r z y s t a n i a c e c h y ł a ń c u c h o w a n i a i n s t r u k c j i , b ę d z i e w y k o n y w a n a :
1 + 6 + 1 [S c y k l i n a o t r z y m a n i e p i e r w s z e g o w y n i k u z d o d a w a n i a ] + 9 X 1 Ip o j e d n y m c y k l u n a o t r z y m a n i e k a ż d e g o z p o z o s t a ł y c h 9 w y n i k ó w + l + 7 + l + 3 X l [ a n a l o g i c z n i e d l a m n o ż e n ia ] — 35 c y k l i
a z w y k o r z y s t a n i e m ł a ń c u c h o w a n i a :
l + 6 + l + 9 X l [ a n a l o g i c z n i e j a k p o p r z e d n i o ] — 9 [ g d y i p o ó s m y m c y k l u m o ż n a r o z p o c z ą ć r ó w n o c z e s n e w y k o n y w a n i e d r u g i e j i n s t a l a c j i ! + l + 7 + l + 9 X l [ a n a l o g i c z n i e d l a m n o ż e n ia ! -= 26 c y k l i
Powiązanie superkom putera CRAY-1 z otoczeniem odby
wa się poprzez 24 kanały wejścia—wyjścia (12 dla wejścia, 12 dla wyjścia). M aksym alna szybkość przesyłu inform acji przez kanały wynosi 10 M słów/s dla każdego kanału.
Uwzględniając możliwości dostępu do pamięci, równocześnie może być aktyw nych osiem kanałów. K om puterem peryfe
ryjnym zarządzającym urządzeniam i peryferyjnym i CRAYA był m inikom puter ECLIPSE firm y DATA GENERAL.
TECHNOLOGIA
Dla uzyskania odpowiedniej szybkości działania maszyny, określonej czasem cyklu zegara rów nym 12,5 ¡ts, zastosowano technikę ECL, w której rejestry pomocnicze B, T i w ekto
rowe V są złożone z układów bipolarnych o cyklu zapisu—
—odczytu rów nym 6 ns, a rejestry A i S z układów ECL — o cyklu 1 ns. W centralnym procesorze są w ykorzystywane układy logiczne NAND jednego typu o opóźnieniu 0,5—1 ns.
Główna pamięć kom putera została złożona z 1K 1-bitowych bipolarnych układów LSI (Fairchild). Stosując odpowiednie upakow anie i cylindrycznie układając moduły, m aksym alne długości połączeń zostały skrócone do 4 stóp (122 cm).
Całość maszyny została umieszczona w trzech 90-stopnio- wych segm entach cylindra, wokół centralnego chłodzenia z cyrkulującym freonem . Zasilacze oraz sterow anie chło
dzeniem znajdują się wokół cylindra — tw orząc wygodne siedzenia (stąd wzięło się powiedzenie, że jest to najdroższa k anapa świata). Poza pomieszczeniem maszyny znajdują się dwa 25-tonowe kom presory system u chłodzenia i generator zasilający o mocy 150 KW.
MOC OBLICZENIOWA
J a k ą szybkość działania uzyskano w tym superkom pu
terze? Odpowiedź jest dość trudna, bo już przy analizie pod
stawowych zasad działania widać, że efektyw ne w ykorzy
stanie maszyny jest zależne od realizow anej sekw encji in strukcji, a więc od rodzaju obliczeń, a także odpowiedniego zapisu algorytm u.
CRAY-1 jest program ow any w FORTRANIE, którego kom pilator generuje optym alny kod wynikowy w asem ble
rze CAL. Jednak o ostatecznej efektywności obliczeń decy
dują um iejętności program isty i złożoność algorytm u. W ta beli 5 przykładowo pokazano realizację fragm entu pro
gram u. Analizując działanie maszyny dla różnych progra
mów, uzyskano m aksym alną szybkość rów ną 153 M flop/s operacji zmiennoprzecinkowych (ang. flop — floating point operations/s), natom iast 138 M takich operacji n a sekundę — dla mnożenia macierzy kw adratow ych 64X64. Z kolei, np.
dla program u odw racania macierzy kw adratow ych 64X64 uzyskano szybkość rów ną 16 M flop/s a dla program u szyb
kiej transform aty F ouriera (FFT) tylko 4,7 M flop/s. Inaczej rzecz ujm ując — właściwości superkom putera przypom inają
Tabela 5. Potokowe wykonywanie program u
P r o g r a m o w i w j ę z y k u F O R T R A N : D O 10 1 -1 ,5 0
A (I)-= B (I) X C<I) 10 C O N T IN U E
o d p o w i a d a n a s t ę p u j ą c y z a p i s s y m b o l i c z n y , k t ó r y m o ż e b y ć o d w z o r o w a n y w a s e m b l e r z e C R A Y -C A L :
V L < “ 50 ; d ł u g o ś ć w y k o r z y s t y w a n e g o w e k t o r a V I < - c z y t a j (B(1)..B(50) )
V2 < - c z y t a j (C (1 )..C (5 0 )) V3 < - V 1X V 2
z a p i s z (A (1 )..A (5 0 )) < - V3
właściwości samochodu wyścigowego, którego pełne w alory można wykorzystać tylko n a torze, natom iast w ruchu m iejskim jest on gorszy od naszego malucha.
Tym niem niej superkom puter CRAY-1 pozwala obecnie n a praktyczne rozwiązanie wielu problemów, które znajdo
wały się dotychczas poza zasięgiem opłacalnych obliczeń (np. otrzym anie prognozy pogody 10-dniowej w ym aga w y
konania ok. 500 mld operacji, co kom puterow i CRAY-1 za
biera ok. 105 m inut {4], RODZINA MASZYN CRAY
Superkom putery CRAY są konstruow ane i w ytw arzane przez firm ę CRAY RESEARCH INC. (Wisconsin, USA), za
łożonej przez Seym oura C ray’a, byłego konstruktora firm y CONTROL DATA CORPORATION. Pierwsza maszyna CRAY-1 została zainstalow ana na początku 1976 roku w la
boratorium w Los Alamos. Obecnie zainstalowanych jest już ponad 50 różnych m utacji tych maszyn.
Pierwszym krokiem w rozwoju superkom putera CRAY było powiększenie w 1979 r. pojemności pam ięci operacyj
nej do 2 lub 4 M słów (stosując układy 4 K X 1 bit) oraz w ym ianę układów wejścia—w yjścia n a cztery procesory WE-WY um ożliwiające dołączenie 48 kaanłów we-wy.
Z m iana ta pozwoliła n a wprowadzenie możliwości bez
pośredniej kom unikacji z systemami IBM oraz połącze
nie urządzeń peryferyjnych z główną pamięcią operacyjną przy szybkości przesyłania 850 M bitów/s. Rozbudowany system WE-WY umieszczono w czw artym segmencie walca.
Nowa konfiguracja została nazw ana superkom puterem CRAY-1S.
W kw ietniu 1982 wprowadzono na rynek następny super
kom puter —• CRAY X-MP, będący złożeniem dwóch proce
sorów centralnych w jednej obudowie, dzielących wspólną pamięć operacyjną o pojemności od 2 M do 4 M słów.
W w yniku dalszego skrócenia połączeń uzyskano czas cyklu rów ny 9,5 p.s.
K olejnym krokiem było w prowadzenie układów trójw y
miarowych całkowicie zanurzonych w chłodzącej cieczy fluorokarbonow ej. M aksym alna długość przewodów nie prze
kraczająca 16 cali zredukow ała czas- cyklu do 4 ¡.is. W ten sposób powstał CRAY-2 złożony z czterech procesorów i p a
mięci operacyjnej o pojemności 32 M słów. W ykonuje on operacje skalarne 6 razy, a w ektorow e 12 razy szybciej niż CRAY-1.
A jak a będzie dalsza przyszłość? Dowcip w czasopiśmie COMUNICATION of the ACM z kw ietnia 1984 mówi, że pętlę nieskończoną nowy CRAY-3 wykona w czasie k ró t
szym niż dwie m inuty.
L I T E R A T U R A
[1] E n s l o w P . H . j r . : S y s t e m y c y f r o w e w i e l o p r o c e s o r o w e . W N T , 1978
[2] G o łd y s B ., I s z k o w s k l W .: S w l a t s u p e r k o m p u t e r ó w C R A Y , I n f o r m a t y k a , n r 1/85, s. 26
[3] H o c h n e y R . W ., J e s s h o p e C . R .: P a r a l l e l C o m p u t e r s . A d a m H u g e r L t d . B r i s t o l , 1981
[4] I n f o r m a t y k a , n r 4/84, s. 33 („ W s k r ó c i e " )
JSl K i l l m o n P . , A s c o J . : P r o c e s s o r T e c h n o l o g y C o m p u t e r D e s ig n . D e c e m b e r 1982
[6J K o p p e P . M .: T h e A r c h l t e c t u r e o f P ł p e l i n e d C o m p u t e r s . Mo G r a w - H l l l B o o k C o m p a n y , 1981
[7] T h o m s p o n P . D .: M a t e m a t y k a w m e t e o r o l o g i i , w : M a t e m a t y k a W s p ó łc z e s n a , r e d . S t e e n L . A ., W N T , 1983.
ADA nie jest jeszcze językiem rozpowszechnionym w Polsce — trw ają' prace nad jego kompilatorami. Jednakże w krajach wysokouprzemyslowionych, głównie w USA i w Europie Zachodniej,, w użyciu przemysłowym znajduje się już kilkanaście za
twierdzonych translatorów tego języka, działających zarówno na dużych kom pute
rach, jak i na m ini- i m ikrokom puterach. A w arto pam iętać, że n a ostateczny kształt ADY m iała w pływ niemal cała współczesna wiedza w zakresie języków program owania. Kom enlarz do obecnej norm y języka przyczynia się do wyjaśnienia wielu istotnych szczegółów im plem entacyjnych i do jej jednoznacznej interpretacji.
Osoby bardziej zainteresow ane ADĄ mogą sięgnąć do szczegółowego jej omówie
nia w numerze 11—12/1981 i 1—G/1982 (J. Zalewski: ADA nowy język program ow a
nia) lub — sprawdzić swoją znajomość języka przy użyciu testów zamieszczonych w nr. 11/1983 (S. Błaszczak, W. Iszkowski: Język ADA w testach). W arto też wspomnieć, że od trzech lat przy Polskim Towarzystwie Inform atycznym działa Sekcja Języka ADA, z k tórą można skontaktow ać się za naszym pośrednictwem.
(Red.) JAN BIELECKI
Instytut Informatyk!
Politechnika W arszaw ska
ADA — standard operacji wejścia-wyjścia
W artykule tym kom entuję standard operacji w ejścia—
wyjścia w ADZIE [1], a także — opis metody im plem en
tacji pakietu TEXT_IO.
KRYTYKA STANDARDU OPERACJI NA PLIKACH TEKSTOWYCH
Ze względu na przyjęty w norm ie nieform alny opis zasad w ykonywania operacji wejścia—wyjścia, pojaw iają się w ąt
pliwości co do sposobu interpretow ania niektórych podanych tam sformułowań. Przedstaw iam je poniżej odnosząc omó
wienie do poszczególnych punktów i akapitów rozdziałów 14 tego dokumentu.
Pkt. 14.2/3, 14.2.2/3, 14.2.2/6
Plik sekwencyjny zdefiniowano jako liniowo uporządko
wany zbiór wartości. N atom iast plik bezpośredni zdefinio
wano jako liniowo uporządkowany zbiór elementów, do któ
rych i z których przesyłane są wartości. Z opisów procedur READ i WRITE w ynika natom iast, że z pliku wprowadzane są elementy, a do pliku wyprowadzane są wartości. Wydaje się, że n ajtrafniej byłoby mówić o wprow adzaniu i w ypro
D r ln ż , J A N B I E L E C K I j e s t a d i u n k t e m I n s t y t u t u I n f o r m a t y k i P o l i t e c h n i k i W a r s z a w s k i e j . W r o k u 1966 u - k o ń c z y ł s t u d i a i n f o r m a t y c z n e n a W y d z i a l e E l e k t r o n i k i P W , a w 1970 o b r o n i ł p r a c ę d o k t o r s k ą z t e j d z i e d z i n y . B y ł t w ó r c ą k o n c e p c j i i w s p ó ł
a u t o r e m w d r o ż e n i a p i e r w s z e g o w k r a j u k o m p i l a t o r a j ę z y k a F O R T R A N 66 d l a m .c . K -202 ( o b e c n ie M E R A 400) o r a z p r o j e k t a n t e m s y s t e m u o p e r a c y j n e g o d l a m i n i k o m p u t e r a G E O -2 0 , w y k o n a n e g o w I n s t y t u c i e I n f o r m a t y k i P W . w l a t a c h 1978—1980 b y ł z a t r u d n i o n y w U S A J a k o k o n s u l t a n t f i r m y U N IT E D C O M P U T IN G S Y S T E M S (C R A Y -1 ). J e s t a u t o r e m k i l k u d z i e s i ę c i u o p r a c o w a ń z z a k r e s u i n f o r m a t y k i , w t y m k i l k u n a s t u k s i ą ż e k i s k r y p t ó w n a t e m a t j ę z y k ó w p r o g r a m o w a n i a i s y s t e m ó w o p e r a c y j n y c h . Z a j m u j e s ię p r o b l e m a t y k ą p r o g r a m o w a n i a o p e r a c j i w e j ś c i a - w y j ś c i a W J ę z y k a c h w y s o k i e g o o p z i o m u i s p r z ę ż e ń p r o g r a m ó w z s y s t e m a m i o - p e r a c y j n y m i .
wadzaniu danych o określonych typach i wartościach — i zrezygnować z pojęcia element.
Pkt. 14.2.1/4
Tak w tym miejscu, jak i w wielu innych, zrezygnowano z wyszczególnienia wszystkich dopuszczalnych sytuacji w y
jątkow ych. Nie wiadomo — na przykład — czy dla wyw oła
nia procedury CREATE z jednym argum entem może po
wstać sytuacja w yjątkow a USE-ERROR.
Pkt. 14.2.4
W opisie przetw arzania plików bezpośrednich nie w yjaś
niono, czy otw arcie pliku w trybie O U T-FILE powoduje zmianę wartości (danych) już znajdujących się w pliku (tak jak to w ystępuje np. w języku PL/I).
Pkt. 14.2.4/4
Zwrot cxceeds thc size (przekracza rozmiar) powinien zostać zastąpiony zw rotem excecds the current size (prze
kracza bieżący rozmiar).
Pkt. 14.2.4/7
Sformułowanie, że podczas wykonyw ania procedury WRITE może powstać sytuacja w yjątkow a USE-ERROR — jeśli m iałaby zostać przekroczona pojemność pliku zew nętrz
nego — powinno być ta k zmienione, aby nie dotyczyło enigmatycznej pojemności (ang. capacity), lecz relacji między użytym w operacji wyprow adzania indeksem a bieżącym rozm iarem pliku zewnętrznego.
Pkt. 14.3/6, 14.3.7/14
Norma nie wypowiada się jaw nie, czy ogranicznik pliku (który nie musi być realizow any jako stan „koniec pliku”) jest ogranicznikiem bezpośrednio poprzedzającego go lite
rału. Jeśli nie jest, to w opisach wyprow adzania literałów ze zmiennych typu STR1NG powołanie się na ogranicznik pliku powinno zostać zastąpione powołaniem się n a ogra
nicznik wiersza.
Pkt. 14.3.2/2, 14.3.2/5
Opis procedur SET-IN PU T i SET-OUTPUT w połączeniu z opisami procedur OPEN i CLOSE sugeruje, że po zam knię-
P l e r w s z ą w e r s j ę p r a c y p r z e d s t a w i o n o n a s e m i n a r i u m S e k c j i J ę z y k a A d a P o l s k i e g o T o w a r z y s t w a I n f o r m a t y c z n e g o (7 g r u d n i a 1983).
ciu bieżącego pliku domniemanego (ang. current default file) pozostaje w mocy przyjęte domniemanie pliku. Ponie
waż stanowi to znaczne ograniczenie swobody im plem en
tacji w ynikającej z założenia, że obiekty plikowe są typu prywatnego, uważam, że zamknięcie bieżącego pliku dom nie
manego powinno czynić bieżącym plikiem domniem anym od
powiedni (wejściowy albo wyjściowy) plik standardowy.
W szczególności, w im plem entacji typu plikowego za po
mocą typu wskaźnikowego, takiej jak np. opisana w [2], program przytoczony n a w ydruku 1 byłby niepopraw ny mimo że nie w ynika to z normy.
UI T H TEXT-IOÏ US E TEXT-IO!
v F R O C E D U R E EW A 10 INP: FILE-TYPE!
CHR: CHARAC TE R?
BEGIN
OPEN<IIIP>IN-FILE,"KAJA'>!
S E T - I N P U T (INP )?
C L O S E <I N P ) !
OPEN(INP,IN_FILE.-KftJA">f GET <C H R > !
PU T <CHR)i END EWA!
W y d r u k 1. Z a c h o w a n i e d o m n i e m a n i a p l i k u
Pkt. 14.3.8/16
Norma nie precyzuje, czy wartość 0,0 może być w ypro
wadzona ze znakiem w wykładniku.
P k t 14.3.8/21
Opis dom niem anej w artości FORE dotyczy wyprow adzania do zmiennych o „dostatecznie dużym” rozmiarze. Należy przypuszczać, że w przypadku, gdy dobór FORE jest nie
możliwy, intencją norm y jest pow stanie sytuacji w yjątko
w ej LAY OUT-ERROR.
IO-EXCEPTIONS i SEQUENTIAL-IO oraz ważniejsze frag menty pakietu TEX T-IO , który jest realizowany w oparciu 0 konkretyzację pakietu SEQUENTIAL-IO dla argum entu
rodzajowego CHARACTER.
Przed omówieniem wykonania program u należy zwrócić uwagę na w ybrane fragm enty w ykorzystywanych przez ten program pakietów.
P akiet SEQUENTIAL-IO jest pakietem rodzajowym z pa
ram etrem rodzajowym ELEMENT-TYPE, określającym typ komponentów pliku sekwencyjnego. Specyfikacja pakietu zawiera m.in. deklarację typu plikowego przewidzianego dla plików sekwencyjnych, realizowanego za pomocą ogra
niczonego typu prywatnego oraz deklarację typu FILE- MODE, który jest typem wyliczeniowym określającym tryb przetw arzania. Specyfikacje procedur OPEN i READ w y
znaczają zestaw realizowanych przez pakiet operacji na pli
kach. Część pryw atna pakietu oraz jego ciało są w całości określone przez implementację.
Pakiet TEX T-IO jest pakietem zwykłym (nie rodzajo
wym). Jego specyfikacja zawiera deklarację unikalnego typu FILE-TY PE przewidzianego dla plików tekstowych, specy
fikacje typów pomocniczych COUNT i FIELD oraz specy
fikacje podprogramów OPEN i MODE dotyczących plików tekstowych. W części widocznej pakietu występuje ponadto specyfikacja pakietu rodzajowego IN TEG ER-IO, przewidzia
nego dla w prowadzenia ciągów znaków o postaci literałów całkowitych. Część pryw atna specyfikacji pakietu TEX T-IO zawiera powołanie pakietu STREAM, który jest wcieleniem pakietu SEQUENTIAL-IO dla argum entu rodzajowego CHARACTER, oraz deklarację typu im plem entującego p ry w atny typ plikowy FILE_TYPE.
Ciało pakietu TEX T-IO zaw iera deklarację standardow e
go pliku tekstowego INPUT, ciała podprogramów OPEN 1 MODE, ciała pomocniczego pakietu rodzajowego READ- FILE, konkretyzowanego w procedurze GET zaw artej w
OMÓWIENIE METODY IMPLEMENTACJI PAKIETU TEX T-IO
Chociaż w zamyśle norm a opisuje wszystkie istotne sk u t
ki w ykonania procedur w ejścia—wyjścia, dopiero pojaw ie
nie się konkretnej im plem entacji może stanowić podstawę dyskusji n a tem at jednoznaczności opisu. Im plem entacja tak a została przedstaw iona w 2, a choć zaw iera szereg niezgodności z norm ą — zostanie tu przedstawiona jako
egzemplifikacja metody w drożenia pakietu.
Podstaw ę prezentow anej im plem entatcji stanowi założenie o realizacji typu plikowego FILE-TY PE jako typu w skaźni
kowego:
a c c e s s F I L E - C O N T R O L - B L O C K
związanego z typem rekordowym :
t y p c F I L E - C O N T R O L - B L O C K ls r e c o r d
S E Q F I L E : S T R E A M .F I L E —T Y P E ; C O L N O , L I N E N O , P A G E N O : P O S I T IV E ; M A X C O L N O , M A X L IN E N O :
C O U N T ; C II:
C H A R A C T E R ; C H - O K : B O O L E A N ; e n d r e c o r d ;
Kom ponentam i obiektów przytoczonego typu rekordowego są: plik sekwencyjny zaw ierający znaki pliku tekstowego, skalarne zmienne liczbowe określające bieżący num er ko
lum ny, bieżący num er wiersza i bieżący num er strony, ska
larne zmienne liczbowe określające bieżący maksym alny rozm iar wiersza i bieżący m aksym alny rozm iar strony, skalarna zm ienna znakowa, której wartością jest ostatni jeszcze nie wprowadzony albo jeszcze nie wyprowadzony znak oraz — skalarna zm ienna boolowska o w artości TRUE, jeśli wym ieniona zm ienna znakowa ma interpretację (o w a r
tości FALSE — w przeciwnym przypadku).
Ponieważ pakiet T E X T-IO jest dość obszerny, omówienie jego struktury zostanie ograniczone do rozpatrzenia w ydru
ku 2, na którym przedstawiono: procedurę KA JA odwo
łującą się do tego pakietu, istotne części pakietów
UITH TEXT-I0!
USE TEXT-IOf PROCEDURE KA JA IS
EUAl INTEGER!
USEKÎnTEGrIlTL :S HEU IMTEOER-I°<NUM->JNTeoeR) t
BEGI N
GET(INPUT»EWAiWIDTH«>2)Ï END KAJAÎ
PACKAGE IO_EXCEPTIONS IS STATUS_ERR0Ri EXCEPTION?
MODE-ERROR: EXCEPTION;
e n d~i o^e x c e p t i o n s;ZOSTA1"YCH SYTUACJI “*J*t k o u y c h u i t h i o.e x c e p t i o n s;
OENERIC
TYPE CLEMENT-TYPE IS PRIVATE?
PACKAGE SEQUENTIAL-IO 19
IS LIMITED PRIVATE!
TYPE FILE-MODE IS <IN_FILE.OUT_FILE> ! PROCEDURE OPEN(FILE* IN OUT FILE TYPE!
MODEl IN FILE-MODE!
NAME! IN STRING!
FORM IN STRING!--")!
PROCEDURE READ<FILEl IN FILC-TYPE!
PRIVATE ITEM‘ °UT E^ E“T_TYPE> ’
END~SEQUENTIAL-IOf’i^ M K I E ™ O C L O N A PRZEZ IMPLEMENTACJE PACKAGE BODY SEOUENTIAL-IO IS
END SEoSENTIA^lif °KRESL0NE PRZEZ IHPLEHEHTACJE
PAiKAiE-TEXT!iSa^ ’EE0UENTIflU- I0!
TYPE FILE.TYPE IS LIMITED PRIVATE!
TYPE PILE-MODE IS (IN FILFtDUT FT( F ł s
TYPE COUNT IS RANGE 0 .. C0UNT_LAsf? — Th p. r«rUrAr .a
SUBTYPE FIELD IS INTEGER RANGE 0 .. FIELD LA»TI iu
PROCEDURE OPEN(FILES IN OUT FILE.TYPE!
MODE! IN FILE-HODE!
NAME! IN STRING!
FORM: IN STRING!*'*)!
FUNCTION MODE(FILE! IN FILE-TYPE) RETURM FILE-HBDEf SPECYFIKACJA PAKIETU RODZAJOWEGO DO WPROWADZANIA
— DANYCH CAŁKOWITYCH
GENERIC
TYPE NUM IS RANOE O l PACKAGE INTEGER- IO IS
PROCEDURE GET(FILE! IN FILE-TYPE!
ITEMi OUT NUMÏ tH U INTEGER-IQ!
EXCEPTION RENAMES IO-EXCEPTIONS STATUS FftftniM
-- POZOSTAŁE ¿ B S U S T “
PRIVATE
PACKAGE STREAM 15 NEW SEQUENTIAL-IOCHARACTER)?
TYPE FILE-CONTROL-BLOCK IS RECORD
SEQFILEs STREAM.FILE-TYPE!
COLNO»LINENO»PAGENO: POSITIVE?
MAXCOLNO»MAXLINENO* COUNT?
CH: c h a r a c t e r;
CH-OKi BOOLEAN?
END RECORD?
TYPE FILE_TYPE IS ACCESS FlLE-CONTROt— BLOCK»
END TEXT-IO?
PACKAGE BODY TEXT-IO IS INPUT* FILE-TYPE?
PROCEDURE OPEN(FILE* IN OUT FILE-TYPE»
MODES IN FILE-MODE?
NAMEt IN STRING?
FORM* IN STRING:»"") I«J BEGIN
IF FILE /■ NULL THEN RAISE STATUS-ERROR» END IF?
FILE**NEW FILE-CONTROL-BLOCK?
STREAM.OPEN(FILE.SEQFILE»
STREAM.FILE-MODE'UAL <FILE_MO0E’P03(M0DE)) » NAME»FORM)?
— INNE INSTRUKCJE WNĘTRZA PROCEDURY END OPEN?
FUNCTION MODE(FILE: IN FILE-TYPE) RETURN FILE-MODE IS BEGIN
IF FILE-NULL THEN RAISE STATUS-ERROR? END IF?
RETURN FILE_MODErV A L (
STREAH.FILE-MODETPOS(STREAM.MODE(FILE.SEQFILE)))5 END MODE?
— POMOCNICZY PAKIET RODZAJOUY
— KONKRETYZOWANY W PROCEDURZE GET GENERIC
FILE: IN OUT FILE-TYPE?
WIDTH: IN FIELD?
PACKAGE READ-FILE IS
FUNCTION NEXT RETURN CHARACTER?
END READ-FILE?
PACKAGE BODY READ-FILE 15 TALLY: NATURAL:«0?
FIRST: BOOLEAN: =>TRUE»
FUNCTION NEXT RETURN CHARACTER 15 BEGIN
IF NOT FIRST THEN
STREAM.READ<FILE.Sn2riLE#FTLE.CH>I
— POZOSTAŁE INSTRUKCJE END IF?
T ALLY:=TALL Y+1?
FIRST:«FALSE?
RETURN FILE.CH?
END NEXT?
BEGIN
IF MODE(FILE) / * IN-FILE THEN RAISF MODF-C&ROR? END IF?
IF NOT FILE.CH-OK THEN
STREAM.READ(TILE.SEGFILE»FILE»CH> ? FILE.CH-OK:=TRUE?
END IF?
— POZOSTAŁE INSTRUKCJE END READ-FILE?
— CIALO PAKIETU RODZAJOWEGO
— DO WPROWADZAHXA/WYPROWADZANIA
— DANYCH CAŁKOWITYCH
PACKAGE BODY INTEGER-TO IS
— POMOCNICZA FUNKCJA RODZAJOWA
— KONKRETYZOWANA U PROCEDURZE GFT GENERIC
WITH FUNCTION NEXT RETURN CHARACTER?
FUNCTION GET-GENERIC RETURN NUM IS CJ CHARACTER * *NEXT ?
VALi NUM?
BEGIN
— POZOSTAŁE INSTRUKCJE END GET-GENERIC?
PROCEDURE GET (KILE: IN FlLE. TYpr.f ITEM: OUT HUM?
WIDTH: IN F»ELD:»0> IS PACKAGE READ IS NEW RCAD-FILE(FILE.WIDTH)Î FUNCTION GET_FROH_FILE IS OET_GENERICtREAD.NEXT)*
BEGIN
ITEMï-CET-FRÔM-FILE?
END GET?
END INTEGER_IO?
BEGIN .
OPEN (INPUT» IN-FILE» "INPUT'’) ? END TEXT-IO»
W y d r u k 2. S t r u k t u r a p a k i e t u T E X T —IO
ciele pakietu INTEGER_IO, a także — sam pakiet INTEGER-IO oraz część czynną pakietu, zaw ierającą in
strukcję wywołania procedury OPEN dla otw arcia pliku standardowego i skojarzenia go z plikiem zewnętrznym o nazwie „INPUT”.
Zgodnie z w ym aganiam i norm y, wykonanie procedury KAJA jest poprzedzone opracowaniem pozostałych segmen
tów program u, np. w kolejności: pakiet IO-EXCEPTIONS, pakiet SEQUENTIAL-IO, pakiet TEXT-IO.
Opracowanie pakietu IO-EXCEPTIONS sprowadza się do opracowania deklaracji w yjątków wyszczególnionych w jego specyfikacji (przyjęto, że w danej im plem entacji pakiet ten nie zaw iera ciała).
Opracowanie deklaracji pakietu rodzajowego SEQUEN- T IA L -IO polega na przedstaw ieniu nazwy tego pakietu, a następnie opracowaniu param etru rodzajowego ELE- M ENT-TYPE, którego identyfikator reprezentuje w pakie
cie typ komponentów pliku sekwencyjnego i w ystępuje m.in.
w specyfikacjach procedur OPEN i READ.
Opracowanie ciała pakietu SEQUENTIAL-IO powoduje jedynie ustanow ienie go jako modelu spodziewanych kon
kretyzacji.
Opracowanie specyfikacji pakietu TEX T-IO składa się z opracowania: deklaracji typów FILE-TY PE, FILE-M ODE i COUNT, deklaracji podtypu FIELD, specyfikacji podpro
gram ów OPEN i MODE, deklaracji pakietu rodzajowego INTEGER-IO oraz deklaracji w yjątków STATUS-ERROR i MODE-ERROR, przem ianow ujących odpowiednie w yjątki zadeklarowane w pakiecie IO-EXCEPTIONS.
W ram ach opracowania pryw atnej części specyfikacji p a
kietu TEX T-IO ; opracowuje się powołanie pakietu STREAM stanowiącego wcielenie pakietu SEQUENTIAL-IO dla a r
gum entu rodzajowego CHARACTER, a następnie — specy
fikację i ciało powołanego pakietu, na co składa się opra
cowanie: deklaracji typów FILE-TY PE i FILE-MODE, deklaracji procedur OPEN i READ oraz części pakietu określonych przez im plem entację. Powoduje to utworzenie w pakiecie STREAM procedury READ:
p r o c e d u r e R E A D (F I L E : l n F I L E - T Y P E ; IT E M : o u t C H A R A C T E R ):
służącej do w prow adzania z plików typu STREAM. FILE- TYPE pojedynczych znaków. W ram ach dalszego opracowy
w ania specyfikacji pakietu TE X T-IO , nas.tępuje opracowa
nie deklaracji typu rekordowego FILE-CONTROL-BLOCK i typu wskaźnikowego FILE-TYPE, związanego z tym
typem rekordowym .
Na opracowanie ciała pakietu TEX T-IO składa się o p ra
cowanie: deklaracji pliku INPUT, ciał podprogram ów OPEN i MODE, deklaracji i ciała pomocniczego pakietu rodzajowego READ-FILE, ciała pakietu INTEGER-IO oraz — w ykona
nie instrukcji zaw artych w części czynnej ciała pakietu, w danym w ypadku instrukcji:
O P E N ( I N P U T , I N - F I L E " I N P U T " ) ;
równoważnej, na podstawie reguł widoczności instrukcji:
T E X T —I O .O P E N /T E X T —IO . IN P U T , T E X T - I O . I N - F I L E , " I N P U T " / ;
której wykonanie powoduje otwarcie wejściowego pliku stan
dardowego.
Po wykonaniu tych czynności wstępnych, rozpoczyna się opracowywanie procedury KAJA, w której ciele — dzięki klauzuli USE — staje się bezpośrednio widoczny identyfi
kator pakietu INTEGER_IO.
Po opracowaniu deklaracji skalarnej zmiennej całkowitej EWA, następuje opracowanie powołania pakietu INTEGRAL, będącego wcieleniem pakietu INTEGER-IO dla argum entu rodzajowego INTEGER. Powołany pakiet zaw iera m.in.
specyfikację:
p r o c e d u r o G E T ( F I L E : iu F I L E - T Y P E ; IT E M : o u t IN T E G E R ; W ID T H : i n F I E L D : = 0 ) ;
uzyskaną przez zastąpienie param etru rodzajowego NUM argum entem INTEGER. Podobna zm iana dotyczy ciała tej procedury.
Bezpośrednio po utw orzeniu pakietu INTEGRAL n astę
puje opracowanie jego specyfikacji, a następnie jego ciała.
O pracowanie specyfikacji sprowadza się do opracowania specyfikacji procedury GET, zaś ciała — do opracowania deklaracji pomocniczej funkcji rodzajowej GET-GENERIC
(opracowywanie ciała procedury GET zostaje zaniechane, ponieważ utworzono już specyfikację tej procedury).
Po opracowaniu zwrotu,
u s e IN T E G R A L ;
kończącego część bierną procedury KAJA, uzyskuje się widoczność identyfikatorów zaw artych w pakiecie INTE
GRAL, co powoduje m.in. że do procedury, której pełną nazwą przed opracow aniem wymienionego zwrotu było — KAJA.INTEGRAL.GET, można odwoływać się po prostu przez nazwę GET.
Po utworzeniu części biernej procedury KAJA, w ykony
w ana jest jej część czynna, na co składa się wykonanie instrukcji:
G E T (I N P U T , E W A , W ID T H * » > 2 ) ;
zlecającej wprowadzenie z dwuznakowego pola pliku INPUT liczby zapisanej zgodnie ze składnią literałów typu INTEGER ze znakiem, a następnie nadanie w artości tej liczby zmien
nej EWA.
W ykonanie procedury GET rozpoczyna się od skojarzenia param etrów FILE, ITEM i WIDTH odpowiednio z argum en
tam i INPUT, EWA i 2. Po dokonaniu tego skojarzenia, opracow yw ana jest część bierna ciała procedury, a następ
nie wykonyw ana jego część czynna.
Opracowanie części biernej ciała składa się z opracowa
nia powołania pakietu READ, który dla każdego wywołania procedury GET jest wcieleniem pakietu rodzajowego READ-FILE dla argum entów rodzajowych FILE i WIDTH, będących jednocześnie param etram i procedury GET.
Opracowanie ciała pakietu READ — to utworzenie dekla
racji zmiennych TALLY i FIRST oraz w ykonanie instrukcji części czynnej ciała pakietu (opracowanie ciała funkcji NEXT zostaje zaniechane, ponieważ określono już jej specy
fikację). Powoduje to w szczególności wywołanie proce
dury:
S T R E A M .R E A D ( F I L E .S E Q F IL E .F IL E .C H );
równoważne w danym kontekście wywołaniu:
T E X T - I O .S T R E A M . R E A D ( I N P U T .S E Q F I L E .I N P U T .C H ) ;
a w konsekwencji przygotowanie w zmiennej INPUT.CH kolejnego znaku pliku sekwencyjnego, realizującego plik
tekstowy INPUT.
Opracowanie powołania funkcji G ET-FRO M -FILE, będą
cej wcieleniem funkcji rodzajowej GET-GENERIC dla argum entu rodzajowego READ.NEXT, powoduje utworze
nie funkcji, której zadaniem jest kompletowanie ze znaków pliku sekwencyjnego literałów całkowitych ze znakiem i udostępnianie ich wartości. Ponieważ w funkcji rodzajo
wej GET-GENERIC kolejne znaki kompletowanego literału są uzyskiwane za pomocą bezparam etrow ej funkcji NEXT, która jest param etrem rodzajowym pakietu, opracowanie powołania funkcji GET_FROM_FILE jako wcielenia pa
kietu GET_GENERIC dla argum entu (funkcji) READ_
NEXT powoduje, że funkcja GET_FROM_FILE uzyskuje kolejne znaki za pomocą funkcji READ.NEXT. Ponadto, ponieważ funkcja rodzajowa GET_GENERIC jest zaw arta w pakiecie INTEGRAL stanow iącym wcielenie pakietu ro
dzajowego INTEGER-IO z argum entem rodzajowym IN TEGER, funkcja GET_GENERIC udostępnia wartości typu INTEGER.
W omówionym program ie nie przewidziano obsługi w y
jątków , dlatego też powstanie sytuacji wyjątkow ej, będącej następstw em np. niewłaściwej składni wprowadzanych zna
ków, spowoduje zaniechanie dalszego wykonyw ania pro
gramu.
L I T E R A T U R A
I l | A d a P r o g r a m m i n g L a n g u a g e . A N S I/M IL -S T D -I8 1 5 A , 1985 Jaj M a d s e n J . : A n A d a I m p l e m e n t a t i o n o f T E X T _ I O . C h r i s t i a n R o v s ln g A /s . 1983
t3j B i e l e c k i J . : A d a — I n t e r p r e t a c j a s t a n d a r d u o p e r a c j i w e j ś c i a - w y j ś c i a . W P W , W a r s z a w a 1985 (w d r u k u ) .
JU LIA N W 1NIEW SKI
In sty tu t Podstaw Informatyki PAN W a rs z a w a
Język programowania C (2)
W bieżącym num erze omówione zostały pozostałe kon
strukcje języka C, tj. instrukcje, funkcje, wskaźniki i stru k tury, a także — preprocesor języka.
INSTRUKCJE
Instrukcje wykonuje się w kolejności ich występowania, chyba że w ykonanie określonej instrukcji powoduje jej zmianę. In stru k cją jest każde w yrażenie zakończone śred nikiem , a także sam średnik oznaczający instrukcję pustą.
Jedna z instrukcji — re tu rn zostanie omówiona w punkcie poświęconym funkcjom.
Instrukcja złożona — blok Instrukcja złożona m a postać:
• { d e k la r a c je i n s t r u k c j e }■
i stanow i ciąg instrukcji, ew entualnie poprzedzony dekla
racjam i, ujęty w naw iasy klam rowe: {}
Deklaracje identyfikatorów zadeklarowanych już w blo
kach obejm ujących dany blok powodują przesłonięcie tych uprzednich deklaracji na czas wykonyw ania bloku. Wszyst
kie inicjow ania w ystępujące w deklaracjach auto i register są w ykonywane przy każdym otw arciu bloku, natom iast
inicjowania zmiennych statycznych dokonuje się tylko raz przy rozpoczęciu programu.
Instrukcja w arunkow a Ma ona ogólną postać:
U ( w j r a ż e n l e ) I n e t r u k c j a l
lub
i i ( w y r a i e n l e ) I n s t r u k c j a ! e ls o I n s tr u k c J a S
Po obliczeniu w artości wyrażenia, jeśli jest ona niezerową, wykonuje się in stru k cjal, a w przeciwnym w ypadku — instrukcja2 (dla drugiej postaci lf) lub następna po in stru k cji if (dla pierwszej postaci). Słowo zastrzeżone else jest
zawsze wiązane z ostatnim dotąd nie związanym łf, np.:
if ( a ) if( b ) s l ; e ls e s2;
jest rozumiane jako
if( a ) ( l f ( b ) s l ; e l i e s2}
Przełącznik
Instrukcja ta pozwala n a wybór jednej z wielu gałęzi program u i ma postać:
s w i t c h ( w y r a ż e n ie ) i n s t r u k c j a l
In stru k cjal powinna być w zasadzie instrukcją złożoną, w której dowolnie wiele instrukcji może mieć postać:
c a s e w y r a ż e n i e —s t a ł e : i n s t r u k c j a
Wykonanie in stru k cjil w przełączniku rozpoczyna się od tej instrukcji casc, której w yrażenie—stałe ma wartość rów ną obliczonemu uprzednio wyrażeniu. Jeśli w artość w yrażenia nie zgadza się z żadną z w artości case, to wykonanie roz
poczyna się od instrukcji poprzedzonej słowem default, o ile ono w ystępuje. W przeciwnym w ypadku nie wykonuje się żadnej z instrukcji wnętrznych przełącznika,
switch (i)
■¡case 1 : i n s i ; c a s e 2 : in s 2 ;
c a s c 10 : in slO ; , d e f a u l t : i n s l l ;
W powyższym przykładzie, jeśli w artość zmiennej i jest rów na np. 5, to w ykonuje się kolejno instrukcje ins5, ins6,..., inslO, in s ll, chyba że któraś z nich zmienia kolejność w y
konania. Chcąc uzyskać konstrukcję w ybierającą tylko jedną z tych instrukcji do w ykonania, należy po każdej instruk
cji case umieścić instrukcję break, powodującą przerw anie w ykonyw ania przełącznika.
Pętle
Do zapisania iteracji służą w języku C trzy rodzaje in
strukcji: while, do i for.
Instrukcja do postaci:
d o i n s t r u k c j a l r
w h i l e ( w y r a ż e n i e )
oraz while:
w h ilo ( w y r a ż e n ie ) i n s t r u k c j a l
działają bardzo podobnie. In stru k cjal jest w ykonywana w pętli dopóty, dopóki wartość w yrażenia jest niezerowa. Obie powyższe instrukcje różnią się tylko miejscem sprawdzenia w arunku — w pętli while przed, a w pętli do po wykonaniu instrukcji wew nętrznej. Przykładem użycia pętli while jest ciało funkcji bibliotecznej strlen, obliczającej długpść tekstu:
i = 0 ; w h i l e (sil] ! “ 70’) i + + ;
Bardziej złożoną form ą pętli jest instrukcja for postaci:
f o r ( w y r l ; w y r 2 ; w y r3 ) i n s t r u k c j a l
Jest ona równoważna programowi:
w y r l ; w h ilo (w y r2 )
-{i n s t r u k c j a 1 ; w y r 3 ; ¡-
Każde z trzech w yrażeń w pętli for można pominąć, ale średniki należy zachować. Drugie z tych w yrażeń jest za
stępowane w takiej sytuacji stalą 1. Przykładem pętli for jest ciało funkcji obliczającej n -tą potęgę zmiennej x:
f o r ( p = l ; n > 0 ; n ) p •** x ;
Skoki
Ja k już wspomniano, instrukcja break powoduje przerw a
nie w ykonywania przełącznika. Ogólnie, instrukcja o po
staci:
b r e a k ;
powoduje przerw anie wykonyw ania najm niejszej z obejm u
jących ją instrukcji pętli lub przełącznika.
Podobnie instrukcja:
c o n t i n u e ;
powoduje przejście do końca ciała w ykonywanej pętli; np.
w pętli:
w h i l e ( w a r)
{...
c o n t : ;
>
b r e k : ;
instrukcja continue jest równoważna goto cont, a break — goto brek.
Obie te instrukcje są zatem specjalną form ą instrukcji skoku:
g o to e t y k i e t a ;
Instrukcja skoku jest w języku C raczej nietypowa. Ogólnie, powoduje ona przejście do w ykonyw ania instrukcji poprze
dzonej etykietą. W odróżnieniu od postaci skoku w innych językach, jedynym jego ograniczeniem jest to, że nie może on w yprowadzać sterow ania poza funkcję (etykieta musi być zdefiniowana w tej sam ej funkcji co skok). Możliwe jest więc wykonanie skoku do bloku, przełącznika lub pętli.
Skok taki powoduje, że nie zostanie wykonane inicjowanie zmiennych lokalnych bloku lub obliczenie wartości wyrażeń sterujących pętlą i przełącznikiem.
FUNKCJE
F unkcja jest to nazw any blok w ykonywany w chwili n a potkania jego nazwy w wyrażeniu lub w instrukcji pro gram u. D eklaracja funkcji jest jednakże ■ potrzebna tylko wtedy, gdy funkcja jest zew nętrzna względem program u ją wywołującego lub gdy wywołanie funkcji w ystępuje w pro
gram ie przed jej definicją. W innych sytuacjach w ystarczy tylko definicja funkcji.
Definicja funkcji
Postać definicji funkcji jest następująca:
t y p i d e n t y f i k a t o r ( l i s t a _ n a z w _ p a r a m e t r ó w ) d e k l a r a c j a - p a r a m e t r ó w b l o k
Specyfikacja typu dotyczy wartości obliczanej przez funkcję.
B rak specyfikacji typu, podobnie jak w deklaracjach, po
woduje domyślne przyjęcie typu int. Funkcje nie zadekla
row ane lub nie zdefiniowane przed wywołaniem też są tak traktow ane.
Funkcja udostępnia wartość, jeśli w jej ciele zostanie wykonana instrukcja:
r e t u r n w y r a ż e n i e ;
co spowoduje pow rót do m iejsca w ywołania funkcji z w ar- lością wyrażenia. Pow rót bez wartości można uzyskać przez użycie instrukcji re tu rn bez w yrażenia. Ten sam efekt daje zakończenie wykonania ciała funkcji.
Jeśli w definicji funkcji wystąpi specyfikator static, ozna
cza to, że funkcja ta nie może być wyw oływ ana w innych programach.
Wywołanie funkcji
Wywołanie funkcji, o postaci:
identyfikator (lista-w yrażeń)
może być instrukcją (wtedy ew entualna w artość funkcji jest pomijana) albo wystąpić w wyrażeniu (wtedy funkcja powinna udostępniać wartość).
Lista wyrażeń w wywołaniu służy nadaw aniu w artości param etrom funkcji. W artości kolejnych w yrażeń są podsta
w iane n a odpowiadające im param etry, ale kolejność ich obliczania jest zależna od kom pilatora. P aram etry są zawsze wywoływane przez wartość. Chcąc przesłać do funkcji adres