s QM - Kolos

Transkrypt

s QM - Kolos
ARCHITEKTURA I DZIAŁANIE KOMPUTERA
Abstrakcyjny model maszyny przetwarzającej dane
To pomysł jak zapisać komputer jako działające urządzenie i tu pojawia się pomysł na
maszynę Turinga.
Maszyna Turinga
Jak mamy do wykonania jakieś działanie typu wypełnić formularz itp., to
teoretycznie czytamy to co mamy na kartce w sposób sekwencyjny, czyli po kolei, nikt
nie czyta najpierw z lewego górnego rogu, potem z prawego dolnego itp. Podobnie jest
jeśli chodzi o rozwiązywanie zadań, najpierw rozwiązujemy te, na które natrafimy, po
kolei. Analogicznie mamy w maszynie Turinga
– sekwencyjność operacji – intuicja prowadząca do maszyny. Bo chodzi o to, że
jak mamy jedno pod drugim przykłady jakiś równań to wykonujemy je po kolei, więc w
sumie moglibyśmy je zapisać w jednej linii, jako jeden ciąg znaków. Ale nadal mamy
analizę działania i rozbijania problemu na mniejsze działania. Dlatego Tubing wymyślił, że
zobrazujemy wszystkie operacje na taśmie i robimy to tak, że jeden znak zajmuje jedną
komórkę na tej taśmie. Czyli oprócz taśmy mamy też głowicę czytającą i w danym
momencie możemy przeczytać tylko dokładnie jeden znak, który się aktualnie znajduje
nad głowicą i w zależności od tego, co przeczyta, to wykona dane działanie. Głowica
czytająca jest w różnych stanach i to od nich też zależy co będzie dalej. Trzecią rzeczą
która składa się na budowę maszyny Turinga to te stany właśnie.
- Abstrakcyjny model nieskończonej długości taśmy, czytającej głowicy, stanów w
których znajduje się głowica, zbiór stanów to jakby wyniki operacji wykonywanych przez
głowicę
- Formalna definicja M  (Q, ,  , s) gdzie
Q – kończony niepusty zbiór stanów
Sigma – skończony niepusty zbiór dopuszczalnych symboli taśmowych, zwany również
alfabetem. Zbiór ten musi zawierać co najmniej dwa specjalne symbole - |_| (symbol
pusty) i taki trójkącik w formie strzałeczki i jest to symbol końcowy.
Delta – funkcja następnego ruchu (nazywana także diagramem lub tablicą przejść),
która jest odwzorowaniem ze zbioru delta: Q x sigma w zbiór (Q w sumie {k,t,n} x
sigma) x (<-, ->, -), gdzie k jest stanem końcowym, t jest stanem akceptującym, n jest
stanem odrzucającym, zaś <-, ->, _ oznaczają ruch głowicy odpowiednio w lewo, w
prawo oraz pozostanie w miejscu; symbole te nie należą do zbioru Q. Ta funkcja jest
największym problemem. Musimy wiedzieć pod wpływem jakiego symbolu będąc w jakim
stanie, do jakiego stanu przechodzimy – to nam mówi delta. Zbiór wartości tej funkcji to
nie tylko stan do którego przechodzę, ale też symbol, który zapiszę w tym miejscu oraz
dokąd przejdę teraz,. Możemy nic do komórki nie zapisywać. Funkcja ta może nie być
określona dla wszystkich argumentów.
S – to stan początkowy (wyróżniony stan należący do zbioru Q) czyli to stan od którego
analizowanie maszyny się zaczyna, to teraz zaczyna się odczytywanie symboli z taśmy.
Maszynę Turinga można opisać w sposób formalny przedstawiony powyżej i jest
wiele różnych takich sposobów definiowana tych zbiorów i ich elementów. Maszynę tą
można też podać w sposób graficzny, którego tu nie przestawię. Wtedy stany rysowane
są w kółeczkach i stan s początkowy jest wyróżniony w ten sposób, że dochodzi do niego
strzałeczka znikąd i mamy strzałeczki od jednego stanu do drugiego a nad strzałeczkami
piszemy pod wpływem jakiego symbolu przechodzimy do tego stanu, obok piszemy co
zapiszemy w komórce do której pójdziemy i w którą stronę się porusza, to w sumie opis
tej funkcji delta.
Powiedzmy teraz, że mamy określoną maszynę s: a c b a a b a c a c c to
oczywiście tylko kawałek taśmy, możemy przyjąć, że dalej są symbole pusty, Głowica u
nas to to co jest pogrubione. I mając ten fajny rysunek którego nikt nie przerysował
możemy obie analizować co dostaniemy.
W informatyce dowodzi się równoważności wielu różnych wariantów maszyny
Turinga, np. dość łatwo jest pokazać, że maszyna Turinga z wieloma taśmami nie różni
się istotnie od klasycznej maszyny jednotaśmowej. Również niedeterministyczne
maszyny Turinga są równoważne deterministycznym. Te różnice są tylko po to by nam
ułatwić, ale nadal one są w sobie funkcjonalnie równoważne, przy użyciu dowolnej
maszyny Turinga otrzymamy ten sam wynik.
Hipoteza Churcha Turinga
„Każdy problem, dla którego przy nieograniczonej pamięci oraz zasobach istnieje
efektywny algorytm jego rozwiązywania, da się rozwiązać na maszynie Turinga”, Nie
potrafimy tego udowodnić, bo nie potrafimy precyzyjnie zdefiniować czym jest algorytm,
czym jest program komputerowy itp. Czyli teoretycznie maszyna Turinga to uniwersalny
model komputera, każdy komputer teoretycznie da się do maszyny Turinga sprowadzić.
Jest to tylko hipoteza bo nie można jej sprawdzić na drodze matematycznych rozważań
właśnie dlatego, że łączy w sobie zarówno ścisłe jak i nieprecyzyjne sformułowania,
których interpretacja może zależeć od konkretnej osoby.
Wnioski
- Hipoteza pozwala dokładniej sformułować pojęcie samego algorytmu mówiąc
jednocześnie, że komputery są w stanie go wykonać, bo trudno jest precyzyjnie
zdefiniować czym jest algorytm
- wszystkie komputery mają jednakowe możliwości, jeśli chodzi o zdolność do
wykonywania algorytmów , a nie dostępne zasoby tj pamięć operacyjna, procesor itp. I
pomijając to czy wynik otrzymam jutro czy za milion lat to nadal otrzymam go na
każdym komputerze, czyli w pewnym sensie wszystkie komputery są tym samym
- Nie jest możliwe zbudowanie komputera o zdolności do rozwiązywania większej liczby
problemów, niż najprostsza maszyna Turinga
- Dowolny problem, mający rozwiązanie na znanych nam obecnie popularnych
komputerach, można rozwiązać, konstruując odpowiadającą mu maszynę Turinga
- Wszystko jedno jak by konstrukcja maszyny Turinga nie była złożona (złożona w sensie
ilości stanów i definicji funkcji przejścia, bo sama maszyna jest bardzo prosta) a ona
sama realizowała nie wiadomo jak skomplikowane zadania, to cały problem można
sprowadzić do bardzo elementarnych działań – manipulowania symbolami z pewnego
ograniczonego alfabetu według ściśle określonych reguł.
Bramka
Bramka jest układem elektronicznym, którego sygnał wyjściowy jest wynikiem operacji
Boole’a na sygnałach wejściowych. W bramkach wyróżniamy:
- symbole
- analiza działania
Powoli zbliżamy się do opowiedzenia o budowie komputera, o jego strukturze logicznej,
dlatego najpierw powiemy sobie o elementach składowych komputera, najbardziej
elementarnych jednostkach z których budujemy komputer jako taki. Wiadomo, że składa
się z procesora, pamięci itp., ale o tym za tydzień. Jak wiemy, komputer wykonuje
operacje zdefiniowane za pomocą algebry Boole’a i do tego są potrzebne bramki. W
algebrze Boole’a była dwuelementowa 0 i 1 i to nie ma znaczenia co 0 i 1 oznaczają,
chodzi o to bu były dwa te elementy. Musimy mieć układy realizujące elementarne
operacje i na ich podstawie możemy zbudować już wszystko inne.
x
y
AND(x,y) OR(x,y) NOT(x)
0
0
0
0
1
0
1
0
1
1
1
0
0
1
0
1
1
1
1
0
Układy, które realizują powyższe operacje to właśnie bramki – te które sobie rysowałam
w zeszycie. Z jednej strony mamy operacje wejścia, a z drugiej wyjścia – na wyjściu jest
wynik operacji boolowskiej. Istnieją też bramki pomocnicze – XOR to różnica
symetryczna, NAND to zaprzeczenie end itp.
x
y
0
0
1
1
0
1
0
1
AND(x,y) OR(x,y) NOT(x)
NAND(x,y) NOR(x,y) XOR(x,y)
0
0
1
1
1
0
0
1
1
1
0
1
0
1
0
1
0
1
1
1
0
0
0
0
Zbiór pierwszych trzech bramek nazywa się zbiorem funkcjonalnie pełnym, ale co
ciekawe mając tylko OR i NOT też da się uzyskać AND. Zbiór funkcjonalnie pełny to też
NAND! Te dodatkowe bramki są po to, bo jak mamy zbudować układ w którym
potrzebujemy trzech bramek to mamy nie fajnie, a łatwiej jest używać mniej tym
bardziej ze układ zbudowany tylko z takich samych bramek patrz NAND jest to znacznie
prostsze. XOR jest często wykonywany chociażby w szyfrowaniu, ale my teraz nie
będziemy o nim dłużej mówić. Jak połączymy ze sobą dwie bramki NAND i potem to z
trzecią bramką NAND i dostaniemy to co niżej. W wyglądzie bramka NAND wygląda tak
jak AND tylko z kółeczkiem po prawo. Dostaliśmy dokładnie kolumnę OR!
x
y
0
0
1
1
0
1
0
1
1
0
1
0
0
2
1
0
1
0
3
0
1
1
1
Maszyna analityczna (1833)
Maszyna ta miała składać się z:
- magazynu (dzisiejszy odpowiednik pamięci),
- młyna (jednostka licząca),
- mechanizmu sterującego (jednostka sterująca).
Pamięć miała służyć do przechowywania danych oraz wyników z przeprowadzanych na
nich operacji.
Młyn, odpowiednik dzisiejszej jednostki arytmetyczno-logicznej, miał wykonywać proste
działania arytmetyczne.
Mechanizm sterujący miał kierować działaniem całego urządzenia i w założeniach, miał
być programowany.
Maszyna analityczna nie doczekała się realizacji praktycznej i uwagi na proponowana
technologie realizacji (napędzanie silnikiem lokomotywy parowej, czysto mechaniczna,
wysokiej złożoności konstrukcja) istnieje wątpliwość, czy konstrukcja tego typu byłaby
zdolna do sprawnej, bezawaryjnej pracy. Jednakże jej konstrukcja posłużyła późniejszym
twórcom (głównie Johnowi von Neumannowi) do opracowania dzisiejszych komputerów.
Architektura von Neumanna (1945)
Architekture von Neumanna (John von Neumann, John W. Mauchly, John Presper Eckert)
przedstawiono po raz pierwszy w 1945 roku. Wyróżniamy w niej trzy podstawowe części:
- procesor (w ramach którego wydzielona bywa część sterująca oraz część
arytmetyczno-logiczna)
- pamięć komputera (zawierająca dane i sam program)
- urządzenia wejścia/wyjścia
System komputerowy zbudowany w oparciu o architekturze von Neumanna powinien:
- mieć skończoną i funkcjonalnie pełna listę rozkazów;
- mieć możliwość wprowadzenia programu do systemu komputerowego poprzez
urządzenia zewnętrzne i jego przechowywanie w pamięci w sposób identyczny jak
danych;
- dane i instrukcje w takim systemie powinny być jednakowo dostępne dla procesora;
- informacja jest przetwarzana dzięki sekwencyjnemu odczytywaniu instrukcji z pamięci
komputera i wykonywaniu tych instrukcji przez procesor.
- Podane warunki pozwalają przestawić system komputerowy z wykonania jednego
zadania (programu) na inne bez fizycznej ingerencji w strukturę systemu, a tym samym
gwarantują jego uniwersalność.
- System komputerowy von Neumanna
przechowywania danych i instrukcji.
nie
posiada
oddzielnych
pamięci
do
- Instrukcje jak i dane sa zakodowane w postaci liczb.
- Bez analizy programu trudno jest określić czy dany obszar pamięci zawiera dane czy
instrukcje.
- Wykonywany program może sie sam modyfikować traktując obszar instrukcji jako dane,
a po przetworzeniu tych instrukcji – danych – zacząć je wykonywać.
- Model komputera wykorzystującego architekturę von Neumanna jest często nazywany
przykładowa maszyna cyfrowa.
Elementy współczesnego modelu
 procesor
 pamięć
 wejście/wyjście
 łącznik w postaci magistral
Procesor
Procesor (ang. processor) nazywany często CPU (ang. Central Processing Unit) –
urządzenie cyfrowe sekwencyjne potrafiące pobierać dane z pamięci, interpretować je i
wykonywać jako rozkazy. Wykonuje on bardzo szybko ciąg prostych operacji (rozkazów)
wybranych ze zbioru operacji podstawowych określonych zazwyczaj przez producenta
procesora jako lista rozkazów procesora.
W funkcjonalnej strukturze procesora można wyróżnić takie elementy, jak:
- zespół rejestrów do przechowywania danych i wyników (rejestry mogą być ogólnego
przeznaczenia lub maja specjalne przeznaczenie),
- jednostkę arytmetyczna (arytmometr) do wykonywania operacji obliczeniowych na
danych,
- układ sterujący przebiegiem wykonywania programu.
Rejestry
Rejestry stanowią bardzo mała pamięć, do której procesor ma zdecydowanie najkrótszy
czas dostępu. Większość współczesnych architektur przenoszeniu danych z pamięci
operacyjnej do rejestrów wykonaniu na nich operacji i przeniesieniu wyników do pamięci.
Wielkość rejestrów wyrażana jest w bitach, jakie mogą one pomieścić, np. rejestr 8bitowy czy rejestr 32-bitowy.
Rodzaje rejestrów
Zazwyczaj procesor zawiera kilka rodzajów rejestrów, które można klasyfikować zależnie
od ich zawartości lub rodzaju operacji jakie można na nich wykonać:
- Rejestry dostępne dla użytkownika, np. rejestry danych rejestry adresowe.
- Rejestry danych służą do operowania na danych, np. wartościach liczbowych
będących liczba całkowita. Specjalny rejestr tego typu nazywany akumulatorem często
wykorzystywany jest jako domyślny rejestr pewnych instrukcji.
- Rejestr adresowy służy do przechowywania adresów i jest wykorzystywany przez
instrukcje posługujące sie adresowaniem pośrednim.
- Rejestr flagowy - rodzaj rejestru warunkowego informującego o wykonaniu lub nie
pewnej operacji lub o konieczności lub braku konieczności wykonania operacji.
- Rejestry ogólnego przeznaczenia sa połączeniem rejestrów danych i adresowych.
- Rejestry zmiennoprzecinkowe
zmiennoprzecinkowych.
przeznaczone
do
operowania
na
liczbach
- Rejestry specjalnego przeznaczenia zazwyczaj opisują stan wykonania programu.
Zazwyczaj sa to:
 wskaźnik instrukcji (ang. program counter, instruction pointer),
 wskaźnik stosu,
 rejestr flagowy (ang. status register, processor status word).
- Rejestr instrukcji przechowuje obecnie wykonywana i mające być niebawem
wykonane instrukcje.
- Rejestry indeksowe modyfikujące adres operandów (argumentów) instrukcji.
Cykl pracy
W funkcjonalnej strukturze procesora można wyróżnić takie elementy, jak:
 pobranie,
 odczyt,
 wykonanie,
 zapis.