• Nie Znaleziono Wyników

Informatyka Nr 5; Organ Komitetu Informatyki, Ministerstwa Nauki, Szkolnictwa Wyższego I Techniki Oraz Komitetu Naukowo-Technicznego NOT DS. Informatyki - Digital Library of the Silesian University of Technology

N/A
N/A
Protected

Academic year: 2022

Share "Informatyka Nr 5; Organ Komitetu Informatyki, Ministerstwa Nauki, Szkolnictwa Wyższego I Techniki Oraz Komitetu Naukowo-Technicznego NOT DS. Informatyki - Digital Library of the Silesian University of Technology"

Copied!
36
0
0

Pełen tekst

(1)
(2)

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

(3)

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)

(4)

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

(5)

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.

(6)

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).

(7)

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

(8)

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

(9)

(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}

(10)

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

Cytaty

Powiązane dokumenty

W ciągu ostatnich m iesięcy sytuacja w Polsce zmieniła się tak dalece, że realne stają się nawet takie sfery działań, których wcześniej nie sposób

W ciągu ostatnich m iesięcy sytuacja w Polsce zmieniła się tak dalece, że realne stają się naw et takie sfery działań, których wcześniej nie sposób

Środowisko inform atyków, do którego przede w szystkim adresowana jest INFORMATYKA, mimo że form alnie dość jednolite, sprawia wrażenie

Środowisko inform atyków, do którego przede w szystkim adresowana jest INFORMATYKA, mimo że form alnie dość jednolite, sprawia w rażenie zde­..

Mimo w ieloletn ich już dośw iadczeń inform atyki, są to nadal pozycje pionierskie. M usim y czekać na nowe, być może znacznie ulepszone

Na pięć r-lodsżych bitów obrazu portu przełączającego wpisz kod znaku pobranego z bufora CliAK... Pisać na maszynie

Można zatem wyciągnąć wniosek, że wprawdzie pismo jest pożyteczne dla coraz większej grupy odbiorców, niemniej jego wysoka cena i nie dość precyzyjnie — z

Zapewnia ono możliwość wyszukania określonego bloku danych celem jego sprawdzenia i jeśli jest to konieczne - skorygowania zapisanych na taśmie danych.. EC 9 0 0 4