EDVAC
EDVAC (ang. Electronic Discrete Variable Automatic Computer) – maszyna zbudowana według projektu J. Prespera Eckerta, J.W. Mauchly'ego i Johna von Neumanna, oddana w kwietniu 1949, działająca od stycznia 1952 do końca 1962[1]. Projekt komputera zaczął powstawać w roku 1944, w trakcie prac nad jego poprzednikiem, ENIAC-iem. Do usprawnień należy zaliczyć: przechowywanie programu w pamięci, binarne kodowanie liczb, rtęciową pamięć operacyjną.
EDVAC został zbudowany dla Army Ordnance Department przez Moore School of Electrical Engineering przy Uniwersytecie Pensylwanii i zainstalowany w Ballistic Research Laboratory, Aberdeen Proving Ground kosztem $467,000. Komputer był taktowany zegarem 1MHz i zużywał 56 kilowatów mocy. W roku 1949 składał się z 3000 lamp elektronowych i 8000 diod, do roku 1961 liczby te wzrosły do 5937 i 12000[2].
Architektura
EDVAC był binarnym komputerem szeregowym o 44-bitowym słowie wyrównanym do 48 cykli. Pamięć operacyjna miała rozmiar 1024 słów. Bity były kodowane jako puls, oznaczający jedynkę, oraz brak pulsu, czyli zero. Pulsy następowały co 1 mikrosekundę i trwały około 0.3μs. Wykrycie braku pulsu było możliwe dzięki sygnałowi zegarowemu[3].
Transmisja jednego słowa trwała 48 μs, okres nazywany małym cyklem (minor cycle). Pamięć operacyjna składała się z rtęciowych linii opóźniających ze wzmacniaczami regenerującymi pulsy. Linie, określane jako długie zbiorniki (long tank), mieściły po 8 słów. Długi zbiornik miał więc długość 384 μs, tzw. duży cykl (major cycle). Wykonanie dużego cyklu trwało 8 małych cykli.
Słowa kodujące liczby zaczynały się od znaku (puls oznaczał minus), po którym następował najmniej znaczący bit, następnie kolejne bity, aż do najstarszego, a na końcu 4 zera dopełniające do 48. Wystąpienie na ostatnich czterech pozycjach pulsu było traktowane jako błąd i powodowało zatrzymanie maszyny. Kodowanie liczb przypomina znak-moduł, z dokładnością do pozycji bitu znaku. Tak zapisana liczba była interpretowana jako ułamek z przedziału (-1, 1) zapisany stałopozycyjnie. Mnożenie i dzielenie były zaprojektowane tak, aby wspierać tę interpretację[4].
Rozkazy również zajmowały jedno słowo. Pierwsze 4 bity kodowały rozkaz, a pozostałe 40 – cztery adresy w pamięci operacyjnej. 10 bitów wystarczało do zaadresowania wszystkich 1024 komórek pamięci. W przypadku operacji arytmetycznych dwa adresy wskazywały operandy, trzeci miejsce zapisania wyniku, a czwarty następną instrukcję. Trzymanie adresu następnej instrukcji miało pozwalać na optymalizację dostępów do pamięci; opóźnienie odczytu z długich zbiorników można było przewidzieć i tak rozmieścić dane i kod w pamięci, aby zminimalizować opóźnienie[5].
Główne komponenty
Zegar
Ta jednostka zawierała generator głównego pulsu zegarowego. Poza nim wyprowadzone było również 48 sygnałów zapalających się jeden po drugim w kolejnych taktach małego cyklu[6].
Dyspozytor
Dyspozytor (dispatcher) dekodował instrukcje i generował sygnały sterujące pracą pozostałych jednostek. Zawierał cykliczny rejestr o pojemności jednego małego cyklu, w którym trzymał aktualnie wykonywany rozkaz. Posiadał również układ realizujący przesunięcia i konwertujący sygnały asynchroniczne na synchroniczne, co było konieczne przy wczytywaniu danych z zewnątrz[6].
Rachmistrz
Odpowiednik dzisiejszej jednostki arytmetyczno-logicznej. Wykonywał operacje dodawania, odejmowania, mnożenia i dzielenia. Miał dwie kopie obwodów liczących; rozbieżność wyników między nimi powodowała zatrzymanie maszyny[6].
Pamięć
Pamięć operacyjna była zorganizowana w dwa identyczne banki, lewy i prawy, zbudowane z 64 linii opóźniających każdy, umieszczonych w obudowach utrzymujących temperaturę 50°C. Pojedynczy bank mieścił 512 słów i umożliwiał pracę komputera nawet w przypadku awarii drugiego banku. Poza długimi zbiornikami, każdy bank zawierał też trzy krótkie zbiorniki wykorzystywane przez Rachmistrza, oraz część obwodów Dyspozytora odpowiedzialną za wybór wskazanej pozycji w pamięci. Fizycznie banki znajdowały się na przeciwległych krańcach maszyny[7].
Czytnik i Rekorder
Układ do odbierania i wysyłania danych na urządzenia zewnętrzne. Początkowo nośnikiem miał być przewód magnetyczny [1], ale ta technologia okazała się zawodna i została do roku 1952 zastąpiona przez taśmę dziurkowaną od IBM. W 1954 została jeszcze dodana pamięć bębnowa. Obie zmiany nastąpiły długo po zbudowaniu komputera, kiedy zmiany były trudne do wprowadzenia, co uczyniło rozwiązania do obsługi taśm i bębna ułomnymi i mało wydajnymi[8].
Panel Kontrolny
Służył do obsługi komputera przez człowieka. Znajdowały się na nim przyciski do włączania zasilania, uruchamiania, przerywania i wznawiania obliczeń, jak również przełączniki do ręcznego wprowadzania danych, ustawiania adresu pierwszej instrukcji i trybu pracy. Panel pozwalał na podgląd i zmianę zawartości dowolnej komórki pamięci, a także na zaglądanie do rejestrów Dyspozytora i Rachmistrza. Do wyświetlania danych służył oscyloskop oraz lampy neonowe[7].
Zestaw instrukcji
Schemat kodowania instrukcji przedstawiony jest w tabeli. Bity są numerowane w kolejności pojawiania się na kablu, czas płynie w lewo.
44 ... 35 | 34 ... 25 | 24 ... 15 | 14 ... 5 | 4 ... 1 |
---|---|---|---|---|
A1 | A2 | A3 | A4 | typ operacji |
Spośród 16 numerów operacji możliwych do zapisania na 4 bitach wykorzystywane było 11, pozostałe były równoważne z instrukcją stopu. Wykonanie odbywało się w czterech etapach, z których każdy mógł trwać wiele małych cykli. W większości instrukcji A4 stanowił adres następnej instrukcji, automatycznie ładowanej do Dyspozytora w ostatnim etapie wykonania rozkazu[9].
Poniższy opis jest oparty na raporcie z roku 1949 i nie zawiera późniejszych zmian, które m.in. zastąpiły instrukcję obsługującą przewód magnetyczny trzema rozkazami do czytania i pisania z taśmy dziurkowanej oraz Panelu Kontrolnego[10].
Przerwij
Zatrzymuje obliczenia i sygnalizuje to na Panelu Kontrolnym. Zasilanie pozostaje włączone, a maszyna jest gotowa do wznowienia działania. Naciśnięcie przycisku rozpoczęcia obliczeń powoduje załadowanie rozkazu spod A4 i kontynuację działania. Adresy A1, A2 i A3 są ignorowane[11].
Dodaj
Składniki pod adresami A1 i A2, suma zapisywana pod A3. Przekroczenie zakresu może zostać zignorowane albo spowodować zatrzymanie programu, w zależności od stanu przełączników na Panelu Kontrolnym[11].
Odejmij
Odjemna pod adresem A1, odjemnik pod A2, różnica zapisywana pod A3. Obsługa przekroczenia zakresu jak w dodawaniu[11].
Porównaj
Jeśli liczba zapisana pod adresem A1 jest mniejsza od liczby spod A2, to następna instrukcja jest ładowana z adresu A3, w przeciwnym wypadku z A4[12].
Pomnóż z zaokrągleniem
Czynniki pod A1 i A2, znak i najwyższe 43 z 86 bitów iloczynu zapisywane pod A3. Ta operacja nigdy nie przekracza zakresu. Jeśli zinterpretujemy czynniki jako ułamki z zakresu (-1, 1), to wynik będzie ich iloczynem (zaokrąglonym), również z zakresu (-1, 1)[12].
Pomnóż dokładnie
Czynniki pod A1 i A2. Starsze 43 z 86 bitów wyniku zapisywane pod A3, bez zaokrąglania, a młodsze 43 pod (A3 + 1) mod 1024. Znak wyniku jest zapisywany w obu komórkach pamięci[13].
Podziel z zaokrągleniem
Dzielna pod A1, dzielnik pod A2, znak i pierwsze 43 bity ilorazu (ostatni zaokrąglony) zapisywane pod A3. Jeśli wartość bezwzględna ilorazu jest większa lub równa 1, wynikiem jest ciąg jedynek z poprawnym znakiem. W takim wypadku program może być zatrzymany, chyba że w Panelu Kontrolnym jest ustawiony przełącznik ignorowania błędów przepełnienia[14].
Podziel dokładnie
Dzielna pod A1, dzielnik pod A2, znak i pierwszej 43 bity ilorazu (bez zaokrąglenia) zapisywane w A3, reszta z dzielenia (ze znakiem dzielnej) zapisywana w (A3 + 1) mod 1024[14].
Przenieś
Pozwala przesunąć bity słowa zapisanego pod A1 i nadpisać nimi część słowa spod A3. A2 nie jest w tym rozkazie adresem w pamięci, lecz koduje przesunięcie i nadpisywany region słowa A3[15]. Trzy najmłodsze bity A2 wybierają jeden z 8 opisanych niżej wariantów instrukcji, kolejne 6 wartość przesunięcia (zapisanego w bazie 16 16 8 4 2 1), a najstarszy bit ustala kierunek przesunięcia[16]. Przesunięcie w lewo odpowiada opóźnieniu bitów słowa w czasie (i pomnożeniu liczby przez naturalną potęgę dwójki), a przesunięcie w prawo - przyspieszeniu. Wystąpienie pulsu na ostatniej pozycji A2 sygnalizuje przesunięcie w prawo. Znak słowa zapisanego pod adresem A1 nie podlega przesunięciu w 7 z 8 wariantów, zamiast niego przesuwane jest 0. Bity przesunięte poza zakres [1, 44] są gubione[17].
Warianty 1-4
Nadpisują region A1, A2, A3 lub A4 w obrębie słowa pod adresem A3 bitami z odpowiadających pozycji w przesuniętym słowie spod A1. Programista musi zadbać, żeby dane do zapisu były na wysokości docelowego regionu[18].
Wariant 5
Zastępuje bit znaku słowa A3 najmłodszym bitem przesuniętego słowa A1. Nie jest to bit znaku słowa A1, w szczególności przesunięcie o zero powoduje wyzerowaniu bitu znaku A3[19].
Wariant 6
Kopiuje wszystkie przesunięte bity słowa A1 poza znakiem; słowo A3 zachowuje swój oryginalny znak[20].
Wariant 7
Kopiuje wszystkie przesunięte bity słowa A1 oraz znak. Znak nie ulega przesunięciu, jest tylko przepisywany. Całe słowo A3 zostaje utracone; ten wariant realizuje klasyczne przesunięcie arytmetyczne[19].
Wariant 0
Przesuwa tylko bit znaku słowa A1, ignorując jego resztę, i nadpisuje nim bit słowa A3 na pozycji, do której nastąpiło przesunięcie. To pozwala ustawić bądź wyzerować dowolny bit słowa A3, nie zmieniając pozostałych[21].
Załaduj
Ten rozkaz miał służyć do kopiowania danych między pamięcią operacyjną a zewnętrznym nośnikiem, a także do czytania z przełączników Panelu Kontrolnego i pisania na jego lampy neonowe. A2 koduje jedną z 23 operacji wejścia-wyjścia, natomiast A1 i A3 oznaczają początek i koniec obustronnie domkniętego zakresu adresów w pamięci, na których operuje instrukcja. A2 koduje następujące opcje:[22]
- wybór urządzenia od 0 do 3, gdzie 0 to Panel Kontrolny, a pozostałe to taśmy
- kierunek przewijania taśmy
- zapis, odczyt lub przewijanie
- specjalny tryb czytania adresów z taśmy
Ostatnia opcja pozwalała wczytywać dane do dowolnych adresów pamięci. Na taśmie musiały być na przemian 10-bitowe adresy i 44-bitowe dane. Operację kończyło napotkanie na taśmie adresu równego A3.
Wyświetl
Projekt przewidywał instrukcję sterującą w czasie rzeczywistym kropką oscyloskopu. Słowa pod adresami A1 i A2 miały zawierać współrzędne X i Y, a dwa najmłodsze bity A3 numer wyświetlacza (1, 2 lub 3). Docelowo zrezygnowano jednak z tego rozkazu[10].
Tryby pracy
Panel Kontrolny pozwalał na pracę w trybie normalnym lub specjalnym. Tryb specjalny pobierał rozkazy z Przełączników Rozkazu Specjalnego i służył do ręcznego uruchomienia programu. Tryb normalny pobierał rozkazy z pamięci i mógł działać na różne sposoby:[23]
- automatycznie, aż adres pobranej instrukcji będzie równy adresowi końcowemu ustawionemu na przełącznikach
- krokowo, wykonując jedną instrukcję po każdym wciśnięciu przycisku rozpoczęcia obliczeń
- krokowo, wykonując jeden etap instrukcji (każda instrukcja miała 4 etapy)
- krokowo, przez jeden mały cykl
Przypisy
- ↑ Williams 1993 ↓.
- ↑ Williams 1993 ↓, s. 30.
- ↑ Gluck i Boghosian 1949 ↓, s. 1.1.
- ↑ Gluck i Boghosian 1949 ↓, s. 1.2.
- ↑ Williams 1993 ↓, s. 27.
- ↑ a b c Gluck i Boghosian 1949 ↓, s. 1.3.
- ↑ a b Gluck i Boghosian 1949 ↓, s. 1.4.
- ↑ Williams 1993 ↓, s. 31-32.
- ↑ Gluck i Boghosian 1949 ↓, s. 1.5-1.6.
- ↑ a b Williams 1993 ↓, s. 28.
- ↑ a b c Gluck i Boghosian 1949 ↓, s. 1.7.
- ↑ a b Gluck i Boghosian 1949 ↓, s. 1.8.
- ↑ Gluck i Boghosian 1949 ↓, s. 1.8-1.9.
- ↑ a b Gluck i Boghosian 1949 ↓, s. 1.9.
- ↑ Gluck i Boghosian 1949 ↓, s. 1.10.
- ↑ Gluck i Boghosian 1949 ↓, s. 2.47.
- ↑ Gluck i Boghosian 1949 ↓, s. 2.41-2.42.
- ↑ Gluck i Boghosian 1949 ↓, s. 2.43.
- ↑ a b Gluck i Boghosian 1949 ↓, s. 2.44.
- ↑ Gluck i Boghosian 1949 ↓, s. 2.42.
- ↑ Gluck i Boghosian 1949 ↓, s. 2.44-2.45.
- ↑ Gluck i Boghosian 1949 ↓, s. 1.10-1.14.
- ↑ Gluck i Boghosian 1949 ↓, s. 1.15.
Bibliografia
- S.E. Gluck , W.H. Boghosian , A functional description of the Edvac, Philadelphia: Moore School of Electrical Engineering, 1949 [dostęp 2015-02-10] .
- Michael R. Williams , The origins, uses, and fate of the EDVAC, „Annals of the History of Computing”, 15 (1), IEEE, 1993 .
Linki zewnętrzne
- Witryna EDVAC-a
- Praca von Neumanna z 1945. virtualtravelog.net. [zarchiwizowane z tego adresu (2015-03-05)].
- Wywiad z J.P. Eckertem, jednym z twórców