Architektura systemów komputerowych (jesień 2013) Wykład 5 Budowa i działanie komputera dr inż. Wojciech Bieniecki Instytut Nauk Ekonomicznych i Informatyki http://wbieniec.kis.p.lodz.pl/pwsz
Działanie komputera Podstawowa funkcja komputera – wykonywanie programów Na najwyższym poziomie możemy opisać system komputerowy poprzez: Opisanie zewnętrznego zachowania każdego modułu (danych i sygnałów kontrolnych, które wymienia on z innymi modułami) Podanie struktury połączeń i sterowania wymaganego do zarządzania tą strukturą
Struktura logiczna komputera MAR - rejestr adresowy pamięci - określa adres w pamięci następnego zapisu lub odczytu MBR - rejestr buforowy pamięci - zawiera dane, które mają być zapisane w pamięci lub dane odczytane z pamięci I/OAR - rejestr adresowy we/wy - określa konkretne urządzenie we/wy I/OBR - rejestr buforowy we/wy - wykorzystywany do wymiany danych między modułem we/wy a jednostką centralną PC - licznik rozkazu - rejestr zawierający informacje który rozkaz ma być pobrany IR - rejestr rozkazu - do przechowywania pobranego rozkazu ACC – akumulator – rejestr w którym wykonywane są wszystkie operacje arytmetyczno logiczne
Struktura fizyczna komputera Rezonator kwarcowy Szyna danych Urządzenia wejścia wyjścia Pamięć programu (ROM) Pamięć danych (RAM) Programowane układy I/O Szyny we/wy MIKROPROCESOR Zegar Szyny we/wy sterowanie szyna adresowa Szyna sterowania
Elementy składowe komputera Szyna, magistrala (ang. bus) - wiązka przewodów lub zespół ścieżek na płytce obwodu drukowanego, do wzajemnej komunikacji pomiędzy elementami komputera. W definicji szyny, prócz samych przewodów sygnałowych, mieści się ściśle zdefiniowany protokół, precyzujący zbiór komunikatów. Przykłady standardów szyn: ISA, PCI, PCI express, AGP, SCSI, PCMCIA. Jednostka centralna (ang. central processing unit, CPU) - element komputera, który pobiera i wykonuje rozkazy. Składa się z jednostki arytmetyczno-logicznej, jednostki sterującej, rejestrów, dekodera rozkazów. W przypadku komputerów jednoprocesorowych oznacza po prostu procesor, natomiast jeśli mówimy o komputerze wieloprocesorowym, CPU oznacza wszystkie procesory lub procesor nadrzędny.
Elementy składowe komputera Pamięć danych (ang. data memory) – pamięć do zapisu i odczytu przeznaczona do przechowywania danych. Pamięć programu (ang. program memory) – pamięć do odczytu przeznaczona do przechowywania kodu programu. Układ wejścia-wyjścia (ang. input-output circuit, I/O) - element komputera, służący do wymiany informacji między komputerem a urządzeniem zewnętrznym.
Budowa procesora
Budowa procesora Jednostka arytmetyczno-logiczna zwana również arytmometrem (ALU ang. Arithmetic Logical Unit), część procesora wykonująca podstawowe operacje arytmetyczne i logiczne, pobierającą argumenty działań z rejestrów procesora lub z pamięci oraz określająca znaczniki w rejestrze stanu procesora. Typowe operacje wykonywane przez ALU: suma logiczna OR i iloczyn logiczny AND różnica symetryczna XOR, negacja logiczna NOT, Dodawanie i odejmowanie arytmetyczne liczb porównywanie logiczne dwóch sekwencji bitów, porównywanie arytmetyczne dwóch liczb, przesunięcia i rotacje, zerowanie, ustawianie, negowanie i testowanie bitów. Jednostka sterująca (ang. control unit) - część procesora, która zapewnia przebieg operacji zdefiniowanej kodem rozkazu, steruje przenoszeniem danych wewnątrz procesora oraz wymianą danych i sygnałów sterujących poprzez magistrale zewnętrzne.
Budowa procesora Dekoder rozkazu (ang. instruction decoder) – dekoder tłumaczący kod rozkazu na mikrorozkazy realizowane przez układy wewnętrzne procesora. Rejestr (ang. register) – część procesora przechowująca dane lub adres. Podstawowe rejestry procesora: akumulator (ang. accumulator, A, ACC), rejestry robocze (ang. general purpose registers), licznik rozkazów (ang. program counter, PC), wskaźnik stosu (ang. stack pointer, SP), rejestr stanu (wskaźników, flag) (ang. flag register, F, program status word, PSW), rejestr rozkazów (ang. instruction register, IR), pamięć podręczna (ang. cache memory) - jako zbiór rejestrów, rejestry buforowe danych i adresu (ang. buffer registers).
Operacje sprzętowe komputera odczyt z pamięci programu do procesora, odczyt z pamięci danych do procesora, zapis danych z procesora do pamięci danych, odczyt z układów wejścia-wyjścia do procesora, zapis danych z procesora do układów wejścia-wyjścia, bezpośredni odczyt z pamięci danych przez układy wejścia-wyjścia (ang. direct memory access, DMA), bezpośredni zapis do pamięci danych przez układy wejścia-wyjścia operacje na rejestrach wewnętrznych procesora, obsługa przerwań.
Nawiązanie do historii informatyki Maszyna Turinga Alan Turing w 1936 opisał tok myślenia prowadzący od obliczeń wykonywanych ręcznie do obliczeń wykonywanych przez prostą abstrakcyjną maszynę, która była w stanie wykonywać zaprogramowaną matematyczną operację czyli tak zwany algorytm. Maszyna mogła wykonać jednak tylko jeden, określony algorytm. Liczby miały być podawane maszynie za pomocą papierowej taśmy Maszyna Turinga jest uniwersalnym modelem wszelkich obliczeń Posiada ona obecnie olbrzymie znaczenie teoretyczne, ponieważ wszystkie współczesne komputery dają się do niej sprowadzić TEZA: Problem jest rozwiązalny na komputerze, jeśli da się zdefiniować rozwiązującą go maszynę Turinga
Maszyna von Neumanna Model działania maszyny von Neumanna: Maszyna von Neumanna to konkretyzacja maszyny Turinga, pozwalająca na zaprojektowanie rzeczywistego komputera Maszyna von Neumanna składa się z procesora (CPU) oraz pamięci, w której przechowywane są dane oraz rozkazy Model działania maszyny von Neumanna: 1. pobieranie rozkazu z pamięci 2. pobieranie danych z pamięci wskazanych w rozkazie 3. wykonywanie rozkazu (przetwarzanie danych) 4. zapisywanie wyniku w pamięci 5. powrót do punktu 1
Cykl pracy komputera Wykonywanie programu Program składa się z zestawu rozkazów przechowywanych w pamięci Jednostka centralna realizuje program poprzez wykonywanie rozkazów w nim zawartych Cykl rozkazowy (ang. instruction cycle) - ciąg czynności, które wykonuje układ sterowania jednostki centralnej w czasie realizowania jednego rozkazu. Przetwarzanie rozkazów realizowane jest przez procesor w dwóch krokach: Pobranie rozkazu z pamięci Wykonanie rozkazu
Fazy wykonania rozkazu Wykonanie rozkazu przez procesor można podzielić na 4/5 kolejno następujących po sobie faz: F – pobranie kodu rozkazu z pamięci (fetch) D – dekodowanie (decode) wraz z obliczaniem adresów operandów i ich pobraniem P – opcjonalne pobranie argumentu z pamięci. E – wykonanie (execute), W – zapamiętanie wyniku (write), w szczególności transfer rejestr – pamięć.
Cykl rozkazowy - pobieranie Licznik programu (PC – Program Counter) przechowuje adres następnej instrukcji do wykonania Procesor pobiera instrukcję z pamięci spod adresu wskazywanego przez PC Zwiększany jest licznik PC (incrementacja PC) Instrukcja ładowana jest do rejestru rozkazowego IR (Instruction Register) Procesor interpretuje rozkaz i przeprowadza wymagane działanie (przechodzi do cyklu wykonywania)
Cykl rozkazowy - wykonanie Na cykl rozkazowy składają się jeden lub kilka cykli maszynowych. Cykl maszynowy (ang. machine cycle) – cykl, w którym następuje przesłanie danych (odczyt lub zapis) między: - jednostką centralną a pamięciową lub układem wejścia – wyjścia, - rejestrami procesora. Istnieją cztery kategorie cykli Przesłanie procesor <-> pamięć Przesłanie procesor <-> wejście/wyjście Przetwarzanie danych (operacje arytmetyczne lub logiczne na danych) Sterowanie – zmiana sekwencji operacji np. rozkaz skoku Kombinacja wyżej wymienionych działań
Cykl maszynowy i takt Jeden cykl maszynowy wykonywany jest w czasie jednego lub kilku/kilkunastu (w zależności od procesora i rodzaju cyklu) taktów zegara systemowego. Zegar systemowy (ang. system clock) – generator impulsów prostokątnych, taktuje procesor, układy pamięciowe i układy wejścia-wyjścia. Cykl pamięci (ang. memory cycle) - ciąg operacji składających się na jeden dostęp (odczyt lub zapis) do pamięci. W każdym cyklu maszynowym następuje wysłanie: adresu na magistralę adresową, danych na magistralę danych, sygnałów sterujących, informujących o rodzaju cyklu, na magistralę sterującą. Układy pamięci lub wejścia - wyjścia powinny w tym czasie wykonać odpowiednie czynności - zapisać dane lub wysłać je na magistralę danych. Cykl pamięci często jest utożsamiany z cyklem maszynowym.
Przykład wykonania programu (1) Pobierz instrukcję spod adresu 300 wskazywanego przez licznik programu
Przykład wykonania programu (2) Pobierz i wykonaj instrukcję 1 z parametrem 940 (załadowanie liczby do akumulatora)
Przykład wykonania programu (3) Pobierz i wykonaj instrukcję 5 z parametrem 941 (dodanie liczby do akumulatora)
Przykład wykonania programu (4) Wynik działania jest w akumulatorze
Przykład wykonania programu (5) Pobierz instrukcję 2 z parametrem 941 (przepisanie zawartości akumulatora do pamięci)
Przykład wykonania programu (6) Wykonaj instrukcję
Graf cyklu rozkazowego
Inny przykład programu Załóżmy, że R1, R2, R3 – rejestry robocze, [R1], [R2], [R3] – adres komórki pamięci zapisanej w rejestrze MOV R2, #n; MOV [R1],[R3+]; Znaczenie: Wstaw do R2 wartość n wykonaj n-razy: { [R1] [R3] R1 R1 + 1 R3 R3 + 1 } Jaki będzie efekt działania?
Typy rozkazów procesora Rozkazy maszynowe są przetwarzane przez procesor jako dane binarne (zerojedynkowe). Każdy rozkaz posiada unikatowy kod operacji (ang. opcode) oraz opcjonalnie dodatkowe elementy: odniesienie do argumentów źródłowych (SA ang. Source arguments), którymi mogą być: dane bezpośrednie, adresy pamięci lub układów we-wy, rejestry procesora; odniesienie do argumentów przeznaczenia (DA ang. Destination args.) lub wyniku (ang. result), którymi mogą być: adresy pamięci lub układów we-wy, rejestry procesora; odniesienie do następnego rozkazu – określa adres następnego rozkazu, który będzie wykonany po rozkazie bieżącym.
Przykłady rozkazów NOP; nic nie rób ADD A , R1; A A + R1 NOP – opcode ADD A , R1; A A + R1 ADD – opcode, A, R1 – argumenty źródłowe, A – argument przeznaczenia. SJMP adres; PC adres SJMP – opcode, adres – adres następnego rozkazu.
Typowe operacje procesora – transfer danych move skopiuj SA -> DA store zapisz SA w pamięci load odczytaj DA z pamięci clear wyzeruj SDA (ustaw 0...0b) set ustaw SDA (ustaw 1...1b) push zachowaj SA na wierzchołku stosu pop załaduj DA z wierzchołka stosu
Typowe operacje procesora – arytmetyczne add SDA <- SDA + SA subtract SDA <- SDA – SA multiply DA1...2 <- SA * SA divide DA1...2 <- SA / SA absolute SDA <- |SDA| negate SDA <- - SDA increment SDA <- SDA + 1 decrement SDA <- SDA – 1 compare SA1 – SA2
Typowe operacje procesora – logiczne AND SDA <- SDA & SA OR SDA <- SDA | SA NOT SDA <- ~SDA XOR SDA <- SDA ^ SA test SA1 & SA2, (flaga Z) compare SA1 – SA2, (flaga Z) shift przesuń w prawo/lewo SDA rotate obracaj w prawo/lewo SDA
Typowe operacje procesora – sterowanie programem jump DA skocz pod adres [DA] jump conditional DA skocz pod adres [DA] jeśli flaga Z=0 jump to subroutine DA skocz do podprogramu, zachowaj na stosie adres powrotu return pobierz ze stosu adres powrotu i wróć execute pobierz argument i wykonaj rozkaz PC bez zmian skip pomiń następny rozkaz skip conditional – pomiń następny rozkaz, jeśli flaga Z=0 wait – zatrzymaj program dopóki flaga Z=0 NOP– pusta operacja