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.

Podobne dokumenty
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.

Struktura i działanie jednostki centralnej

Systemy operacyjne i sieci komputerowe Szymon Wilk Superkomputery 1

Arytmetyka liczb binarnych

Architektura komputerów

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

Budowa komputera Komputer computer computare

Architektura komputerów wer. 7

LEKCJA TEMAT: Zasada działania komputera.

Podstawy Informatyki Systemy sterowane przepływem argumentów

Architektura komputerów wer. 3

MODELOWANIE RZECZYWISTOŚCI

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

organizacja procesora 8086

Wstęp do informatyki

Informacja w perspektywie obliczeniowej. Informacje, liczby i obliczenia

LEKCJA TEMAT: Współczesne procesory.

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Projektowanie. Projektowanie mikroprocesorów

Architektura komputerów

Organizacja typowego mikroprocesora

Algebra Boole a i jej zastosowania

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Budowa Mikrokomputera

Alan M. TURING. Matematyk u progu współczesnej informatyki

Matematyczne Podstawy Informatyki

Architektura komputerów Wykład 2

LOGIKA I TEORIA ZBIORÓW

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Algorytm. Krótka historia algorytmów

3. Macierze i Układy Równań Liniowych

Krótka wycieczka do wnętrza komputera

O ALGORYTMACH I MASZYNACH TURINGA

Logiczny model komputera i działanie procesora. Część 1.

Definicje. Algorytm to:

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Tranzystor JFET i MOSFET zas. działania

Elementy Teorii Obliczeń

Wstęp do Informatyki. dr inż. Paweł Pełczyński

Bramki logiczne Podstawowe składniki wszystkich układów logicznych

Informatyka I: Instrukcja 4.2

Podstawy techniki cyfrowej Mikroprocesory. Mgr inż. Bogdan Pietrzak ZSR CKP Świdwin

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Obliczenia inspirowane Naturą

Budowa i zasada działania komputera. dr Artur Bartoszewski

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

1. Operacje logiczne A B A OR B

Przykładowe pytania DSP 1

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Architektura typu Single-Cycle

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Maszyna Turinga (Algorytmy Część III)

Struktura danych. Sposób uporządkowania informacji w komputerze.

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Hierarchia Chomsky ego Maszyna Turinga

Maszyna Turinga języki

Języki programowania zasady ich tworzenia

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

M T E O T D O ZI Z E E A LG L O G R O Y R TM

WSTĘP. Budowa bramki NAND TTL, ch-ka przełączania, schemat wewnętrzny, działanie 2

Podstawy Programowania Algorytmy i programowanie

Języki formalne i automaty Ćwiczenia 9

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

Turing i jego maszyny

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Programowanie niskopoziomowe

Aproksymacja funkcji a regresja symboliczna

PROBLEMY NIEROZSTRZYGALNE

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Laboratorium 10: Maszyna stanów

Język programowania: Lista instrukcji (IL Instruction List)

Obliczenia inspirowane Naturą

Języki, automaty i obliczenia

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Informatyka. Michał Rad

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Wykład I. Podstawowe pojęcia. Studia Podyplomowe INFORMATYKA Architektura komputerów

Wstęp do Informatyki dla bioinformatyków

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Podstawy Informatyki Maszyna Turinga

Budowa komputera. Lubię to! - podręcznik

PAMIĘĆ RAM. Rysunek 1. Blokowy schemat pamięci

Wstęp do Techniki Cyfrowej... Algebra Boole a

Operacje arytmetyczne

Kodowanie informacji. Przygotował: Ryszard Kijanka

Algorytm. a programowanie -

dr inż. Jarosław Forenc

wagi cyfry pozycje

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Transkrypt:

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 Maszyna ta jest najpotężniejszym komputerem mimo że fizycznie nie istnieje. 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. Zauważmy, ze wszystkie elementy maszyny jej stany, akcje (np. drukowanie, kasowanie, przesuwanie taśmy) są skończone, dyskretne i jednoznacznie rozróżnialne. Poza tym dysponujemy teoretycznie nieskończoną ilością taśmy (pamięci). Idea maszyny Turinga bazuje na sekwencyjności elementarnych operacji polegających na zmianie według precyzyjnie i dobrze określonych reguł zawartości nieskończonej taśmy papieru komórka po komórce. Opis postępowania jest bardzo prosty i sprowadza się do formuł postaci Jeśli jesteś w stanie X i odczytanym symbolem jest Y to zapisz symbol Z, przesuń się o jedna komórkę w prawo i przejdź do stanu (przyjmij, ze jesteś w stanie) A." 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 c o 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 de finicja 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 rys owane 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 piszem y 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ł. - Dowolny problem, mający rozwiązanie na znanych nam obecnie popularnych komputerach, można rozwiązać, konstruując odpowiadającą mu maszynę Turinga. - Twierdzenie przeciwne nie jest prawdziwe: Nie jest prawda, ze jeśli pewien algorytm może wykonać maszyna Turinga to może go tez wykonać komputer. Żaden komputer nie jest tak potężny jak maszyna Turinga, gdyż nie maja nieskończenie dużo pamięci oraz operują na zmiennych o ograniczonej wielkości. - Wszystko jedno jak by konstrukcja maszyny Turinga nie była 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 To one tworzą współczesne komputery. 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 AND(x,y) OR(x,y) NOT(x) NAND(x,y) NOR(x,y) XOR(x,y) 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 1 0 1 0 1 1 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 1 2 3 0 0 0 1 0 0 1 1 0 1 1 0 0 1 1 1 1 0 0 1 Maszyna analityczna (1833) Charles Babbage Maszyna ta jak na swoje lata jest bardzo rewolucyjna na zaawansowana, dwieście lat później czyli dziś my właśnie bazujemy na tych ideach, to taki jakby pierwszy prakomputer. Do 1833 roku tworzono wiele różnych maszyn liczących coś, tworzono tylko maszyny liczące, bo tylko to było potrzebne, różne geograficzne maszyny itp. Owe maszyny zawsze rozwiązywały tylko jedną konkretną rzecz, nie były wszechstronne, a owe maszyny bądźmy szczerzy konstruowano przy pomocy młotka, co nie było wcale

fajne no i przeszkadzało to ludziom, bo jak potrzebowali nagle policzyć coś innego, to trzeba było znów projektować kolejną maszynę, budować ją, co było czasochłonne, pracochłonne i kosztowne. Dlatego starano się stworzyć maszynę w miarę uniwersalną, czyli ta maszyna miała liczyć to, co będziemy jej kazać. 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. Czyli istotny jest sam pomysł związany z uniwersalnością owej m aszyny, by służyła do rozwiązywania różnych wielu zadań oraz chodziło też o możliwość programowania owej maszyny bez zmian fizycznych, tylko przy użyciu nowego kodu. Te dwie rzeczy nigdy wcześniej nie występowały. Oczywiście podczas budowania tej maszyny n ikt nie rozumiał po co komuś coś takiego ;) To właśnie tu pojawia się też tematyka programowania tego typu urządzeń i ktoś musiał te programy napisać, zatem przy okazji tej maszyny po raz pierwszy pojawia się programista i była to co ciekawe kobieta ;) Ona stworzyła pierwsze programy na tą maszynę mimo że maszyna sama w sobie nie istniała. Programy te rzeczywiście działały, co sprawdzono jakoś w latach powojennych. Tym programistą była Ada Lovelace. To do jej imienia pochodzi nazwa języka programowania Ada. Siłą napędową owej maszyny był silnik parowy. Maszyna miała mieć około 30 metrów długości i 10 metrów szerokości. Dane wejściowe (program oraz dane) wprowadzane miały być za pomocą kart dziurkowanych, powszechnie wykorzystywanych w tamtym czasie przez krosna mechaniczne. Do sygnalizowania i udostępniania danych wejściowe maszyna posiadała a printer a curie plotter and a Bell. Dodatkowo wyniki mogły być przedstawione na kartkach dziurkowanych w cely dalszego wykorzystania. Maszyna wykorzystywała stałoprzecinkową arytmetykę oraz system dziesiętny. Magazyn mógł pomieścić 1000 liczb 50-cio cyfrowych. Młyn mógł wykonać wszystkie cztery operacje arytmetyczne, porównanie, oraz obliczyć pierwiastek arytmetyczny. Architektura von Neumanna (1945) Każdy obecny komputer czy laptop jest przedstawicielem właśnie tej architektury von neumannowskiej. Po maszynie analitycznej konstruowano dalej maszyny konkretne jakby nigdy nie było owej maszyny analitycznej. Pierwsze zautomatyzowane maszyny liczące posiadały sztywno zakodowany program. W celu jego zmiany należało zmienić sieć połączeń elektrycznych, strukturę maszyny, czyli ją przebudować. Mimo idei zapoczątkowanej przez Babbage a pierwsze zautomatyzowane maszyny liczące posiadały sztywno zakodowany program. W celu jego zmiany należało zmienić siec połączeń elektrycznych, strukturę maszyny lub nawet przeprojektować ja. W istocie pierwsze komputery były nie tyle programowalne co przebudowywane (nie były zaprogramowane ale zaprojektowane ). Programowanie, jeśli w ogóle możliwe, było bardzo fizycznym procesem, rozpoczynającym się od wstępnego szkicowania diagramów

przepływu danych i wielu notatek, przez projektowanie inżynierskie na żmudnym procesie przebudowywania maszyny kończąc. Wspomniane problemy z programowalnośc ią doprowadziły zapewne do narodzenia się idei programu przechowywanego w komputerze ( w strukt urach jakie dostarczał). Dlatego też powrócono w pewnym sensie do maszyny analitycznej tylko zmieniono nazwy elementów. 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 (w maszynie analitycznej był zamiast tego dzwoneczek i drukarka kart) System komputerowy zbudowany w oparciu o architekturze von Neumanna powinien: - mieć skończoną i funkcjonalnie pełna listę rozkazów. Operując owymi rozkazami wprowadzamy je do komputera i każdemu mu robić to i to. Dawniej to nie było wcale takie naturalne. Wreszcie nie jest to jeden konkretny tylko program, możemy go zawsze przeprogramować bez konieczności przebudowania go; - 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, a skoro jest przechowywany w pamięci, to łatwo jest go pobrać ; - dane i instrukcje w takim systemie powinny być jednakowo dostępne dla procesora, skoro jedno i drugie jest liczbą i przechowywane w pamięci, to nie jest rozróżnialne co jest daną a co jest rozkazem, zatem nie wyróżniamy ani szczególnej części pamięci na jedno ani na drugie, komputer może w każdej chwili odczytać rozkaz jak i daną; - 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 nie posiada oddzielnych pamięci do przechowywania danych i instrukcji. - 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. Termin architektura von Neumanna pochodzi od nazwiska matematyka John von Neumann s autora raportu First Draft of a Report on the EDVACa. Datowany na 30 czerwca 1945 roku, był wczesna pisemna notatka dotycząca komputera ogólnego przeznaczenia przechowującego program w pamięci (ang. a general purpose storedprogram computing machine) jaka miał byc EDVAC. Jakkolwiek prace von Neumanna należy zaliczyć do pionierskich to juz sam termin architektura von Neumannowska

wydaje sie krzywdzić zarówno osoby współpracujące z von Neumannem jak i te na których wynikach oparł swoje doświadczenia. Idea opisana prze von Neumanna pojawiła sie juz w 1936 w opatentowanym rozwiązaniu Konrada Zuseego. Pomysł na stworzenie komputera przechowującego program w pamięci pojawiła sie w The Moore School of Electrical Engineering at the University of Pennsylvania zanim jeszcze von Neumann usłyszał cokolwiek o ENIAC. Nie jest znany autor tej idei. John William Mauchly oraz J. Presper Eckert pisali o idei przechowywania programu w pamięci w grudniu 1943 podczas ich prac nad ENIAC. Ponadto Grist Brainerd, dyrektor (?) (ang. Project administrator) projektu ENIAC, w grud niu 1943 w raporcie z postępów prac nad ENIAC nie wprost proponował takie rozwianie (jednocześnie odrzucając je jako możliwe do zastosowania w ENIAC (?)) stwierdzając, ze w celu uproszczenia projektu i niekomplikowania spraw ENIAC zostanie skonstruowany bez żadnych automatycznych regulacji (?). 19 lutego 1946 Alan Turing przedstawił dokument zawierający kompletny projekt komputera przechowującego kod w pamięci (ang. stored-program computer), Pilot ACE (jednego z pierwszych komputerów zbudowanych w Wielkiej Brytanii w The National Physical Laboratory (NPL) we wczesnych latach 50-tych). Elementy współczesnego modelu Procesor (CPU central processing unit) pamięć wejście/wyjście (input/output) łącznik w postaci magistral (on łączy powyższe trzy elementy ze sobą) Układy wejścia i wyjścia Teoretyczne komputer może bez nich działać, bo przecież teoretycznie komputer bez myszki czy klawiatury działa, ale te urządzenia są po to, by móc się z tymj komputerem komunikować, bo po co nam komputer bez myszki i klawiatury, któremu nie możemy kazać niczego zrobić? Pamięć We współczesnych komputerach nie ma jednego rodzaju pamięci, co wynika z prostego rachunku ekonomicznego, bo wiadomo, że im szybsza pamięć tym droższa. Dlatego we współczesnych komputerach mamy cały zespół różnych rodzajów pamięci i w zależności od danego zapotrzebowania dane są przechowywane w różnych rodzajach pamięci. Tu była narysowana piramidka z książki. Szerokość piramidy oznacza pojemność danego rodzaju pamięci a wysokość to szybkość, czyli na górze są najszybsze, ale też najmniej pojemne i najdroższe, a na dole najbardziej pojemne, ale najwolniejsze, lecz też najtańsze. Na samym dole są dyski twarde czyli HDD. Nad nimi są CD i DVD, jeszcze wyżej jest pamięć operacyjna, a na szczycie piramidy mamy rodzaj pamięci o nazwie rejestr. W obecnych komputerach używamy całej klasy pamięci, by w pewien sposób było nas stać na to. Wiadomo, że dane, które potrzebujemy tylko od czasu do czasu mogą być na dysku twardym, czyli na urządzeniu wolnym, bo wiadomo, że nie oglądamy na raz i ciągle wszystkich filmów jakie mamy. Procesor z kolei wiadomo, że ma pamięć bardzo szybką. Gdzieś pomiędzy potrzebami procesora a naszymi potrzebami na składowanie danych jest środek naszej piramidy, czyli pamięci operacyjne typu RAM. Magistrala Mamy różne rodzaje magistrali co też jest ładnie opisane w książce, bo nie dało się tego zdążyć zapisać, gdy to mówił. Jest magistrala sterująca, adresowa i danych. Procesor Procesor (ang. processor) nazywany często CPU (ang. Central Pr ocessing 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ę arytmetyczno-logiczną (arytmometr, ALU) do wykonywania operacji obliczeniowych na danych, - jednostkę obsługi pamięci - jednostkę obsługi instrukcji (pobieranie i dekodowanie) (to było na pierwszej wersji slajdów na drugiej już nie - układ sterujący przebiegiem wykonywania programu.) 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, ALU) do wykonywania operacji obliczeniowych na danych, jednostkę obsługi pamięci, jednostkę obsługi instrukcji (pobieranie i dekodowanie). Zestaw instrukcji Zestaw instrukcji (rozkazów) jest listą wszystkich instrukcji (we wszystk ich przewidzianych przez architekturę dopuszczalnych wariantach) akie procesor jest zdolny wykonać. W skład instrukcji wchodzą: - instrukcje arytmetyczne np. add czy subtract - instrukcje logiczne np. not, or - instrukcje operujące na danych w sensie trakt owania ich jako sekwencji zer i jedynek bez wnikania w ich znaczenie np. move, input, store - instrukcje sterujące przepływem danych, np. goto, return Cykl pracy W funkcjonalnej strukturze procesora można wyróżnić takie elementy cyklicznie powtarzające się operacje, jak: pobranie, (fetch) dekodowanie (decode) czyli komputer musi odczytać, zrozumieć to, co pobrał. wykonanie, (execute) Najpierw rozkłada rozkaz na zera i jedynki, ów ciąg zerojedynkowy na początku zawiera KOD, czyli rozkaz który np. mówi nie mów nic i jeśli tak jest to wtedy nie potrzeba żadnych argumentów, może być rozkaz, który mówi dodaj, wtedy będzie Kod dodaj, dalej będą składniki które trzeba dodać i na końcu miejsce do wpisania wyniku. Nie wszystkie wyniki muszą być zapisane. zapis wyników. (writeback) Rejestry Rejestry stanowią bardzo mała pamięć (bo są bardzo drogie), do której procesor ma zdecydowanie najkrótszy czas dostępu, by procesor mógł najszybciej pracować. 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 8-bitowy 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 przeznaczone do operowania na liczbach zmiennoprzecinkowych. - Rejestry specjalnego przeznaczenia zazwyczaj opisują stan wykonania programu. Zazwyczaj są 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. By procesor nie czekał, jak tylko skończy procesor wykonywanie rozkazu, to z rejestru dostanie od razu komunikat o kolejnym rozkazie do wykonania. - Rejestry indeksowe modyfikujące adres operandów (argumentów) instrukcji. Adresowanie każdy procesor ma kilka sposobów (historia o numerze telefonu) - natychmiastowe (opcode, argument) to odpowiednik tego, jak mamy numer telefoniczny w głowie, jeśli komputer uzna, że dana operacja jest operacją dodawania przy adresowaniu natychmiastowym, to znaczy, że argumenty są w rozkazie, to najszybszy sposób adresowania, nic więcej nie trzeba robić, nie trzeba danych pobierać. - bezpośrednie (opcode, adres) np. kod rozkazu powiedzmy dodawania jest inny niż wyżej, to znaczy, że za rozkazem nie jest od razu argument tylko indeks gdzie ten argument się znajduje - pośrednie (opcode, pamięć/rejestr z adresem) - znów wczytujemy najpierw ciąg zer i jedynek, odczytujemy kod, a za kodem mamy informację do której komórki mamy pójść i w tej komórce dopiero jest wskazywany adres skąd wziąć nasz docelowy argument. - pośrednie z użyciem rejestru bazowego i offsetu (opcode, offset) (przy ustalonej bazie)- znów zaczynamy od tego, ze odczytujemy informację o tym, że mamy dodać dwia argumenty, Skoro mamy użyć rejestru, to mam jakieś rejestru i w tym rejestr bazowy, który przechowuje pewną liczbę. Argumenty, które mamy użyć w tym rozkazie uzyskujemy w ten sposób, ze do tego co jest po rozkazie ADD dodajemy to co jest w rejestrze bazowym i tak robie dla obu liczb występujących za kodem, dostaniemy w ten sposób chyba adres komórek w których są już do kładne liczby, które chcemy dodać. Offset to przesuniecie, czyli potrzebujemy jakby komórkę pamięci przesuniętą względem bazy o wartość w komórce za ADD czyli jak za ADD mamy 5 a w bazie mamy 2 to offset jest równy 5, bo do 2 dodaję 5 i otrzymuję 7 czyli adres mojej liczby. - pośrednie z użyciem rejestru bazowego i indeksowego (opcode) (przy ustalonej bazie rejestrze bazowym i automatycznie zwiększanym rejestrze indeksowym) tutaj mamy nasz rejestr bazowy, mamy rejestr indeksowy. Sumujemy wartości z tyc h dwóch rejestrów i czasami dodajemy też do tego to, co występuje za ADD ADD 1 5 I rejestr indeksowy chcemy by się sam zwiększał o 1 po każdym pobraniu z komórki.

My jako zwykli użytkownicy nie mamy wpływu na to, jaki rodzaj adresowania jest używany. Asembler Pierwsze komputery zaczęto programować czysto w kodzie zero jedynkowym, gdzie operacja dodawania ma swój kod, każda liczba ma swój kod itp. Dlatego też ktoś wpadł na pomysł, by zamiast kodu dodawania napisać ADD i te liczby w systemie 10 i użyć programu, który nasze skróty ADD przetłumaczy na kod zero jedynkowy. To jest idea asemblera, to jest pisanie niemalże w kodzie maszynowym, jedna instrukcja kodu asemblerowego to jedna instrukcja kodu maszynowego tylko asembler to ładnie przetłumaczy. Dla przykładu procesor architektury x86/ia-32 może wykonać następujący rozkaz zapisany w języku maszyny (ciąg zer i jedynek): 1 Binary: 10110000 01100001 (Hexadecimal: 0xb061) Odpowiednik tego rozkazu wyrazony w instrukcji asemblera jest znacznie łatwiejszy do zapamiętania (mnemoniczna) 1 mov al, #061h Instrukcja ta oznacza: 1 Przenieś szesnastkowa wartość 61 (97 dziesiętnie) do rejestru procesora oznaczonego jako al. Mnemonik mov odpowiada kodowi operacji (ang. opcode) 1011, który powoduje przeniesienie wartości będącej drugim operandem do rejestru określonego przez pierwszy operand. Mnemonik wybrany został przez projektanta listy rozkazów jako skrót od przenieś (ang. move) co znacznie łatwiej zapamiętać. Lista argumentów rozdzielonych przecinkiem następuje za kodem instrukcji; jest to typowy zapis asemblera. Przykład kodu asemblera mov ax, 0D625h ;wprowadź do rejestru AX liczbę ;szesnastkowa D625 (54821 dziesiętnie) mov es, ax ;załaduj rejestr segmentowy ES wartością ;znajdującą sie w AX (D625) mov al, 24 ;załaduj dolna (młodsza) połówkę rejestru ;AX (AL) liczba dziesiętna 24 mov ah, 0 ;wyzeruj górna (starsza) połówkę rejestru ;AX (AH) int 21h ;wywołaj przerwanie 21H