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.