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 .