Wyklad 1 Pojęcie architektury komputerów, modelu

Transkrypt

Wyklad 1 Pojęcie architektury komputerów, modelu
Wyklad 1
Pojęcie architektury komputerów,
modelu architekturalnego, modelu obliczeniowego,
podstawowe modele obliczeniowe systemów komputerowych
Części wykładu:
1. Pojęcia postawowe dotyczące środowiska sprzętowego komputera
2. Poziomy abstrakcji opisu urządzeń cyfrowych
3. Pojęcie „architektura komputerów”
4. Modele architekturalne systemów
5. Modele obliczeniowe
Sprzęt komputera
Sygnały danych - sygnały reprezentujące dane w trakcie przemieszczania się
między składowymi elementami sprzętowymi komputera (ang. data signals).
Sygnały sterujące – sygnały przesyłane w komputerze w celu wywoływania
w nim wykonania operacji niezbędnych dla wykonania programów (ang.
control signals).
Bramka logiczna - podzespół (urządzenie) komputera realizujący funkcję
(operację) logiczną na sygnałach wejściowych; może wypełniać funkcję
sterującą - kontroluje (otwiera/zamyka) drogę dla sygnału sterującego lub
sygnału danych, albo funkcję przekształcania (przetwarzania) danych wytwarza nową wartość danej na podstawie danych wejściowych
(argumentów operacji, którą realizuje) (ang. logical gate).
Przerzutnik - podzespół (urządzenie) komputera, umożliwiające
zapamiętanie jednego bitu informacji (ang. flip-flop).
Rejestr – podzespół (urządzenie) komputera, umożliwiające zapamiętanie
ciągu bitów (ang. register). Rejestr stanowi ciąg przerzutników.
Rejestr rozkazów komputera – rejestr, do którego należy wprowadzić
rozkaz komputera, aby został wykonany (ang. instruction register).
Rejestr buforowy – rejestr pośredniczący na drodze przesyłania informacji w
komputerze (ang. buffer register).
Rejestr adresowy – rejestr, który przechowuje ciąg binarny wykorzystywany
jako adres komórki pamięci komputera (ang. address register).
Rejestr danych – rejestr, który przechowuje ciąg binarny wykorzystywany
jako dane dla obliczeń (ang. data register).
Licznik - podzespół (urządzenie) komputera, przyjmujący określoną
sekwencję stanów pod wpływem impulsów podawanych na jego wejście (ang.
counter). Licznik zawiera ciąg przerzutników, których stany w danej chwili
określają stan licznika (ang. counter status).
Licznik rozkazów – specjalny licznik w komputerze, który wyznacza adres
następnego rozkazu do wykonania (ang. program counter).
Blok funkcjonalny (wykonawczy), układ wykonawczy (funkcjonalny),
jednostka wykonawcza (funkcjonalna) – fragment sprzętu komputera
(podzespół) wypełniający wydzielony zbiór operacji (funkcji) o podobnym
charakterze (ang. functional unit).
Blok arytmetyczno-logiczny inaczej jednostka arytmetyczno-logiczna –
blok funkcjonalny wykonujący arytmetyczne i logiczne operacje na danych.
Pamięć komputera - podzespół (urządzenie) komputera, umożliwiające
przechowywanie informacji (ang. memory, store).
Szyna (magistrala) - podzespół (urządzenie) komputera, umożliwiające
przysyłanie informacji między różnymi urządzeniami (blokami) komputera
(ang. bus).
Procesor inaczej centralny procesor, jednostka centralna- główny
podzespół komputera, wykonujący instrukcje wewnętrzne komputera (ang.
processor, central procesor, central processing unit - CPU).
Układ sterowania komputera inaczej układ sterujący – podzespół
procesora zajmujący się pobieraniem rozkazów i wytwarzaniem sygnałów
sterujących pracą elementów składowych komputera (ang. control unit).
Poziomy abstrakcji opisu urządzeń cyfrowych
Systemy cyfrowe i ich działanie mogą być opisywane na różnych poziomach
szczegółowości, które nazywane są poziomami abstrakcji (ang. abstraction
levels).
Można wyróżnić 6 poziomów abstrakcji opisu systemów cyfrowych.
Podane są one w tabeli poniżej.
W pierwszej kolumnie podano nazwę poziomu abstrakcji.
W drugiej kolumnie podano elementy składowe, które są rozważane przy
opisywaniu systemu na danym poziomie abstrakcji.
W trzeciej kolumnie określono ogólnie elementy (rodzaj) języka, przy
pomocy którego wyrażony jest opis elementów rozważanych na danym
poziomie abstrakcji.
6 poziomów abstrakcji opisu systemów cyfrowych
Poziom abstrakcji
Rozważane elementy
Opis poprzez
Poziom systemu
operacyjnego
Moduły systemu
operacyjnego
Dyrektywy systemu
operacyjnego
Poziom ogólnego
systemu
Elementy systemu
komputerowego
Instrukcje komputera
Operacje procesora,
Podstawowe
Poziom procesorów pamięci, zespoły
instrukcje procesora
rejestrów, itp
Poziom bloków
funkcjonalnych
Bloki arytmetyczne,
bloki logiczne, układ Podstawowe operacje
sterowania
Poziom logiczny
Bramki, przerzutniki Równania logiczne
Poziom
elektroniczny
Tranzystory, diody
itp
Równania napięć,
prądów
Najwyższym poziomem abstrakcji opisu typowego systemu komputerowego
jest poziom systemu operacyjnego.
System operacyjny jest spoiwem, który wiąże w systemie komputerowym
elementy sprzętowe i programowe systemu z programami użytkowymi.
W skrócie, można powiedzieć, że system operacyjny wykonuje szereg funkcji
związanych z utrzymywaniem systemu w stanie gotowości do pracy,
wykonywaniem programów użytkowych, zabezpieczaniem poprawności
działania systemu oraz ochroną programów, danych i urządzeń sprzętowych
przed działaniami zagrażającymi ich bezpiecznemu istnieniu w systemie.
Spełnianiem tych funkcji zajmują się różne moduły programowe należące do
systemu operacyjnego.
Można więc spojrzeć na system bardzo makroskopowo, poprzez wypełniane
przez niego funkcje i odpowiadające im moduły. Funkcje te i moduły
możemy najkrócej opisać poprzez dyrektywy, przy pomocy których te funkcje
i moduły są wywoływane.
Niższym poziomem abstrakcji jest tzw. poziom ogólnego systemu.
Widzimy tam system komputerowy jako aglomerację połączonych ze sobą
dużych podzespołów, takich jak procesory, pamięci, urządzenia zewnętrzne i
ich urządzenia sterujące, zainstalowane w komputerze.
Podane wyżej elementy będą rozważane przy opisie działania systemu.
Opis systemu na tym poziomie wyrazimy poprzez opis współdziałania
rozważanych elementów systemu. Najprościej będzie to zrobić przez podanie
typów i generalnego opisu instrukcji języka wewnętrznego komputera.
Kolejny niższy poziom abstrakcji opisu systemu jest nazwany poziomem
procesorów.
Na tym poziomie system widzimy poprzez własności procesorów, których
znajomość jest konieczna dla napisania poprawnych programów użytkowych
dla tych procesorów.
Najprościej te własności wyrazić poprzez listę instrukcji (rozkazów języka
wewnętrznego) tych procesorów realizujących operacje obliczeniowe.
Następny niższy poziom abstrakcji nazywamy poziomem bloków
funkcjonalnych.
Jeżeli chcemy przedstawić funkcjonalność procesorów bardziej szczegółowo,
to możemy przejść na niższy poziom abstrakcji i wyróżnić operacje, z których
wykonania składa się wykonanie rozkazów procesorów. Z tymi operacjami
związane są pewne bloki wykonawcze (inaczej funkcjonalne) we wnętrzu
procesora, które te operacje realizują.
Na tym poziomie system widzimy jako zbiorowisko połączonych bloków
funkcjonalnych.
Bloki funkcjonalne najprościej opisać na tym poziomie poprzez opis
wykonywanych przez nie operacji.
Niższy poziom abstrakcji opisu systemu jest poziomem układów logicznych.
Na tym poziomie widzimy logiczne moduły składowe użyte do realizacji
operacji bloków funkcjonalnych.
Rozważanymi elementami opisu systemu komputerowego są na tym poziomie
elementarne układy użyte do budowy bloków funkcjonalnych i dróg
przesyłania informacji między tymi blokami, takie jak bramki logiczne,
przerzutniki, itp.
Te elementarne układy są opisywane za pomocą tzw. równań logicznych,
wyrażających zależności między sygnałami logicznymi obecnymi na ich
wejściach i wyjściach.
Jeżeli, opisując system cyfrowy, chcemy wniknąć w szczegóły budowy
fizycznej bramek, przerzutników i innych elementów sprzętowy musimy zejść
na poziom elektroniczny opisu systemu.
Ten poziom rozważa jak bramki i przerzutniki są zbudowane z podstawowych
używanych dzisiaj elementów elektronicznych takich jak tranzystory, diody,
oporności, kondensatory itp.
Dla opisu działania tych elementów i ich współdziałania użyjemy równań
opisujących zależności między napięciami na ich końcówkach, rozpływ
prądów, itp.
Należy tu powiedzieć, że zwykle, na niższych poziomach abstrakcji opisu
systemów cyfrowych, stosujemy hierarchiczną metodę opisu.
Polega to na tym, że przechodzimy na poziom niskiej abstrakcji jedynie dla
niewielkiej liczby składników opisu widocznych na wyższym poziomie
abstrakcji.
Ułatwia to odbiór opisów przez osoby lub systemy z nich korzystające.
Dla opisu systemu na danym poziomie abstrakcji często stosujemy tzw.
schematy blokowe, w których przedstawione są elementy systemu rozważane
na danym poziomie abstrakcji oraz ich wzajemne powiązania.
Schemat blokowy urządzenia (komputera) (ang. block diagram) jest to
rysunek składający się ze zbioru figur geometrycznych z nazwami
(prostokątów, kwadratów, kół itp.) połączonych liniami.
Figury symbolizują podzespoły urządzenia.
Linie łączące przedstawiają możliwe powiązania (współdziałanie) między
podzespołami, np. przesyłanie informacji, przesyłanie sygnałów sterujących
itp.
Dobór podzespołów przedstawionych w schemacie blokowym zależy od
poziomu szczegółowości z jaką rozpatrywane jest działanie urządzenia a więc
poziomu abstrakcji.
Pojęcie „architektura komputerów”
Definicję pojęcia architektury podał w 1964 G. Amdahl, projektant słynnej
serii komputerów IBM System/360, używanych w latach 60-tych.
„Architektura komputera (ang. computer architecture) jest to
charakterystyka komputera, którą musi znać programista, aby napisać
poprawny program w języku wewnętrznym dla tego komputera”.
Niemal taka sam znajomość cech komputera jest potrzebna dla pisania
programów w języku asemblera, definicję te więc można zmodyfikować
wprowadzając „w języku wewnętrznym lub asemblerze”.
Zgodnie z definicją Amdahla na architekturę komputera składają się:
• schemat blokowy komputera,
• opis rejestrów,
• struktura i opis pamięci,
• opis bloków funkcjonalnych
• opis listy rozkazów
• opis podstawowych mechanizmów sterujących, takich jak układ przerwań,
układy synchronizacji, itp.
Architektura komputera wyznacza poziom abstrakcji wiedzy o komputerze
potrzebny do napisania programu w języku wewnętrznym komputera lub
języku asemblera. Ten poziom abstrakcji wyznacza niezbędną strukturę
komputera i odpowiadający jej schemat blokowy.
Organizacja logiczna komputera jest to realizacja architektury komputera
na poziomie układów logicznych, rejestrów, pamięci i bloków
funkcjonalnych.
Poziom abstrakcji rozpatrywany w organizacji logicznej komputera jest
znacznie niższy niż przy rozpatrywaniu architektury komputera, gdyż
uwzględnia układy logiczne, które w architekturze komputera nie są
uwzględniane.
Możliwe są dwa sposoby rozpatrywania architektury:
Exo-architektura (architektura zewnętrzna )- opisywane urządzenie
traktuje się całościowo jako blok (element składowy schematu blokowego) i
podaje się jego opis funkcjonalny.
Endo-architektura (architektura wewnętrzna) - opis urządzenia na
poziomie abstrakcji niższym (bardziej szczegółowym) niż poziom exoarchitektury, opisuje się schemat blokowy oraz własności i działanie
elementów tego schematu.
Bardziej ogólna definicja architektury urządzeń, przeznaczona nie tylko
dla rozpatrywania komputerów, została podana w 1981 przez S. Dasguptę:
"Architektura jest to opis urządzenia (komputera lub jego elementu) na danym
poziomie abstrakcji" albo "definicja sprzęgu (interfejsu) między różnymi
poziomami abstrakcji opisu urządzenia (komputera lub jego elementu),
potrzebnego do zrozumienia działania urządzenia (komputera, elementu) na
tym niższym poziomie".
Na rysunku poniżej pokazano kolejne poziomy abstrakcji opisu architektury
systemu komputerowego i jego elementów.
Najwyższy poziom abstrakcji jest to poziom globalnych własności systemu,
na którym podajemy jego exo-architekturę. Zawiera ona cechy systemu
istotne z punktu widzenia wykorzystania systemu jako elementu składowego
większych struktur np. struktur multi-systemowych.
Endo-architektura systemu to jego struktura w rozłożeniu na mniejsze bloki
np. procesory, bloki pamięci i elementy łączące oraz ich cechy ogólne wraz z
ogólnym sposobem współpracy.
Elementy systemu widzianego na tym poziomie możemy opisywać podając
ich exo-architekturę , użyteczną dla budowy z nich całego systemu lub tez
możemy wejść w ich endo-architekturę czyli ich strukturę i opis funkcjonalny
w rozbiciu na mniejsze elementy składowe.
Aby zrozumieć działanie systemu na kolejnych, malejących poziomach
abstrakcji, musimy, zgodnie ze definicją Dasgupty, znać endo-architekturę
systemu odpowiadającą dekompozycji na elementy składowe o zadanym
niższym poziomie szczegółowości.
Architektura globalna (exo-architektura) systemu komputerowego
C
Architektura szczegółowa (endo-architektura) systemu komputerowego
P1
P2
Pk
Procesory
Mi
Bloki
pamięci
Sieć łącząca
M1
M2
Architektura globalna (exo-architektura) procesora
P
Architektura szczegółowa (endo-architektura) procesora
Zespół
Rejestrów
Układ
Sterowania
Magistrala
systemowa
Blok
Funkcjonalny 1
Blok
Funkcjonalny n
Architektura ogólna (exo-architektura) bloku funkcjonalnego
Blok
Funkcjonalny
Architektura szczegółowa (endo-architektura) bloku funkcjonalnego
Pojęcie "modelu architekturalnego" komputera
Model architekturalny komputera określa w jaki sposób będą wykonywane
obliczenia w danym komputerze.
Na model architekturalny komputera składa się 5 podstawowych elementów:
1. Podstawowe operacje obliczeniowe czyli podstawowe operacje komputera i
typy danych określone przez listę instrukcji wewnętrznych.
2. Definicja przestrzeni adresowych dostępnych dla obliczeń (mechanizm
dostępu do danych).
3. Sterowanie operacjami obliczeniowymi ( zasady odwzorowania problemu
obliczeniowego na podstawowe operacje obliczeniowe i określania
kolejności ich wykonania - mechanizm sterowania w programach).
4. Zasady komunikacji między komputerami pracującymi równolegle.
5. Zasady synchronizacji wymiany informacji.
Model architekturalny von Neumana:
1. Procesor wykonuje obliczenia zgodnie z programem, składającym się z
instrukcji wewnętrznych, zapamiętanych w pamięci operacyjnej.
2. Instrukcje wykonują operacje na danych ulokowanych w pamięci i
rejestrach.
3. Pamięć instrukcji wewnętrznych i danych jest wspólna.
4. Procesor ma układ sterowania, który szeregowo pobiera kolejne instrukcje z
pamięci i steruje ich wykonaniem w komputerze.
Model von Neumana pochodzi z projektu elektronicznej maszyny EDVAC
oraz maszyny IAS opublikowanego w 1946 na Uniwersytecie Princeton w
USA przez prof. Johna von Neumana. Koncepcje von Neumana okazały się
być wcześniej zrealizowane w Iowa State College w USA w 1939 r w
maszynie ABC (Atanasov-Berry Computer), a pózniej w maszynie ENIAC na
Uniwersytecie Pensylvania, która była pierwszą elektroniczną (lampową)
maszyną cyfrową.
Blok arytmetyczno
- logiczny ALU
Układy
We / Wy
Pamięć
Układ sterowania
Ogólny schemat blokowy komputera o architekturze von Neumana
Harvardzki model architekturalny (ang. Harvard architecture):
1. Procesor wykonuje obliczenia zgodnie z programem, składającym się z
instrukcji wewnętrznych, zapamiętanych w pamięci operacyjnej.
2. Instrukcje wykonują operacje na danych ulokowanych w pamięci i
rejestrach.
3. Pamięć instrukcji wewnętrznych i danych jest rozdzielna.
4. Układ sterowania pobiera kolejne instrukcje z pamięci równolegle z
dostępem do danych dla innych rozkazów.
Model pochodzi z maszyny Mark I (przekaźnikowa pamięć danych, pamięć
instrukcji na taśmie papierowej), zbudowanej w 1944 na Uniwersytecie
Harvard w USA.
Pamięć
danych
Pamięć
instrukcji
Blok arytmetyczno
- logiczny ALU
Układy
We / Wy
Układ sterowania
Ogólny schemat blokowy komputera o architekturze harvardzkiej
Pojęcie „modelu obliczeniowego”
Model obliczeniowy (ang. computational model) określa w jaki sposób będą
programowane i wykonywane obliczenia w programie .
Na model obliczeniowy składa się:
•
model architekturalny systemu
•
język programowania.
Podstawowe modele obliczeniowe wykorzystywane w informatyce.
Model obliczeniowy
Model architekturalny
Język programowania
Model von Neumana
(sterowany przepływem
sterowania w programie)
Maszyna von Neumana
Imperatywny
Model sterowany
przepływem danych w
programie (ang. data flow
driven)
Komputer sterowany
przepływem danych
Graf przepływu danych w
programie lub język
pojedyńczych przypisań
Model sterowany
żądaniami obliczeń
(aplikacyjny, redukcyjny)
Komputer redukujący
Funkcjonalny czyli
zapisy instrukcji do danych aplikacyjny
Model programowania
obiektowego
Komputer zorientowany
obiektowo
Model programowania
logicznego
Komputer zorientowany na Logiczny
programowanie logiczne
Model Turinga
Maszyna Turinga
(ang. data flow computer)
Obiektowy lub
zorientowany obiektowo
Dane na taśmie wraz z
tablicą przejść stanów
Model obliczeniowy von Neumana (klasyczny)
Instrukcje obliczeniowe wykonują operacje na danych zapisanych w pamięci i
rejestrach komputera. Kolejność wykonywania instrukcji w programie jest
ustalona przez programistę poprzez kolejność ich zapisu w programie oraz
instrukcje zmiany sterowania: skok, wywołanie podprogramu, powrót z
podprogramu, itp.
W modelu architekturalnym von Neumana kolejność wykonywania instrukcji
zapisanych w pamięci wyznacza licznik rozkazów (ang. program counter),
który zawiera zawsze adres następnej instrukcji w pamięci. O ile aktualny
rozkaz nie jest rozkazem zmiany sterowania, to jako następny wykonany jest
rozkaz o adresie wziętym z licznika rozkazów komputera. O ile aktualnym
rozkazem jest rozkaz zmiany sterowania w programie, to ustawia on nową
zawartość licznika rozkazów tj. nowy adres następnej instrukcji do
wykonania.
Język programowania stanowi w tym modelu język w jakim zapisano
program przed wykonaniem a więc język maszynowy.
W języku maszynowym programista lub kompilator określa bezpośrednio
(explicite) i dokładnie jakie instrukcje (obliczenia) maja się wykonać i
dokładnie w jakiej kolejności. Takie języki programowania nazywane są
językami imperatywnymi.
Przykład
Obliczenie:
y = (a+c)*(b+5)+a*c)
drukuj y
dla a=1, b=2, c=3.
Budowa instrukcji komputera użytych poniżej w programie realizującym
obliczenie y.:
operacja
adres/wartość adres/wartość
argumentu 1 argumentu 2
adres
wyniku
Program jest zapisany w pamięci komputera w komórkach odpowiadających
kolejnym adresom począwszy od a1.
Wykonanie programu rozpoczyna się od instrukcji zapisanej pod adresem a1.
Po wykonaniu każdej instrukcji, komputer wykonuje instrukcję zapisaną pod
następnym adresem pamięci. Steruje tym zwiększająca się o jeden zawartość
licznika rozkazów.
Ilustracja modelu obliczeniowego von Neumana
Instrukcje programu
Licznik
rozkazów
Dane/wyniki
1
:a
2
:b
3
:c
a1
a1:
+
a
c
k1
a1+1: +
b
5
k2
:k1
:k2
a1+2:
*
a
c
k3
:k3
a1+3: * k1 k2 k4
:k4
a1+4: + k3 k4 k5
:k5
a1+5: drukuj k5
-
-
Model obliczeniowy sterowany przepływem danych
W modelu obliczeniowym sterowanym przepływem danych kolejność
wykonania instrukcji programu nie jest wyznaczana przez programistę, lecz
przez gotowość wszystkich danych wejściowych instrukcji.
Wszystkie instrukcje gotowe do wykonania, w sensie dostępności ich danych
wejściowych, powinny wykonać się równolegle.
Po wykonaniu tych instrukcji, wytworzone przez nich wyniki częściowe są
rozprowadzane do wszystkich instrukcji programu, które z nich korzystają.
W ten sposób przepływ obliczonych wyników (danych dla innych instrukcji)
zapewnia gotowość instrukcji i wyznacza kolejność ich wykonania w
programie.
Model architekturalny komputera sterowanego przepływem danych zakłada,
że dla każdej instrukcji gotowej do wykonania będzie dostępny odrębny
procesor.
Model ten zapewnia równoległy przepływ danych między tymi procesorami.
W praktyce takie założenia mogą być spełnione tylko dla ograniczonej liczby
instrukcji w programie. W związku z tym, w praktyce, model architekturalny
sterowany przepływem danych jest realizowany w oparciu o ograniczoną
liczbę procesorów typu von Neumana. W systemie takim istnieje blok
przeglądania instrukcji programu pod względem ich gotowości do wykonania.
Spośród instrukcji gotowych, kieruje się do równoległego wykonania tylko
liczbę odpowiadającą faktycznej liczbie dostępnych procesorów. Po ich
wykonaniu, rozsyła się wyniki między instrukcjami.
Następnie, wyznacza się instrukcje gotowe do wykonania i znów kieruje się
do wykonania ich liczbę ograniczoną faktyczną dostępnością procesorów
wykonawczych.
Językiem programowania w modelu obliczeniowym sterowanym
przepływem danych jest graf instrukcji programu połączonych krawędziami,
które są określone przez wskaźniki rozpływu wyników obliczeń między
instrukcjami.
Inną formą języka programowania w tym modelu są tzw. języki
pojedyńczych przypisań (ang. single assignment languages), gdzie
wykorzystuje się zmienne, reprezentujące dane i wyniki obliczeń, którym
nadaje się wartości tylko raz w trakcie wykonywania programu.
Obydwie formy języka programowania określają jakie obliczenia mają być
wykonane, nie określając dokładnie ich kolejności. Takie języki
programowania nazywamy językami deklaratywnymi.
Przykład
Obliczenie:
y := (a+c)*(b+5)+a*c
drukuj y
dla a=1, b=2, c=3.
Budowa instrukcji komputera:
operacja
pole
pole
adres przesłania
argumentu 1 argumentu 2
wyniku
Ilustracja modelu obliczeniowego sterowanego przepływem danych
Dane wejściowe:
a:
1
b:
2
c:
3
Instrukcje:
i1:
+
P
P
i4(1)
i4:
*
P
i2:
P
+
P
5
i4(2)
i3:
i5(1)
i5:
*
i6: drukuj
P
i6(1)
P
P
-
-
*
P
P
i5(2)
W powyższym przykładzie, a, b, c, symbolizują adresy komórek pamięci
komputera, w których przechowuje się wartości danych wejściowych dla
zmiennych a, b, c, użytych w formule obliczania wartości y.
i1,...,i6 są to adresy pod którymi zapisano w pamięci komputera instrukcje
programu. Wewnątrz instrukcji znajdują się pola do wpisania danych
początkowych dla programu lub wyników wykonania innych instrukcji. Są
one oznaczone literą P. Polom tym są przypisane identyfikatory1 i 2. Na
początku następuje wpisanie danych wejściowych do wszystkich instrukcji,
które z nich korzystają. Wykonują się równolegle wszystkie instrukcje , które
mają gotowe (wpisane) wszystkie dane wejściowe. Po wykonaniu każdej
instrukcji, jej wynik jest rozsyłany do wszystkich instrukcji wskazanych w
prawym skrajnym polu instrukcji – podany jest adres instrukcji w pamięci
oraz numer pola (w nawiasie). Obliczenie zostaje zakończone po wykonaniu
instrukcji spod adresu i6.
Model obliczeniowy sterowany żądaniami obliczeń
Jest to model obliczeniowy, w którym kolejność wykonywania obliczeń w
programie nie jest określona przez programistę i nie zależy od ich porządku w
programie.
W modelu tym instrukcja (pakiet obliczeniowy) jest aktywowana do
wykonania, o ile jej wyniki są potrzebne dla wykonania innej instrukcji.
Instrukcja zostaje wykonana o ile ma dostarczone wszystkie potrzebne
argumenty w postaci liczbowej.
Wykonanie instrukcji zamienia ją na wartość wytworzonego przez nią wyniku
(redukuje do wyniku), który staje się wtedy dostępny dla innych instrukcji.
Stąd taki model obliczeniowy nazywamy również modelem redukcyjnym
(ang. graph reduction model).
Inna odmiana modelu sterowanego żądaniami obliczeń, powoduje
przepisywanie potrzebnych formuł obliczeniowych z aktywowanych pakietów
instrukcji do pakietów instrukcji aktywujących, dotąd aż w rozszerzonym
aktywującym pakiecie zawarte będą wszystkie niezbędne formuły do
obliczenia żądanej wartości.
Przepisywanie formuł jest równoważne przykładaniu (ang. application)
formuł (funkcji) z pakietów aktywujących do formuł (funkcji) z pakietów
aktywowanych. Dlatego taki model obliczeniowy nazywamy również
modelem aplikacyjnym (ang. applicative model) lub modelem funkcyjnym
(ang. functional model).
Do zapisu programu używamy w tym przypadku deklaratywnych języków
programowania nazywanych językami funkcyjnymi (ang. functional
languages).
Przykład
Obliczenie:
y := (a+c)*(b+5)+a*c
drukuj y
dla a=1, b=2, c=3.
Budowa pakietu instrukcji komputera:
operacja
adres pakietu adres pakietu
dostarczającego dostarczającego
argument 1
argument 2
pole
wyniku
Ilustracja modelu obliczeniowego sterowanego przepływem żądań
obliczeń
Dane wejściowe:
a:
1
b:
Instrukcje:
i1: +
P
i4:
i2:
2
+
*
c:
5
i3:
P
P
i5:
*
i6: drukuj
P
-
P
*
3
P
W powyższym przykładzie, a, b, c, symbolizują adresy komórek pamięci
komputera, w których przechowuje się wartości danych wejściowych dla
zmiennych a, b, c, użytych w formule obliczania wartości y.
i1,...,i6 są to adresy pod którymi zapisano w pamięci komputera pakiety
instrukcji programu. Wewnątrz każdej instrukcji znajdują się pola wskazujące
instrukcje, które mają wytworzyć argumenty dla tej instrukcji. Istnieje też
pole do wpisania wyniku wykonania tej instrukcji, oznaczone literą P. Na
początku następuje próba wykonania – aktywacja instrukcji spod adresu i6.
Instrukcja, która jest aktywowana może się wykonać, jeśli są gotowe
wszystkie potrzebne jej dane wejściowe. O ile dane te nie są gotowe,
następuje aktywacja wyliczających je instrukcji. Instrukcja spod adresu i6
aktywuje instrukcję spod i5 . Ta z kolei aktywuje instrukcje spod i3, i4., itd.
Instrukcje spod i1, i2, i3 pobierają dane wejściowe i wykonują się jako
pierwsze, zapełniając swoje pola P. Ich wyniki w polach P są dostarczone do
instrukcji, które ich potrzebują. Obliczenie zostaje zakończone po wykonaniu
instrukcji spod adresu i6.
Model obliczeniowy Turinga.
Ten model obliczeniowy został zaproponowany w 1937 r przez A. Turinga z
Uniwersytetu Cambridge w Anglii jako pierwszy uniwersalny model
obliczeniowy. Służył dla porównywania własności różnych algorytmów i
programów pochodzących z różnych komputerów, metodą przedstawienia ich
w tym modelu obliczeniowym. Jest używany do dzisiaj w tym celu przez
teoretyków informatyki.
Model Turinga obejmuje model architekturalny – maszynę Turinga oraz
odpowiedni dla tego modelu specjalny język programowania.
Następujące elementy składają się na model architekturalny Turinga:
1. Skończony alfabet symboli: a, b, c, …, m.
2. Skończony zbiór stanów: stan początkowy S0, stan S1, stan S2, …, stan
końcowy Sk.
3. Nieskończona taśma z polami na zapis symboli z alfabetu.
4. Głowica czytająco/pisząca na taśmie, która może przesuwać się o jedno
pole w zadanym kierunku,
5. Diagram przejść między stanami – tablica przejść, określająca następny
stan, zapis symbolu pod głowicą i kierunek następnego ruchu.
6. Działanie mechanizmu sterowania
• maszyna w stanie „i” czyta znak „z” pod głowicą,
• dla stanu „i” oraz znaku „z” maszyna określa z tabeli przejść:
•
stan, do którego ma przejść,
•
znak, który ma być wpisany w polu pod głowicą,
•
kierunek ruchu głowicy o 1 miejsce,
• głowica wpisuje nowy znak i przesuwa się w zadanym kierunku.
7. Instrukcje to znak, stan, kierunek.
Język programowania w tym modelu obliczeniowym stanowi alfabet symboli
i tablica przejść stanów maszyny.
Schemat maszyny Turinga
Przykład
Dodawanie liczb całkowitych (model obliczeniowy takiego dodawania) w
maszynie Turinga:
Notacja zapisu składników i wyniku: jednorodne ciągi znaków “1” w liczbie
równej wartości składnika lub wyniku, zapisane w polach odseparowanych
znakami “X”.
Na taśmie zapisane są dane sześcio-pozycyjne: 4 oraz 5
…XX001111X111110XX
Program startuje z lewego X przesuwa głowicę w prawo aż do pierwszego X
po ciągu zer i jedynek,
zastępuje to X przez 1, następnie przesuwa się w prawo do ostatniej jedynki,
zastępuje tę jedynkę przez O.
Taśma po wykonaniu operacji zawiera kod liczby 9:
…XX0011111111100XX .

Podobne dokumenty