ARCHITEKTURA SYSTEMÓW MIKROPROCESOROWYCH część 2 dr inż. Małgorzata Langer B9, pok. 310 Instytut Elektroniki
Systemy funkcjonalnie pełne Każdą funkcję logiczną można przedstawić za pomocą argumentów i 3 operacji logicznych: suma, iloczyn, negacja (jest to podstawowy system funkcjonalnie pełny) ale techniczniedużo łatwiej stosować tylko jedną operację, która umożliwia przedstawienie dowolnej z 3 funkcji logicznych. Systemem funkcjonalnie pełnym jest funkcja NOR Systemem funkcjonalnie pełnym jest funkcja NAND 2
Oznaczenia elementów logicznych 3
Układy kombinacyjne i sekwencyjne Układ kombinacyjny jest zestawem wzajemnie połączonych bramek, którego stan wyjść w dowolnej chwili jest WYŁĄCZNIE funkcją stanu wejść W TEJ SAMEJ CHWILI Układ sekwencyjny jest zestawem wzajemnie połączonych bramek, którego stan wyjść w dowolnej chwili jest funkcją stanu wejść w tej chwili ORAZ STANU POPRZEDNIEGO czyli jest to układ z pamięcią 4
Podstawowe bloki funkcjonalne Powtarzające się, złożone funkcje logiczne nie są implementowane na schematach od podstaw czyli z bramek podstawowych, tylko zaznaczane jako typowe bloki funkcjonalne Sumator(jeżeli zaimplementowana jest operacja dodawania, to znaczy, że korzystając z tej samej sprzętowej aplikacji wykonać pozostałe działania odejmowanie, mnożenie i dzielenie) Koder i dekoder Konwerter kodu Multiplekser urządzenie przełączające wiele wejść jedno wyjście Demultiplekser - jedno wejście wiele wyjść 5
Logika dodatnia i ujemna W aplikacjach elektronicznych logiczne 0 i 1 są odwzorowywane dwoma rozróżnianymi wartościami napięcia (wynikającymi ze stanu nasycenia i odcięcia tranzystorów); wysokim (H) i niskim (L) Logika dodatnia Logiczne 1 H L Logiczne 0 L H Logika ujemna Ponieważ przypisanie logicznego znaczenia dwóm wartościom jest kwestią umowy, producenci IC opisują funkcje bramek i bloków poprzez H i L 6
Obciążenie i przebiegi czasowe Obciążalność maksymalny prąd, który może wpłynąć (lub wypłynąć) d/z wyjścia układu, który nie zmieni jej stanu logicznego W praktyce: obciążalność bramki jest to liczba bramek, których wejście można połączyć z wyjściem bramki W przebiegach czasowych uwzględniamy opóźnienie propagacji: X X 1 0 1 0 czas spadku (od 90% do 10% wartości opóźnienie propagacji czas czas wzrostu (od 10% do 90% wartości) 7
Przykład Schemat - bramki z opóźnieniami Zakładamy: T 3 > (T 1 + T 2 ) Wykres czasowy Hazard nie znamy odpowiedzi 8
Układy sekwencyjne Układy synchroniczne zachowanie układu synchronicznego zależy od wartości sygnału w dyskretnych chwilach czasu sygnał sterujący, taktujący, określający te chwile zegar Analiza synchronicznego układu sekwencyjnego polega na określeniu zależności funkcyjnych, które istnieją pomiędzy jego wyjściami, wejściami i stanami wewnętrznymi (jeżeli np. układ zawiera n przerzutników może być w 2 n stanów). Znając stan w chwili t, powinniśmy móc określić stan w t+1 Układy asynchroniczne brak sygnału taktującego 9
Rejestry Rejestr jest urządzeniem przechowującym dane zapisane w postaci binarnej; jest to zbiór przerzutników z oddzielnym torem dla każdego bitu. Najczęściej przeprowadzaną operacją na danych zapisanych w rejestrze jest SHIFT, polegająca na przesuwaniu ich (w zależności od kierunku przesyłania odpowiada to mnożeniu lub dzieleniu przez 2) W zależności od przeznaczenia rejestry mogą mieć wejścia szeregowe lub równoległe oraz wyjścia szeregowe lub równoległe Przeniesienie n-bitowejdanej z jednego rejestru do drugiego zabierze n impulsów shift przy trybie szeregowym a 1 w trybie równoległym Regułą jest, że połączenie szeregowe jest mniej kosztowne sprzętowo ale zabiera więcej czasu 10
Połączenia point-to-point lub poprzez magistralę Jeżeli w jakiejś procedurze należy dokonać wymiany danych między kilkoma rejestrami, stosowany jest jeden z dwóch systemów połączeń: POINT-TO-POINT jedna ścieżka łącząca każde dwa rejestry, które biorą udział w danej procedurze możliwe są działania równoległe; znacznie zwiększa się ilość sprzętu; każdy nowy rejestr musi zostacpołączony ze wszystkimi już istniejącymi MAGISTRALA (BUS) jedna wspólna ścieżka dzielona w czasie pomiędzy poszczególnych użytkowników w danej chwili tylko jeden rejestr może użytkować magistralę; każdy nowy rejestr musi być połączony tylko do magistrali, bez zmiany innych rejestrów. 11
Język HDL (Hardware Description Language) Przenoszenie danych w i pomiędzy rejestrami to podstawowa operacja w komputerze. Notacje HDL opisują strukturę hardware oraz zachowanie systemów cyfrowych na poziomie rejestrów Najbardziej znanymi językami HDL są VHDL oraz Verilog Ogólny format transferu rejestru: Przeznaczenie Źródło np. Y X zawartość rejestru x przeniesiona do rejestru Y Inne operacje: dodawanie (+), odejmowanie (-), przesuwanie w prawo o jeden bit (SHR) i w lewo (SHL), logiczne and (v), or(^), negacja ( ), łączenie konkatenacja (Φ) W językach HDL łańcuchy dużych liter oznaczają nazwy rejestrów, indeksy dolne numer lub zakres numerów bitów w rejestrze, w nawiasie nazywa się część zawartości w rejestrze, dwukropek ogranicza łańcuch wskazujący na funkcję, np. ADD: przecinek wskazuje na operacje równoległe a kropka kończy procedurę. Istnieje polecenie warunkowe if condition THEN. ELSE 12
Programowalne matryce logiczne PLA (Programmable Logic Arrays) układy w małej skali integracji (LSI) z wieloma bramkami, poprzez odpowiednie połączenia można uzyskać realizację żądanej funkcji logicznej Istnieje wiele realizacji sprzętowych umożliwiających programowanie prostych funkcji oraz programowanie wspomagające projektowanie GA (Gate Arrays) układy z bramkami z przygotowanymi kanałami połączeń Nie ma potrzeby projektować tylko przy pomocy bramek, można posługiwać się dodatkowymi blokami (tzwmakro-komórkami). Ten rodzaj układów nazywa się FPGA (Field Programmable GAs). Na rynku istnieją układy np. Xilinx(oparte o SRAM) 13
Podstawowa architektura prostego komputera (ASC) Elementy sprzętu Konsola Jednostka sterująca Jednostka arytm./ logiczna Rejestr stanu procesora Rejestr adresów pamięci (MAR) Licznik programu (PC) Rejestr akumulatora (ACC) Rejestry indeksowe Pamięć Rejestr bufora pamięci Rejestr instrukcji (IR) 14
Zasada działania ASC Program jest przechowywany w pamięci Instrukcja pobierana jest z pamięci do jednostki sterującej i wywoływane przez nią operacje są wykonywane Licznik programu zawiera adres instrukcji, która ma być pobrana z pamięci (zwiększany jest przez jednostkę sterującą przy końcu procedury pobrania instrukcji) Instrukcja pobierana jest do Rejestru Instrukcji (IR) Układy dołączone do IR (hardware) dekodują instrukcję i generują odpowiednie sygnały sterujące do wykonania operacji ACC (Rejestr akumulatora) zbiera wyniki operacji logicznych i matematycznych Rejestry indeksowe pomagają w manipulacji adresami PSR wskazują status ACC, przeniesienie, nadmiar, pozwolenie na przyjęcie przerwania 15
Adresowanie pamięci -słowo Słowo pamięci to najczęściej zapisywana i pobierana jednostka danych. Mogą być słowa 8, 16, 32, 64 bitowe; używane są również 6 i 36 bitowe Można adresować połówki i ćwiartki słów oraz wielokrotności (podwójne i poczwórne słowa) Długość słowa adresującego pamięć implikuje ilość pojedynczych słów, które możemy zaadresować, np. przy 16 bitowym słowie, będzie to 216= 65536 czyli 64K słów; przy 32 bitowym 232ale przy 8 bitowym jedynie 28= 256 16
Format danych i instrukcji W ASC pamięć jest matrycą słów, np. 16-bitowych, przy czym każde słowo ( wiersz matrycy ) może być albo daną, albo instrukcją. Interpretacja zależy od kontekstu. Format danych np. stałopozycyjna arytmetyka (sposoby zapisu były omawiane wcześniej) Format instrukcji: Opcode flags (indirect, index) Address OPCODE kod danej operacji, którą potrafi wykonać sprzęt (tzw. primitive) Indirect flag (pośredni wskaźnik) ustawiony na 1, jeżeli będzie adresowanie pośrednie, 0, jeżeli bezpośrednie Index flags wybierają jeden z indeksowych rejestrów przy indeksowanych adresach, lub jeżeli instrukcja przywołuje indeksowy rejestr 17
Format instrukcji Ilość bitów w części adresowej instrukcji wyznacza obszar pamięci, w którym muszą się znaleźć instrukcje programu Ze względu na to, czy instrukcje są wykonywane bez pobierania danych, z pobraniem jednego adresu lub więcej, rozróżnimy trzy klasy formatów. PRZYKŁADY INSTRUKCJI PODAWANE SĄ Z ZAKRESU HDL Bez adresu np. HLT (stop) W części Opcode jest całkowita instrukcja. HLT wskazuje logiczny koniec programu i zatrzymuje maszynę przed pobieraniem następnej instrukcji (nawet, gdyby takie były) Inne przykłady, to SHL (shift left), SHR (shift right), TCA uzupełnienie do 2; te operacje są wykonywane na zawartości ACC 18
Klasy instrukcji c.d. Instrukcje z jednym adresem podają lokalizację w pamięci, która zostanie użyta razem z ACC w danej instrukcji, np. LDA (ładuj -load); format instrukcji: LDA MEM ACC (z zawartości adresu MEM pobierz zawartość do ACC; zawartość pamięci nie zmieni się) Inne przykłady: STA (zapisz store zawartość ACC pod wskazany adres; nie zmieniaj zawartości ACC), ADD (dodaj zawartość pamięci do ACC; zawartość pamięci nie zmieni się) BRU instrukcja skoku bezwarunkowego do adresu... BIP instrukcja warunkowa (IF - jeżeli) Instrukcje z dwoma adresami typu input/output RWD (czytaj z urządzenia wejściowego i zapisz do ACC zawartość poprzednia zostanie utracona), WWD zapisz do urządzenia wyjściowego, zawartość ACC (nie zmieni się) 19
Tryby adresowania Tryby adresowania zależą od języka programowania oraz struktury danych, które stosowane są w maszynie. Zostaną omówione szerzej przy omawianiu dostępu do pamięci. Adresowanie może być bezpośrednie (Direct), lub indeksowane (indexed) Na przykładzie instrukcji load LDA MEM ACC (z zawartości adresu MEM pobierz zawartość do ACC; zawartość pamięci nie zmieni się) LDA Z pobierz dane z efektywnego adresu Z LDA Z, 2 pobierz dane spod adresu: Z + rejestr indeksowany, czyli z rejestru o numerze 2 Jeżeli w rejestrze nr 2 będzie zapisana np. wartość 4, to do akumulatora zostanie wpisana wartość spod adresu Z+4 Zawartość indeksowanego rejestru może rozszerzyć obszar pamięci 20
Rozszerzenie obszaru pamięci Załóżmy, że długość rejestru Z wynosi 8 bitów; wtedy zakres adresowania pamięci wynosi 256 możliwych lokalizacji Jeżeli offset, czyli rejestr indeksowany będzie miał 16 bitów efektywny adres będzie mógł być z zakresu 64K Przy programowaniu można zmieniać zawartości indeksowanych rejestrów, dynamicznie zmieniając adresowanie pamięci Tryb indeksowy wykorzystywany jest zawsze przy odwoływaniu się do elementów tablic (pole adresowe instrukcji wskazuje pierwszy element, a następne wskazywane są poprzez zwiększanie rejestru indeksowanego) 21
Adresowanie pośrednie LDA*Z gwiazdka po instrukcji wskazuje na adresowanie pośrednie Zawartośćpola o adresie Z wskazuje adres, gdzie znajduje się dana, która ma zostać wpisana do akumulatora Również adresowanie pośrednie może służyć do rozszerzenia zakresu adresowania pamięci Przy programowaniu wykorzystywane ze wskaźnikiem (pointer), który może wskazywać różne zakresy danych 22
Jednoczesneużycie adresowania pośredniego i indeksowanego LDA*Z,2 Logicznie: można wykonać wpierw indeksowanie (czyli przesunąć adres Z) a potem adresowanie pośrednie (z obliczonego adresu pobrać adres danej do umieszczenia w akumulatorze) tzw.: Preindexed-Indirect można wykonać wpierw adresowanie pośrednie (pobrać adres danej) a później indeksowanie (czyli obliczyć nowy adres) tzw.: Postindexed- Indirect Dana implementacja umożliwia JEDEN sposób 23
Język maszynowy Używane są wyłącznie ciągi zer i jedynek. Adresowanie jest wyłącznie bezpośrednie Praktycznie nie jest możliwe (a przynajmniej stosowane) bezpośrednie pisanie programu w takiej postaci ale do takiej postaci program zostanie przetłumaczony Do tłumaczenia służą asembleryi kompilatory, które przekształcają programy pisane w asemblerze lub językach wyższego poziomu na język maszynowy W przeszłości były używane języki interpretowane (Basic), gdzie Interpretator przekształcał na język maszynowy linijka po linijce podczas wykonywania programu 24
Asembler Składa się z sekwencji instrukcji kodowanych tzw. Mnemonikami oraz adresów. Każda instrukcja składa się z 3 lub 4 pól: - label (etykieta) -mnemonic(standardowy trzyliterowy ciąg liter wskazujący na instrukcję; gwiazdka, jako czwarty znak wskazuje na pośrednie adresowanie) -operand(zawiera absolutny lub symboliczny adres; jeżeli występuje adresowanie z rejestrem indeksowanym, to umieszcza się go po przecinku) -komentarze (pole opcjonalne, zaczyna się od kropki i asembler ignoruje to pole) 25
Ciąg znaków alfanumerycznych Etykieta Etykieta jest symboliczną nazwą, wskazującą lokalizację w pamięci, gdzie znajduje się sama instrukcja Nie trzeba nadawać etykiety dla każdej instrukcji, tylko dla takich, które wywoływane są wielokrotnie z wnętrza programu Pierwszy znak musi być literą lub gwiazdką * (gwiazdka) na początku oznacza, że cała instrukcja jest tylko komentarzem (nie będzie wykonywana) 26
Instrukcje i pseudoinstrukcje Instrukcja jest wykonywalna (executable instruction); asembler generuje dla każdej instrukcji w asemblerze instrukcję w języku maszynowym - wszystkie podane wcześniej przykłady instrukcji Pseudoinstrukcja, (lub dyrektywa dla asemblera assembler directive) służy do sterowania procesem, zarezerwowania pamięci, ustalenia stałych nie powstaje dla niej instrukcja w języku maszynowym; najczęściej umieszcza się pseudoinstrukcje na początku programu -np. Z BSS 5(block storage starting -rezerwuje 5 lokalizacji poczynając od pierwszego adresu o nazwie Z) 27
Proces wykonywany przez asembler Asembler musi spełnić dwie funkcje: -wygenerować adres dla każdej symbolicznej nazwy w programie źródłowym - wygenerować ekwiwalent w kodzie binarnym dla każdej instrukcji Proces asemblera zwykle dokonywany jest w dwóch przejściach: -pierwsze przejście dla zabezpieczenia lokalizacji pamięci dla każdej symbolicznej nazwy użytej w programie -w drugim przejściu wpisane są rozwiązania dla wszystkich odwołań do tych nazw Jeżeli wszystkie nazwy muszą zostać zadeklarowane przed odwołaniem wystarcza jedno przejście 28
Ładowanie programu Kod wynikowy (object code) musi zostać załadowany do pamięci maszyny, zanim zostanie wykonany Dokonuje tego loader(zapisany na stałe znacznik, wskazujący na początkowy adres programu, lub inicjujący jego wczytanie z urządzenia zewnętrznego) 29
Podprogramy (subroutines) Jest to część kodu większego programu, która wykonuje szczególne zadanie i jest niezależna od kodu pozostałego Niektóre języki (np. Pascal, Fortran) rozróżniają funkcje(zwracają wartość) i procedury(nie zwracają wartości) Inne (np. C lub LISP) traktują wszystkie podprogramy jednakowo Wywołanie podprogramu oznacza skok do pierwszej instrukcji podprogramu (instrukcja JMP). Zakończeniepodprogramu skutkuje powrotnym skokiem do tego samego punktu w programie, z którego był wywołany podprogram (powrót) Ponieważ ten sam podprogram może być wywoływany w danym programie wiele razy adres powrotu(return address) musi być zapisany w pamięci 30
Podprogramy c.d. Możliwe jest zagnieżdżaniepodprogramów (nested call) czyli podprogram wywołuje kolejny podprogram) trzeba zabezpieczyć wtedy pierwotny adres powrotu przed utraceniem; adresy powrotu składowane są najczęściej na stosie, co umożliwia odtworzenie całej sekwencji zagnieżdżania Podprogramy mogą potrzebować dodatkowych danych, przygotowywanych wcześniej przez główny program oraz przekazywać przetworzone dane do programu. Należy zabezpieczyć prawidłowe zawartości akumulatora i rejestrów przed wywołaniem podprogramu a później przed skokiem powrotnym (również wykorzystuje się tu stos). 31
Makroinstrukcje Jest to grupa instrukcji, która zostaje zakodowana tylko raz i później, w programie, może być używana tyle razy, ile potrzeba Inaczej niż podprogramy wywołanie makroskutkuje podstawieniem grupy instrukcji, które składają się na makro. Nie ma skoku. Można przekazywać parametry do makro-instrukcji; przy podstawieniu instrukcji, każdy parametr zostanie zastąpiony wartością z wywołania 32
Przykład makroinstrukcji Makroinstrukcja o nazwie DOD, która doda wartości A i B i umieści je w C (czyli A, B, C są parametrami) MACRO DOD (A, B, C) LDA A ADD B STA C ENDM Wywołanie tej makroinstrukcji w programie będzie miało postać: DOD(X, Y, Z) Asembler zastąpi DOD trzema instrukcjami, które się na tę makroinstrukcję składają; po asemblacji, A, B i C nie są już widoczne (program widzi tylko X, Y, Z) 33
Linker W praktyce program będzie się składał z programu głównego i kilku podprogramów (modułów). Moduły mogą pochodzić albo z wcześniej zdefiniowanej biblioteki, albo być przygotowane dla danej, szczególnej aplikacji Moduły tłumaczone są na kod maszynowy niezależnie od głównego programu Podczas asemblacji program łączący (linker) wstawia kod maszynowy danego modułu do danego pojedynczego programu głównego Linker musi rozwiązać odwołania do symboli i zastąpić je właściwymi adresami Często linker musi również zmienić wartości adresów skoków, zapamiętywania, ładowania oraz zadbać, aby poszczególne podprogramy nie nakładały się na siebie 34
Łączenie dynamiczne Dopiero załadowanie programu będzie dokonywało ostateczego łączenia. Wcześniej, program będzie zawierał niezdefiniowane symbole i listę modułów i/lub bibliotek Oszczędzamy miejsce (często używane moduły są składowane raz, nie są częścią zapisanych programów co znacznie zwiększałoby ich wielkość) Możemy wymieniać poszczególne moduły lub biblioteki (również poprawiać znajdujące się w nich błędy) i nic nie zmieniać w programach W Microsoft Windows dynamically linked libraries to DLL 35
Łączenie dynamiczne c.d. Większość systemów opartych na Unixie posiada search path, która podaje katalogi systemowe, w których należy szukać bibliotek dynamicznych Niektóre systemy podają ścieżki w pliku konfiguracji W niektórych na trwale zapisane są adresy w programie ładującym (loader) API(application program interface) linker działający w momencie wywołania przez aplikację (stosowane we wszystkich współczesnych systemach operacyjnych) Wada łączenia dynamicznego jeżeli zostanie dokonana nieodpowiedzialna zmiana w przechowywanych bibliotekach programy lub cały system przestaną działać. 36
System operacyjny Z perspektywy systemu jest to program najbliżej powiązany ze sprzętem dystrybutor zasobów(resource allocator) Jest to program sterujący(control program) nadzorujący działanie programów uzytkownika oraz obsługą i kontrolą pracy urządzeń wejścia wyjścia System operacyjny, jest to ten program, który działa w systemie mikroprocesorowym, w komputerze przez cały czas i nazywany jest jądrem(kernel) W 1998 roku rozpoczął się pierwszy (do dzisiaj było już ich wiele) proces przeciwko Microsoft o zaliczanie zbyt wielu funkcji komputera do systemu operacyjnego i uniemożliwienie tym samym konkurencji ze strony dostawców aplikacji (programów użytkowych) 37
System operacyjny definicje zadań Celem systemu operacyjnego jest wygoda użytkownika Celem OS jest zapewnienie wydajnego działania systemu komputerowego Są to często sprzeczne ze sobą wymagania Systemy operacyjne i architektura komputerów wywarły i wywierają na siebie wzajemny wpływ Znaczący wpływ na rozwój OS wywarły sieci komputerowe, wprowadzając sieciowe systemy operacyjne (NOS network operating system) 38
Program rozruchowy Bootstrap program wstępny program potrzebny, aby komputer mógł rozpocząć pracę (po włączeniu do zasilania). Określa on stan początkowy wszystkich elementów systemu, poczynając od rejestrów jednostki centralnej, poprzez sterowniki urządzeń, aż po zawartość pamięci Musi wiedzieć, jak załadować system operacyjny i rozpocząć jego działanie musi zlokalizować i wprowadzić do pamięci jądro systemu operacyjnego; OS rozpoczyna wówczas wykonanie pierwszego procesu (w Unixie jest to INIT) i zaczyna czekać na wystąpienie jakiegoś zdarzenia. Przechowuje się go w pamięci stałej, tylko do odczytu (ROM read only memory), aby nie mógł zostać skasowany 39