AKO1, Informatyka, Architektura systemów komputerowych


POLITECHNIKA GDAŃSKA

WYDZIAŁ ELEKTRONIKI, TELEKOMUNIKACJI i INFORMATYKI

KATEDRA ARCHITEKTURY SYSTEMÓW KOMPUTEROWYCH

0x01 graphic

Architektura komputerów

Materiały pomocnicze do wykładu dla kierunku Informatyka

cz. I

Opracował dr inż. Andrzej Jędruch

Gdańsk 2008

Literatura do przedmiotu "Architektura komputerów"

Tanenbaum A.S.: Strukturalna organizacja systemów komputerowych. Wyd. Helion 2006.

Stallings W.: Organizacja i architektura systemu komputerowego. Warszawa WNT 2000.

Chalk B.S.: Organizacja i architektura komputerów. Warszawa WNT 1998.

Null L., Lobur J.: Struktura organizacyjna i architektura systemów komputerowych. Wyd. Helion 2004.

Lewis D.W.: Między asemblerem a językiem C. Wyd. RM. 2004.

Schmit L.: Procesory Pentium. Narzędzia optymalizacji. Warszawa wyd. Mikom 1997.

Biernat J.: Architektura komputerów. Wrocław 2005. Oficyna Wydawnicza Politechniki Wrocławskiej.

Komorowski W.: Krótki kurs architektury i organizacji komputerów. Mikom, Warszawa 2004.

Błaszczyk A.: Win32ASM. Asembler w Windows. Gliwice wyd. Helion 2003.

Literatura dodatkowa

Hyde R.: Profesjonalne programowanie. 2006, wyd. Helion.

Irvine K.R.: Asembler dla procesorów Intel. Gliwice wyd. Helion 2003.

Dudek A.: Jak pisać wirusy. Warszawa wyd. Read Me 1994.

Pirogow V.: Asembler. Podręcznik programisty. Wyd. Helion 2005.

Wróbel E. i in.: Praktyczny kurs asemblera. Wyd. Helion 2004.

Wróbel E. i in.: Asembler. Ćwiczenia praktyczne. Wyd. Helion 2002.

Komorowski W.: Instrumenta computatoria (wybrane architektury komputerów). Gliwice wyd. Helion 2000.

Rozwój konstrukcji komputerów i oprogramowania

1834 Babbage — projekt urządzenia "Analytical Engine"

1854 Boole: "Laws of thought"

1930 Laboratorium firmy Bell: komputer elektromechaniczny

1938 Urządzenie liczące w pełni elektroniczne "Colossus" (Turing, Flowers, Newman)

1941 Kalkulator elektromechaniczny (K. Zuse), mnożenie 3 s

1942 - 1946 pierwsze komputery elektroniczne

1944 MARK I (H. Aiken), Harvard University

1945 ENIAC

1945 koncepcje J. von Neumanna

1948 Opracowanie tranzystora

1949 Rozwój oprogramowania: biblioteki podprogramów, asembler

1951 Komputer EDVAC (von Neumann) — program przechowywany w pamięci

1954 Język programowania FORTRAN

1954 IBM 650 — pierwszy komputer produkowany masowo

1955 Pierwszy komputer tranzystorowy

1958 Język Algol

1958 komputery tzw. drugiej generacji (tranzystorowe)

1958 Komputer Atlas z pamięcią wirtualną

1959 Komputer PDP-1

1962 Systemy z podziałem czasu

1968 komputery tzw. trzeciej generacji (układy scalone)

1969 System Unix

lata 70 minikomputery

1971 Procesor Intel 4004

1972 Język C

1977 Komputery osobiste: Apple, Commodore

1980 komputery osobiste

1981 Komputer IBM PC (16 KB RAM)

1982 Turbo-Pascal

1985 Język C++

1990 System Windows 3.0

1995 Rozwój systemów sieciowych, Internet

Komputery w Polsce

1958 Komputer XYZ (Zakład Aparatów Matematycznych PAN)

1960 Komputer ZAM 2

1960 Język programowania SAKO

1964 Komputery ZAM 21

1972 Komputery ODRA (Elwro Wrocław)

1975 Komputer Momik

Procesory zgodne z architekturą IA-32

8086/88 1978

80286 1982

386 1985

486 1989

Intel Pentium 1993

AMD K6 1996

Intel Pentium III 1999

AMD Athlon 1999

Intel Pentium 4 2000

AMD Athlon 64 2004

Intel Pentium D 2005

Intel Core Duo 2006

Model komputera wg von Neumanna

w roku 1945 matematyk amerykański von Neumann wraz ze współpracownikami zaproponował pewien model wykonywania obliczeń — mimo upływu wielu lat prawie wszystkie współczesne komputery ogólnego przeznaczenia stanowią realizację tego modelu;

0x01 graphic

do budowy współczesnych komputerów używane są elementy elektroniczne — inne rodzaje elementów (np. mechaniczne) są znacznie wolniejsze (o kilka rzędów); ponieważ elementy elektroniczne pracują pewnie i stabilnie jako elementy dwustanowe, informacje przechowywane i przetwarzane przez komputer mają postać ciągów zerojedynkowych;

instrukcje (rozkazy) przekazywane do procesora mają postać jednego lub kilku bajtów o ustalonej zawartości; i tak na przykład przekazanie procesorowi Pentium (lub Athlon) rozkazu (instrukcji) w formie bajtu 01000010 spowoduje zwiększenie liczby umieszczonej w (opisanym dalej) rejestrze EDX o 1, natomiast przekazanie bajtu 01001010 zmniejszenie tej liczby o 1; często polecenia przekazywane procesorowi składają się z kilku bajtów, np. bajty 10000000  11000111  00100101 są traktowane przez procesor jako polecenie dodania liczby 37 do liczby znajdującej się w rejestrze BH;

Pamięć główna (operacyjna)

w trakcie pracy procesor komunikuje się z pamięcią operacyjną, wykonując operacje zapisu i odczytu danych, a także pobierając kolejne rozkazy do wykonania;

0x01 graphic

pojedynczy bajt umożliwia tylko zapisywanie liczb nie przekraczających 255; tworzone są więc zespoły bajtów:

16-bitowe słowa,

32-bitowe podwójne słowa,

64-bitowe poczwórne słowa,

w miarę potrzeby tworzy się także większe zespoły bajtów;

producenci procesorów ustalają konwencję numeracji bitów w bajtach i słowach — numeracja przyjęta m. in. w procesorach zgodnych z architekturą IA-32 (np. Pentium, Athlon) pokazana jest na rysunku;

0x01 graphic

Architektura IA-32

Pamięć fizyczna i wirtualna

0x01 graphic

Adresowanie pamięci

0x01 graphic

Reprezentacja danych w pamięci komputera

Kodowanie liczb całkowitych bez znaku

0x01 graphic

gdzie m oznacza liczbę bitów rejestru lub komórki pamięci;

0x01 graphic

Przykłady

Liczba dziesiętna

Reprezentacja binarna w formacie liczby bez znaku

253

8-bit.

1111 1101

16-bit.

0000 0000 1111 1101

32-bit.

0000 0000 0000 0000 0000 0000 1111 1101

45 708

16-bit.

1011 0010 1000 1100

32-bit.

0000 0000 0000 0000 1011 0010 1000 1100

2 007 360 447

32-bit.

0111 0111 1010 0101 1110 0011 1011 1111

Zakresy liczb bez znaku:

liczby 8-bitowe: <0, 255>

liczby 16-bitowe <0, 65535>

liczby 32-bitowe <0, 4 294 967 295>

liczby 64-bitowe <0, 18 446 744 073 709 551 615>

(osiemnaście trylionów

czterysta czterdzieści sześć biliardów

siedemset czterdzieści cztery biliony

siedemdziesiąt trzy miliardy

siedemset dziewięć milionów

pięćset pięćdziesiąt jeden tysięcy

sześćset piętnaście)

1 trylion = 1018

Kodowanie liczb całkowitych ze znakiem

0x01 graphic

0x01 graphic

gdzie m oznacza liczbę bitów rejestru lub komórki pamięci, zaś s stanowi wartość bitu znaku.

Zakresy liczb w systemie znak-moduł:

liczby 8-bitowe: <127, +127>

liczby 16-bitowe <32767, +32767>

liczby 32-bitowe <2 147 483 647, +2 147 483 647>

liczby 64-bitowe

<9 223 372 036 854 775 807, +9 223 372 036 854 775 807>

0x01 graphic

gdzie m oznacza liczbę bitów rejestru lub komórki pamięci.

Przykłady

Liczba dziesiętna

Reprezentacja binarna jako liczby ze znakiem

w kodzie U2

−3

8-bit.

1111 1101

16-bit.

1111 1111 1111 1101

32-bit.

1111 1111 1111 1111 1111 1111 1111 1101

-19828

16-bit.

1011 0010 1000 1100

32-bit.

1111 1111 1111 1111 1011 0010 1000 1100

2 007 360 447

32-bit.

0111 0111 1010 0101 1110 0011 1011 1111

Zakresy liczb w systemie U2:

liczby 8-bitowe: <128, +127>

liczby 16-bitowe <32768, +32767>

liczby 32-bitowe <2 147 483 648, +2 147 483 647>

liczby 64-bitowe

<9 223 372 036 854 775 808, +9 223 372 036 854 775 807>

Przechowywanie liczb w pamięci komputera

mniejsze niżej (ang. little endian)

mniejsze wyżej (ang. big endian);

0x01 graphic

// zakładamy, że wartości typu int są 32-bitowe

unsigned int liczba = 0x12345678;

unsigned char ∗ wsk = (unsigned char ∗) & liczba;

if (wsk[0] == 0x12 )

printf ("\nFormat mniejsze wyżej (big endian)");

else

printf ("\nFormat mniejsze niżej (little endian)");

Kodowanie tekstów