Rozdział 1.
Komunikacja procesora z innymi elementami architektury komputera
Każda z opisanych w tym rozdziale konfiguracji sprzętowych posiada centralny ośrodek zarządzania, którym jest procesor. Najnowsze osiągnięcia w technologii produkcji układów scalonych pozwalają na realizację coraz to potężniejszych mikroprocesorów. Jednak bez względu na szerokość ich magistral, częstotliwość pracy czy wielkość zintegrowanej w układzie pamięci, pierwotna zasada działania pozostaje - przynajmniej na razie - bez większych zmian.
Procesor
Rozwój mikroelektroniki i technologii sprzyja opracowywaniu coraz to potężniejszych mikroprocesorów. Postęp w miniaturyzacji pozwala na zwiększenie stopnia upakowania i wzrost częstotliwości taktującej. Dobrze opanowana jest technika 0,35 um a już obserwuje się przejście w kierunku 0,25 um, a nawet 0,18 um. To dzięki temu nieustannemu zmniejszaniu rozmiarów elementarnych tranzystorów (mimo stałego wzrostu ich liczby) pobór mocy nowych procesorów mieści się w granicach zdrowego rozsądku.
Konstrukcja komputera PC podlega również stałej ewolucji, wymuszanej przez wymagania nakładane ze strony współczesnego oprogramowania. "Pamięciożeme" aplikacje i rozszerzenia multimedialne są w stanie zniwelować każdą sprzętową inwestycję.
Rynek przyjmuje z wdzięcznością nowe opracowania procesorów gdyż częsty brak kompatybilności z poprzednimi modelami zmusza do wymiany płyt głównych i stanowi dźwignię napędową do nowych zakupów.
Niezależnie od częstotliwości taktującej i charakterystycznych dla danej firmy rozwiązań indywidualnych każdy mikroprocesor da się przedstawić jako zespół współpracujących ze sobą bloków funkcjonalnych (rysunek 1.1).
Architektura komputera PC zakłada bardzo silną więź mikroprocesora z pamięcią operacyjną. W niej to bowiem przechowywane są dane i rozkazy, tam też odsyła się wyniki obliczeń. Za współpracę z pamięcią odpowiada wyizolowany blok komunikacyjny (BU
- Bus Unit). Połączenie realizowane jest zwykle w formie dwóch odseparowanych od siebie magistral: oddzielnie dla danych (w tym kodu) i adresów. Zarządzanie ruchem na magistralach gwarantuj ą dodatkowe sygnały sterujące.
Konieczność zapewnienia płynnego funkcjonowania procesora wymaga, by dane do wykonania (kod programowy) pobierane były w większych porcjach i gromadzone w kolejce, gdzie oczekują na wykonanie. Każdy ze spoczywających tu bajtów stanowi pewną zakodowaną informację o koniecznych do wykonania operacjach. Odtworzenie tej informacji odbywa się w bloku dekodera (IU - Instntction Unit). Praca tego układu wspomagana jest często przez obszerną podręczną pamięć stałą (ROM), w której zawarty jest słownik tłumaczący przyjmowane kody rozkazowe na sekwencje ukrywających się pod nimi operacji.
Rozkodowane instrukcje przekazywane są do układu wykonawczego (EU - Execution Unit), gdzie realizowana jest operacja określona danym kodem rozkazowym. Znaczna część powszechnie używanego kodu pracuje na liczbach stałoprzecinkowych (Integer) i podlega obróbce w module ALU (Arithmetic-Logic Unit) sterowanego z bloku CU (Control Unit}. Jeśli jednak rozkaz dotyczył obiektów zmiennoprzecinkowych jego realizacja w stałoprzecinkowych układach logicznych zajęłaby zbyt wiele czasu. W takim wypadku przekazuje się go do wyspecjalizowanej jednostki zmiennoprzecinkowej (FPU
- Floaling Point Unit).
Rozkazy posługują się zwykle pewnymi argumentami (parametry funkcji, na przykład składniki przy dodawaniu), które również trzeba pobrać z pamięci operacyjnej. Często wymaga się, by wynik operacji przesłać pod określony adres. Obsługę tego rodzaju życzeń bierze na siebie jednostka adresowania (AU - Addressing Unii). Względy natury technicznej (stronicowanie i segmentacja) powodują, iż dostęp do pamięci operacyjnej wymaga pewnych dodatkowych nakładów, których realizacji poświęca się jednostkę zarządzania pamięcią (MMU - Memory Management U nit).
Rozwinięcie przedstawionego powyżej ogólnego schematu blokowego do postaci bardziej szczegółowej nastąpi przy okazji omawiania różnic w konkretnych modelach procesorów.
Przetwarzanie rozkazów
Obraz architektury współczesnych procesorów jest wynikiem wpływów wielu czynników. Stała pogoń za wzrostem mocy obliczeniowej zmusza do szukania nowych dróg. Nie wszystkie z nich są tak nowatorskie jak mogłoby się wydawać. Wiele z rozwiązań ma swoje pierwowzory w procesorach dużych maszyn, które ujrzały światło dzienne na długo przed komputerami klasy PC. Wspomniany, w poprzednim punkcie, klasyczny model mikroprocesora był dobry jeszcze przed kilkoma laty. Mocno zarysowany podział na wyspecjalizowane bloki nie zawsze da się zastosować do współczesnych konstrukcji i ulega stopniowemu rozmyciu.
Słownictwo w tej dziedzinie wzbogaciło się o szereg nowych, często tajemniczo brzmiących, zwrotów. W publikowanych pracach teoretycznych nie zawsze panuje zgodność poglądów. Głębokie zazębianie się zagadnień teoretycznych z konkretnymi rozwiązaniami sprzętowymi prowadzi do sporów odnośnie definiowanych określeń (kwestią sporną jest nawet sprecyzowanie zakresu obejmowanego pojęciem architektura). W tej części rozdziału omówione zostaną skrótowo podstawowe pojęcia z tego zakresu.
RISC i CISC
Termin RISC (Reduced Instruction Set Computer} zrodził się w toku prac nad projektem 801 firmy IBM ( Idea podchwycona została przez wielu innych projektantów i utrwalona międzyinnymi w projektach: AMD 29000, HP PA-RISC, Intel 860 i 960 oraz IBM RS/6000).
i oznaczał tendencję do ograniczania listy rozkazów procesora do niewielu błyskawicznie wykonywanych instrukcji. Realizacja każdej z nich była wynikiem odwołania się do wyspecjalizowanego obwodu elektronicznego, który nie tracił czasu na tłumaczenie rozkazu. Rozpisanie algorytmu wykonywanego programu, który przecież składał się z operacji dużo bardziej skomplikowanych niż przepisanie z rejestru do rejestru, należało do obowiązków kompilatora. Warto zwrócić uwagę, że system taki wyzwala ogromne obciążenie magistrali pamięciowej - kod przetłumaczony przez kompilator znajduje się przecież w pamięci operacyjnej i każdy z elementarnych "klocków" musi zostać pobrany przez procesor. Prędkość przetwarzania jest bardzo duża
'
i taka musi też być przepustowość magistrali. Problem ten rozwiązuje się współcześnie przez zastosowanie szybkich pamięci podręcznych (LI i L2). Spore uproszczenie konstrukcji typu RISC zawdzięcza się stałej długości wszystkich mikrorozkazów. Istnieją jednak projekty procesorów (na przykład Thumb firmy ARM) dopuszczające zmienną długość instrukcji.
Odmienny punkt widzenia reprezentuje filozofia CISC (Complex Instniction Set Computer} dominująca w rodzinach x86 Intela i 680xx Motoroli. Procesory budowane według tej zasady biorą na siebie coraz to większe zadania. Pobierany z pamięci pojedynczy rozkaz wywołuje szereg kompleksowych działań. Czas opracowywania takiego polecenia może dochodzić nawet do kilkudziesięciu cykli zegarowych. Kod programu jest bardzo zwarty a proces jego transportu do procesora znacznie mniej krytyczny.
Jakkolwiek oba pojęcia definiowały początkowo kategorie przeciwstawne, to obecnie coraz trudniej jednoznacznie przypisać dany procesor do jednej nich. Ostry podział na RISC i CISC ma coraz mniejszy sens. Można co najwyżej mówić o pewnych cechach architektury a i to wyłącznie w odniesieniu do fragmentów określonej konstrukcji. Klasyczny przykład stanowią procesory K6 i Pentium Pro. Chociaż same zaliczają się do grupy CISC (akceptują przecież na swym wejściu złożone instrukcje x86), wyposażone są w dekoder tłumaczący na wewnętrzny kod mikroprocesora a więc ich jądro pracuje w trybie RISC (RISC Kernel). Uznawany za członka rodziny RISC procesor PowerPC 601 może z kolei poszczycić się chyba zbyt nadmierną jak na "zredukowaną" (R - Reduced) liczbą rozkazów: samych rozgałęzień można naliczyć ponad 150. Łatwiejsze do sklasyfikowania są typy Pentium oraz Ml (podobnie jak ich mutacje z rozszerzeniami MMX) przetwarzające dostarczany kod w sposób bezpośredni (Native C ode).
Pipeline
Niezależnie od powyższej klasyfikacji każdy procesor można porównać do zakładu produkcyjnego, który z dostarczonych materiałów (dane w pamięci) wytwarza według określonego algorytmu (kod programu) pewien określony produkt wyjściowy (inny stan danych). Analogia ta pozwala na sięgnięcie do jednego z bardziej rewolucyjnych pomysłów racjonalizatorskich - taśmy produkcyjnej. Wprowadzona po raz pierwszy w zakładach Forda idea podzielenia cyklu produkcyjnego na wiele małych i szybkich operacji wydaje się pozornie bezużyteczna: czas pracy nad produktem nie ulega przecież zmianie (może się nawet wydłużyć jeśli szwankują połączenia między poszczególnymi etapami). Nie o ten czas tu jednak chodzi, ale o zwiększenie przepustowości.
Przeniesienie powyższej idei na grunt architektury mikroprocesorów odbyło się po raz pierwszy w roku 1960 podczas prac nad projektem IBM procesora klasy mainframe typu 7030; mikroprocesory dołączyły dopiero w 20 lat później. Charakterystyczny jest podział czasu pracy nad pojedynczym rozkazem na wyraźnie zarysowane fazy. Symboliczna taśma produkcyjna nazywana jest tutaj potokiem przetwarzającym (Pipeline lub w skrócie Pipę} a jej poszczególne punkty stopniami (Pipeline Stages).
Potok pracuje jednocześnie nad kilkoma rozkazami a każdy z nich znajduje się w innej fazie wykonania. Chociaż czas przetwarzania każdego z nich wynosi wielokrotność okresu zegara taktującego, to w każdym jego cyklu taśmę opuszcza kompletny produkt finalny. Podobnie pracuje taśma montażowa w fabryce samochodów - mimo, że co minutę zjeżdża z niej gotowy samochód, czas montażu może wynosić wiele godzin.
Połączenia pomiędzy poszczególnymi stacjami mogą być elastyczne, co pozwala na zmniejszenie dyscypliny całej taśmy. Czas przebywania rozkazu w poszczególnych stopniach zależy często od czynników zewnętrznych i ścisłe przestrzeganie reżimu czasowego nie zawsze jest możliwe. W punktach krytycznych montowane są więc małe magazyny pośrednie (bufory) nazywane też kolejkami (Queue}.
Stopień rozdrobnienia takiej linii produkcyjnej (ilość stopni) nazywany jest też głębokością potoku. Wielkość ta ma fundamentalne znaczenie dla kluczowych parametrów procesora. Rozbicie procesu produkcyjnego na bardzo wiele małych operacji pozwala na ich przyspieszenie - dwaj robotnicy przykręcający po jednym kole pracują szybciej niż jeden, który musi zamontować dwa. W przeniesieniu na grunt architektury procesora oznacza to możliwość zwiększenie częstotliwości taktującej i ogólnej wydajności. Poszczególne stacje mogą pracować wręcz szybciej niż wynika to z wymiaru zewnętrznego zegara (Super-Pipeline). Model powyższy nie bierze jednak pod uwagę sytuacji awaryjnych a analogia do taśmy produkcyjnej nie znajduje tutaj pełnego zastosowania. Międzystopniowa kontrola jakości może po prostu odrzucić wadliwy wyrób na dowolnym etapie przetwarzania. Odbywa się to bez większej szkody dla całej taśmy. Inaczej jest jednak w przypadku procesorów. Stwierdzenie błędu (na przykład opracowywana właśnie instrukcja sprowadza się do dzielenia przez zero) oznacza konieczność oczyszczenia całego potoku. Punkt w którym taka sytuacja została rozpoznana znajduke się
z natury rzeczy daleko od wejścia, a na pewno tym dalej im więcej stopni ma potok. Dodatkowym czynnikiem ograniczającym wzrost wydajności wraz z rozdrobnieniem potoku są wzajemne uzależnienia pomiędzy instrukcjami oraz konflikty w wykorzystaniu zasobów zewnętrznych. Zagadnienia te omówione zostaną bardziej szczegółowo w dalszej części rozdziału.
Dla zanalizowania powyższej zależności przeprowadzone zostały różnorodne badania symulacyjne. Wyniki testów wykazują, iż istnieje wartość optymalna głębokości leżąca w okolicy liczby 8. Taki też wymiar mają potoki przetwarzające większości procesorów (tabela 1.1).
Tabela 1.1.
Liczba stopni w potokach współczesnych procesorów
CPU - Liczba stopni w potoku;
Pentium - 5;
Pentiumx MMX - 6/8*;
Pentium Pro - 12;
Pentium II - 12/14*;
M1 - 7;
M2 - 7;
K5 - 7;
K6 - 6;
* - Druga z podanych wartości obowiązuje dla instrukcji MMX
Procesory wyposażone w potok pracują nad kolejnymi rozkazami według ściśle określonego schematu. Przetwarzana instrukcja przesuwa się wzdłuż linii produkcyjnej zaliczając kolejne etapy. Niezależnie od różnic w architekturze, należą do nich zawsze cztery podstawowe czynności: pobranie, dekodowanie, wykonanie i zakończenie. Każda z nich może być rozpisana na kilka czynności bardziej elementarnych, na przykład: pobranie wstępne i pobranie właściwe, wykonanie część pierwsza i następne itp.
Faza pierwsza: pobranie (Prefetch, PF)
Zakładamy obecność kodu w kolejce rozkazowej procesora. Zapełniane tej kolejki odbywa się poprzez sięganie do pamięci podręcznej L1. Jeśli rozkaz znajduje się w pamięci operacyjnej uruchamiana jest procedura zapełniania linijki pamięci podręcznej L1, z ewentualnym uwzględnieniem pośredniej pamięci L2.
Faza druga: dekodowanie (Decode, DE)
W pierwszej części tej fazy analizowany jest kod operacyjny instrukcji i jeśli to konieczne separuje się przedrostki i argumenty. W drugiej części oblicza się adres efektywny argumentów (jeśli takowe występują).
Faza trzecia: wykonanie (Execute, EX)
W fazie tej następuje fizyczny dostęp do pamięci w celu pobrania ewentualnych argumentów rozkazu oraz operacje na argumentach określane kodem instrukcji.
Faza czwarta: zakończenie i zapisanie wyników (Write Back, WB)Literatura anglojęzyczna używa też często terminu Retire (spoczynek)
Wynik operacji wykonanej w fazie EX umieszczany jest w miejscu określonym w kodzie rozkazowym (rejestry lub pamięć). Na zakończenie przywracany jest stan początkowy wewnętrznych (niewidocznych dla użytkownika i programisty) układów procesora oraz ustawiane są bity sygnalizujące pewne stany charakterystyczne dla zakończonej właśnie operacji (znaczniki, słowa stanu itp.).
Przyjrzyjmy się bliżej poszczególnym etapom przetwarzania następującego rozkazu:
add ax, [bx] ; dodaj zawartość rejestru AX do zawartości komórki, ; której adres znajdziesz w BX, wynik prześlij do AX
Faza PF. Pobranie kodu instrukcji.
Faza DE. Określenie czynności do wykonania, obliczenie adresu efektywnego dla drugiego argumentu (16 x DS) + BX
Faza EX. Dostęp do komórki pamięci o adresie (16 x DS) + BX, operacja dodawania do AX.
Faza WB. Umieszczenie wyniku w AX, ustawienie flag.
Techniki przyspieszania
Wzrost mocy obliczeniowej mierzy się ilością wykonywanych operacji w jednostce czasu. Zwiększanie częstotliwości taktującej (skrócenie czasu trwania pojedynczego cyklu) jest najbardziej oczywistym czynnikiem gwarantującym przyrost wydajności (pod warunkiem, iż nadążają układy otaczające procesor, głównie systemy pamięciowe). Na określonym etapie rozwoju technologii, dalszy wzrost częstotliwości taktującej nie jest już możliwy i trzeba sięgać do innych rozwiązań. Jeśli trzymać się analogii do zakładu produkcyjnego, ogromne możliwości drzemią zawsze we właściwej "organizacji pracy" i różnych drobnych usprawnieniach. W świecie mikroprocesorów należą do nich między innymi: techniki superskalarne, przemianowywanie rejestrów, przepowiadanie rozgałęzień i odpowiednie (zoptymalizowane pod kątem konstrukcji wewnętrznej danego procesora) przygotowanie kodu.
Techniki superskalarne
Jeśli nie można zwiększyć wydajności pojedynczej linii produkcyjnej należy wybudować drugą. Procesor taki nosi miano superskalarnego. Uruchomienie dodatkowych, równoległych linii produkcyjnych gwarantuje oczywiście zwielokrotnienie produkcji. Model taki nie sprawdza się jednak na gruncie mikroprocesorów. Strumień rozkazów do wykonania naszpikowany jest wzajemnymi uzależnieniami i pełen punktów rozgałęzień. Ponadto pracujące równolegle taśmy produkcyjne procesora (potoki) nie stanowią nie-
zależnych obiektów, gdyż korzystaj ą z wielu wspólnych elementów architektury (choćby rejestrów). Te i inne ograniczenia powodują, iż dołożenie więcej niż jednego potoku nie wpływa już w istotnej mierze na wzrost wydajności. Zwielokrotniona (przynajmniej teoretycznie) moc obliczeniowa procesora konsumowana jest w większości przez wewnętrzny system komunikacji międzypotokowej.
Zdecydowana większość dominujących obecnie na rynku procesorów posiada więc dwa równoległe kanały przetwarzające dane typu Integer (określane zwykle symbolami U i V). Jednostka zmiennoprzecinkowa (FPU - Floating Point U ni f) została już stosunkowo dawno (w czasach 8087) wydzielona z właściwej struktury logicznej i ma swoje własne życie wewnętrzne. Można śmiało powiedzieć, iż stanowi ona trzeci równoległy potok.
Z napływającego do procesora strumienia rozkazów odławiane są te, które operują na danych zmiennoprzecinkowych i kierowane do właściwego im potoku. Reszta kodu podlega przetwarzaniu w sekcji Integer. To, który z rozkazów nich ląduje w ciągu U, a który w ciągu V stanowi wynik pracy układu rozdzielacza. Istniejące reguły rozdziału wynikają głównie z drobnych różnic w budowie wewnętrznej U i V oraz z wymogów synchronizacji potoków. Możliwość niezależnego (asynchronicznego) doprowadzania do końca instrukcji równocześnie zapoczątkowanych w dwóch potokach (Ont of Order Completiori) nie jest bowiem cechą każdego procesora. Warunki takie ma na przykład M2 Cyrixa, natomiast architektura Intel MMX wymaga synchronicznej pracy obu linii. Jeśli jest to niemożliwe (na przykład oczekiwanie na wyniki pośrednie) drugi potok zostaje zatrzymany.
Przemianowywanie rejestrów
Wykonywany przez procesor program stanowi w najbardziej korzystnym przypadku sekwencję instrukcji, które dają się naprzemiennie kierować do potoków U i V. Technika taka nosi miano parowania rozkazów. Nie wszystkie rozkazy podlegają parowaniu i nie zawsze przez ich równoległe wykonywania można cokolwiek przyspieszyć. Rozkazy odwołujące się do tych samych lokalizacji pamięci lub oceniające status procesora nie mogą być przecież wykonywane wcześniej niż to wynika z ich naturalnego położenia w sekwencji kodu. Najczęstsza przyczyna uzależnień leży jednak w zazębieniach powstałych skutkiem odwoływania się do tych samych programowych rejestrów procesora.
Przykładowy ciąg instrukcja asemblera:
mov bx, ax ; -> do potoku U add ax, ex ; -> do potoku V
prowadzi do powstania uzależnienia od rejestru AX. Przepisanie stanu CX do AX w drugiej z podanej pary instrukcji nie może być przeprowadzone wcześniej niż zakończenie realizacji odczytu AX w pierwszej instrukcji pary. Opisana sytuacja stanowi przykład uzależnienia typu WAR (Write After Read- najpierw odczyt, później zapis).
Zestaw rejedtrów procesora
Rejestry ogólnego przeznaczenia
bajt 15 do bajt 8; bajt 7 do bajt 0
Akumulator(AX) - AH; AL
Rejestr bazowy(BX) - BH; BL
Rejestr licznika(CX) - CH; CL
Rejestr danych(DX) - DH; DL
Wskaźnik stosu - SP
Wskażnik bazowy - BP
Indeksowanie źródła - SI
Indeksowanie celu - DI
Rejestry segmentowe
Segment danych - DS
Segment bloku - CS
Segment stosdu - SS
Segment dodatkowy - ES
Rejestrty informacyjne
Zestaw znaczników - FLAGS
Wskaźnik instrukcji - IP
Dwie następujące kolejno po sobie instrukcje dostępu do rejestru mogą w zależności od trybu dostępu (zapis/odczyt) prowadzić do czterech stanów zebranych w tabeli l .2.
Tabela 1.2.
Sekwencje rozkazów, których nie można parować
Typ zależności - 1)RAR (Read After Read); 2)RAW; 3)RAW; 4)WAR (Write After Read); 5)WAW (Write After Write);
Przykład - 1)add bx, ax; ax mov, ax; 2)add ax, bx; bx mov, ax; 3)mov ax, bx; mov [mem], ax;
4) mov bx, ax; add ax, cx; 5)mov ax, [mem]; add ax, bx;
Rozwiązanie - 1) Dual Pipę Access; 2)Result Forwarding; 3)Operand Forwarding; 4)Register Renaming; 5)Register Renaming;
Pierwsza kolumna symbolizuje dwa następujące po sobie (w kodzie programu) a jednocześnie występujące (w przypadku rozesłania do potoków U i V) cykle odczytu zawartości rejestru AX. Nie mamy to do czynienia z hazardem danych a uzależnienie tego typu jest stosunkowo łatwe do usunięcia poprzez wbudowanie podwójnych portów odczytu dla rejestrów. Dzięki takiemu usprawnieniu stan każdego z rejestrów może być pobierany niezależnie i jednocześnie przez U i V.
Istotne problemy wywołują sekwencje rozkazów w dalszych kolumnach. Dwie ostatnie prezentuj ą sytuacje powstałą w wyniku próby jednoczesnego zapisu rejestru generowane przez potoki U i V. Prostym sposobem wyjścia z tej opresji jest tymczasowe podstawienie dodatkowego rejestru pomocniczego (rysunek 1.4), tak by nie zamazywać wartości zapisanej jako wcześniejsza. Technika ta nazywa się przemianowywaniem rejestrów (Register Renaming).
Różne procesory posługują się tą techniką w mniejszym lub większym zakresie. W najprostszej formie procesor wyposaża się w zestaw dodatkowych rejestrów, które stoją do dyspozycji jednostki sterującej. W razie napotkania pary rozkazów powodującej uzależnienie typu WAR:
mov bx, ax
add ax, cx
układ sterowania dokonuje szybkiego podstawienia: AX -> RegO BX -> Reg1 CX -> Reg2
Jeśli teraz dokonać przemianowania
AX -> Reg3 to można bez trudu wykonać równolegle operacje:
Reg1:= RegO || Reg3 := Reg2 + RegO
Liczba stojących do dyspozycji tej techniki rejestrów jest różna w zależności od modelu i typu procesora. Pentium i Pentium MMX nie mają ich wcale a AMD K6 dysponuje zestawem 48 (tabela 1.3).
Tabela 1.3.
Liczba przemianowanych rejestrów
CPU; Liczba przemianowanych rejestrów ;
Pentium - 8 + 0; Pentium MMX -8 + 0; Pentium Pro - 8 + 32; M1, M2 - 8 + 24; K5 - 8 +8; K6 - 8 + 40 ;
Trudności innego typu występują w sytuacjach przedstawionych symbolicznie jako zależności RAW. Nie ma tutaj kolizji przy zapisie do rejestru lecz pojawia się konieczność oczekiwania na wynik wcześniejszej operacji (obliczenia lub przesłania). Aby tego uniknąć, potok potencjalnie narażony na stratę czasu sam przeprowadza równolegle tą samą operację. Jeśli jest to obliczenie, technika nazywana jest Result Forwarding, a jeśli przesłanie mówimy o Operand Forwarding.
Przepowiadanie
Wykorzystanie pełnych mocy obliczeniowej procesorów wyposażonych w potoki przetwarzające (pipeline) wymaga stałego zasilania instrukcjami. Program, którego realizacja przebiega kolejno od jednej instrukcji do następnej nie stwarza w tym zakresie żadnych problemów. Również bezwarunkowe skoki typu go to mają jasno określony punkt docelowy. Kłopoty pojawiają się w momencie napotkania warunkowej instrukcji rozgałęzienia kiedy to dalsza realizacja programu może w zależności od spełnienia określonych warunków przebiegać sekwencyjnie dalej lub też przemieścić się do odległego obszaru kodu.
Mimo iż nie jest wiadomo która z instrukcji będzie wykonywana jako następna po problematycznej if potok musi zostać czymś napełniony. Problem przybiera na sile wraz ze wzrostem długości potoku - coraz więcej operacji tkwi już głęboko w systemie przetwarzania, choć nie do końca wiadomo czy słusznie. Ostateczne rozstrzygnięcie warunku zawartego w if odbywa się w najlepszym razie w okolicach środka potoku. Może się więc zdarzyć, iż wszystko to co jest za instrukcją warunkową należy usunąć. Oczyszczenie całego skomplikowanego aparatu przetwarzającego ze zbędnych wyników pośrednich zajmuje dłuższą chwilę (Dla K.6 wynosi l - 4 cykle zegarowe, M2 karany jest 5 cyklami natomiast Pentium Pro ze względu na długość potoku musi czekać aż 15 cykli.) Krok taki jest z punktu widzenia wydajności procesora ogromną stratą czasu.
Dodatkowe opóźnienia mogą również powstawać w systemach pobierania rozkazów, a zwłaszcza w procesorach z jądrem RISC. Dekodery tych procesorów rozkładające instrukcje x86 na drobne mikrooperacje też muszą pracować z dużą wydajnością. Oczekują więc nieprzerwanego dopływu przetwarzanego materiału od układów współpracy z pamięcią podręczną i magistralami. Od systemu pobierania kolejnych instrukcji x86, czy to z przeznaczeniem na rozkład na mikrokroki (RISC) czy też do bezpośredniego przetworzenia wymaga się więc również orientacji w zamiarach programu.
Stosowane w praktyce próby rozwiązania tego dylematu grupują się wokół dwóch podstawowych sposobów rozumowania:
Dalszy bieg programu można z większym lub mniejszym powodzeniem spróbować przewidzieć (Branch Prediction).
W przypadku rozgałęzienia podąża się na wszelki wypadek w obydwu kierunkach (Muliiple Paths of Executiori).
Oba punkty podejścia mają swoje dobre i złe strony. Prawdopodobieństwo właściwego przepowiedzenia jest zawsze mniejsze od jedności a prowadzenie programu kilkoma ścieżkami jednocześnie (Idea wcielona w życie \v niektórych modelach procesorów IBM
(na przykład 3033)).prowadzi do ogromnej komplikacji sprzętowej. Powielaniu podlegają nie tylko jednostki wykonawcze ale i dekodery oraz systemy pamięci podręcznej. Wielokrotnie zagnieżdżone lub następujące szybko po sobie pętle szybko uporają się z każdą ilością zasobów sprzętowych. Wybranie przypuszczalnie słusznej drogi i jej realizacja (Specnlative Execution} też niesie z sobą sporą dozę komplikacji całego systemu. Wyniki wszystkich operacji lądują w buforach pośrednich bowiem nie wolno jeszcze przecież niczego zmieniać w świecie poza procesorem (zapis do pamięci wywołany sekwencją programu, która nigdy nie miała być wykonana miałby przecież katastrofalne skutki).
Współczesne procesory korzystają w większości z techniki przepowiadania biegu programu a stopień komplikacji stosowanych systemów odpowiada z grubsza uzyskiwanym wynikom. Podstawową strukturą informacyjną tych układów jest tablica BTB (Branch Target Buffer} - rysunek 1.5. Jest to szybka podręczna pamięć asocjacyjna grupująca zwykle 128-1 024 rekordów. Każdy z wierszy zawiera w sobie informacje o jednym z punktów rozgałęzienia programu. BTB w najprostszej formie to zestaw adresów instrukcji skoków i adresów tych skoków. Dodatkowo zapamiętywany jest status danej linijki (V: Valid) oraz omawiane poniżej bity opisujące zachowanie się instrukcji (Hl, H2: History Bits).
W tablicy umieszczane są tylko te instrukcje (w miarę dostępnego w buforze miejsca), które już się wykonały, innymi słowy takie, których zachowanie zostało zaobserwowane i udokumentowane. Średnia ilość trafnych przepowiedni pozostaje w ścisłym związku z rozmiarami tablicy BTB. Statystyczna analiza typowych programów prowadzi do wyznaczenia następujących współczynników:
Rozmiar BTB; Średnia ilość trafnych przepowiedni [%];
16 - 40; 32 - 50; 64 - 65; 128 - 72; 256 - 78; 512 - 80; 1024 - 85; 2048 - 87 ;
System nadzorujący pobieranie kolejnych bajtów rozkazowych może więc w wypadku napotkania rozgałęzienia zwrócić się do tabeli BTB z zapytaniem o przewidywany dalszy bieg programu. Wiarygodność uzyskanej odpowiedzi zależy oczywiście nie tylko od samych rozmiarów tabeli. Choć istnieje wiele ciekawych sposobów podejścia do tego zagadnienia tylko kilka z nich znalazło praktyczne zastosowanie. We wszystkich przypadkach instrukcje rozgałęzień opatruje się dodatkową sygnaturą, zwykle nie dłuższą niż 2 bity. W nich to próbuje się zawrzeć, w mniej lub bardziej udany sposób "charakter i osobowość" danego rozgałęzienia. Stosowane algorytmy przepowiadania różnią się miedzy sobą w sposobie wykorzystania tej niezmiernie ograniczonej porcji informacji.
Metoda statyczna
Stosowany jest zwykle jeden bit a jego ustawienie odbywa się stosunkowo wcześnie bo jeszcze w fazie kompilacji. Faktyczny przebieg programu nie jest w stanie już nic zmienić. Metoda szybka, tania i mało skuteczna.
Metody dynamiczne
Metody tej grupy operują na jednym lub dwóch bitach, którymi manipuluje się w fazie wykonywania programu. Jednym z możliwych punktów podejścia jest przyjęcie założenia o powtarzalności przebiegu. Każdemu rozgałęzieniu towarzyszy jeden bit informacyjny, który podlega ustawieniu na l jeśli nastąpił skok. Proste przejście przez rozwidlenie (do kolejnej w szeregu instrukcji) kwitowane jest wyzerowaniem tego bitu. Jeśli w wyniku dalszego wykonywania programu znajdziemy się ponownie w tym samym punkcie, system przewidywania typuje wynik zgodny z poprzednio utrwalonym zachowaniem. Stan taki utrzymuje się do czasu pierwszego błędu w przepowiedni (typowe wyjście z wielokrotnej pętli po spełnieniu określonego warunku), co powoduje zmianę wartości bitu kontrolnego.
Bardziej rozbudowana logika wkomponowana jest w układy dwubitowe.
Sygnatura; Opis;
00; Mocne założenie o braku skoku;
01; Słabe założenie o braku skoku;
10; Słabe założenie o skoku;
11; Mocne założenie o skoku;
Punktem wyjściowym algorytmu jest przyjęcie założenia, że wszystkie po raz pierwszy napotkane rozgałęzienia nie prowadzą do skoków. Opatruje się je sygnaturą 00 i przystępuje do wykonywania programu. Pierwsze przejście przez dane rozwidlenie zgodnie z przepowiednią- brak skoku - nie modyfikuje sygnatury i nadal zakłada się iż stan ten utrzyma się do następnego razu. Jak długo rozgałęzienie istotnie nie nastąpi, układ typuje prawidłowo. Jeżeli jednak dojdzie do skoku, mamy pierwsze niepowodzenie. W odpowiedzi na nie system zmienia stan sygnatury na 01 ale nadal zakłada, że kolejne skoki nie będą miały miejsca. Następna ocena odbywa się w trakcie kolejnego przejścia. Jeśli skok istotnie się nie powtórzył, następuje powrót do stanu 00. W przeciwnym razie instrukcja opatrywana jest sygnaturą 11. Układ pozostaje w tym stanie tak długo, jak długo skoki istotnie mają miejsce. Gdy po raz pierwszy nastąpi pomyłka modyfikuje się sygnaturę do postaci 10. System przepowiadania nadal jest zdania, iż następnym razem skok będzie jednak miał miejsce i taką też odpowiedź zwraca. Gdy przewidywanie było słuszne następuje powrót do postaci 11 z mocnym przekonaniem o dalszych skokach, jeżeli jednak system pomylił się powtórnie, sygnatura przechodzi do stanu 00.
Optymalizacja kodu
Jeżeli zna się dobrze szczegóły konstrukcyjne konkretnego procesora można próbować tak pisać program (już w fazie doboru algorytmu i podejścia do problemu a potem na etapie kompilacji) by wykorzystać dobre strony konstrukcji a ominąć punkty słabe. Optymalizacja kodu jest konieczna w przypadku Intel Pentium, gdyż nie radzi on sobie (potoki synchroniczne) z doborem parowanych instrukcji. Procesor ten pobiera po prostu kolejne instrukcje z sekwencji programowej i (jeśli spełniają tylko pewne warunki wstępne) rozsyła je na chybił trafił do potoków U i V. Powstające uzależnienia nie są neutralizowane przez podmianę rejestrów i jeden z potoków po prostu czeka na zakończenie pracy (ewentualnie na udostępnienie wyników) w drugim.
Dostęp do pamięci
Zadaniem procesora jest przetwarzanie danych złożonych w pamięci; tam też znajduje się kod realizowanego programu. CPU bardzo intensywnie współpracuje z układami pamięciowymi i bez nich nie może się obejść. Wykonywane operacje mają charakter dwukierunkowy: zapis lub odczyt. Przy zapisie procesor wystawia słowo na magistralę danych a stosowny adres na magistralę adresową. Podczas odczytu końcówki adresowe CPU definiują punkt odniesienia w pamięci a zawartość tej właśnie komórki zdejmowana jest przez procesor z magistrali danych. Nad sprawnym przebiegiem takich operacji czuwają oczywiście różne układy towarzyszące, których rytm pracy wyznaczają sygnały kontrolno-sterujące wytwarzane przez sam procesor. Kilka poniższych uwag ma pomóc Czytelnikowi w wyjaśnieniu zachodzących przy tym zjawisk. Mają one kluczowe znaczenie dla zrozumienia działania CPU.
Procesory 16-bitowe pierwszej generacji (począwszy na modelu 8088 a skończywszy na układzie 80186) miały 20 końcówek adresowych. Architektura logiczna wyznaczała podział pamięci na 64 kB segmenty. Mechanizm adresowania składał się z dwóch rejes-
trów 16-bitowych: jeden określał początek segmentu (Segment) a drugi odległość punktu od tego początku (Offset). Para rejestrów Segment i Offset wyznaczała adres logiczny. Konieczność dopasowania tej struktury (16 + 16) do wymiaru 20-bitowej magistrali adresowej wyznaczyła następujący sposób przeliczenia:
Adres fizyczny = 16 * Segment + Offset
Generowany według powyższej formuły adres fizyczny (tutaj 20-bitowy) wystawiany był na magistralę adresową. Operacja mnożenia przez 16 stanowi w dziedzinie liczb binarnych przesunięcie w lewo o 4 pozycje - tak z 16 bitów robi się potrzebne 20. Powstające z prawej strony dodatkowe pozycje wypełnia się zerami a do uzyskanej w ten sposób liczby 20-bitowej dodaje się zawartość rejestru Offset.
Warto w tym miejscu wspomnieć o adresie liniowym. Stanowi on efekt działania mechanizmu segmentacji w trakcie przetwarzania adresu logicznego. Adres jest liniowy dlatego, ponieważ bezpośredni system adresowania segmentu (w rejestrze segmentowym zawarty jest adres segmentu) gwarantuje, iż segment o adresie wyższym znajduje się fizycznie wyżej w pamięci. Jeśli omawiany w dalszej części rozdziału mechanizm stronicowania jest wyłączony (i pamięć wirtualna nieaktywna), adres liniowy odwzoro-wywany jest wprost w adres fizyczny: 20-, 24- lub 32-bitowy, zależnie od szerokości magistrali. Aktywacja przestrzeni wirtualnej powoduje, iż mechanizm stronicowania odwzorowuje adres liniowy w adres fizyczny.
Generacja procesorów 16-bitowych wyposażonych w 20-końcówkową magistralę adresową operowała w przestrzeni fizycznej o rozmiarze l MB (220). Wyjątek stanowił model 80286 dysponujący 24 liniami adresowymi i obejmujący tym samym przestrzeń 16 MB (224). Procesory 32-bitowe (począwszy od 80386DX) mają już 32 końcówki adresowe co pozwala na pokrycie zakresu 4 GB (2j2).
Architektura nowoczesnych procesorów 32-bitowych ulegała licznym przeobrażeniom a implementacja nowych, dostosowanych do współczesnych wymogów trybów pracy spowodowała sporą komplikację w przeliczeniach adresów logicznych, którymi operuje program, na rzeczywisty stan końcówek adresowych CPU. Wyróżnić należy trzy podstawowe tryby pracy procesora:
Tryb rzeczywisty (Real Modę). Procesor 32-bitowy przełącza się w stan odwzo-rowujący zachowanie jednostki 16-bitowej. Zawartość rejestru segmentowego przesuwana jest o 4 pozycje binarne w lewo i dodawana do zawartości rejestru przesunięcia (16 x Segment + Offset). Wynik stanowi liczbę 20-bitową, która jest po prostu wystawiana na magistralę adresową. Proszę zwrócić uwagę, iż konstrukcja adresu według takiej reguły prowadzi do wieloznaczności. Różne pary liczb Segment:Offset mogą dawać jednakowy wynik i odwoływać się do tej samej komórki pamięci. W trybach chronionych jest to z różnych względów wykluczone.
Tryb chroniony (Protected Modę). Tryb ten wprowadzony został (począwszy od modelu 80286) w celu ochrony poszczególnych zadań pracujących pod kontrolą wielozadaniowego (multitasking) systemu operacyjnego. Całość jest zaimple-
mentowana jako czteropoziomowy system uprawnień. Układy sprzętowe wbudowane w procesor kontrolują odwołania do danych oraz kodu i wydają (lub odmawiają) zezwolenia na dostęp. Wzrost bezpieczeństwa okupuje się stosunkowo dużą komplikacją w obliczaniu adresu.
Tryb wirtualny procesora 8086 (Virtual 8086 Modę). Tryb dostępny jest w układach rodziny Intel począwszy od modelu 80386. Koncepcja trybu wirtualnego stanowi kombinację dwóch wcześniej omówionych trybów. System operacyjny wykorzystujący tą możliwość pracy stawia do dyspozycji wykonywanych programów bardzo interesujące środowisko. Każdy z programów użytkowych widzi swój własny procesor 8086 pracujący w trybie rzeczywistym. System jako całość dysponuje jednak zaczerpniętymi z trybu chronionego mechanizmami gwarantującymi odpowiedni dobór praw dostępu do zasobów i uniemożliwiającymi wzajemne kolizje pomiędzy współuczestniczącymi zadaniami.
Najbardziej istotną innowacją (oprócz architektury 32-bitowej) wprowadzoną do rodziny procesorów Intela począwszy od modelu 80386 jest jednak jednostka stronicowania (Paging Unit). W kolejnej części rozdziału zostaną omówione możliwości jakie oferuje to rozszerzenie.
Adresowanie
Znana z trybu rzeczywistego prosta projekcja zawartości rejestrów segmentowych i przesunięcia na adres fizyczny zatraca się wyraźnie w chronionych trybach pracy. Wspomniane rejestry są od siebie całkowicie odseparowane i chociaż nadal dostępne programowo, interpretacja ich zawartości jest zupełnie inna.
Rejestr segmentowy stanowi teraz selektor segmentu a nie wprost jego adres. 13 najstarszych pozycji tego rejestru stanowi wskaźnik do 8-bajtowej struktury opisującej dany segment (Segment Descriptor). Z pozostałych trzech bitów dwa poświęcone zostały na implementację czteropoziomowego systemu praw dostępu do segmentu a jeden określa czy wspomniany powyżej wskaźnik odnosi się do tzw. tablicy lokalnej czy globalnej. Rekordami w tych tablicach są właśnie deskryptory segmentów. Każdy z nich zawiera jednoznaczną informację o lokalizacji segmentu w pamięci i jego rozmiarach. W ten sposób definiowany jest spójny obszar o adresie początkowym wyznaczanym liczbą 32-bitową. Na liczbę określającą rozmiar takiego bloku przeznaczone zostało pole 20-bito-we. Istnieją dwie możliwości interpretowania liczby w tym polu. W trybie 1:1 (granulacja l B) rozmiar maksymalny wynosi po prostu 2^20= l MB. Gdyba jednak przyjąć jednostkę 4 kB (granulacja 4 kB), rozmiar segmentu może sięgać do 2^20 * 2^12 = 2^32 = 4 GB. Informacja o tym, która z konwencji jest aktualnie obowiązująca zawarta jest w des-kryptorze.
Adres logiczny do którego odwołuje się procesor 32-bitowy budowany jest ze złożenia zawartości 16-bitowego rejestru segmentowego i 32-bitowego rejestru przesunięcia. W przypadku granulacji 4 kB maksymalny wymiar segmentu wynosi 4 GB. Liczba możliwych segmentów wynosi 2^14 (2^13 deskryptorów lokalnych i tyle samo globalnych) co daje w sumie astronomiczną objętość 64 TB (2^14 * 2^32). Właściwie już jeden taki
Komunikacja procesora z innymi elementami architektury komputera
29
segment stanowi wielkość optymalną: 4 GB przestrzeni adresowej zaspokaja przy obecnym rozwoju techniki PC najbardziej wygórowane wymagania. Rozwiązanie takie, określane jako "płaski model pamięci" stosowane jest w systemie Windows NT.
Segmenty l MB (granulacja bajtowa) pozwalają na utworzenie przestrzeni wirtualnej o rozmiarze 16 GB (2^14 * 2^20). Utworzenie pamięci operacyjnej o takiej pojemności w oparciu o półprzewodnikowe układy scalone jest absolutnie nierealne. Samo zasilanie i sterowanie zespołu l 000 układów SIMM (16 MB) nastręczało by zbyt wiele trudności technicznych, nie mówiąc o kosztach. Jest więc rzeczą oczywistą, iż nie wszystkie segmenty jednocześnie mogą być przechowywane w pamięci operacyjnej. Część z nich składuje się więc (Swapping) na znacznie tańszym nośniku magnetycznym (zwykle dysk twardy). Duża pamięć wirtualna realizowana jest więc jako złożenie małej i szybkiej pamięci RAM i obszernej pamięci masowej.
System operacyjny nadzoruje mechanizm składowania ustawiając odpowiednie znaczniki w tabelach deskryptorów. Jeśli procesor żąda dostępu do takiego "odłożonego na bok" segmentu, sprzęt wyzwala tzw. wyjątek (Exception) będący odpowiednikiem przerwania OxOb. Wzywany jest podprogram obsługi przerwania, który sprowadza potrzebny segment z dysku do pamięci.
Omówione powyżej składowanie segmentów pozwala na wykorzystanie znacznie większego wycinka logicznej przestrzeni adresowej procesora niż wymiar fizycznie obecnej pamięci operacyjnej. Mechanizm ten nie jest jednak pozbawiony wad. Proszę zwrócić uwagę, iż elementarną jednostką wymiany informacji pomiędzy pamięcią RAM a pamięcią masową jest segment. Jego rozmiar niekoniecznie musi odpowiadać strukturze przetwarzanych obiektów. Obszerne bloki danych typowe dla zagadnień numerycznych, moduły dużych programów, mapy bitowe i im podobne lokowane są w dużych segmentach. Zwięzłe procedury, bloki danych krótkich programów umieszcza się oczywiście w dopasowanych do ich rozmiarów mniejszych segmentach.
Potrzeba sprowadzenia do pamięci jednego z dużych segmentów może oznaczać konieczność zwolnienia miejsca zajmowanego przez szereg mniejszych bloków. Jeśli przetwarzane zagadnienie wymaga naprzemiennego sięgania do sprowadzanego właśnie dużego segmentu oraz wyeksportowanych przed chwilą segmentów mniejszych (klasyczny przykład: kompaktowy kod obsługi bazy danych i obszerne struktury samych danych) rozpoczyna się intensywny proces wymiany informacji pomiędzy dyskiem a pamięcią. Operacje takie pochłaniają oczywiście znaczną część mocy obliczeniowej.
Opisany problem staje się szczególnie dotkliwy w komputerach skąpo wyposażonych w pamięć RAM. Należy przecież pamiętać, iż tylko pewna część pamięci operacyjnej może być oddana do dyspozycji mechanizmu obsługującego zrzuty na dysk. Wolna przestrzeń to reszta, która pozostaje po rozlokowaniu kodu i danych systemu operacyjnego oraz sterowników i innych niezbędnych elementów. Może się wręcz zdarzyć, iż segment po który chcemy aktualnie sięgnąć nie mieści się w ogóle w wolnej przestrzeni. Uruchamiana jest wtedy skomplikowana procedura analizująca stopień wykorzystania obecnego w pamięci kodu i podejmuje się decyzję, które z jego fragmentów mogą być odesłane na dysk.
Powyższe względy zadecydowały o konieczności poszukiwania bardziej efektywnej metody zagospodarowania oferowanej przez nowoczesny procesor wirtualnej przestrzeni adresowej. Opracowany system określany jest mianem stronicowania.
Stronicowanie
Stronicowanie (Paging) stanowi specyficzną funkcję odwzorowującą ogrom przestrzeni wirtualnej na stosunkowo wąskie pole pamięci RAM plus obszar udostępniany przez pamięć masową. Odwzorowanie to odbywa się za pośrednictwem małych porcji zwanych stronami (Pages). Rozmiar stron jest stały i wynosi 4 kB. W przypadku omawianego tutaj modelu 80386, wielkość ta jest "zaszyta" we wnętrzu CPU i nie może być zmieniana. Niektóre procesory najnowszej generacji (na przykład Pentium) pozwalają na pewne odstępstwa od tej reguły. Można w nich wybrać jeden z dwóch rozmiarów stron: standardowy 4 kB lub rozszerzony 4 MB.
Procesor może ale nie musi korzystać z mechanizmu stronicowania. Odpowiedni "wyłącznik" zamontowany jest w jednym z rejestrów konfiguracyjnych (bit PG w rejestrze CRO). Samo ustawienie PG oznacza jedynie inną interpretację adresów i jeszcze niczego nie załatwia. To system operacyjny musi brać na siebie obsługę całego związanego z tym mechanizmu. Jeśli stronicowanie jest aktywne, adres logiczny podlega dwustopniowym przekształceniom (rysunek 1.6).
W pierwszej fazie odbywa się opisany wcześniej proces segmentacji. 16-bitowy selektor segmentu wskazuje na rekord adresowy w tablicy deskryptorów. Do uzyskanego w ten sposób adresu podstawy dodaje się 32-bitowe przesunięcie. Dopiero generowany w powyższy sposób adres liniowy (rysunek 1.7) podlega transformacji na fizyczny adres obiektu. Transformacja ta stanowi sedno mechanizmu stronicowania a jej istota rzeczy polega na innej interpretacji adresu liniowego (rysunek 1.8).
32-bitowe słowo adresowe podzielone jest na trzy grupy. W pierwszych dziesięciu najstarszych bitach przechowywany jest numer rekordu w katalogu stron (Page Directory). Katalog zawiera l 024 takich rekordów a każdy z nich wskazuje na tablicę stron (Page Tables). Pierwszy rekord w katalogu stron wskazuje adres bazowy tablicy stron o numerach 0 - l 023, drugi dotyczy tablicy l 024 - 2 047 a ostatni odnosi się do stron o numerach l 047 552 - l 048 575. 10 kolejnych bitów adresu liniowego (Page) wskazuje na jeden z l 024 rekordów w danej tablicy. Same rekordy w tablicach stron stanowią z kolei wskaźniki do stron, z których każda ma wymiar 4 kB.
Adresowany obiekt ulokowany jest w obrębie danej strony. Jego dokładna pozycja ustalana jest na podstawie pola Offset - dwunastu najmłodszych bitów adresu liniowego (2^17 = 4kB).
Caching
Coraz szybciej taktowane procesory wymagają coraz to szybszych układów pamięciowych. Czas przetwarzania prostego rozkazu nie jest zwykle dłuższy od pojedynczego cyklu zegarowego (5 ns przy częstotliwości 200 MHz). Pamięć operacyjna współczesnych komputerów PC zbudowana jest z układów scalonych DRAM, które cechuje czas dostępu większy o rząd wielkości. Na cóż zdać się może procesor pracujący z tak dużą
prędkością, jeśli czas oczekiwania na kolejną porcję danych wynosi w najlepszym razie 50 ns. Istnieją oczywiście typy pamięci (SRAM, Static RAM) mogące sprostać takim podwyższonym wymaganiom, ale ze względów ekonomicznych (są kilkanaście razy droższe) nie można z nich zbudować całej pamięci operacyjnej.
Dla zlikwidowania tego wąskiego gardła wprowadzona została pamięć podręczna stanowiąca bufor o krótkim czasie dostępu (poniżej 10 ns). Rozwiązanie jest ekonomicznie uzasadnionym kompromisem: duża i tania pamięć główna wspierana jest przez małą, szybką i nie aż tak drogą pamięć podręczną (Cache).
Rozwiązanie takie nie było by możliwe, gdyby nie jedna cenna właściwość przetwarzanego przez komputery PC kodu: jest on stosunkowo spójny. Procesor "porusza się" przez dłuższy czas w tym samym rejonie pamięci a nie skacze chaotycznie po całym jej obszarze. Analizowane rozkazy ułożone są przecież w pamięci sekwencyjnie (nie licząc oczywiście rozgałęzień i skoków) a bloki danych też nie są świadomie rozpraszane po całej przestrzeni adresowej. Rozważania teoretyczne i symulacje doprowadziły do wyznaczenia przybliżonych rozmiarów takiego obszaru. Można przyjąć z prawdopodobieństwem równym 0,9 iż większość odwołać do pamięci mieścić się będzie w bloku nie przekraczającym wymiarów 16 kB. W tabeli 1.4 zestawiono rozmiary pamięci podręcznej stosowanej we współczesnych procesorach.
Topologie
Buforowe działanie pamięci podręcznej osiąga się umieszczając ją "po drodze" lub "przy drodze" do pamięci głównej. Niezależnie od różnic w strategii dostępu (różnorodne algorytmy), w chwili obecnej występują w świecie PC trzy podstawowe układy topologiczne.
Tabela 1.4.
Rozmiar pamięci podręcznej współczesnych procesorów
Typ procesora; LI -kod [kB]; LI -dane [kB;] 12 [kB];
Pentium; 8; 8; -;
Pentium MMX; 16; 16; -;
Pentium Pro; 8; 8; 256/512;
Pentium II; 16; 16; 512;
Celeron; 16; 16; -;
Celeron A; 16; 16; 128;
Typ procesora; LI -kodfkB]; LI -dane [kB]; 12 [kB];
Ml; 16*; 16*; -;
M2; 64*; 64*; -;
M3; 16; 16; 256;
K5; 16; 8; -;
K6, K6-2; 32; 32; -;
K6III; 32; 32; 256;
K7; 64; 64; >512;
* Wspólny dla kodu i danych, ponadto 256 bajtów Instruction Linę Cache
Układ konwencjonalny (często określany nazwą Look-Aside) - rysunek 1.10 - z którym mamy do czynienia w procesorach x86 i rodzinie Pentium z MMX włącznie. Tutaj pamięć podręczna L2 dołączona jest równolegle do magistrali pamięciowej.
Rysunek 1.10.
Uktad
konwencjonalny (Look-Aside) podłączenia pamięci podręcznej
CPU
(strzałka w obie strony w dół do ram) do niej dochodzi strzałka w obie strony w bok do Cache
RAM
Widać wyraźnie, iż procesor odwołuje się do pamięci podręcznej wykorzystując magistralę pamięciową: częstotliwości pracy pamięci podręcznej jest więc taka sama jak pamięci głównej, jedynie czas dostępu może ulec skróceniu.
Drugi sposób podłączenia przedstawiony jest na rysunku 1.11 i określany jest mianem Look-Through lub Inline Cache. Procesor, zanim sięgnie do pamięci głównej, napotyka układ pamięci podręcznej. Ta z kolei, sprzężona jest z pamięcią główną poprzez właściwą magistralę pamięciową. Pamięć podręczna może więc być taktowana inną częstotliwością niż sama magistrala pamięciowa.
Rysunek 1.11.
Uktad Look-Through podłączenia pamięci podręcznej
CPU (strzałka w obie strony} Czche (strzałka w obie strony} RAM
Całkowite oddzielenie pamięci podręcznej od magistrali pamięciowej umożliwia dominująca obecnie architektura określana mianem Backside - rysunek 1.12.
Rysunek 1.12.
Układ Backside podłączenia pamięci podręcznej
CPU <->(strzałjka w obie strony w bok do) Cache
(od cpu do ram strz. w obie str,w dół do ram)
RAM
Kontroler pamięci L2 osadzony jest na strukturze procesora i ma (poprzez zestaw wydzielonych końcówek) bezpośrednie połączenie z pamięcią podręczną. Częstotliwości taktowania magistral są od siebie absolutnie niezależne. Fragment łączący procesor z pamięcią główną nazywany jest szyną FSB (Front Side Bus} w przeciwieństwie do części biegnącej do L2, która nazywana jest BSB (Back Side Bus). W procesorach Pentium II nowszej generacji dostęp do pamięci głównej odbywa się poprzez magistralę FSB taktowaną zegarem 100 MHz (w poprzednich wersjach 66 MHz) pamięć podręczna na magistrali BSB połową częstotliwości zegara CPU (czyli na przykład 450/2 = 225 MHz). Rodzina procesorów Mendocino (Celeron A) taktuje z kolei magistralę BSB pełną częstotliwością zegara CPU.
Architektura typu Look-Aside ogranicza szybkość pracy L2 bowiem nie można podnosić bezkarnie częstotliwości zegara magistrali. Aktualne systemy oparte na rodzinie procesorów z podstawką typu Super 7 pracują poprawnie do około 100 MHz. Choć można próbować je przeciążać do 125 MHz, skutkuje to obniżeniem stabilności całego układu. Na nadmierne ryzyko narażone są nie tylko obwody pamięci operacyjnej ale i peryferia podłączone również do "przetaktowanych" magistral ISA, PCI i AGP.
Dedykowana szyna L2 (BSB) umożliwia niezależny wybór częstotliwości pracy pamięci podręcznej, lub swobodną regulację jej szybkości (tak jak pozwala na to architektura procesora AMD K7). Warto zwrócić uwagę, iż częstotliwość taktowania BSB może być zarówno większa jak i mniejsza od zegara CPU. Procesory implementujące BSB mają blok L2 wkomponowany w półprzewodnikową strukturę CPU (On-Chip, On-Die) lub osadzony w jej bezpośrednim sąsiedztwie (na module procesora). Typowym przedstawicielem pierwszego rodzaju jest Pentium Pro i AMD K6-2, a drugiego rodziny Pentium II i Pentium III.
Rozmiar pamięci podręcznej L2 i częstotliwość jej taktowania stanowią dwie wartości, których dobór stanowi kompromis o podłożu ekonomicznym. Rozwiązanie idealne to pamięć podręczna bardzo duża i bardzo szybka. Zarówno zwiększanie pojemności L2 jak i podnoszenie częstotliwości pracy BSB pociąga za sobą konieczność stosowania szybkich i drogich układów pamięciowych co podraża koszty opracowania i produkcji.
Krótki przegląd architektury powszechnie stosowanych procesorów daje obraz różnorodności eksperymentów przeprowadzanych w tej dziedzinie. Procesor Pentium II ma dużą pamięć podręczną L2 (512 kB) i stosunkowo wolną magistralę BSB (1/2 częstotliwości zegara CPU). Modele rodziny Celeron A dysponują małą pamięcią podręczną L2 (tylko 128 kB) ale za to magistrala BSB pracuje z szybkością sięgającą 400 MHz. Gdzieś pośrodku leży AMD K6 III ze średniej wielkości pamięcią podręczną L2 taktowaną pełną częstotliwością procesora.
Każdy z tych procesorów jest lepszy w pewnych typach aplikacji a w innych gorszy. Wszystko zależy od stylu programowania i cech charakterystycznych kodu. Kod zwięzły preferuje szybki L2, obszerne moduły programowe (kod rozproszony) będą się lepiej wykonywać w środowisku z dużą pamięcią podręczną.
Organizacja pamięci podręcznej
Pamięć podręczna zorganizowana jest w linijki (Cache Lines) o rozmiarach 16 lub 32 bajtów. Jest to najmniejsza porcja informacji, jaką pamięć podręczna wymienia z pamięcią główną. System taki narzucony został dla zwiększenia wydajności. Większość kontrolerów magistral realizuje zwielokrotniony cykl dostępu (Burst) bardzo szybko. Pamięć podręczna "widzi" pamięć główną jako zbiór linijek, te z kolei pogrupowane są w zespół}' zwane stronami (Pages). Informacja o tym, które z linijek RAM znajdują się aktualnie w pamięci cache przechowywana jest w katalogu pamięci podręcznej TRAM (TAG-RAM). Sposób odwzorowywania linijek i stron pamięci głównej w bloku pamięci podręcznej może przebiegać na jeden z trzech omówionych poniżej sposobów.
Mapowanie bezpośrednie (Direct Mapped)
Implementacja tego typu (rysunek 1.13) jest najprostszą z możliwych i można ją również rozpatrywać jako przypadek szczególny układu asocjacji zespołowej (1-Way-Set). Pamięć główna podzielona jest na strony zgodne z rozmiarem bloku pamięci podręcznej.
W linijce O pamięci podręcznej znajduje się zawsze jakaś linijka O pewnej strony pamięci RAM. Prostota konstrukcji i szybkość odszukiwania informacji (wystarczy przeprowadzić tylko jedną operację porównania) są jedynymi zaletami takiego systemu. Układ cechuje niestety brak elastyczności i mała efektywność, szczególnie jeśli dochodzi do częstych skoków poza granicami stron. Jeżeli pamięć podręczna przechowuje linijkę n jakiejś strony a system żąda dostarczenia linijki n strony następnej, kontroler musi usunąć ją z pamięci, chociaż jest prawie pewne iż w chwilę potem system odwoła się do niej ponownie.
Pełna asocjacja (Fully Associative)
Organizacja z pełną asocjacją (rysunek 1.14) pozwala na składowanie dowolnej linijki RAM w dowolnym miejscu pamięci podręcznej. W modelu tym nie ma symbolicznego podziału na strony pamięci a operuje się wyłącznie linijkami.
Ta optymalnie elastyczna organizacja ma jednak dużą wadę: odszukanie informacji w pamięci podręcznej wymaga przeglądnięcia całego katalogu TRAM, bowiem poszukiwana linijka może być na dowolnej pozycji. Konstrukcje tego typu mają uzasadnienie ekonomiczne dla bloków pamięci podręcznej nie przekraczających 4 kB.
Asocjacja zespołowa (Set Associative)
Stanowi kombinację rozwiązań przedstawionych powyżej. Cechą charakterystyczną tego typu architektury jest podział pamięci podręcznej na równe porcje, zwykle 2 lub 4, zwane kanałami (Ways) - rysunek 1.15.
Wymiar strony w pamięci RAM odpowiada rozmiarowi kanału w pamięci podręcznej. Każdy z kanałów administrowany jest zgodnie z regułami obowiązującymi dla organizacji typu "mapowanie bezpośrednie". System kontroli trafień (Hit/Miss) ogranicza się do przeprowadzenia dwóch (2-Way-Set) lub maksymalnie czterech (4-Way-Sef) porównań: linijka o określonym numerze może znajdować się tylko w jednej z dwóch (czterech) dopuszczalnych lokalizacji.
Reakcja pamięci podręcznej na żądanie udostępnienia danych zależy od implementacji oraz od faktu, czy poszukiwane dane są w niej istotnie zawarte. Obecność danych w pamięci podręcznej nazywa się trafieniem (Cache Hit) i nie wymaga sięgania do pamięci głównej. W sytuacji odwrotnej (Cache Miss) uruchamiana jest magistrala pamięciowa i do pamięci podręcznej sprowadzana jest nowa linijka.
Cykle zapisu do pamięci mogą uwzględniać na swej drodze obecność pamięci podręcznej (Write Back) lub ją omijać (Write Through).
Write Through
Implementacja tego typu powoduje, iż zapis wyzwala zawsze cykl dostępu do pamięci głównej, niezależnie od tego, czy dana linijka obecna jest w pamięci podręcznej czy nie. W razie trafienia (Cache Hit) odbywa się oczywiście również i aktualizacja.
Write Back
Pamięć podręczna pracująca w tym trybie zbiera wszystkie cykle zapisu i aktualizuje swoją zawartość ale nie zawartość pamięci głównej. Dzieje się to dopiero na konkretne żądanie wyrażone przez instrukcję programową (rozkaz WBINYO: Write Back and Invalid Data Cache}, sygnał sprzętowy na linii -FLUSH lub w wyniku braku trafienia w fazie odczytu. Zapis do pamięci ma miejsce w czasie gdy wolna jest szyna systemowa (a procesor przetwarza kod zawarty na przykład w pamięci podręcznej poziomu pierwszego). Metoda taka gwarantuje oczywiście dużą wydajność ale jednocześnie komplikuje układ.
Pamięć podręczna procesora 80386
Jako konkretny przykład omawianych zagadnień przedstawiona zostanie konstrukcja pamięci podręcznej procesora 80386. Model ten wyposażony został w zintegrowany czterokanałowy kontroler cache (4-Way-Set) obsługujący blok 16 kB pamięci SRAM zorganizowanej w linijki 16-bajtowe.
Generowany we wnętrzu procesora 32-bitowy adres lokalizacji w pamięci (rysunek 1.17) przejmowany jest przez kontroler podręcznej, który dokonuje jego rozkładu na trzy składniki:
B3, - B|2 : Tag
BM-B4 : Set
B3 - B0 : Byte
Na pełnowartościowy wpis do pamięci podręcznej składają się dwa ściśle ze sobą powiązane komponenty:
Rekord w pamięci podręcznej (16-bąjtowa linijka).
Rekord w katalogu pamięci podręcznej.
Katalog jest strukturą informacyjną, przy pomocy której kontroler zarządza danymi w pamięci podręcznej. Każda 16-bajtowa linijka stanowi elementarny obiekt opisany przez powiązany z nią rekord. Rekord zawiera w sobie 20-bitowy adres TAG oraz kilka dodatkowych pól bitowych służących dla celów organizacyjnych.
Sam katalog zlokalizowany jest (fizycznie) we wnętrzu kontrolera, który oddaje na ten cel fragment pamięci SRAM. Uwaga ta dotyczy oczywiście pamięci L1 (Level One Cache) zintegrowanej w strukturze CPU. Na pamięć podręczną poziomu drugiego L2 (Level Two Cache), która umieszczana jest na płycie głównej, składa się większa liczba układów scalonych niż wynikało by to z prostego rachunku "pamięć całkowita L2/ pamięć pojedynczego układu". Obowiązek prowadzenie katalogu (TAG-RAM) pociąga za sobą oczywiście konieczność instalacji kilku ponadplanowych układów SDRAM.
Katalog pamięci podręcznej procesora 80386 (rysunek 1.19) jest czterokanałowy (WayO - Way3). Każdy z kanałów stanowi tabelę o 256 wierszach i 22 kolumnach. Wiersze tabeli przechowują adres TAG odpowiadający danej 16-bajtowej linijce. Cztery tabele opisują w sumie 16 kB pamięci podręcznej (4 Ways x 256 Sets x 16 Byte). Dodatków bit WP (Write Protecf) implementuje mechanizm blokady zapisu, a pole VAL (valid) określa aktualność danych.
Pozycja wiersza w tabelach WayO - Way3 wyznaczana jest przez bity A11 - A4 słowa adresowego (Set-Address). Adres TAG stanowi centralny fragment mechanizmu umożliwiającego jednoznaczne określenie trafienia (Cache Hit). Mechanizm blokady zapisu (WP) uruchamiany jest na czas trwania operacji wypełniania linijki (Cache Linę Fill). tak by procesor nie mógł zamazywać przedwcześnie jej zawartości.
Określenie trafienia
Procesor sięga do żądanej lokalizacji w pamięci wystawiając 32-bitowy adres na swoją szynę adresową. Adres ten przejmowany jest przez kontroler pamięci podręcznej i rozkładany na trzy omówione wcześniej elementy: TAG, SET i BYTE. Składnik TAG przekazywany jest natychmiast do komparatora adresowego TAG natomiast 8-bitowa część A11- A4 skierowana zostaje do katalogu (Cache Directory) powodując uaktywnienie wszystkich czterech kanałów (Way-0 - Way-3).
Odszukany w katalogu adres TAG przekazywany jest do komparatora i porównywany z fragmentem A31 - A12 pobranym z szyny adresowej. Porównanie odbywa się dla każdego z czterech kanałów oddzielnie. Wycinek A11 - A4 magistrali kierowany jest
równolegle do obwodów pamięci podręcznej przechowującej linijki z danymi. Proces przebiega przez wszystkie kanały równolegle, stosownie do aktualnej selekcji w katalogu. Pamięć wystawia za każdym razem jedną z zaadresowanych w ten sposób linijek. Informacja ta przejmowana jest tymczasowo przez bufor separujący obwody pamięci podręcznej od magistrali danych. Jeśli poszukiwana informacja znajduje się w jakimś kanale, dochodzi do zgodności adresów TAG. Na sygnał z komparatora 32-bitowy fragment zawartości bufora (jedna czwarta część 16 bajtowej linijki wyizolowana przez bity A2 - A3) odkładany jest na magistralę a cały układ generuje sygnał trafienia (Cache Hit). Bity AO - A1l nie podlegają ocenie.
Decyzja o wymianie linijki (LRU)
Stwierdzenie braku obecności określonej linijki w pamięci podręcznej (Cache Miss} pociąga za sobą konieczność jej sprowadzenia z pamięci głównej. Kontroler pamięci podręcznej musi przygotować na ten cel jedno wolne miejsce, a jeżeli wszystkie są zajęte, określić która z obecnych w pamięci podręcznej linijek może zostać usunięta. Algorytm wyboru bazuje na obserwacji zakresu wykorzystania zmagazynowanej dotychczas informacji. Skuteczność działania takiego aparatu zależy w dużej mierze od stopnia jego rozbudowania.
Kontroler pamięci podręcznej procesora 80386 posługuje się trzema bitami LRU (Last Recently Used), które przechowywane są w połączeniu z rekordami katalogu TAG. Częstotliwość dostępu do informacji każdego z kanałów rejestrowana jest podczas ciągłej pracy układu:
Jeżeli ostatni dostęp do kanału Way-0 lub Way-1 okazał się trafieniem, ustawiany jest bit LRU-B#0.
Jeżeli wybrany został kanał Way-0 ustawia się bit LRU-B#$1, a dla Way-1 bit ten ulega wyzerowaniu.
Jeżeli trafienie miało miejsce w kanale Way-2 lub Way-3, bit LRU-B#0,zostaje wyzerowany.
Trafienie w kanale Way-2 oznaczane jest ustawieniem, a trafienie w kanale Way-3 wyzerowaniem bitu LRU-B#2.
Bity LRU aktualizowane są w następstwie każdego cyklu dostępu. Reset (lub Start) powoduje wyzerowanie wszystkich bitów LRU. Gdy kontroler stwierdzi brak trafienia, linijka zawierająca żądaną informację sprowadzana jest do pamięci podręcznej w miejsce określane przez algorytm pracujący według schematu przedstawionego na rysunku 1.21.
Jeśli brak jest wolnych pól w pamięci podręcznej, analizowane są bity LRU przynależne do danego adresu SET. Algorytm przesuwa się wzdłuż naszkicowanego powyżej drzewa logicznego i oznacza jedną z linijek jako przeznaczoną do usunięcia. W tak przygotowane miejsce sprowadzana jest z pamięci głównej żądana informacja (Cache Linę Fill).
Opisana tu metoda bazująca na algorytmie LRU stosowana jest w większości omawianych w tej książce procesorów. Dzięki niej usuwana jest ta linijka, która spoczywała bezużytecznie przez najdłuższy czas.
Inną drogą poszli twórcy procesora AMD K5 implementując prosty algorytm opierający się na losowym wyborze wolnego miejsca (Pseudo Random Replacement Policy). Badania statystyczne i symulacje wykazały, iż skuteczność działania takich metod nie odbiega znacznie od wyników uzyskiwanych przy pracy z LRU. Do niewątpliwych zalet układów tego typu należy zaliczyć szybkość działania i prostotę (eliminuje się bity LRU i cały mechanizm związany z ich zarządzaniem).
Zakres pokrywany przez pamięć podręczną
Zlokalizowana we wnętrzu procesora pamięć podręczna LI przyspiesza dostęp do bloków pamięci poziomu wyższego, który stanowi zależnie od konstrukcji, bezpośrednio pamięć operacyjna lub pamięć podręczna drugiego poziomu (L2). Dobroczynne działanie pamięci podręcznej polegające na skróceniu czasu dostępu do kolejnego wyższego bloku w hierarchii możliwe jest do osiągnięcia tylko w pewnym zakresie adresów. Zarówno rozmiary pamięci podręcznej jak i szczegóły konstrukcyjne kontrolera pamięci podręcznej ograniczają rozmiar tego obszaru (Cacheable Ared).
Z faktu tego warto zdawać sobie sprawę planując rozbudowę komputera. Obszar pokrywany przez pamięć podręczną stanowi wspólną część zakresów pokrywanych przez sam procesor (wraz z L1) oraz kontroler L2. Ograniczenie stanowi zwykle kontroler L2 zlokalizowany bądź to we wnętrzu układów sterujących na płycie głównej (procesory
z podstawką typu Socket 7), bądź to w samym module CPU (Intel Pentium II itp). Obecność pewnej liczby podstawek SIMM lub DIMM nie gwarantuje, że umieszczone w nich moduły pamięciowe o rozmiarze dopuszczalnym przez dokumentację będą spełniały należycie swe funkcje. Systemy operacyjne przydzielają pamięć operacyjną na własne potrzeby zwykle "od góry", czyli właśnie tam gdzie może brakować pokrycia. Rozszerzenie pamięci powyżej bariery obsługiwanej przez cache objawia się spowolnieniem komputera i ma skutek odwrotny od zamierzonego.
Płyty główne z podstawką typu Socket 7 (Pentium, Pentium MMX itp.) bazują zwykle na jednym z zestawów (Chip-Set) firmy Intel. Będące już częściowo na wymarciu układy typu TX obejmują jedynie przestrzeń do 64 MB. Prawie całkowicie znikły już modele bazujące na układach HX, które gwarantowały (po umieszczeniu dodatkowego układu TAG-RAM) pokrycie obszaru do 512 MB.
Dla potrzeb nowych procesorów "pentium-podobnych" współpracujących z magistralą 100 MHz stworzona została nowa generacja produktów. Zestawy układów scalonych nie pochodzą z firmy Intel, gdyż nie jest ona zainteresowana rozbudową nurtu 100 MHz na bazie innej niż Pentium II. Układy VIA-MVP3 pozwalają na pokrycie (zależnie od rozmiarów L2 i trybu pracy WB lub WT) obszaru do 512 MB a zestawy ALi-V obejmuje przestrzeń 128 MB.
Tabela 1.5.
Maksymalny rozmiar pamięci pokrywanej przez pamięć podręczną w układach współpracujących z procesorem Pentium
Chip-Set; Intel HX; Intel TX, Intel VX, Intel FX; VIA MPV3 WB/WT 12=5/2 kB; VIA MPV3 WB/WT L2=l 024kB; VIA MPV3 WB/WT 12=2 048 kB
Cachable Area [MB]; 64-512*; 64; 64 / 128; 128/256; 256/512
Podstawka; Socket 7; Socket 7; Super 7; Super 7; Super 7
Magistrala66 MHz; 66 MHz; 100 MHz; 100 MHz; 100 MHz;
* - Zależne od rozmiarów TAG-RAM
Chip-Set; ALi Alladin lll; ALiAlladinl IV Alladin IV+; ALi Alladin V WB/WT; SiS 5591, 5595;
Cachable Area [MB]; 64-128*; 64-512*; 128/128; 64-256*;
Podstawka ; Socket 7; Socket 7; Super 7; Socket 7;
Magistrala; Socket 7; Socket 7; Super 7; Socket 7; X
* -Zależne od rozmiarów TAG-RAM
Procesor Pentium II (wraz ze swym L1 jest w stanie pokryć obszar do 64 GB. Zintegrowany z procesorem kontroler pamięci podręcznej L2 ogranicza ten obszar (zależnie od modelu) do 512 MB lub 4 GB. Do grupy pierwszej zaliczane są wszystkie procesory
poniżej 300 MHz i pewna część modeli taktowanych zegarem 333 MHz. Procesory Pentium 11/333 oznaczone numerami SL2QH i SL2S5 oraz wszystkie wersje 350 MHz i 400 MHz należą do grupy drugiej.
Tabela 1.6.
Maksymalny rozmiar pamięci pokrywanej przez pamięć podręczną \v układach współpracujących z procesorem Pentium II
Chip-Set; Intel 440EX; Intel 440LX; Intel 440BX,; Intel 440GX; Intel 440NX;
Cachable Area; 256 MB; 512MB/4GB*; 5 12 MB/ 4 GB*; 8GB;
Podstawka; Slot 1; Slot 1; Slot 1; Socket 8;
Magistrala; 66MHz; 66MHz; 100MHz; 66MHz;
*- Ograniczenie wnoszone przez procesor Pentium II
Chip-Set; VIA Apollo Pro II (BXpert); SiS 560 1/5 595; ALi Alladin Pro II; (BXcel);
Cachable Area; 512MB/4GB; * 512MB/4GB*; 512MB/4GB*;
Podstawka; Slot 1; Slot 1; Slot 1;
Magistrala; 100MHz; 100MHz; 100MHz;
*=Ograniczenie wnoszone przez procesor Pentium II
Obsługa przestrzeni adresowej l/O
Przestrzeń adresowa procesorów dzieli się na obszar pamięci oraz na obszar wejścia-wyjścia (I/O - Input/Output). Różnica widoczna jest zarówno od strony programowej jak i sprzętowej.
Rozkazy maszynowe odwołujące się do pamięci (np. MOV mem, reg) operują w pierwszym z tych obszarów. Dwa specjalne rozkazy odwołań do portów (IN i OUT) obsługują drugi z nich. Warto dodać, że rozkazy IN i OUT operują wyłącznie za pośrednictwem akumulatorów, tj. nie można przesłać zawartości pamięci bezpośrednio do portu lub skierować zawartość portu do pamięci. Przestrzeń adresowa pamięci nie ma jak wiadomo takich ograniczeń. Podczas operacji na portach ignorowane są ponadto stany rejestrów segmentowych. Przestrzeń wejścia-wyjścia można więc sobie wyobrazić jako oddzielny segment 64 kB, do którego można się zwracać wyłącznie za pośrednictwem instrukcji IN i OUT.
Procesor dysponuje mechanizmem sygnalizacyjnym jednoznacznie informującym otoczenie o tym, czy aktualne odwołanie odnosi się do pamięci czy też do przestrzeni wejścia-wyjścia. Funkcje tę spełniają odpowiednie sygnały sterujące.
W przestrzeni wejścia-wyjścia rozmieszczane są zwykle rejestry konfiguracyjne (zestawy przełączników binarnych) sterujące pracą różnych układów otaczających procesor lub wręcz samego procesora. Dostęp do tych rejestrów odbywa się za pośrednictwem instrukcji maszynowych IN oraz OUT, mówimy wówczas o tzw. I/O-mapped I/O. Oczywiście nic nie stoi na przeszkodzie by te same rejestry umieścić w przestrzeni adresowej procesora i odwoływać się do nich poprzez rozkazy maszynowe MOV itp. Rozwiązanie tego typu nosi miano Memory-mapped l/O. Układy logiczne kontrolera magistrali kierują i tak wszelkie odwołania do właściwej lokalizacji: pamięci lub portów.
Procesor 8086
Zapis i odczyt portów nie różni się zasadniczo od analogicznych cykli dostępu do pamięci. Procesor sygnalizuje potrzebę sięgnięcia do portu poprzez specyficzny stan sygnałów sterujących ~S2, ~S1 i ~S0.
Odczyt portu; ~S2 - 0; ~S1 - 0; ~S0 -1
Zapis do portu; ~S2 - 0; ~S1 -1; ~S0 - 0
Procesor 8086 może zaadresować 65 536 (64 K) portów, tak więc cztery najwyższe linie adresowe (A#19 - A#16) są zawsze równe zero. W komputerach PC-kompatybilnych używa się ponadto wyłącznie pierwszych l 024 portów (0x000h - 0x3FFh).
Procesory 80386 i 80486
Procesory te mogą zaadresować:
65 536 (64 K) portów 8-bitowych o adresach rozpoczynających się od 0, l, 2 do 65535
lub:
32 768 (32 K) portów 16-bitowych o adresach rozpoczynających się od 0, 2, 4 do 65534
lub:
16 384 (16 K) portów 32-bitowych o adresach rozpoczynających się od 0, 4, 8 do 65532
Dopuszczalne jest mieszanie portów o różnych wymiarach, ale sumaryczna długość w przeliczeniu na bajty nie może przekraczać 64 K. Stan końcówki M/~IO sygnalizuje wybór przestrzeni adresowej:
Odwalanie do pamięci; M/-1O -1
Odwołanie do l/O; M/-1O -0
Kierunek transmisji rozpoznawany jest w klasyczny sposób znany z cykli dostępu do pamięci:
Zapis do portu; M/-1O - 1
Odczyt portu; M/-1O - 0
Ze względu na wymóg kompatybilności "w dół" (486 -> 386 -> 286) procesor 80486 blokuje adresy portów OxF8h - OxFFh używane we wcześniejszych modelach jako kanał komunikacyjny CPU-MPU (koprocesor). Dostęp do przestrzeni wejscia-wyjścia odbywa się z pominięciem pamięci podręcznej (zarówno zapis jak i odczyt portów). W trakcie pisania do portów nie korzysta się z buforów zapisu procesora.
Pentium
Zakres przestrzeni wejscia-wyjścia zgodny jest z procesorem 80486 (64 K portów 8-bitowych lub ekwiwalent). Na uwagę zasługuje jedynie fakt, iż w cyklach dostępu do portów bierze udział w najlepszym razie połowa szerokości 64-bitowej magistrali danych. Cykle takie omijają również pamięć podręczną oraz wszelkie bufory zapisu.
Funkcje kontrolne i sterujące
Współczesne procesory posiadają szereg wbudowanych funkcji kontrolnych i sterujących. Mechanizmy te należy podzielić na następujące grupy:
Systemy sterowania. Zaliczamy do nich wszelkie rejestry konfiguracyjne, których stan określa aktualny tryb pracy procesora i pozwala na wybór różnorodnych opcji. Liczna grupa tych rejestrów jest wspólna dla większości znanych procesorów, istnieją jednak pewne specyficzne rozwiązania znane tylko w obrębie danego modelu lub producenta (np. grupa rejestrów obecna jedynie w Pentium Pro).
Systemy śledzenia i nadzoru. Zestaw funkcji ułatwiających śledzenie (Debug) przebiegu wykonywanego programu na poziomie sprzętu. Grupa ta obejmuje również mechanizmy ułatwiające ocenę wydajności przetwarzania (Performance Monitor ing) oraz wszelkiego rodzaju stopery i układy pomiaru czasu (Timerś).
Systemy diagnostyczne. Stanowią wewnętrzne systemy kontrolne pierwszego poziomu i ułatwiają wykrywanie błędów w pracy wewnętrznych systemów CPU. Do grupy tej należy również zaliczyć tryb JTAG (począwszy od 80486 50 MHz).
BIST
Na systemy kontrolne CPU składają się: ogólny tester wewnętrzny (BIST), systemy kontroli TLB i pamięci podręcznej oraz mechanizm przejścia w stan wysokiej impedancji. Konkretna implementacja danych funkcji zależy od producenta i wersji procesora, część z nich została wprowadzona dopiero na określonym etapie rozwoju. Aby nie zaciemniać obrazu, podamy jedynie krótki przegląd tych układów.
BIST (Built In Self Test) stanowi zestaw testów wewnętrznych obejmujących między innymi układy logiczne, wewnętrzną pamięć ROM procesora oraz częściowo pamięć podręczną i TLB.
Funkcja aktywuje się w następujących okolicznościach:
Jeśli wejście AHOLD utrzymywane jest w stanie wysokim przez czas dłuższy od dwóch cykli zegarowych CLK.
Po powrocie sygnału RESET do stanu niskiego
Czas trwania testu wynosi około 220 cykli zegara. Wynik testu odkładany jest w rejestrze EAX. Ocena 0x00000000b wskazuje na wynik bezbłędny, każda inna wartość dyskwalifikuje procesor.
Kontrola TLB
Funkcja służy kontroli układu TLB i wprowadzona została po raz pierwszy w modelu 80386. Interfejs sterujący zbudowany jest w oparciu o rejestry TR6 i TR7. Kontrola polega na zapisie rekordu do TLB i odczycie kontrolnym z porównaniem (TLB-Lookup).
Kontrola pamięci podręcznej
System kontroli pamięci podręcznej procesora (On-Chip Cache} sterowany jest grupą rejestrów kontrolnych TR3 - TR5. Rejestry te stanowią porty umożliwiające bezpośredni dostęp do pamięci podręcznej. Można dzięki temu przeprowadzić następujące funkcje kontrolne: zapis i odczyt bufora, zapis i odczyt cache, oczyszczenie pamięci podręcznej (Cache Flush).
Przejście w stan wysokiej impedancji
Funkcja służy do lokalizowania usterek i przeprowadzania testów układów otoczenia procesora. Odpowiada w przybliżeniu wyjęciu CPU z podstawki, bowiem wszystkie końcówki wyjściowe i dwukierunkowe (warunkowe wyjście lub wejście) przechodzą w stan wysokiej impedancji i nie mają wpływu na stan przyłączonych do nich linii.
JTAG
JTAG (nazywany też Boundary Scan Test) stanowi potężny system diagnostyczny używany głównie w fazie projektowania i testowania układów otoczenia procesora. Warto podkreślić, iż omawiany tu mechanizm ma znaczenie wyłącznie dla producentów sprzętu. Chociaż użytkownik komputera nie ma najmniejszej potrzeby uciekania się do funkcji oferowanych przez ten system, wyjaśnimy w tym punkcie jego elementarne cechy. JTAG wprowadzony został po raz pierwszy do modelu 80486-50 pracującym wtedy jeszcze bez wewnętrznego podwajacza częstotliwości. Wszystkie późniejsze wersje tego procesora (DX2-50, SX-xx i wzwyż) oraz ich następcy miały już zaimplementowany JTAG.
System pozwala widzieć procesor jako "czarną skrzynkę" z pewną ilością wyprowadzeń. Istota rzeczy polega na tym, że stan dowolnej końcówki można nie tylko ustawić (oddziaływanie procesora na układy otaczające) ale i odczytać (ocena działania układów zewnętrznych).
Aby umożliwić taki tryb pracy należy odseparować "właściwą" strukturę procesora od świata zewnętrznego. W istocie rzeczy, każde wyprowadzenie obudowy nie jest bezpośrednio połączone ze swym logicznym punktem docelowym lecz przebiega przez pole komórek BST.
Dla zapewnienia efektywnej kontroli nad polem komórek BST zostały one połączone w jeden szereg, a pracę całego systemu nadzoruje specjalny kontroler TAP (Test Access Port). Dostęp do kontrolera odbywa się za pośrednictwem czterech końcówek: TMS, TDI, TDO i TCK.
TCK Test Clock, końcówka wejściowa. Wejście zegarowe sygnału taktującego kontrolera TAP.
TDI Test Data Input, końcówka wejściowa. Punkt wejściowy rejestru BST i kontrolera TAP. Podawana tędy informacja zostaje wprowadzana synchronicznie z zegarem TCK.
TDO Test Data Output, końcówka wyjściowa. Stanowi wylot rejestru
przesuwnego i punkt wyprowadzania danych od kontrolera. Proces odbywa się synchronicznie z impulsami zegarowymi TCK. Kontrolery TAP mogą być łączone w szereg, co daje możliwość efektywnego testowania grupy urządzeń, np. płyt głównych systemów wieloprocesorowych. Wyjście TDO kierowanie jest wówczas na wejście TDI kolejnego układu kaskady.
TMS Test Modę Select, końcówka wejściowa. Wymuszenie wysokiego stanu logicznego na tym wejściu powoduje uruchomienie całego układu JTAG. Przetrzymanie stanu wysokiego przez okres powyżej pięciu cykli zegarowych procesora oznacza reset dla kontrolera TAP i powrót do domyślnej konfiguracji.
Częstotliwość taktowania
Częstotliwość taktowania procesora leży w ścisłym związku z zegarem magistrali i stanowi jego wielokrotność. Wartość mnożnika ustalana jest poprzez stan specjalnych końcówek sterujących (BF) procesora. Obecna powszechnie w komputerach PC magistrala PCI narzuca limit na częstotliwość szyny wewnętrznej wynoszący 66 MHz, połowę tej częstotliwości stanowi zegar taktujący magistralę PCI (33 MHz). Układy peryferyjne zgodne ze standardem PCI muszą pracować niezawodnie przylej częstotliwości.
CPU generacji 586 obarczone są sporą wadą: nie wiedzą jaka jest ich właściwa częstotliwość taktowania. Procesor przyjmuje na swoje wejście pewną częstotliwość zegarową i powiela ją zgodnie z wartością zakodowaną na końcówkach BF. Liczba takich końcówek wynosi zależnie od modelu od jednej do trzech a ich położenie zaznaczone jest na rysunku 1.25.
Właściwe ustawienie mnożnika leży w gestii płyty głównej, która dysponuje zwykle zestawem zwor konfiguracyjnych. Sytuację pogarsza fakt, iż różne typy procesorów interpretują tą samą kombinację poziomów na wejściach BF na różne sposoby (tabela 1.7). Ustawienie BFO = BF1 = l oznacza dla klasycznego Pentium współczynnik x l,5 (100 MHz przy magistrali 66 MHz), a dla Pentium MMX i AMD K6 wartość x3,5 (233 MHz dla tej samej częstotliwości magistrali).
Sama obecność końcówki w procesorze to dopiero połowa sukcesu. Musi być również możliwość sterowania jej poziomem logicznym czyli fizyczne połączenie odpowiedniego styku na podstawce ze zworą. Końcówka "wisząca w powietrzu" zachowuje się jak logiczna jedynka. Aktualny przykład to rzadko obecne w starszych płytach wyprowadzenie BF2 niezbędne dla procesora AMD K6 przewidzianego do pracy z częstotliwością 266 MHz. Maksymalna wartość mnożnika bez udziału BF2 sięga jedynie do x3,5 co ogranicza wartość zegara CPU do 233 MHz.
Tabela 1.7.
Wartości mnożników dla podstawowych typów procesorów
BFO pin Y33; 0; 1; 0; 1 0; 1; 0; 1;
BF1 pin X34; 0; 0; 1; 1; 0; 0; 1; 1;
BF2 pin W35 1; 1; 1; 1; 0; 0; 0; 0;
Pentium; x2,5; x3; x2; xl,5; -; -; -; -;
Pentium MMX; x2,5; x3; x2; x3,5; -; -; -; -;
AMDK6 x2,5 x3 x2 x3,5 x4,5 x5 x4 x5,5
1DTC6; -; x3; x2; x4; -; x5; x4; -;
IDTW2; -; x3; x2; -; -; x5; x4; -;
Cyrix M2; x2,5; x3; x2; x3,5; -;--; -;
x- znaczy razy
Warto również wspomnieć o istotnym szczególe konstrukcyjnym różniącym procesory Pentium i Pentium MMX. Modele standardowe mają wewnętrzne rezystory podciągające poziom napięcia na wyprowadzeniach BFO i BF1 (Pull-up). Wraz z pojawieniem się serii MMX firma Intel zdecydowała się na wprowadzenie zmiany: końcówka BFO wyposażona została w rezystor sprowadzający do masy (Pull-down). Poziomowanie linii BF1 nie uległo przy tym zmianie. Często jedynym ratunkiem dla posiadaczy nieco starszych płyt głównych borykających się z problemami właściwych mnożników jest sięgnięcie po multimetr, pomiar napięć na końcówkach BF i ewentualna ingerencja przy pomocy lutownicy i zewnętrznych rezystorów.
Nie tylko procesory ale i układy je otaczające (Chip-Sef) pracują coraz szybciej. Sprzyja temu rozwój nowych typów pamięci (na przykład SDRAM) oraz modyfikacje standardu PCł (powyżej 33 MHz). Na rynku pojawiają się coraz częściej płyty główne dopuszczające taktowanie magistrali z prędkościami 75 MHz, 83 MHz a ostatnio 100 MHz. Ta mnogość częstotliwości w połączeniu z szerokim zakresem mnożników daje szerokie pole dla różnych (nie zawsze rozsądnych) eksperymentów.
Nominalną częstotliwość taktowania procesora można zwykle osiągnąć na kilka sposobów, na przykład:
Magistrala; Mnożnik; CPU200MHz;
66 MHz; x3; 198 MHz (standard);
75 MHz; x2,5; 187 MHz; 83 MHz;
x2,5; 207 MHz;
Podobnie można postępować w przypadku modelu 233 MHz. Podniesienie częstotliwości magistrali należy zawsze przedkładać nad przyspieszeniem zegara samego procesora:
Magistrala; Mnożnik; CPU 233 MHz;
66 MHz; x3,5; 23 1 MHz (standard);
75MHz; x3; 225 MHz (lepiej);
Niektórym trudno oprzeć się pokusie by wypróbować również następujące kombinacje:
Magistrala; Mnożnik; Zegar CPU;
75 MHz; x3; 225 MHz (zamiast 200);
83 MHz; x2,5; 249 MHz (zamiast 233);
75 MHz x3,5 262 MHz (zamiast 233)
Dwie ostatnie opcje należy stanowczo odradzić, chociaż obserwowane wyniki (mierzone programami typu benchmark) są często imponujące: 10 - 20%. Przyrost mocy obliczeniowej osiągany na poziomie aplikacji nie jest jednak aż tak znaczący by usprawiedliwić ryzyko trwałego uszkodzenia procesora lub innych elementów.
Operacjom wymuszania zwiększonej częstotliwości pracy poddają się również procesory Pentium II, chociaż zważywszy na ich cenę należałoby odradzać wszelkich nierozsądnych eksperymentów. Manipulować można w zasadzie (Niektóre operacje wymagaj ą u żyć i a lutownicy, szczegóły na odpowiednich stronach Internetu.), zarówno zegarem taktującym procesor (mnożnik) jak częstotliwością pracy magistrali (66 lub 100 MHz). Szczególna ostrożność zalecana jest w przypadku procesorów Pentium Ii/Celeron. Model 266 MHz ma trwale ustawiony mnożnik x4 i nie reaguje na ustawienie zwor konfiguracyjnych płyty. Ponieważ procesory tego typu przewidziane są do współpracy z magistralą 66 MHz, nie wolno zmuszać ich do współdziałania z szyną taktowaną zegarem 100 MHz bowiem powstającej nadwyżki (400 zamiast 266 MHz) i tak nie da się skompensować. To samo odnosi się do modelu Celeron 300 zmuszanego do pracy z szybkością 450 MHz.
Zasilanie
Właściwe napięcie zasilania procesora typu Pentium Pro i Pentium II dobierane jest przez BIOS automatycznie na podstawie odczytania informacji dostarczanych przez CPU (kodowanie przy pomocy bloku końcówek konfiguracyjnych). Procesory rodziny Pentium (włączając w to również odmianę MMX) nie mają mechanizmu automatycznej konfiguracji napięcia zasilającego i obowiązek ten spoczywa na użytkowniku. W praktyce zagadnienie to sprowadza się do odpowiedniego ustawienia zwór konfiguracyjnych (zgodnie z instrukcją dołączoną do płyty). W obiegu spotkać można trzy rodzaje płyt głównych dla procesorów zgodnych z Pentium:
Płyty z podstawką typu 4 (Socket 4) przeznaczona do obsługi najstarszej odmiany Pentium - modeli 60 i 66 MHz.
Płyty wyposażone w podstawkę typu 5 (Socket 5) skonstruowane dla CPU drugiej generacji. Procesory tego typu taktowane były do 133 MHz i zasilane napięciem 3,3 V przy stosunkowo ograniczonym poborze prądu. Sterowanie mnożnikiem częstotliwości sprowadzało się do wyboru jednego z dwóch stanów końcówki BFO(xl,5 Iubx2).
Najszerzej rozpowszechniona jest generacja płyt z podstawką typu 7 (Socket 7), której specyfikacja dopuszcza maksymalną częstotliwość taktowania równą 266 MHz. Płyty tej grupy występują w trzech wariantach:
Brak możliwości wymuszenia na stabilizatorze napięcia 2,8 V przy jednoczesnym braku podstawki modułu dodatkowego regulatora (VRM).
Płyta ma wspomniane powyżej gniazdo i brakujące napięcie 2,8 V można wytworzyć przy użyciu modułu dodatkowego regulatora VRM.
Oryginalny stabilizator napięcia dysponuje opcją 2,8 V.
Wszystkie płyty z podstawką typu 7 mają już wyprowadzone nie tylko końcówki BFO ale i BF1 co poszerza zakres możliwych wartości mnożnika częstotliwości taktowania wnętrza procesora.
Kłopoty związane z mnogością poziomów napięć wynikły z konieczności rozdzielenia obwodów zasilających jądro procesora (V#CORE) od członów współpracujących z magistralami (V#I/O). Nieustający wyścig częstotliwości taktujących powoduje przecież wzrost energii rozpraszanej na ciepło i wzrost temperatury struktur półprzewodnikowych do niebezpiecznych wartości. Jeśli tych niekorzystnych zjawisk nie można zahamować na drodze minimalizowania rozmiarów (przejście do technologii 0,25 urn i dalej), trzeba zmniejszyć prąd pobierany przez obwody procesora. Nie można jednak zmniejszać poziomów napięć wystawianych na magistralę, gdyż grozi to zachwianiem równowagi na liniach przesyłowych. Jedynym rozsądnym kompromisem jest rozdzielenie tych obwodów i operowanie poziomami optymalnymi dla każdego z nich. Linia zasilania V#I/O musi doprowadzać napięcie w zakresie około 3,2 V. Obniżenie poziomu V#CORE o kilkanaście procent (do wysokości około 2,8 V) daje zadowalający efekt w zakresie częstotliwości do 233 MHz włącznie. Różnica powyżej l V (poziom 2,1 V) wymagana jest dla procesorów osiągających zakres 266 - 300 MHz. Niestety każdy z producentów preferuje własne, uznane za optymalne, poziomy napięć (tabela 1.8). Zdarza się nawet, że te same procesory mają nadrukowane różne wartości napięć, zależnie od serii, z której pochodzą.
Producenci płyt głównych usiłują zapanować nad tym zamętem wyposażając programy BIOS w coraz to przemyślniejsze algorytmy rozpoznawania typów procesora. Sytuację ratuje nieco fakt, iż procesory o rozdzielonych obwodach zasilania (Split-Voltage) meldują się przy pomocy specjalnej końcówki V#CC2DETECT- Płyta zostaje poinformowana o konieczności doprowadzenia dwóch różnych napięć, ich wielkość jednak trudna jest do określenia w sposób automatyczny i leży w gestii użytkownika. Zamieszanie wprowadzają "rodzynki" typu AMD K6/233 opatrzone napisem 3,3VCore/3,3VI/O, które meldują się jako Split-Voltage. Większość płyt nie jest oczywiście przygotowana na taką okoliczność, bowiem zakres napięć V#CORE kończy się w punkcie 3,2 V.
Dobre i uniwersalne płyty potrafią podać (chociaż nie zawsze jest to odnotowane w dokumentacji) każde napięcie z przedziału 2,0 - 3,5 V (w odstępach 0,1 V). Sztandarowy przykład stanowią produkty serii TX97 firmy ASUS (rysunek 1.26).
Potwierdzenie poprawności danego ustawienia znaleźć można w programie BlOS-Setup na stronie Power Management w punkcie zatytułowanym VCORE Yoltage.
Ilość energii zużywanej przez procesor zależy w dużej mierze od jego aktywności. Szczytowe obciążenie występuje podczas przetwarzania materiału MPEG a minimalne w stanie oczekiwania na reakcję użytkownika. Ponieważ bieg jałowy jest różnie implementowany przez różne systemy operacyjne, pobór prądu w oczekiwaniu na komendę (System Prompf) jest dużo mniejszy w NT i OS/2 niż w Windows 95. Istotne różnice zaobserwować można również po zamianie typu procesora.
Intel MMX 233 MHz;
NT4 Prompt - 4,9 A;
DOS Prompt -
5,2 A;
AMD K6 233 MHz;
NT4 Prompt -7,2 A;
DOS Prompt -
1,9 A;
Obciążenie linii V#IO jest oczywiście dużo mniejsze niż źródła VCORJ-:- Typowy rozkład wartości przedstawia poniższe porównanie.
Intel-MMX 233 MHz; V#CORE/I#CORE-2,8 V/ 6,7 A; V#IO/I#IO-3,3 V 70,8 A
AMD-K6 233 MHz; V#CORE/I#CORE-3,2 V/ 9,5 A V#IO/I#IO-3,3 V 70,5 A
Obniżanie napięcia zasilania CPU prowadzi zwykle do niestabilnej pracy ale nie szkodzi procesorowi i warto z pewnością pokusić się o taką próbę. Niektóre modele procesorów bardzo dobrze znoszą takie zabiegi (na przykład AMD-K6-233, CPUID Stepping 2 opisany jako V#CORE = 3,2V). Redukcja poziomu napięcia do wartości 2,8 V pozwala na ograniczenie poboru mocy z 34 W do 27 W. Operacja przynosi efektywny spadek temperatury mierzonej na powierzchni obudowy o 5 C.)pięć stopni celcjusza)
Przegląd architektury procesorów
Wnętrze współczesnego komputera klasy PC zawiera w sobie szereg produktów najróżniejszych firm. Oferta jest tak bogata, że w niektórych dziedzinach nie sposób byłoby nawet wymienić wszystkich znaczących producentów. Nie dotyczy to jednak procesorów. Przeważająca część rynku opanowana jest przez trzy firmy, z których jedna zdominowała w zasadzie całą resztę.
Można śmiało zaryzykować stwierdzenie, iż zaglądając do statystycznego PC-ta nowej generacji odkryjemy w nim jeden z opisanych w tym rozdziale procesorów. Krótkie przedstawienie każdego z nich obejmuje zwięzły opis, schemat blokowy i tabelarycznie ujęte główne cechy architektury.
W dalszej części rozdziału omówione zostaną produkty następujących firm:
AMD (rodziny K5, K6 wraz z odmianami i K.7)
IBM/Cyrix(M1M2)
Intel (Pentium, Pentium MMX, Pentium Pro, Pentium II wraz z odmianami Celeron i Mendocino, Xeon, Pentium III)
IDT (WinChip C6 i WinChip 2)
Rise
Czytelników chętnych do dalszego zgłębiania zagadnień architektury procesorów odsyłam do odpowiednich stron Internetowych.
AMD - www. amd.com
Cyrix - www. cyrix. com
National Semiconductor - www.nsc.com
Intel - www. intel. com
IDT - www. winchip. com
Rise - www.rise.com
Ogólne informacje na temat procesorów, programy konfiguracyjne i testujące - www. cpu-central. com www.processor. org www. altx86. com www. cpumadness. com
Procesory AMD
Rodzina K5
Procesor AM5#(K)86 (K5) był pierwszym w pełni niezależnym projektem firmy AMD. Wszystkie poprzednie modele z serii 386 i 486 kopiowały w mniejszym lub większym stopniu oryginały Intela. Jądro procesora K5 opiera się na superskalarnej architekturze RISC. Napływający strumień rozkazów x86 analizowany jest przez dekoder i tłumaczony na ciąg elementarnych operacji (mikrorozkazów) w wewnętrznym kodzie procesora. W terminologii AMD takie elementarne rozkazy RISC noszą miano ROP (RISC Operations}. Rozkazy proste tłumaczone są przez dekoder pracujący w szybkim trybie (Fast Patii), a rozkazy bardziej skomplikowane wymagają odwołania się do sekwencera rozwijającego odpowiednią sekwencję ROP z pamięci stałej EPROM. Niezależnie od sposobu kodowania cegiełki ROP mają zawsze stałą długość.
Wypływający z dekodera strumień ROP kierowany jest do jednostek wykonawczych. K5 dysponuje sześcioma takimi jednostkami: dwoma arytmetyczno-logicznymi dla liczb całkowitych, jedną dla zmiennoprzecinkowych, dwoma kanałami dla obsługi operacji typu Load/Store i jedną do przetwarzania instrukcji rozgałęzień. Nad właściwym rozdziałem ROP do odpowiednich jednostek czuwa system dystrybucji (Dispatcher), który jest w stanie rozesłać w jednym cyklu zegarowym maksymalnie cztery mikroroz-kazy. Jeśli dana jednostka jest aktualnie zajęta, skierowane do niej mikrokody oczekują w kolejce RS (Reservation Station). Zdecydowana większość ROP może być kierowana do dowolnej z dwóch jednostek ALU a tylko nieliczne z nich wymagają obsługi przez konkretną jednostkę.
Duża wydajność procesora gwarantowana jest jedynie w sytuacji stałego i pełnego wykorzystania wszystkich jednostek wykonawczych. W trosce o nieprzerwany dopływ ROP do tych układów procesor wyposażony został w szereg dodatkowych mechanizmów wspomagających. Do głównych z nich zaliczyć należy opisane wcześniej systemy Register Renaming oraz Data Forwarding. Procesor przetwarza w miarę możliwości również poza kolejnością (Out of Order Execution) a zlokalizowany u wylotu potoku 16-stopniowy bufor ROB (Reorder Buffer) troszczy się o ich ponowne uszeregowanie zgodnie z pozycją zajmowaną w realizowanej sekwencji rozkazów x86.
System przewidywania rozgałęzień zapamiętuje l 024 adresów skoków i gwarantuje współczynnik trafienia około 75%. Napotkanie rozgałęzienia powoduje, iż pobieranie kolejnych instrukcji odbywa się w kierunku typowanym przez układ przepowiadania. Instrukcje są dekodowane i wykonywane ale ich wyniki przechowuje się w buforze ROB do czasu potwierdzenia słuszności przypuszczalnie wybranej drogi. Jeśli przewidywanie okaże się fałszywe, procesor traci 3 takty zegara potrzebne na opróżnienie potoków, rejestrów i buforów.
Pamięć podręczna procesora podzielona jest na wyizolowane bloki obsługujące w niezależny sposób dane i kod. K5 przeznacza dla kodu 16 kB, co stanowi wartość dwukrotnie większą niż w Pentium. Każdy z zapamiętywanych bajtów opatrzony jest dodatkową 5-bitową sygnaturą (Pre-Code Bits) będącą wynikiem pracy układu dekodowania wstępnego. W ten sposób ulega skróceniu czas przebywania instrukcji w układzie właściwego dekodera. Pamięć podręczna danych zajmuje 8 kB. System pamięci podręcznej
zorganizowany jest w linijki 32 bajtowe, jednak najmniejszą porcją informacji wymienianej z pamięcią operacyjną stanowią dwie takie linijki. Magistrala przystosowana jest więc w naturalny sposób do obsługi adresów leżących na granicy 64-bajtów (Q-Word). Próba dostępu do obiektu leżącego "gdzieś pomiędzy" rozkładana jest przez większość procesorów na dwa cykle. K5 potrafi jednak wygenerować taki zestaw sygnałów sterujących (Split Linę Access] by omawiany problem nie wystąpił.
Układ sterowania pamięcią podręczną procesora K5 (zarówno dla kodu jak i danych) prowadzi podwójny (Dual Tagged) system katalogów. W jednym z nich przechowywane są adresy fizyczne a w drugim adresy liniowe. Osiągane w ten sposób znaczne przyspieszenie dostępu do pamięci podręcznej okupywane jest koniecznością dodatkowego rozbudowania układów sterujących dla potrzeb nadzorowania spójności (Cache Tag Recovery) dwóch systemów adresowania.
Tabela 1.9.
Podstawowe dane procesorów AMD ( P R- 100; P R- 133; P R- 166)
Architektura; RISC
Zegar CPU [MHZ]; 100 (P R- 100; P R- 133;) 116 (P R- 166)
Magistratu [MHZ]; 66
Mnożnik (BF); xl.5(BF=l) P R- 100 xl.5(BFl/BFO=10) P R- 133 xl,75(BFl/BFO=00)P R- 166
L1 Cache (kod); 16 kB. 1 Bank, 4x Associative, Dual Tags (linear + phys.), Linę Cache 32 byte
L1 Cache (dane); 8 kB, 4 Banks, 4x Associative, Dual Tags, MESI, WB, Linę Cache 32 byte
L2 Cache on Chip; x
Pipe-Lines, 6
Pipe-Line Stages; 5
Out oj Order Execution; < 16
Branch History Table; 1 024
Branch Target Buffer; 1 024
V#CORE[V]
V#IO[0]
Pobór mocy, typ. [ W]; 12.6 10,6 12,3
Return Stack;
Renaming Registes;
Performance Monitor ing;
Time Stamp Counter;
Podstawka; Socket 7, P54C
* System niezgodny z Pentium
Rodzina K6
Projekt tego procesora nie był w zasadzie dziełem AMD lecz przejęty został wraz z zakupioną fmną NexGen. Połączenie okazało się niezmiernie korzystne dla obu stron. Rozwijana przez NexGen nowoczesna technologia6 została zaadaptowana dla potrzeb niezmiernie chłonnego rynku komputerów klasy PC i wypromowana przez firmę, która wprawdzie zdobyła już pozycję w tym sektorze ale nadal nie dysponowała "okrętem flagowym" mogącym skutecznie odpierać nieustające ataki konkurencji.
Tak więc zakupiony procesor (wtedy jeszcze o nazwie Nx686) został na tyle przebudowany by móc dać się umieścić w' podstawce Socket 7 typowej płyty głównej w miejsce zwykłego procesora Pentium. Uzyskany produkt końcowy otrzymał nazwę handlową K6, co miało stanowić nawiązanie do sprzedawanego do tej pory przez AMD własnego opracowania znanego pod symbolem K5.
Płyta główna zdolna do przyjęcia procesora NexGen bazowała na specjalnie opracowywanych do tego celu układach scalonych (Chip-Set). Winę za to ponosiła całkowita niezgodność z architekturami "intelopodobnymi", na przykład specjalna super szybka magistrala łącząca procesor z pamięcią podręczną L2.
Tabela 1.10.
Podstawowe dane procesorów AMD K6(166; 200; 233; 266*; 300*)
Architektura; RISC 86
Technologia; 0.35 um; 0.35 um; 0.35 um; 0,25 um; 0.25 um; (um - czytaj mikrometr)
Zegar CPU [MHz]; 166; 200; 233; 266; 300;
Magistrala [MHz]; 66; 66; 66; 66; 66;
Mnożnik (BF); x2.5; x3; x3,5; x4; x4.5;
L1 Cache (kod); 32 kB. 2x Associative (2 Ways)
L1 Cache (dane); 32 kB. 2x Associative. WB (2 Ways)
L2 Cache on Chip; x
Pipę- Lines; 7
Pipę- Linę Stages; 6 (FP: 7)
Out of Order Execution;
Branch History Table; 8192
TLB; Code Cache TLB: 64 Entries Data Cache TLB: 128 Entries L2 TLB: -
Branch Target Buffer; 16
V#CORE9V]; 2.9 (2.76-3.05); 2.9 (2.76-3.05); 3.2 (3.1-3.3); 2.1; 2.1
V#IO[V]; 3.3 (3.14-3.6); 3.3 (3.14-3,6); 3.3 (3.14-3.6); 3.3; 3.3;
Pobór mocy, typ. [W]; 10; 12; 17; 6 (max. 11.5); 7 (max. 12,5)
Return Stack; 16
Renaming Registers; 48 (8 + 40)
Performance Monitoring; x
Time Stamp Counter; x
Podstawka; Socket 7. P55C
* Przejście z technologii 0.35 jam na 0,25 (im miało miejsce w połowie 1997
K6 był jak na owe czasy konstrukcją bardzo nowoczesną i pod wieloma względami przewyższał swych aktualnych konkurentów. Jądro procesora pracuje w trybie RISC. Operacje w kodzie x86 rozkładane są na krótkie kody wewnętrzne noszące tym razem miano RISC86. Układ dekodera jest niezmiernie wydajny i pobierając jednorazowo 16 bajtów kodu x86 produkuje w ramach jednego cyklu zegarowego do 4 mikroinstrukcji.
Mikroinstrukcje opuszczając dekoder spływają do zbiornika pośredniego (Schedider), gdzie oczekują na zwolnienie właściwej dla danego rozkazu jednostki przetwarzającej. Procesor dysponuje sześcioma takim układami: dwiema dla operacji na danych całkowitych (Jnteger), po jednej dla przesłań do i z pamięci, zmiennoprzecinkową i MMX. Wszystkie jednostki za wyjątkiem dwóch ostatnich Projekt jednostki MMX przejęty został od Intela na mocy wzajemnej umowy licencyjnej. Koncepcja wyklucza jednoczesną pracę MMX i FPU bowiem obydwa bloki korzystają ze wspólnych rejestrów.),mogą przetwarzać mikrokody RISC równolegle i jednocześnie.
Wzajemne uzależnienia kodu w strumieniach równoległych rozwiązywane są poprzez przemianowywanie rejestrów. Do dyspozycji tej funkcji oddano 32 dodatkowe rejestry 32-bitowe. Układ przepowiadania śledzi zachowanie 8 192 instrukcji rozgałęzień przez co cechuje się bardzo dużą dokładnością trafień.
K 6 wyposażony został w 64 kB pamięci podręcznej, po 32 kB dla kodu i danych, co stanowi wartość czterokrotnie większą niż w przypadku Pentium i dwukrotnie większą niż Pentium MMX. Na uwagę zasługuje również organizacja pamięci pośredniej jednostki MMU. Tablice TLB (Transaction Look-aside Buffef) dla kodu są w stanie zapamiętać do 128 rekordów (dla porównania Pentium Pro tylko 32).
Rodzina K6-2
W połowie 1998 roku na rynku pojawiły się procesory K6 (jądro typu Chomper) dostosowane do pracy z magistralą FSB (Front Side Bus} 100 MHz. Firma AMD rzuciła w ten sposób wyraźne wyzwanie monopolistycznej polityce Intela ukierunkowanej na rozwój linii Pentium II i uśmiercenie szeroko rozpowszechnionej podstawki Socket 7. Ponieważ obowiązująca w tym zakresie specyfikacja dopuszczała maksymalną częstotliwość szyny FSB wynoszącą 66 MHz, nowy "wynalazek" propagowany był jako podstawka Super 7 (Socket Super 7).
Prawidłowe rozpoznanie i skonfigurowanie procesora nowego procesora wymaga oczywiście wsparcia ze strony BIOS co oznaczało konieczność jego aktualizacji. Jeśli nie jest możliwe wgranie nowej wersji (FLASH-BIOS) lub ewentualna wymiana pamięci EPROM można próbować posłużyć się jednym z programów konfiguracyjnych (na przykład setk6.exe). Na straconej pozycji znajdują się posiadacze płyt pozbawionych wyprowadzenia końcówki BF2 co uniemożliwia ustawienie mnożnika powyżej x3,5. Zwracać też należy uwagę na dostateczną wydajność źródła prądowego: procesory tej serii czerpią około 10 A.
Procesory K6-2 mogą współpracować z magistralą FSB zarówno w wersji 66 MHz jak i 100 MHz. Układy sterujące (Chip-Sef) do tych ostatnich pochodzą wyłącznie od konkurentów Intela, bowiem polityka tej firmy nie przewiduje przyszłości dla magistrali 100 MHz doprowadzanej do podstawki typu Socket 7. Warto zwrócić uwagę, iż modele
100 MHz różnią się w istotny sposób od dotychczasowych wersji 66 MHz. Nowość (a zarazem pewien problem techniczny) stanowi bowiem uniezależnienie częstotliwości szyny głównej od magistrali PCI i AGP. Typowe dla dotychczasowej architektury było uzyskiwanie częstotliwości 33 MHz, taktującej szynę PCI, poprzez prosty podział zegara magistrali procesora (66 MHz : 2). Szyna AGP otrzymywała natomiast pełny przebieg 66 MHz. Wszystkie te przebiegi były ze sobą wspaniale zsynchronizowane, bowiem wywodziły się ze wspólnego źródła. Ten prosty mechanizm podziału stosowany jest również dla magistrali 75 MHz, a nawet 83 MHz, co znoszą z różnym szczęściem układy peryferyjne PCI i AGP (gwarancja działania obejmuje zakres do 33 MHz). Na tynku znajduje się niestety zbyt duża liczba płyt głównych pozwalających na manipulację częstotliwościami magistral w zakresie wybiegającym często poza zdrowy rozsądek. Należy pamiętać, iż podnoszenie ponad miarę częstotliwości szyny PCI zagraża nie tylko kartom graficznym i innym urządzeniom PCI ale ma również ujemne skutki dla kontrolera IDE, co objawiać się może sporadycznymi błędami zapisu i odczytu dysków.
Tabela 1.11.
Podstawowe dane procesorów AMD K6-2(266; 300 ; 333; 350; 366; 380 ; 400; 450 ; 475 ; 500}
Architektura; RISC 86
Technologia; 0.25 um
Zegar CPU [MHzJ; 266; 300 ; 333; 350; 366; 380; 400; 450; 475; 500
Magistrala [MHz]; 100/66; 100/66; 66; 100; 66; 95/75; 100; 100; 95; 100
Mnożnik (BF); x2.5/x4; x3/x4.5; x5; x3,5; x5,5; x4/x5; x4; x4,5; x5; x5
LI Cache (kod); 32 kB, 2x Associative 20 kB Predecode Cache
LI Cache (dane); 32 kB, 2x Associative, WB
L2 Cache on Chip; x
Pipe-Lines; 7
Pipe-Line Stages; 6(FP:7)
Ont of Order Execution;
Branch History Table; 8192
Branch Target Buffer; 16
V#CORE[V]; 2.2 (266; 300 ; 333; 350; 366; 380; 400;); 2,2/2,4 (450; 475 );2.2(500)
V#IO[V]; 3,3
Pobór mocy, max. [W]; 14,7; 17,2; 19,0; 19,95; 20,8; 21,6; 22,7; 18,8do28,4*; 19,8do29,6*; 20,75
Return Stack; 16
Renaming Registers; 48 (8 + 40)
Podstawka; Socket Super 7
* - Pobór mocy dla procesorów zasilanych napięciem 2.4 V.
Poważna trudność powstaje w momencie gdy częstotliwość przebiegu wyjściowego (magistrala CPU) wynosi 100 MHz. Z takiego źródła niełatwo jest uzyskać zsynchronizowane przebiegi 33 MHz i 66 MHz. Stosuje się dwa sposoby podejścia do tego problemu. Pierwszy z nich to asynchroniczny tryb pracy. Magistrala główna i procesor mają własny zegar 100 MHz. Szyna AGP wyposażona zostaje w niezależny generator 66 MHz, z którego sygnał po podziale przez 2 posyła się na magistralę PCI. Rozwiązanie drugie to tak zwany tryb pseudosynchroniczny polegający na przemyślnym wyprowadzaniu (poprzez kolejne dzielenia i mnożenia) potrzebnych częstotliwości (66 i 33) z zegara 100 MHz. Tryb asynchroniczny ma istotną wadę: połączenie i współpraca magistral taktowanych różnymi częstotliwościami wymaga stosowania buforów pośrednich przechowujących dane. Skomplikowany na pozór tryb pseudosynchroniczny gwarantuje lepsze sprzężenie, bowiem mimo nierównomierności cyklów ich wzajemne przesunięcia są jednoznacznie zdefiniowane i kontrolery magistral mogą lepiej przewidzieć stosowne momenty dla wymiany danych.
Magistrala 100 MHz to nie jedyna nowość wprowadzona do procesorów AMD K6-2. Drugim istotnym elementem jest rozszerzenie o funkcje określane mianem 3DNow!. W trosce o zmniejszenie dystansu dzielącego K6 od Pentium II (zwłaszcza w zakresie działań na liczbach zmiennoprzecinkowych) zmodyfikowano jednostkę FPU. 3DNow! to nowy zestaw dodatkowych rozkazów uzupełniających funkcje MMX. Dopuszczalne jest mieszanie rozkazów obydwu typów w ramach tej samej aplikacji. Znana z systemu MMX idea grupowego przetwarzania danych SIMD (Single Instruction Mnltiple Data) znalazła tu zastosowanie w odniesieniu do liczb zmiennoprzecinkowych. Lwia część rozkazów 3DNow! operuje na rejestrach 64-bitowych, których zawartość interpretowana jest według schematu przedstawionego na rysunku l .29.
Dla każdej z liczb przeznacza się 32 bity: l bit na znak, 23 bity na mantysę i 8 bitów na eksponentę. Powyższy sposób kodowania pozwala na przetwarzanie liczb z zakresu 10j8 do l O'38 z dokładnością 2'24.
Platformą łączącą nowe rozkazy 3DNow! z aplikacjami multimedialnymi (główny nacisk kładzie się na funkcje 3D) stanowi system DirectX w wersji począwszy od 6.0. Wyniki osiągane przez duet K6-2 i DirectX 6.0 ustanowiły poważne zagrożenie dla pozycji zajmowanej dotychczas przez procesory rodziny Pentium II.
Wykorzystanie możliwości 3DNow! zależy w dużej mierze od producentów kart graficznych, którzy muszą wyposażać swoje wyroby w odpowiednie sterowniki. Przegląd łączy informujących o takich produktach znajduje się w Internecie pod adresem http://homepages.enterprise.net/mwarwick/. Interesujący zbiór aktualnych informacji z tego zakresu można również znaleźć na stronie \v\vw.3dnow.net.
Procesory rodziny K6 (w tym również K6-2) dysponują specjalnym rejestrem kon-figuracyjnym umożliwiającym aktywowanie funkcji WA (Write Allocatiori). Jest to pewna szczególna forma obsługi pamięci podręcznej, która w większości typowych zastosować przynosi pewien wzrost wydajności.
Stały wzrost częstotliwości taktowania procesorów spowodował po raz pierwszy wystąpienie ciekawego fenomenu. Procesor AMD K6-2 w wersji 350 MHz (lub szybszy) prowadzi do zawieszania się systemu operacyjnego. Zjawisko to wywołane jest istotnie nadmierną prędkością obliczeń! Błąd ma swoje źródło w sterownikach Windows 95 (na przykład ios.vd\), które podczas wykonywania pętli doprowadzają do dzielenia przez zero. Problem nie dotyczy Windows NT i Windows 98.
Rodzina K6 III
Projekt tego procesora rozwijany był przez AMD pod kryptonimem Sharptooth a jądro określane jest mianem CXT. K6 III to w zasadzie K6-2 wzbogacony o pamięć podręczną L2 zlokalizowaną bezpośrednio w strukturze (Pamięć podręczna L2 nie zajmuje dodatkowej
powierzchni, bowiem ukryta jest pod samym procesorem. Sumaryczna grubość struktury
rośnie przez to o około l mm.),procesora (On-Die). Niezmiernie ważną cechą architektury K6 III jest fakt, iż (w odróżnieniu od Pentium II a nawet Pentium III) magistrala BSB (BackSide Biis] łącząca L2 z procesorem taktowana jest częstotliwością zegara CPU.
W fazie przejściowej (między K6-2 a K6 III) na rynku znajdowały się zarówno egzemplarze K6-2 z jądrem starego typu (Chomper) jak i modele będące de facto K6 III (jądro typu CXT). Procesory te dają się w prosty sposób odróżnić: Chomper ma naniesiony w lewym dolnym rogu obudowy napis 26050, natomiast CXT - 26351. Decydującym kryterium jest odpowiedź procesora na rozkaz cpuid. K6-2 odpowiada sekwencją 0x05-0x08-0x00 (w kolejności: Family-Model-Stepping). W przypadku jądra CTX odpowiedź brzmi Ox05-Ox08-OxOC.
AMD nie wprowadziło w tym przypadku żadnych nowych niekompatybilnych (Zmieniony
został natomiast (w stosunku do K6-2) sposób aktywowania trybu WA (WriteAllocalion).,rozszerzeń takich jak ISSE Intela. Obowiązuje nadal kurs na 3DNow!, tym bardziej że coraz większa liczba producentów oprogramowania zaakceptowała ten standard. 3DNow! nie potrzebuje wsparcia systemu operacyjnego przy zachowywaniu rejestrów. Są one po-
dobnie jak MMX zamaskowane pod jednostką FP. Architektura 3DNow! stosuje za to bardziej wyrafinowane rozkazy. K6 III nie wprowadza również żadnych nowych sztuczek z pamięcią podręczną (takich jak strumieniowanie w Pentium III).
Tabela 1.12.
Podstawowe dane procesorów AMD K6III (400;
450)
Architektura; RISC 86
Technologia; 0,25 um
Zegar CPU[ MHz]; 400; 450
Magistrala [MHz]; 100
Mnożnik (BF); x4; x4,5
L1 Cache (kod); 32 kB, 2x Associative 20 kB Predecode Cache
L1 Cache (dane); 32 kB Write Back, 2x Associative
L2 Cache on Chip (CPU Clock; ) 256 kB Write Back 4x Associative
Pipe-Lines; 10
Pipę- Linę Stages; 6 (INT)
FPU Units; 1 (Non-Pipelined)
Integer Units; 2
MMX Units; 2
Renaming Registers;-
Out of Order Execution; -
Branch History Table; 8192
V# CORK [V]; 2,4
V#IO [V]; 3,3
Pobór mocy, typ./max. [W]; 16,1/26,8; 17,7/29,5
Podstawka; Socket Super 7
Pozycja rynkowa K6 III ma stanowić przeciwwagę dla konkurencyjnych produktów Intela - procesorów Pentium 11 i Pentium III. Wersja K6 III 400 MHz odpowiada - w zakresie aplikacji biurowych i standardowego oprogramowania - mocy obliczeniowej Pentium II 450 MHz. K.6 111 wsparty sterownikami 3DNow! przewyższa oczywiście Intela.
Model K7
K.7 (Athlon) nazywany jest przez AMD procesorem siódmej generacji. Prototyp został zaprezentowany pod koniec 1998 roku, ale stosunkowo długo czekał na wprowadzenie do produkcji seryjnej. Pierwsze egzemplarze wytwarzane są w technologii 0,25 urn co pozwala na osiągnięcie częstotliwości zegara 500 MHz.
Mikroarchitektura
K7 posiada 9 jednostek wykonawczych, które mogą pracować równolegle:
3 jednostki dla danych całkowitych (Integer}
3 jednostki adresowe
3 jednostki dla danych zmiennoprzecinkowych (FPU/Media). Jednostki te mogą wykonywać instrukcje poza kolejnością (Ont-of-order). Dwie z nich są ponadto zdolne do naprzemiennego wykonywania instrukcji 3DNow! oraz MMX-FPU).
Blok jednostek wykonawczych zasilany jest przez trzy uniwersalne dekodery, które w myśl architektury RISC przetwarzają kod x86 na wewnętrzne rozkazy MOPS (Macro-OPs) o stałej długości. Makrorozkazy te zawierają z kolei od l do 2 operacji elementarnych (OPs). Proces dekodowanie może przebiegać ścieżką bezpośrednią (Direct Path} co ma miejsce w przypadku typowych i prostych instrukcji x86 o długości do 15 bajtów. Ścieżka dodatkowa (Vector Path) dekoduje rozbudowane polecenia kompleksowe. Jej praca polega na rozwijaniu zdekodowanych sekwencji z pamięci stałej MROM (Macro Code ROM).
Tabela 1.13.
Podstawowe dane procesorów AMD K7 (Athlon)(500; 550; 600; 650; 700)
Architektura; RISC
Technologia; 0.25 um
Zegar CPU [MHz]; 500; 550; 600; 650; 700
Magistrala [MHz]; 200
L1 C ciche (kod); 64 kB. 2x Set Associative
L1 Cache (dane); 64 kB, 2x Set Associative
L2 Cache; od 512 kB do 8 MB
TLB; 24/256 (kod) 32/256 (dane)
Superscalar; -
Pipe-Line Stages; 10(INT)/ 15(FP U)
Ont of Order Execution;
Branch Prediction Table; 2048
Return Stac; 12
SMP (Multi CPU); 4
V#L2[V]; 2.475-2,625 lub 3.15 - 3.45*
V#CORE[V]; 1.5-1,7
Pobór mocy, max. [W]; 42; 46; 50; 54; 50
Podstawka; Slot A
* Wartość napięcia zasilającego pamięć podręczną L2 zależy od zastosowanych układów SRAM.
Oto kilka typowych przykładów pracy dekodera K7:
Assembler; Ścieżka; Rozkład;
add eax, ebx; Direct Path; 1 OP (add);
xor eax, [ebx+8]; Direct Path; 2OPs: 1 OP(load), 1 OP(xor);
and [ebx], eax; Direct Path; 2 OPs: 1 OP(load/store), 1 OP (and);
Makrorozkazy wpływają do bufora pośredniego ICU (Instruction Control Unii), który może przechowywać do 72 MOPS. Bufor przekazuje MOPS do odpowiednich rozdzielaczy. Rozkazy przetwarzające dane całkowite kierowane są do innego rozdzielacza niż te pracujące na liczbach zmiennoprzecinkowych (IS - Integer Scheduler względnie FMS - FPU/Media Scheduler}. Stąd pojedyncze OPs wydawane są do odpowiednich jednostek wykonawczych.
Rozdzielacz IS może przechować do 15 MOPS (do 30 prostych operacji) zanim nie rozdysponuje ich pomiędzy jeden z trzech równolegle pracujących bloków wykonawczych IEUO - IEU2 (Integer Execution Unit), z których każdy dysponuje niezależną jednostką adresową AGUO - AGU2 (Address Generation Unit). Jednostki adresowe mają za zadanie optymalizację operacji zapisu i odczytu (Load/Store) z uwzględnieniem jak najlepszego wykorzystania pamięci podręcznych LI i L2. Przetwarzanie odbywa się również poza kolejnością (Out-of-Order). Superskalarny potrójny potok dla liczb całkowitych wyposażony jest ponadto w sprzętowy układ mnożenia IMUL (Integer Multiplication).
Podobnie potrójny i superskalarny jest potok przetwarzający dane zmiennoprzecinkowe. Również i w tym wypadku rozkazy wykonywane są poza kolejnością. Blok ten wyposażony jest w zestaw własnych rejestrów. Jednostka zasilająca FMS dysponuje pamięcią pośrednią zdolną do czasowego przechowania do 36 MOPS. Instrukcje rozdzielane są pomiędzy jedną z trzech jednostek wykonawczych. Pierwsza z nich (FPU-0) odpowiedzialna jest za komunikację z pamięcią i rozlokowywanie argumentów. Jednostka druga (FPU-1) realizuje operacje dodawania a jednostka trzecia (FPU-2) instrukcje mnożenia liczb zmiennoprzecinkowych. Jednostki FPU-1 i FPU-2 implementują ponadto instrukcje MMX i3DNow!.
Potoki przetwarzające procesora K7 (Pipe-Lines) są stosunkowo długie: 10 etapów dla Integer i 15 etapów dla FPU (pierwszych 6 etapów jest wspólnych dla INT/FPU). Jak wiadomo z teorii ogólnej architektury procesorów, długi potok jest bardzo korzystny przy dużych częstotliwościach taktujących ale za to źle znosi błędy przepowiadania rozgałęzień. Im dłuższy jest potok, tym więcej potrzeba czasu na oczyszczenie go z instrukcji, które znalazły się w nim przez pomyłkę. Z tego właśnie względu jednostka przepowiadania w K7 jest bardzo rozbudowana. Sama tabela BTB (Branch Prediction Table) obejmuje 2 048 rekordów.
Pamięć podręczna L1
Rozmiar pamięci podręcznej L1 procesora K7 (128 kB - po 64 kB na dane i instrukcje) stanowi jak na razie swoisty rekord w tej dziedzinie. Dla porównania można podać, iż Pentium II dysponuje jedynie jedną czwartą tej wartości. W procesorach z małą pamięcią podręczną obserwuje się stosunkowo niekorzystne zjawisko nazywane złym skalowaniem. Oznacza to, iż podnoszenie częstotliwości taktowania takiego procesora nie przynosi od pewnego momentu prawie żadnego (niewspółmiernego w skali procentowej) wzrostu wydajności. Duża pamięć podręczna L1jest natomiast gwarancją dobrego skalowania, to jest możliwości dalszego podnoszenia częstotliwości taktowania procesora (co może wynikać chociażby jedynie z poprawienia technologii, np. przejście z procesu 0,25 um na 0,18 (im) bez wprowadzania zmian w architekturze.
System gwarantuje jednoczesny dostęp do pamięci podręcznej L1 dla danych (L1 Data Cache) dla dwóch instrukcji (Multi-Banking Access). Jednostka administrująca cyklami dostępu do pamięci LSU (Load/Store Unif) dysponuje buforem magazynującym do 44 odwołań. LSU przegląda zawartość kolejki i próbuje tak grupować odwołania by móc maksymalnie wykorzystać magistralę pamięciową (cykle Burst).
Pamięć podręczna L2
K7, podobnie jak Pentium II stawia do dyspozycji pamięci podręcznej L2 specjalną magistralę BSB (Back Side Bus). Nowością w architekturze K7 jest możliwość programowania częstotliwości zegara BSB w zależności od jakości zastosowanych kostek Cache-RAM, które podobnie jak w przypadku Pentium II osadzane są na module procesora, w sąsiedztwie jego struktury półprzewodnikowej. Zakres regulacji obejmuje pełną prędkość (zegar 1:1) poprzez 1:2 do 1:3. Pragnąc wykorzystać 1:1 trzeba stosować specjalne układy DDR-SRAM (Double Data Ratę SRAM). Wprowadzenie możliwości regulacji zegara BSB ma wyłącznie podłoże ekonomiczne i nie stanowi żadnego ulepszenia, z którego mógłby czerpać korzyści użytkownik. Firmie AMD łatwiej jest produkować w ramach jednej rodziny procesorów odgałęzienia przeznaczone na rynek powszechnego użytkownika, dla stacji roboczych lub wreszcie do serwerów. Podział uzależniony jest szybkością i rozmiarami L2.
K7 dysponuje wewnętrznym rejestrem TAGRAM zdolnym do zarządzania pamięcią podręczną L2 o rozmiarze nie przekraczającym 512 kB. Z drugiej jednak strony nie planuje się (z pominięciem pierwszej fazy sprzedaży) procesorów z pamięcią L2 mniejszą od 2 MB (pogłoski mówią o 8 MB jako górnej granicy). Wygląda więc na to, iż trzeba będzie stosować zewnętrzny TAGRAM, tak jak ma to miejsce w Pentium II. Zakres przestrzeni adresowej samego procesora wynosi 64 GB (tyle samo co Pentium II) ale specyfikacja złącza Slot A ogranicza go do obszaru 4 GB.
Magistrala
Zdecydowaną nowość stanowi magistrala EV-6, która może być taktowana nawet do 200 MHz. Jej konstrukcja zapożyczona została z procesora Alpha 21624 firmy Digital. Nie ma w tym nic dziwnego, jeśli uwzględnić fakt, iż jeden z głównych projektantów procesora K7, Dirk Meyer, przeszedł do AMD z firmy Digital. Złącze krawędziowe modułu procesora (nazywane przez AMD Slot A) odpowiada w swej konstrukcji mechanicznej (raster i rozmiary kontaktów) podstawce Slot l Intela ale na tym kończy się podobieństwo. Sygnały magistrali i protokół odpowiadają zupełnie innej specyfikacji. EV-6 jest szyną 72 bitową przy czym na każdy bajt danych przypada l dodatkowy bit ECC (64 + 8ECC).
Magistrala EV-6 ma cenną właściwość, istotną w systemach wieloprocesorowych. Każdy z procesorów dysponuje logicznie niezależną, bezpośrednią magistralą realizującą wirtualne połączenia wzajemne (Point to Point}. EV-6 kluczowana zegarem 200 MHz daje przepustowość 1,6 GB/s, czyli znacznie więcej niż magistrala GTL+ rodziny P6 (Pentium II itp.), nawet jeśli podniesie się jej częstotliwość do 133 MHz. GTL+, takto-
wana zegarem 100 MHz osiąga w szczycie transfer 800 MB/s a l 066 MB/s przy podkręceniu zegara do 133 MHz. Stosowane dotychczas pamięci SDRAM nie są w stanie zaoferować pasma o tej szerokości. Dla potrzeb nowej techniki przygotowano już nowe typy pamięci: RDRAM (Rambus Direct RAM) oraz DDR-SDRAM. Układy tego rodzaju oferują strumień szerokości 1,6 GB/s już przy częstotliwości 100 MHz.
Procesory Cyrix
Rodzina 6x86 (Ml)
Omawiany procesor stanowi wspólne dzieło firm Cyrix, IBM i SGS-Thompson. Jako bardzo oryginalny i oszczędny projekt zdołał znaleźć dla siebie miejsce na rynku PC, głównie ze względu na bardzo konkurencyjną cenę.
Całkowita zgodność z Pentium jest niestety mocno problematyczna. Procesorom Cyrix brak jest funkcji wewnętrznego stopera TSC (Time Stamp Counter) oraz możliwości nadzoru (Performance Monitoring).
Licznik czasu TSC, chociaż nie stanowi obowiązkowego elementu architektury x86, chętnie jest wykorzystywany przez różne aplikacje. Jego fizyczna nieobecność w systemie może zależnie od stylu programowania zaowocować różnymi skutkami ubocznymi.
Ograniczone są funkcje śledzenia a praca w systemie wieloprocesorowym możliwa jest wyłącznie zgodnie z koncepcją OpenPIC, która całkowicie nie pasuje do modułu APIC zintegrowanego z procesorami Pentium. Sporo kłopotów przysparza brak instrukcji cpuid a właściwie jej zablokowanie. Niektóre aplikacje sprawdzają bowiem przed przystąpieniem do pracy typ procesora zainstalowanego w systemie. Procesor 6x86 w konfiguracji standardowej nie zna kodu tego rozkazu i system zatrzymuje się sygnalizując błąd, tak jak w przypadku napotkania instrukcji o zabronionym kodzie. Konfigurację procesora można na szczęście zmienić. Dokonuje się tego na przykład przy pomocy programu CX86!(Wywołanie programu: cx86! mapen0 cuiden). Ustawiona konfiguracja obowiązuje do następnego restartu systemu. Powyższe uwagi odnoszą się wyłącznie do procesorów serii 6x86 i nie dotyczą następnej generacji (MX i M2).
Użytkownicy przyzwyczajeni do jasno zdefiniowanej częstotliwości taktowania procesora mogą czuć się nieco zagubieni. Produkty IBM/Cyrix znakowane są w sposób odmienny od szeroko przyjętego. Na obudowie drukowany jest współczynnik PR (Pentium Rating) czyli równoważnik mocy obliczeniowej danego procesora w odniesieniu do procesora Pentium. Do liczby PR dołączany był w przeszłości znak "+" mający wskazywać na zależność "lepszy lub co najmniej równy". Wyniki pracy programów testujących potwierdzają na ogół prawo do noszenia stosownej etykiety P-xxx+. Przedstawiciel rodziny 6x86 P-166 osiąga istotnie wyniki porównywalne z Pentium 166.
6x86 133 MHz P- 166+; Sysmark NT 455; Sysmark 95 450
Pentium 166 MHz; Sysmark NT 433; Sysmark 95 464
Pomiary przeprowadzone wśród dalszych członków rodziny procesorów prowadzą do ustanowienia następującego przyporządkowania:
Cyrix;
100 MHz P- 120+;
110MHzP-133+;
120MHzP-150+;
133MHzP-166+;
Intel;
Pentium 120 MHz;
Pentium 133 MHz;
Pentium 150 MHz;
Pentium 166 MHz;
Warto przyjrzeć się dokładniej jakich sztuczek używa procesor Cyrix, by mimo mniejszych częstotliwości taktowania osiągać tę samą wydajność co jego główny konkurent.
Główną specjalnością tej architektury jest niewątpliwie jednolita pamięć podręczna dla kodu i danych (Unified Cache). Koncepcja ta umożliwia większą elastyczność (a zarazem i prędkość) w zarządzaniu pamięcią podręczną a niebezpieczeństwo wzajemnego wyrzucania się partii kodu i danych (Trashing) likwidowane jest poprzez wprowadzenia małej, 256 bajtowej pamięci podręcznej (Instruction Linę Cache) dedykowanej wyłącznie dla kodu rozkazów. Dostęp do 16 kB pamięci podręcznej możliwy jest dla obydwu potoków jednocześnie (Dual Ported).
Realizacja instrukcji x86 odbywa się w sposób naturalny -jądro procesora pracuje w trybie CISC. Przetwarzanie ma miejsce w dwóch równoległych potokach (oznaczanych przez Cyrix jako X i Y). Potoki są siedmiostopniowe przy czym w dwóch spośród
nich (ID - Instruction Decode i AC - Address Calculation} wyodrębnia się jeszcze stopnie pośrednie (IDl, ID2 oraz AC1 i AC2) taktowane podwójną częstotliwością zegara.
Pierwszy stopień (IF - Instruction Fetch) jest wspólny dla obydwu potoków i pobiera w jednym cyklu zegara 16 bajtów kodu. Jednocześnie sprawdza się, czy w załadowanych właśnie instrukcjach nie występują rozkazy skoków. W przypadku rozgałęzień bezwarunkowych pobierany jest również kod z punktu na który wskazuje adres skoku.
Tabela 1.14.
Podstawowe dane procesorów Cyrix Ml(PR 150+, PR 166+; R 200+)
Architektura; x86 Native
Zegar CPU [MHz]; 120; 133; 150
Magistrala [MHz]; 60; 66; 75*
Mnożnik (BF); x2; x2; x2
L1 Cache(kod); 16 kB Unified Cache (Code + Data). 4x Associative, 512 Lines. 256 Byte Instruction Linę Cache (8 Lines)
L1 Cache (dane); 16 kB Unified Cache (Code + Data). 4x Associative, 512 Lines. 256 Byte Instruction Linę Cache (8 Lines)
L2 Cache on Chip; x
Pipe-Lines; 2 ( + FP)
Pipe-Line Stages; 7
Out of Order Execution; -
Branch History Table; 512
Branch Target Buffer; 256
V#CORE[V]; 3,3** (2,8)***
V#IO[V]; 3.3
Pobór mocy, typ.[W]; 16,8; 18; 21
Return Stack; 8
Renaming Registers; S (8 + 24)
Performance Monitoring; x
Time Stamp Counter; x
Podstawka; Socket 7
Praca w tym trybie wymaga wsparcia ze strony płyty głównej (standardowa częstotliwość maksymalna dla magistrali wynosi jedynie 66 MHz) Modele serii M1 wykonywane w technologii 0,65mikrometra zajmują 394 mm^2 struktury krzemowej (Die) *** Nowe układy serii M1R charakteryzuj ą się mniejszym poborem mocy i wymagają dwóch napięć zasilających (Split Voltage}. Wykonywane w technologii 0.5 mikrometra (PR-120 - PR-166) lub 0,44 jim (PR-200) zajmują jedynie 204 mm^2.
Przepowiadanie rozgałęzień instrukcji warunkowych odbywa się przy pomocy 256 wierszowej tabeli BTB (plus dwa bity charakteryzujące skok). Aby nie tracić czasu w wypadku pomyłki pobiera się również na wszelki wypadek fragment kodu z drugiego punktu, odrzuconego przez układ przepowiadania.
Potoki równoległe Cyrixa nie są synchronizowane. Bezrobotny potok Y nie czeka (w przeciwieństwie do Pentium) na ukończenie przetwarzania w X i może wykonywać inny fragment kodu (poza kolejnością), choćby jeden z przepowiadanych kierunków biegu programu. Powstające przy tym zależności likwiduje się przy pomocy przemiano-wywania rejestrów, których jest w sumie 32.
Spore różnice w stosunku do Pentium można odnaleźć w jednostce zarządzania pamięcią (MMU). Bufor TLB zawiera 128 rekordów (Pentium - 96) a pamięć podręczna w której przechowywane są katalogi dostępu do stron pamięci (Page Directory Table) daje się programowo aktywować i dezaktywować. Niezmiernie oryginalny jest ośmio-stopniowy Yictim Buffer, forma kosza na śmieci, gdzie lądują usuwane z TLB odwołania do stron. Rekordy takie dają się szybciej odtworzyć bowiem nie zostały jeszcze fizycznie skasowane. Cyrix radzi sobie również świetnie ze stronami pamięci o wymiarach innych niż Intelowskie 4 kB i 4 MB. Następujące po sobie strony dają się połączyć w jedną całość, co przynosi ogromne skrócenie czasu dostępu.
Na zakończenie warto wreszcie wspomnieć o łączonych cyklach zapisu (Write Gathe-ring). System dostępu do magistrali jest w stanie łączyć następujące po sobie odwołania do pamięci. W ten sposób żądania zapisu bajtów, słów i dwu-słów grupowane są w pojedynczy blok i wykonywane w szybkim trybie 64 bitowym.
Rodzina M2
Historia współpracy i wzajemnych kontaktów pomiędzy firmami Cyrix i IBM jest bardzo zawikłana, co znajduje wyraźne odbicie w systemie oznaczeń procesorów. Opracowany w firmie Cyrix pierwowzór rodziny całej rodziny (6x86) nosił przez pewien czas przydomek M1. Procesor Cyrix M2 stanowi w zasadzie rozwinięcie modelu 6x86 (Ml) poprzez wzbogacenie o większą pamięć podręczną (64 kB zamiast 16 kB). Producent pozostał wierny idei wspólnej pamięci podręcznej dla danych i kodu (Unified Cache). Zachowany został również odseparowany wycinek pamięci podręcznej przeznaczonej wyłącznie na kod (256 bajtów). Najistotniejsza innowacja to rozszerzenie o zestaw rozkazów MMX, których realizacja odbywa się w bloku funkcyjnym zintegrowanym z jednostką zmiennoprzecinkową. Przez pewien czas procesory tej rodziny noszą nawet przydomek MX (zamiast M2).
Po przejęciu firmy Cyrix przez National Semiconductor przez dłuższy czas pozostawała w mocy umowa partnerska z IBM, a w końcu została wypowiedziana. Nie jest do końca jasne, gdzie w przyszłości będą montowane procesory Cyrix. Jak dotąd CPU tej serii powstawały na liniach produkcyjnych IBM. Część produkcji opatrywana była znakiem firmowym IBM a część wracała do Cyrixa. Specjaliści od marketingu firmy Cyrix uznali, że używany przez pewien czas przyrostek M2 (poprzez asocjację z Pentium II)
lepiej nadaje się do promocji wyrobów niż wysłużony przyrostek MX, kojarzący się wyłącznie z wszechobecnym standardem MMX. Dla zwiększenia efektu zamieniono dodatkowo M2 na M-II i tak powstało aktualne oznaczenie M-II-300, pod którym ukrywa się jednostka z rodziny 6x86 o mocy obliczeniowej sięgającej (przynajmniej w zakresie aplikacji biurowych) poziomu procesora Pentium II taktowanego zegarem 300 MHz. Ten sam procesor (a przynajmniej jego półprzewodnikowa struktura) trafia na rynek pod znakiem firmowym IBM jako 6x86MX-PR266 lub ewentualnie PR300. Jądro procesora M-II-300 przystosowane jest do współpracy z magistralą 66 MHz. Mnożnik xl,5 rozpoznawany jest jako x3,5 a więc układ konfigurowany jest dokładnie tak jak Intel MMX-233. Ten sam procesor oznaczany przez IBM jako 6x86MX-PR300 (IBM) przewidziany jest do współpracy z magistralą 75 MHz.
IBM stosuje inną technikę pakowania chipów do obudów. Zamiast klasycznej formy łączenia przy pomocy cienkich drutów (Bonding), płytka półprzewodnikowa osadzana jest na matrycy punktów lutowniczych (Flip Chip - Techniką tą pakowane są również
procesory AMD K6 oraz najnowsze modele procesorów Intel, począwszy od Pentium Il/450MHz).To skrócenie wyprowadzeń (zredukowanie indukcyjności i zmniejszenie przesłuchów międzypołączeniowych) pozwala na podniesienie częstotliwości taktowania.
Architektura M2 uległa oczywiście istotnym modyfikacjom. Wspomnieć należy o przerobionej jednostce zarządzania pamięcią (MMU). Bardzo interesująca jest dwustopniowa architektura TLB (Transaction Look-Aside Buffer). Pierwszy poziom (TLB 1) zawiera 16 rekordów z odwołaniami do tablicy drugiego poziomu (TLB 2) o 384 wierszach.
Tabela 1.15.
Podstawowe dane procesorów Cyrix M2 (PR-166; PR-200 ; PR-233; P R- 266 ,PR-300,M2-300; M2-333; M2-350; MX-400MII-400; MII-433)
Architektura; x86 MMX Native
Technologia; 0.25 mikrometra
Zegar CPU [ MHz]; 133/150; 166; 188/200; 233/225/208; 250; 250; 285; 300
Magistrala [MHz]; 66/60; 75/66; 75/66; 66/75/83; 83; 100; 95; 100
Mnożnik (BF); x2/x2.5; x2/x2,5; x2/x3; x3,5/x3/x2,5; x3; x2,5; x3; x3
L1 Cache (kod); 64 kB Unified Cache (Code+Data). 4x Associative. 2 048 Lines. Write Back for Data. 256 Byte Instruction Linę Cache (8 Lines)
L1 Cache (dane); 64 kB Unified Cache (Code+Data). 4x Associative. 2 048 Lines. Write Back for Data. 256 Byte Instruction Linę Cache (8 Lines)
L2 Cache on Chip; x
Pipe-Lines; 2 (+1 FPU)
Pipe-Line Stages; 7
Ont of Order Execution; -
Branch History Table; 1024
TLB; Code/Data Cache TLB: 16 Entries Direct Mapped L2 TLB: 64x6
Branch Target Buffer; 512
V#CORE[V]; 2.9(odPR-166do M2-350); 2.2(reszta);
V#IO[V}; 3.3
Pobór mocy [W]; 10,6/11,4; 12,1; 13,1/13,7; 12,5/13.0; 14,0; - ; 11,1; 12,0
Return Stack; 8
Renaming Registers; (8 + 24)
Performance Monitoring; -
Time Stamp Counter; -
Podstawka; Socket 7. P54C Socket Super 7
M2 jest typowym przedstawicielem klasy CISC bowiem przetwarza naturalne rozkazy x86. Praca odbywa się w dwóch potokach a centralny system sterowania czuwa nad stałym ich napełnianiem przesyłając partie kodu poza kolejnością (Out-of-Order Com-pletion, Speculative Executiori). Zależności usuwane są poprzez przemianowywanie rejestrów ( Oprócz 8 standardowych rejestrów architektury \86 do dyspozycji stoją 24 dodatkowe rejestry 32 bitowe.), a dodatkowe przyspieszanie osiąga się poprzez wczesne udostępnianie danych.
Procesory Intel
Rodzina Pentium
Procesory tej rodziny stanowią bardzo liczną grupę. Pierwsze modele - od dawna nieobecne na rynku - zasilane napięciem 5 V osiągały częstotliwość do 66 MHz. Kolejna grupa (oznaczana symbolem P54C) pracowała już przy zasilaniu 3,3 V a częstotliwość taktowania jądra procesora sięgała 200 MHz.
Jakkolwiek rejestry dostępne programowo są 32 bitowe, wewnętrzne ścieżki mają 128, a nawet 256 bitów szerokości. Przyczynia się to z pewnością do zwiększenia prędkości wewnętrznych transferów.
Cechy architektury pozwalają zaliczyć Pentium do grupy CISC. Jądro procesora jest superskalarne i wyposażone w dwa potoki przetwarzające instrukcje stałoprzecinkowe oraz jednostkę zmiennoprzecinkową. Jeśli spełnione są wymogi narzucone przez mechanizm parowania, procesor przetwarza w każdym cyklu zegarowym dwie instrukcje: każdy z potoków (U i V) kompletuje po jednej z nich. Należy jednak podkreślić iż potoki są bardzo silnie ze sobą powiązane i pracują wyłącznie w trybie synchronicznym. Żaden z nich nie może wybiegać naprzód w procesie przetwarzania. Jakiekolwiek zahamowanie w jednej z linii powoduje natychmiastowe zatrzymanie drugiego potoku.
Tabela 1.16.
Podstawowe dane procesorów Intel Pentium (75; 90; 100; 120; i33; 150; 166; 200)
Architektura; x86 Native
Zegar CPU [MHz] ; 75; 90; 100; 120; 133; 150; 166; 200
Magistrala [MH:]; 50; 60; 66/50; 60; 66; 60; 66; 66
Mnożnik (BF); xl,5; xl,5; xl,5/x2; x2; x2; x2,5; x2.5; x3
L1 Cache (kod); 8 kB. 4x Associative
L1 Cache (dane); 8 kB. 4x Associative, WB. MESI
L2 Cache on Chip; x
Pipe-Lines; 2 (+FP)
Pipe-Line Stages; 5 (FP: 8)
Out of Order Execution; x
Branch Target Buffer; 256
V#CORE [V]; V#IO [V]; 3.3; 3.3; 3.3; 3.3; 3,3; 3.3; 3,3; 3.3
Pobór mocy [W]; 8,0; 9,0; 10,1; 12,8; 11,2; 11,6; 14,5; 15,5
Return Stack; x
Renaming Registers; X
Performance Monitoring; -
Time Stamp Counter; -
Podstawka; Socket 7
Procesor posiada dynamiczny system przepowiadania rozgałęzień. Bufor BTB mieści 256 rekordów i zorganizowany jest w systemie poczwórnej asocjacji. Strata czasu, którą ponosi procesor w wypadku błędnej przepowiedni wynosi od 3 do 4 cykli zegarowych.
Pamięć podręczna danych (Data Cache) pracuje w bardzo efektywnym trybie WB (Write Back} ale dla zachowania zgodności z procesorami 486 może dać się przełączyć na tryb WT (Write Through). W jej skład wchodzi 8 banków, każdy po 32 linijki. Jedna linijka ma wymiar 32 bajtów. Cache jest dwuportowy i może być udostępniany równolegle dla potrzeb U i V. jeśli tylko odwołania odnoszą się do różnych banków. Próba jednoczesnego dostępu do danych złożonych w tym samym banku kończy się przyznaniem pierwszeństwa U. Potok V zmuszony jest do oczekiwania przez czas trwania jednego cyklu zegarowego.
Pamięć podręczna kodu jest dwudrożna (2-Way Set) i zorganizowana w 8 banków. Również w tym przypadku rozmiar linijki wynosi 32 bajty.
Pentium przygotowany jest do pracy w systemach wieloprocesorowych a konkretnie w parze z drugim identycznym procesorem (Dual System). Dla potrzeb takiej konfiguracji dodany został kontroler APIC (Advanced Programmable Interrupt Controller) oraz kilka dodatkowych końcówek sterujących a pamięć podręczna danych sygnalizuje swój stan zgodnie z protokołem MESI.
Pentium MMX
Dalsze rozwinięcie rodziny Pentium stanowią modele z rozszerzeniem multimedialnym MMX. Procesory tego typu opisane są bardziej szczegółowo w oddzielnym rozdziale tej książki.
Oprócz zmian spowodowanych wprowadzeniem potoku przetwarzającego MMX, powiększone zostały rozmiary pamięci podręcznych kodu i danych: z 8 do 16 kB. Cechą charakterystyczną procesorów Intel Pentium MMX jest podwójne napięcie zasilające (począwszy od wersji 166). Układy odpowiedzialne za współpracę z magistralami wejśćia-wyjśćia (Input/Output) zasilane są innym napięciem niż rdzeń obliczeniowy (CPU Cór e).
Tabela 1.17.
Podstawowe dane procesorów Intel Pentium MMX (150; 166; 200; 233)
Architektura; x86 MMX Native
Zegar CPU [MHz]; 150; 166; 200; 233
Magistrala [MHz]; 60; 66; 66; 66
Mnożnik (BF); x2,5; x2.5; x3; xl,5
L1 Cache (kod); 16 kB, 4x Associative
L1 Cache (dane); 16 kB. 4x Associative. WB
L2 Cache on Chip; x
Pipe-Lines; 2
Pipe-Line Stages; 6(FP:8)
Out of Order Executionx; x
Branch Histoiy Table; 256
TLB; Code Cache TLB: 32 Entries Data Cache TLB: 64 Entries L2 TLB: -
Branch Target Buffer; 256;
V#CORE [V]; 3,3; 2,8; 2,8 V#IO [V]; 2,8; 3,3; 3.3; 3,3
Pobór mocy, max. [W]; 11,6; 13.1; 15,7; 18
Return Stack; 4
Renaming Registers; x
Performance Monitoring; -
Time Stamp Counter; -
Podstawka; Socket 7
Pentium Pro
Procesor zaprezentowany został po raz pierwszy szerokiej publiczności w roku 1995 i chociaż taktowany był jedynie częstotliwością 133 MHz już wtedy osiągał wydajność prawie dwukrotnie większą od Pentium 133 (ok. 200 SPECint). Ten ogromny przyrost mocy obliczeniowej spowodowany został gruntowną przebudową architektury (RISC), w tym sięgnięciem do rozwiązań stosowanych w dużych komputerach. Pentium Pro dobrze nadaje się do pracy w systemach wieloprocesorowych bowiem dysponuje zestawem sygnałów sterujących zdolnych do zapewnienia harmonijnej współpracy czterech procesorów tego samego typu. Obszar pamięci pokrywany przez L2 (Cacheable Area] przekracza barierę 512 MB co pozwalał na stosowanie procesora w dużych (jak na owe czasy) serwerach.
Pentium Pro jest przede wszystkim procesorem superskalarnym zdolnym do finalizowania więcej niż jednej instrukcji w jednym cyklu zegarowym (w korzystnych warunkach są to trzy instrukcje). Jądro jego nie przetwarza jednak instrukcji x86 w formie bezpośredniej; są one zamieniane w układach dekodera na małe elementy zwane mikroopera-cjami (/jOps).
Procesor dysponuje czterema obwodami dekodującymi, które uruchamia się w zależności od stopnia komplikacji materiału wejściowego. Do dyspozycji stoi jeden dekoder główny ogólnego przeznaczenia (General Decoder), dwa proste (Simple Decoder) dla krótkich instrukcji jak np. przesłania między rej estrowe oraz jeden sekwencer (pOps Sec/iiencer) wywoływany w razie napotkania długich i skomplikowanych instrukcji IA (Intel Architecture) Termin IA używany jest w odniesieniu do instrukcji x86. Występuje często w literaturze, zwłaszcza czerpiącej swe źródła z firmy Intel.
Tabela 1.18.
Podstawowe dane procesorów Intel Pentium Pron (166-512; 180-256; 200-256; 200-512)
Architektura RISC
Zegar CPU [MHz]; 166; 180; 200; 200;
Magistrala [MHz]; 66; 60; 66; 66
Mnożnik (BF); x2,5; x3; x3; x3
L1 Cache (kod); 8 kB, 4x Associative
L1 Cache (dane); 8 kB. 4x Associative. WB
12 Cache on Chip (CPU Clock); 512{4x Ass.); 256 (4x Ass.); 256 (4x Ass.); 512 (4x Ass.)
Pipe-Lines; 5
Pipe-Line Stages; 14(FP: 16)
Ont of Order Execution; (40)
Branch Target Buffer; 512
V#1,2 [V]; 3.3
V#CORE[V]; V#IO [V]; 3,3; 3,3; 3,3; 3,3
Pobór mocy, typ. [W]; 27,5; 24,8; 27,3; 32,6
Return Stack; 4
Renaming Registers; 8 + 32
Performance Monitoring; -
Time Stamp Counter; -
Podstawka; Socket 8
* System niezgodny z Pentium
Proces dekodowania odbywa się zawsze zgodnie z kolejnością napływania instrukcji, tj. taką w jakiej występują one
w programie. Większość rozkazów rozwija się do l do 4 "mi"Ops. Blok dekodera może w sprzyjających warunkach
(odpowiednia ilość rozkazów pobrana została z pamięci i czeka w kolejce rozkazowej) przetworzyć do trzech
instrukcji x86 w jednym cyklu zegarowych: po jednej z każdego z prostych dekoderów i jednej z dekodera ogólnego
przeznaczenia.
Wewnętrzna struktura uOps jest stała. Każdy z nich ma stałą długość równą 118 bitów i składa się z czterech pól
o następującym znaczeniu: operator, źródło pierwsze, źródło drugie, cel.
Wytwarzane w dekoderze mikrorozkazy lądują w buforze ROB (Reorder Buffer}. W jednym cyklu zegarowym
może być tam umieszczone do sześciu fiOps. W sumie bufor jest w stanie przyjąć do 40 mikrokodów. ROB stanowi
centralny punkt koordy-
nacji dla wszystkich aktualnie przetwarzanych rozkazów (Instruction Poof), również tych wykonywanych poza kolejnością (Speculative Executiori). Zapamiętywane są więc wszelkie wyniki pośrednie i towarzyszące im stany rejestrów flagowych procesora. RÓB odpowiedzialny jest również za rozwiązywanie uzależnień instrukcji: do tego celu służy zestaw 40 rejestrów RAT (Register Alias Table\ które są podstawiane w miejsce klasycznych rejestrów RRF ogólnego przeznaczenia (Real Register File). System przydziału rejestrów obsługuje w jednym cyklu zegarowym do 3 mikroinstrukcji. Tak wyposażone, lądują w specjalnej kolejce (Reservation Station).
Kolejka grupuje do 20 mikrooperacji, które oczekują na skompletowanie swoich ope-randów. Skoro tylko to nastąpi, system oznacza je jako gotowe i kieruje do realizacji do właściwej jednostki wykonawczej. Szybkość przetwarzania poszczególnych jednostek jest bardzo zróżnicowana. Bloki operujące na liczbach całkowitych realizują większość rozkazów w jednym cyklu zegarowym. Mnożenia pochłaniają jednak aż cztery takty (dla porównania, Pentium: 7 - 14) a dzielenia od 12 do 36 (Pentium: 42 - 84). W przypadku jednostek zmiennoprzecinkowych różnice nie są aż tak drastyczne: dodawanie zajmuje 3 takty (tyle co w Pentium) a mnożenie przebiega o dwa takty szybciej. Dzielenie zajmuje Pentium Pro od 18 do 38 taktów zegara a Pentium 39.
Jednostki generowania adresów (Load/Store) zużywają tylko jeden cykl zegara, gdyż wszelkie typy adresowania x86 rozwiązywane są poprzez sprzętowe układy sumatorów. Jednostki te wytwarzają adresy dla mikrorozkazów, które komunikują się z pamięcią. "mi"Ops tego rodzaju przesyłane są do MOB (Memory reOrder Buffer), gdzie oczekują na wolny kanał przesyłowy do pamięci podręcznej L2.
Potoki przetwarzające Pentium Pro są wielostopniowe. Rozkazy, które nie odwołują się do pamięci opuszczają potok nie wcześniej jak po 12 cyklach zegara, te które pobierają z pamięci dane potrzebują sześciu taktów dodatkowych. Wszelkie zakłócenia w pracy (wystąpienie wyjątku typu dzielenie przez zero, źle przepowiedziane rozgałęzienie itp.) powodują spore opóźnienia. Cała skomplikowana maszyna obliczeniowa musi zostać oczyszczona z wyników pośrednich a potoki napełnione nową treścią. Nic więc dziwnego, że projektanci włożyli sporo wysiłku w wyeliminowanie takich sytuacji. Pentium Pro wyposażony został w specjalne układy śledzące wykonanie programu. Technika określana mianem Dynamie Execution obejmuje analizę programu pod kątem przebiegu i przepływu danych i stara się obrać optymalną kolejność wykonania instrukcji.
Skomplikowany system przepowiadania rozgałęzień (Branch Prediction Unii) pracuje w oparciu o 512 wierszową (dwukrotnie więcej niż w Pentium) tablicę BTB (Branch Target Buffer}. Zapamiętywane są również skomplikowane sekwencje rozgałęzień (pętle zagnieżdżone). BTB używa odmiany tzw. algorytmu Yeh.
Żaden z nowoczesnych procesorów nie może się obejść bez pamięci podręcznej. Główna siła Pentium Pro to duża i szybka (taktowana z częstotliwością zegara CPU) pamięć podręczna L2, wspólna dla danych i kodu. Pamięć ta zorganizowana jest w linijki o rozmiarze 32 bajtów (poczwórna asocjacja). Napełnienie linijki odbywa się w trakcie 4 cykli zegarowych bowiem szerokość magistrali wynosi 64 bity.
Na pamięć poziomu pierwszego składają się dwa niezależne bloki L1: dla danych i dla kodu. Rozmiary obydwu z nich wynoszą po 8 kB, a każdy pracuje w oparciu o linijki 32 bajtowe. LI dla danych zorganizowana jest w formie dwóch banków (podwójna asocjacja) o dostępie 64 bitowym. Pamięć podręczna dla kodu (poczwórna asocjacja) pracuje w oparciu o jeden bank dostępny poprzez magistralę 128 bitową.
W pełni zakończone operacje przechodzą do tzw. fazy spoczynkowej (Retirement) co oznacza usunięcie składników "mi"Ops z bufora ROB i ustanowienie nieodwracalnych zmian w lokalizacjach pamięciowych opisanych przez instrukcję x86.
Pentium II
Pentium II stanowi następcę procesora Pentium Pro i jako pierwszy przełamuje barierę 200 MHz. Początkowo wprowadzone na rynek zostają modele taktowane zegarem 233 MHz, w ślad za nim postępują egzemplarze 266 i 300 MHz. Linia Pentium II była rozwijana do częstotliwości 450 MHz. Nowe opracowanie przewyższało pod wieloma względami swoich poprzedników, ale też nie stanowiło szczytu wykorzystania aktualnych możliwości technicznych.
Wyizolowanieze struktury procesora pamięci podręcznej drugiego poziomu (Second Level Cache) stanowi według powszechnej opinii krok wstecz w rozwoju. Posunięcie takie podyktowane zostało jednak dobrze przemyślanymi względami ekonomicznymi. Struktura scalona o tak ogromnym stopniu integracji i komplikacji jak Pentium Pro (zanurzone w jednej obudowie dwa potężne układy scalone: CPU i blok pamięci podręcznej, zależnie od wersji 256 kB lub 512 kB) była niezmiernie podatna na uszkodzenia, szczególnie w fazie drutowania ( Wykonywane przez automaty połączenia (zwykle złotym drutem) między polami na płytce krzemowej a wewnętrznymi stykami obudowy układu scalonego. Operacja stanowi jedną z najniebezpieczniejszych faz procesu produkcyjnego, w której powstaje najwięcej odpadów.)
Duży odrzut niesprawnych jednostek Pentium Pro (czy to ze względu na błąd w bloku pamięci, czy to na wadliwy procesor) podrażał ogromnie koszty produkcji poprzednika Pentium II.
Usytuowanie pamięci podręcznej L2 tak blisko CPU podyktowane było również wymogami szybkiej wymiany danych w systemach wieloprocesorowych. Pentium II może być wykorzystywany w systemach wieloprocesorowych (najwyżej dwuprocesorowych - dual). Dużo większa pod tym względem podatność techniki Pentium Pro na pracę w środowisku wieloprocesorowym (do czterech procesorów) nie okazała się przeważającym argumentem dla powszechnego użytkownika - procentowa obecność systemów tego rodzaju pozostała po dziś dzień marginalna.
Całkowite odsunięcie pamięci podręcznej od procesora i jej powrót na płytę główną byłoby jednak cofnięciem się zbyt daleko wstecz. Sięgnięto więc po rozwiązanie kompromisowe i skonstruowano moduł hybrydowy (rysunek 1.36).
Procesor rezyduje teraz wraz dwoma układami pamięciowymi na specjalnej karcie. Kontakt z płytą główną zapewnia listwa o 242 kontaktach. Z płyty głównej procesora Pentium II znika więc charakterystyczna do tej pory kwadratowa podstawka (Socket 7), a jej miejsce zajmuje złącze krawędziowe określane mianem Slot 1.
Jądro procesora Pentium II przejęte zostało w dużym stopniu z Pentium Pro a ponadto wzbogacone o rozszerzenia multimedialne przeniesione z procesora Pentium MMX. Pamięć podręczna pierwszego poziomu ma wymiar 32 kB (po 16 kB dla kodu programu i dla danych). Wewnętrzna magistrala komunikacyjna ma szerokość 300 bitów. Procesor może działać w przestrzeni adresowej do 64 GB (wirtualnie do 64 TB). Struktura krzemowa pierwszej generacji procesorów wykonywana była w technologii 0,35 fam i zawierała około 7,5 miliona tranzystorów (nazwa robocza Klamath). Zasilanie odbywało się z pojedynczego źródła 2,8 V przy poborze prądu około 13 A, a maksymalna częstotliwość zegara sięgała 300 MHz. Opanowanie technologii 0,25 um pozwoliło na podniesienie częstotliwości roboczej powyżej 333 MHz. Struktury tego typu określane już były mianem Deschutes. Model 333 pracował jeszcze z szyną 66 MHz a następne (od 350 wzwyż) przystosowane zostały do pracy z magistralą 100 MHz.
Twórcy architektury Pentium Pro skupiali swe wysiłki na optymalizacji pracy w środowisku 64-bitowym. Procesor ten był co prawda kompatybilny z kodem x86 ale w środowisku 16-bitowyin zachowywał się gorzej od Pentium. Pentium Pro pracuje nad wykonaniem rozkazu LES Di, [memory] przez 20 taktów zegara. Dla Pentium II potrzeba w najgorszym razie 11 taktów a w razie trafienia w pamięci cache wystarczy nawet jeden takt. Intel chciał oczywiście sprzedawać swój nowy procesor także użytkownikom Windows 3.x, których w momencie wprowadzenia na rynek Pentium II, było jeszcze sporo. Dla pozyskania większej ich rzeszy, Pentium II wyposażony zostaje w specjalną pamięć podręczną dla rejestrów segmentowych (Segment Register Cache).
Osadzona na module hybrydowym procesora Pentium II pamięć L2 jest typu BSRAM (Burst Cache) a jej organizacja przybierała różne formy. W początkowej fazie do obiegu wprowadzano zarówno modele z 512 kB jak i 256 kB cache. W wersji 512 kB stosowane były cztery chipy pamięciowe (rozmieszczane symetrycznie po dwa na każdej stronie modułu procesora). Dodatkowy piąty chip przejmował funkcje oznacznika (Tag-RAM). Aktualnie wytwarzane modele 450 MHz stosują tylko dwie kostki pamięci o czasie dostępu 4,4 ns (zwykle Samsung SEC-KM736Y604MT-44) umieszczane asymetrycznie po prawej stronie struktury CPU. Z tyłu modułu osadzony jest kontroler pamięci podręcznej L2 (Intel S82459AD).
Pentium II jest przystosowany do pracy w systemach wieloprocesorowych, z tym że przedrostka wielo nie należy rozumieć zbyt dosadnie (maksymalnie 2 procesory). Kto ma większe wymagania musi sięgnąć po procesor Xeon. Członkowie rodziny Celeron i Mendocino są zdolne wyłącznie do samodzielnej pracy.( Dokładnie rzecz biorąc same struktury półprzewodnikowe Celeron/Mendocino mają komplet niezbędnych funkcji, bowiem nigdy nie zostały ich pozbawione. Brak jest jedynie pewnych połączeń do wyprowadzeń obudowy. Przepisy na ich uzupełnienie można znaleźć w Internecie.).
Polityka taka ma na celu ochronę rynku systemów wieloprocesorowych (na którym wciąż można wiele zarabiać) przed zalewem tanich procesorów.
Pamięć podręczna L2 w Pentium Pro - ze względu na bliskość lokalizacji - była taktowana wprost zegarem CPU. Dla zewnętrznej pamięci podręcznej Pentium II tak wysoka prędkość jest nie do przyjęcia. Dostęp do L2 odbywa się z częstotliwością równą połowie taktu zegara procesora. Szybszy dostęp nie jest możliwy ze względu na fizyczne rozmiary (a co za tym idzie impedancje własne) ścieżek drukowanych stanowiących doprowadzenia do modułu L2. Ograniczenie to stanowi poważny czynnik obniżający wydajność całego systemu. Lepsza organizacja L2 i jej stosunkowo duży rozmiar mają przynajmniej w pewnym stopniu rekompensować ten szkodliwy wpływ. W porównaniu z częstotliwością taktowania L2 w klasycznym Pentium (66 MHz niezależnie od odmiany procesora) 225 MHz osiągane w modelu Pentium 11/450 jest i tak nie do pogardzenia.
W ślad za kolejnymi modelami procesorów Pentium II postępują następne generacje układów scalonych otoczenia procesora (Chip-Set). W roku 1997 wprowadzono na rynek zestaw oznaczony symbolem 440LX. Został on specjalnie zaprojektowany dla procesora Pentium II a jego najbardziej charakterystyczną cechą jest obsługa pamięci typu SDRAM, mimo iż nadal z częstotliwością 66 MHz. Podwyższenie zewnętrznej częstotliwości taktującej do 100 MHz osiąga kolejna generacja układów (440BX) dedykowana strukturom krzemowym wykonywanym w technologii 0,25 um (Deschutes).
Wersje 450 MHz procesora zostały nieco zmienione. Zmniejszeniu uległ znacznie rozmiar samej struktury półprzewodnikowej. Układy montowane są ponadto w nowej, opracowanej przez IBM (i stosowanej w procesorach M-II-300) technice łączenia znanej jako Flip-Chip. Oznacza to rezygnację z połączeń struktury z płytką nośną za pomocą złotych drutów (Bonding). Sam chip leży "na plecach" a kontakt z podłożem osiąga się bezpośrednio przy pomocy sieci miniaturowych punktów lutowniczych. Dzięki skróceniu drogi sygnałów można uzyskać dalszy wzrost częstotliwości taktującej. Tak forma montażu poprawia również parametry termiczne, bowiem dno struktury krzemowej wystaje teraz lekko z obudowy. Ciepło odprowadza się więc bezpośrednio z punktu gdzie powstaje.
Tabela 1.19.
Podstawowe dane procesorów Intel Pentium II (Klamath) (233*; 266*; 300)
Architektura; RISC
Technologia;0,35 um
Zegar CPU [MHz]; 233; 266; 300
Magistrala [MH=]; 66; 66; 66
Mnożnik (BF); x3,5; x4; x4.5
L1 Cache (kod); 16 kB. 4x Associative
L1 Cache (dane); 16 kB. 4x Associative. WB
L2 Cache (12 CPU Clock); 512; 512; 512
Pipe-Lines; 7
Pipe-Line Stages; 12(FP: 16)
Out oj Order Execution; /
Branch History labie ;512
Branch Target Buffer; 512
V#1,2 [V]; 3.3; 3,3; 3.3
V#CORE [V]; 2.8; 2,8; 2.8
V#IO(GTL) [V]; 3.3; 3.3; 3.3
I#(CORE)typ./max. [A]; 6,9 / 11,8; 7,87/12,7; 8,7/14,2
Return Stack; 4
Renaming Registers; 8 + 32
Performance Monitoring; -
Time S tam p Counter; -
Podstawka; Slot 1
W początkowej fazie wprowadzania na rynku były obecne modele wyposażone zarówno w 256 kB jak i w 512 kB pamięci podręcznej L2. System niezgodny z Pentium
Architektura Pentium II jest bardzo podobna do Pentium Pro - oba procesory należą do tej samej rodziny P6. Przetwarzanie odbywa się w trzech równoległych dwunastostop-niowych potokach. Jądro procesora pracuje w klasycznym układzie typu RISC: instrukcje IA rozkładane są na proste mikrooperacje i grupowane w centralnym zbiorniku instrukcji (Instruction Pool). Nie ma tutaj miejsca mocno zarysowany w architekturach innego typu podział na fazy pobierania (Fetch) i wykonywania (Execute).
Tabela 1.20.
Podstawowe dane procesorów Intel Pentium II (Deschutes) (333; 350; 400; 450;)
Architektura; RISC
Technologia; 0.25 urn
Zegar CPU [MHz]; 333; 350; 400; 450
Magistrala [MHz]; 66; 100; 100; 100
Mnożnik (BF); x5; x3,5; x4; x4,5
L1 Cache (kod); 16 kB. 4x Associative
L1 Cache (dane); 16 kB. 4x Associative. WB
L2 Cache (J/2 CPU Clock); 512; 512; 512; 512
Cacheable Area; 4 GB
Pipe-Lines; 7
Pipę- Linę Stages; 12 (FP: 16)
On t of Order Execution; -
Branch Histoiy Table; 512
Branch Target Buffer; 512
'V#1,2 [V]; 3.3; 3.3; 3.3; 3.3
V#CORE [V]; 2.0 ; 2.0; 2.0; 2.0
V#IO(GTL) [V]; 3.3; 3.3; 3.3; 3.3
I#(CORE)typ./max. [A] ; 9.3; 10.8; 12.6; -
Return Stack; 4
Renaming Registers; 8 + 32
P er form ance Monitoring; -
Time Stamp Counter; -
Podstawka; Slot 1
System niezgodny z Pentium
Dzięki istnieniu zbiornika instrukcji, pobieranie kolejnych kodów x86 z pamięci operacyjnej jest niezależne od ich wykonywania. Ważne jest jedynie by zbiornik był stale napełniony. Czuwa nad tym zestaw bardzo wydajnych dekoderów rozkładających kody IA na wewnętrzne mikrokody RISC. W trakcie przebywania w zbiorniku kompletowane są argumenty instrukcji oraz przydzielane rejestry zastępcze, jeśli stwierdzono uzależnienia.
W ścisłym związku ze zbiornikiem centralnym pozostaje układ dyspozytora (Dispatcher], który steruje wypływem kompletnych mi kro instrukcji kierując je do właściwych jednostek wykonawczych (Execute). Kolejność przetwarzania kodów RISC pozostaje w bardzo
luźnym związku z pojawianiem się ich odpowiedników w kodzie programu. Tylko w ten sposób osiągnąć można ogromną wydajność takiego procesora. Dyspozytor kieruje do wykonania te mikrokody, które aktualnie nie czekają na żadne wyniki pośrednie z innych operacji. Również konieczność oczekiwania na wyniki instrukcji warunkowych nie hamuje procesu przetwarzania.
Wykonane instrukcje RISC kierowane są z powrotem do zbiornika. Postępowanie takie jest konieczne bowiem znaczna część z nich wykonywana została jedynie w wyniku przypuszczalnie przewidywanego biegu programu. Powrót do zbiornika gwarantuje również ich ponowne uszeregowanie, zgodne z pozycją zajmowaną w kodzie źródłowym. Instrukcja uznana za wykonaną opuszcza zbiornik i przechodzi w fazę spoczynkową (Retire) a wyniki jej działania są utrwalane. Dopiero teraz mają więc miejsce wszelkie zapisy do pamięci.
Celeron
CPU o tej nazwie jest odmianą Pentium II wykonywaną w nowoczesnej technologii 0,25 (im (Deschutes). Ponieważ od początku przeznaczony był na rynek powszechnego użytkownika (Lo\v End) stał się ofiarą zabiegów oszczędnościowych. Do najpoważniejszych z nich należy zaliczyć pozbawienie procesora modułu pamięci podręcznej L2. Oszczędności dotyczyła również konstrukcji mechanicznej - brak obudowy i prowadnic oraz zmodyfikowany radiator.
Tabela 1.21.
Podstawowe dane procesorów Intel Pentium II (Celeron) ( 266; 300)
Architektura; RISC
Technologia; 0,25 nm
Zegar CPU [MHz]; 266; 300
Magistrala [MHz]; 66; 66
Mnożnik (BF); x4; x4.5
L1 Cache (kod); 16 kB, 4x Associative
L1 Cache (dane); 16 kB. 4x Associative, WB
12 Cache; x
Pipę- Lines; 7
Pipe-Line Stages; 12 (FP: 16)
Out oj Order Execution; -
Branch History Table; 512
Branch Target Buffer; 512
C#CPU [V]; 2.0; 2.0
V$IO [V]; 3,3; 3.3
Pobór mocy, max. [W]; 16.6; 18.4
Return Stack 4
Renaming Registers; 8 + 32
Time Stamp Counter; -
Podstawka; Slot 1
Aby rachunek ekonomiczny w odniesieniu do całego komputera nie uległ zachwianiu, do taniego (stosunkowo) procesora opracowano odpowiednio dobrany cenowo zestaw układów otoczenia (Chip-Set) oznaczany jako 440EX, który zgodny był na poziomie końcówek z klasycznym zestawem 440LX. Lista wprowadzonych oszczędności była tutaj jeszcze bogatsza niż w przypadku samego procesora:
Brak kontrolera pamięci podręcznej, co uniemożliwia ewentualne uzupełnienie nawet na płycie głównej brakującego L2.
Brak możliwości realizacji trybu kontroli ECC w pamięci operacyjnej.
Maksymalna liczba gniazd PCI zredukowana została do 3 (440LX może ich mieć 5).
Maksymalna liczba możliwych do zainstalowania podstawek DIMM wynosi 2.
Brak możliwości pracy wieloprocesorowej (tryb Single)
Stopień w jakim odczuwalny jest brak pamięci podręcznej L2 zależy w dużej mierze od aktualnie wykonywanej aplikacji. Nowoczesne programy budowane są w sposób niezmiernie kompleksowy i zawierają rozległe partie kodu, które z pewnością nie mieszczą się w pamięci podręcznej L1. Celeron nie ma w tym wypadku szansy w pojedynku z pełnowymiarowym procesorem Pentium II. Klasyczne aplikacje biurowe nie potrzebują jednak aż takiej mocy obliczeniowej i wykonują się tak samo szybko na procesorze AMD czy IBM ale za to za pół ceny. Tutaj nie jest wymagany ani Celeron ani tym bardziej Pentium II.
Powyższe proporcje ulegają zmianie w konkurencji gier komputerowych. Aplikacje tego rodzaju były zawsze pisane (ze względu na szybkość) w formie zwięzłych procedur, tak iż ich przeważająca część mieści się w pamięci podręcznej L1, a brak L2 nie jest aż tak bolesny. Jednak i w tej dziedzinie obserwuje się trend w kierunku komplikacji i rozrostów. Pomiary współczynnika trafienia w L1 przeprowadzane na grach "starszej generacji" (na przykład Cjuake) wykazują jeszcze dużą zwięzłość kodu (liczba trafień 99 %). Ten sam pomiar wykonany w trakcie przebiegu G-Police wykazuje już 95 %. Współczynnik spada aż do 88 % podczas demonstracji bogatej w szczegóły scenerii X-Demo. Przewaga szybkiego jądra procesora Celeron będzie więc stopniowo maleć i ustępować miejsca wpływom powstałym w wyniku braku L2.
Celeron A (Mendocino)
Celeron pozbawiony L2 źle przyjął się wśród użytkowników. Jego wydajność leżała często poniżej procesorów z rodziny Socket 7. By nie utracić udziałów na rynku, firma Intel została zmuszona do zrewidowania swojej polityki obniżania kosztów za wszelką cenę.
Mendocino to określenie identyfikujące w zasadzie samą strukturę krzemową. Jest ona nieznacznie większa od umieszczanej w procesorach Celeron. Nazwa handlowa nowych odmian CPU brzmi jednak Celeron 300A i Celeron xxx (xxx = 333, 366, 400, 433, 466, 500). Wyposażone są one w zintegrowaną pamięć podręczną L2 o rozmiarze 128 kB. Aby stosunkowo mała pamięć podręczna L2 nie stała się "uchem igielnym" na drodze strumienia danych, taktowana jest ona bezpośrednio zegarem procesora (300, a nawet 500 MHz) czyli tak samo szybko jak pamięć podręczna L1. Pamięć L2 Mendocino pracuje jednak, w przeciwieństwie do "pełno wymiarowego" Pentium II w trybie WT (Write ThrougH), co oznacza w praktyce lekki spadek wydajności. W większości klasycznych zastosować (aplikacje biurowe) Mendocino xxx jest szybszy i co nie mniej ważne zdecydowanie tańszy od swego odpowiednika Pentium II xxx.
Nie wolno zapominać, iż Mendocino współpracuje z magistralą zewnętrzną FSB 66 MHz a mnożnik częstotliwości kodowany jest na stałe jeszcze w cyklu produkcyjnym (odpowiednio x4,5 do x7,5). Podłączenie do magistrali 100 MHz zmusza procesor do pracy z częstotliwością, do której nie jest stworzony. Panuje opinia, że niektóre modele 300 MHz świetnie znoszą takie zabiegi i pracują z częstotliwością 450 MHz, będąc przy tym porównywalne z kilkukrotnie droższymi procesorami Pentium II, a nawet Pentium III. Eksperymenty autora przeprowadzone na stosunkowo dużej liczbie procesorów nie
potwierdzają tej opinii. Odpowiednio dobrane programy testujące, które symulują wielogodzinne 100 % obciążenie procesora, zmuszają go w pewnym momencie do kapitulacji i komputer zawiesza się. Prawdopodobieństwo nagłego przerwania pracy systemu przetwarzającego zwykłe aplikacje jest niewielkie, ale istnieje. Komu nie przeszkadza świadomość tego niebezpieczeństwa, może sobie na to pozwolić.
Tabela 1.22.
Podstawowe dane procesorów Intel Pentium 11 (Celeron A/Mendocino) (300A; 333; 366; 400; 433; 466;
500)
Architektura; RISC
Technologia; 0,25 um
Zegar CPU [MHz]; 300; 333; 366; 400; 433; 466;500
Magistrala [MHz]; 66
Mnożnik (BF); x4,5; x5; x5,5; x6; x6,5; x7; x7,5
L1 Cache (kod); 16 kB
L 1 Cache (dane); 16 kB
12 Cache (CPU Clock); 128 kB
Pipe-Lines; 7
Pipę- Linę Stages; 12 (FP: 16)
Out of Order Execution; -
Branch History Table; 512
Branch Target Buffer; 512
V#CORE [V]; 2,0
V#IO [V]; 3,3
Pobór mocy, max. [W] (Slot 1); 18,4; 20,2; 22,2; 24,2; 24,6; -; -;
Pobór mocy, max. [W] (PPGA); 17,8; 19,7; 21,7; 23,7; 24,1; 25,6; 27,0
Return Stack; 4
Renaming Registers; 8 + 32
Performance Monitoring; -
Time Stamp Counter; -
Podstawka; Slot 1 / PGA370 (300A do 433); PGA370 (dalsze)
* System niezgodny z Pentium
Pentium II Xenon
Procesor oznaczany tym kryptonimem wprowadzony został na rynek równo w połowie 1998. Przeznaczony był dla serwerów i wysokowydajnych stacji roboczych. Jądro procesora stanowi wprawdzie struktura Deschutes ale całość poddana została szeregowi zabiegów unowocześniających:
Pamięć podręczna L2 zbudowana jest z modułów typu CSRAM (opracowanie Intela), które w odróżnieniu od dotychczasowych układów (PBRAM) zdolne są do pracy z pełną częstotliwością zegarową procesora. Rozmiar pamięci L2 może
sięgać do 2 MB.
Zachowana jest zgodność programowa z jednostką MMX.
Praca w systemie wieloprocesorowym możliwa jest z udziałem czterech CPU.
Liczba nowych sygnałów sterujących zmusiła do skonstruowania pojemniejszego złącza krawędziowego nazywanego Slot 2.
Xeon (jako pierwszy produkt Intela) wyposażony został w dwie kostki EPROM zawierające pamięć konfiguracyjną przechowującą dane charakterystyczne procesora: między innymi typ, takt i numer seryjny. Miało to utrudnić (bo chyba przecież nie uniemożliwić; kostki EPROM można bowiem wylutować) pracę fałszerzom procesorów.
Nowe bloki CSRAM są tak duże, że trzeba było znacznie zwiększyć rozmiary całego modułu hybrydowego. Produkt finalny jest dwa razy większy i dwa razy cięższy od Pentium II.
Xeon współpracuje z jednym z nowoopracowanych układów sterujących dla płyt głównych. Pierwszy z nich (z przeznaczeniem do stacji roboczych) to zestaw 440GX stanowiący wzmocnioną wersję znanego już 440BX. Układ ten steruje magistralą 100 MHz oraz szyną AGP w trybie 2x. Pamięć systemu może być rozbudowana do 2 GB, i wykorzystuje szybkie pamięci SDRAM taktowane zegarem 100 MHz (PC 100).
Drugi z proponowanych przez Intel zestawów nazwany został 450NX. Jego twórcy położyli zdecydowanie większy nacisk na pracę procesorów Xeon jako wysokowydajnych serwerów sieciowych. Pełna wersja systemu (Fuli Kit} może obsługiwać dwie niezależne 64-bitowe szyny PCI (lub jedną 64-bity i dwie 32-bitowe). 450NX może obsługiwać do 8 GB pamięci.
450NX stanowi poprawioną wersję sterownika 450GX-Orion, opracowanego swego czasu dla potrzeb procesorów Pentium Pro. Pamięć takiego systemu taktowana jest wprawdzie zegarem 100 MHz ale stosować można wyłącznie moduły EDO (oryginalny ORION uznawał tylko pamięci pracujące w trybie Fast Page Modę). 450NX dziedziczy po Orionie jeszcze jedną cenną właściwość, którą jest możliwość poczwórnego zazębiania się banków pamięciowych (Interleave). System wyposażony w cztery jednakowe moduły EDO-RAM osiąga przez to bardzo dobre parametry (Burst x-l-l-l).
Tabela 1.22.
Podstawowe dane procesorów Intel Pentium 11 (Celeron A/Mendocino) (400-512; 400- IM; 450-512 ; 450-1M; 450-2M)
Architektura; RISC
Technologia; 0,25 um
Zegar CPU [MHz]; ; 400; 400; 450;450;450;
Magistrala [MHz]; 100
Mnożnik (BF);x4; x4; x4,5; x4,5; x4,5;
L1 Cache (kod); 16 kB
L 1 Cache (dane); 16 kB
12 Cache (CPU Clock); 512 kB; 1024kB; 512 kB; 1024 kB; 2 048 kB
Pipe-Lines; 7
Pipę- Linę Stages; 12 (FP: 16)
Out of Order Execution; -
Branch History Table; 512
Branch Target Buffer; 512
V#1,2 [V]; 2,5
V#CORE [V]; 2,0
V#IO [V]; 3,3
Pobór mocy, max. [W] ); 30.8; 38.1; 34.5; 38.2; 43
Return Stack; 4
Renaming Registers; 8 + 32
Performance Monitoring; -
TiSystem wieloprocesorowy; do 4 procesorów
Podstawka; Slot 2
* System niezgodny z Pentium
Procesory Xenon o częstotliwościach taktowania powyżej 450 MHz są odmianą procesora Pentium III
Pentium III
Pentium III stanowi kontynuację architektury 32-bitowej (1A-32). Projekt rozwijał się pod kryptonimem Katmai. zanim został oficjalnie przekształcony przez Intel na procesor Pentium III. Zestaw nowych instrukcji określany w fazie wstępnej mianem KNl (Katmai New Instructions) lub MMX-2 przemianowany został w ślad za tym na ISSE (Internet Streaming SI MD Extensions), przy czym element S1MD (Single Instruction Multiple Data] określa znane już z techniki MMX jednoczesne przetwarzanie grupy danych przy pomocy jednego rozkazu. Główna różnica pomiędzy SIMD w wersji MMX i SIMD
w wersji ISSE polega na tym, iż o ile MMX operuje na danych w formacie całkowitym (Integer}, ISSE stosuje tę samą technikę również w odniesieniu do liczb zmiennoprze-cinkowych.
Pentium III jest pod wieloma względami bardzo podobny do swego poprzednika czyli modelu Pentium II. Podwyższenie częstotliwości taktowania stanowi naturalny krok na drodze ewolucji w tej dziedzinie. Główne cechy architektury zebrane zostały tabelach
1.24 i 1.25.
Tabela 1.22.
Podstawowe dane procesorów Intel Pentium 11 (Celeron A/Mendocino) (450; 500 ; 550 ; 600; 500E; 550E; 550E ; 600E ;
650 ; 700)
Architektura; RISC
Technologia; 0,25 um (450 do 600); 0,18 um (reszta)
Zegar CPU [MHz]; 450; 500; 550 ; 600; 500; 550; 550; 600; 650; 700;
Magistrala [MHz]; 100
Mnożnik (BF); x4,5; x5; x5,5; x6 x5; x5,5; x5,5; x6; x6,5; x7,5
L1 Cache (kod); 16 kB
L 1 Cache (dane); 16 kB
12 Cache (CPU Clock); 512kB(l/2CPUClock) (450 do 600); 256 kB (CPU Clock)
Cacheable Area; 4 GB
Pipę- Linę Stages; 12 (INT)
FPU Unit ; 1 (Pipelined)
Integer Units;2
MMXUnits; 2
Speculative Execution; -
Multiple Rranch Prediction; -
V#CORE [V]; 2,0 (450 do 550); 2,05 (600); 1,6 (500E do 550E); 1,65 - reszta
V#IO [V]; 3,3-3,5 (450 d0 600) - ((500E do 550E); 3,3 - reszta
Pobór mocy, max. [W] ); 25,3; 28,0; 30,8; 34,5; 16,0; 17,6; 18,2; 19,8; 21,5; 23,1
TiSystem wieloprocesorowy; do 2 procesorów
Podstawka; SC242**; PGA370; SC242**
* - Wartość mnożnika nie ulega wpływom zewnętrznym.
** - Złącze krawędziowe SC242 określane było wcześniej mianem Slot 1.
Tabela 1.25.
Podstawowe dane procesorów Intel Pentium III współpracujących z magistralą 133 MHz (533B; 600B; 533EB; 600EB; 667; 733)
Architektura; RISC
Technologia; 0,25 um (533B do 600B); 0,18 um - reszte
Zegar CPU [MHz]; 533; 600; 533; 600; 667; 733
Magistrala [MHz]*; 133; 133; 133; 133; 133;133
Mnożnik; x4; x4.5; x4; x4.5; x5; x5.5
L1 Cache (kod); 16 kB
L1 Cache (dane); 16 kB
L2 Cache; 512kB(l/2CPUClock) (533B do 600B); 256 kB (CPU Clock) - reszte
Cacheable Area; 4 GB
Pipe-Line Stages; 12(INT)
FPU Units 1 (Pipelined)
Integer Units; 2
MMX Units; 2
Speculative Execution; -
Multiple Branch Prediction; -
y CÓR,- m 2,0; 2,05; 1,65 (od 533EB do 733)
y,o(c,n.)[V] 3.3
Pobór mocy, max. [W]; 29,7, 34,5; 17,6; 19,8; 22,0; 24,1
System wieloprocesorowy do 2 procesorów
Podstawka; SC242***
* - Dla magistrali 133 MHz przygotowano Chip-Set 810E.
** - Wartość mnożnika nie ulega wpływom zewnętrznym.
***Złącze krawędziowe SC242 określane było wcześniej mianem Slot 1.
Pentium III dysponuje poszerzoną listą rozkazów. Dla potrzeb nowej technologii ISSE oddano do dyspozycji ponad 70 nowych poleceń, które można podzielić na pięć grup tematycznych:
Grupa I. Rozkazy z przyrostkiem "ps", które stanowią trzon rozszerzeń. Obsługują one przetwarzanie typu S1MD-FP (Single Instruction Multiple Data Floating Point}.
Rozkaz; Kod; Znaczenie;
addps; 0x58; Addition;
andnps; 0x55; AND NOT;
andps; 0x54; AND;
cmp ( * ) ps; 0xC2; Compare;
cvtpi2ps; 0x2A; Convert Int. to ps;
Cvtps2pi; 0x2D; Convert ps to Int. (round);
Cvttps2pi; 0x2C; Convert ps to Int. (trunc.);
Divps; 0x5E; Division;
Maxps; 0x5 F; Maximum;
Minps; 0x5 D; Minimum;
Movaps; 0x28/0x29; MOV Aligned;
Movhlps;0x12; MOV Hi. Lo;
Movhps; 0x16/0x17; MOV Hi;
Movlhps; 0x16; MOV Lo. Hi;
movlps; 0x12/0x13; MOVLo;
movmskps; 0x50; 32-Reg= CMP-Mask;
movntps; 0x2B; MOV 128, Write Through;
movups; 0x10/0x11; MOV Unaligned;
mulps; 0x59; Multiplication;
orps; 0x56; OR
rcpps; 0x53; Reciprocal (11b)
rsqrtps; 0x52; Sąuare Root (Hb);
shufps; 0xC6; Shuffle;
sqrtps; 0x51; Square Root (23b);
subps; 0x5C; Subtraction;
unpckhps; 0x15; Unpack Hi;
unpcklps; 0x14; Unpack Lo;
xorps; 0x57; XOR
( * } = eq. le. lt. neq, nie. nit. ord. unord
Grupa II. Rozkazy z przyrostkiem "ss" pracują na pojedynczych danych w formacie zmiennoprzecinkowym (Single Scalar).
Rozkaz; Kod; Znaczenie
addss; 0x58; Addition;
cmp ( * ) ss; 0xC2; Compare;
comiss; 0x2F; Comp.Fl. Ord.;
cvtsi2ss; 0x2A; Convert Int. to ss;
cvtss2si; 0x2D; Convert ss to Int. (round);
cvttss2si; 0x2C; Convert ss to Int. (trunc.);
divss; 0x5E; Division;
maxss; 0x5F; Maximurn;
minss; 0x5D; Minimum;
movss; 0x1 0/0x11; MOV;
mulss; 0x59; Multiplication;
rcpss; 0x53; Reciprocal;
rsqrtss; 0x52; Square Root;
sąrtss; 0x51; Sąuare Root;
subss; 0x5C; Subtration;
ucomiss; 0x2E; Comp.Fl. Unord.;
( * ) = eq. le. It. neq. nie, nit. ord, unord
Grupa III. Rozkazy sterujące przepływem danych (Memory Streaming Instructionś).
Rozkaz; Kod; Znaczenie
pref etchnta; 0x18; Prefetch LI + L2
prefetcht0; 0x18; Prefetch no Cache
prefetchtl; 0x18; Prefetch only L1
prefetcht2; 0x18; Prefetch only L2
sfence; 0xAE; Storę fence
Grupa IV. Nowe rozkazy uzupełniające dla potrzeb techniki MMX dla danych całkowitych (SIMD-INT).
Rozkaz Kod Znaczenie
Rozkaz; Kod; Znaczenie;
maskmovq; 0xF7; Byte Mask Write;
movntq; 0xE7; MOV Write Through;
pavgb; 0xE0; Byte Averaging;
pavgw; 0xE3; Word Averaging;
pextrw; 0xC5; Extract 1 6 bit;
pinsrw; 0xC4; Insert 16 bit;
pmaxsw; 0xEE; Max. Signed Words;
pmaxub; 0xDE; Max. Unsigned Bytes;
pminsw; 0xEA; Min. Signed Words;
pminub; 0xDA; Min. Unsigned Bytes;
pmovmskb; 0xD7; Byte Maskę in INT-Reg.;
pmulhuw; 0xE4; Unsigned Multiply;
psadbw; 0xF6; Abs. Deviation Sum;
pshufw; 0x70; Shuffle 16 bit;
Grupa V. Dodatkowe rozkazy sterujące (Control).
Rozkaz; Kod; Znaczenie
fxrstor; OxAE FX Restore
fxsave; OxAE FX Save
ldmxcsr; OxAE; Load Katmai Status stmxcsr; OxAE; Storę Katmai Status
Rozkazy z grupy I i II mają do dyspozycji osiem dodatkowych 128-bitowych rejestrów XMM, co pozwala na wprowadzenie nowych form wewnętrznej organizacji równoległego przetwarzania danych. Każdy z rejestrów przyjmuje cztery zmiennoprzecinkowe liczby 32-bitowe. Jednostka SIMD-FP dochodzi do głosu głównie w trakcie wykonywania jednorodnych operacji na stosunkowo dużej liczbie danych. Klasyczny przykład z tej dziedziny to mnożenie macierzy stanowiące podstawowy rodzaj działań przy obliczeniach oświetlenia i translacji geometrycznych w przestrzeni 3D. SIMD-FP daje się przełączyć w tryb symulujący zwyczajną jednostkę FPU, wzbogaconą nawet o nowe rozkazy grupy II. Może ona pracować równolegle do bloku MMX.
Ponieważ w Pentium III nie ma miejsca (stosowane w architekturach MMX i 3DNow!) ukrywanie dodatkowych rejestrów pod rejestrami FP, możliwa jest równoległa praca jednostki SIMD-FP niezależnie od FP/MMX. Znika również (drugi czynnik pozytywny) ograniczenie rozmiarów XMMO - XMM7. W przypadku MMX były one w naturalny sposób obcięte do rozmiarów swej "przykrywki", czyli maksymalnie 8 x 80 bitów.
Po nowych rozkazach ISSE oczekuje się więcej mocy obliczeniowej oddawanej do dyspozycji głównie aplikacjom bogatym w efekty 3D a także dekoderom MPEG-2. Nowe formy organizacji sterowania przepływem mają zoptymalizować proces wymiany informacji pomiędzy procesorem, pamięciami podręcznymi, magistralą AGP i pamięcią operacyjną, z czego czerpią najbardziej korzyści programy przetwarzające wyjątkowo szerokie strumienie danych. Do grupy tej zaliczają się systemy rozpoznawania mowy (Speech Recognitiori), szybkie i dokładne obliczenia w przestrzeni 3D, obróbka sekwencji video a ostatnio też gry komputerowe poprzez sieć.
Instrukcje sterujące przepływem (Memory Streaming) pozwalają na określenie dokładnej strategii dla pamięci podręcznej. Decyzje takie podejmowane sąjeszcze w fazie programowania, bądź to przez samego programistę, bądź przez kompilator. W szczególności możliwe jest wymuszenie przedwczesnego ładowania partii danych lub kodu (PrefetcH) oraz określenie, czy blok ten ma być przechowywany w pamięci podręcznej L1, L2, obydwu lub w żadnej z nich. Przechowywanie danych w pamięci podręcznej nie zawsze ma sens. Niejednokrotnie z góry wiadomo, iż część z nich nie będzie powtórnie przetwarzana. Po co więc zamazywać inne częściej wykorzystywane partie kodu. Nowe instrukcje sterowania przepływem nie są związane bezpośrednio z ISSE i stanowią rozszerzenia architektury, które mogą być z powodzeniem wykorzystywane niezależnie od jednostki SIMD. Nie wymagają one żadnego dodatkowego wsparcia ze strony systemu operacyjnego.
W Pentium III zmodyfikowane zostały bufory zapisu i poprawiono mechanizm grupowania następujących po sobie odwołań do pamięci (Write Combining}. Cykle zapisu (w odniesieniu do pewnego konkretnego bloku danych) mogą odbywać się poprzez pamięć podręczną (Write Through) lub bez jego udziału czyli bezpośrednio do pamięci.
By móc czerpać korzyści z techniki ISSE konieczna jest stosunkowo głęboka ingerencja w istniejące już aplikacje. Zmiany nie ograniczają się do ponownego skompilowania poszerzonego kodu ale często dotyczą całych algorytmów, tak by stworzyć możliwość równoległego przetwarzania danych zmiennoprzecinkowych. Gwoli ścisłości warto wspomnieć, iż wiele algorytmów nie poddaje się takim zabiegom.
Możliwości oferowane przez rozszerzenia architektury o SIMD nie są tak łatwe do wykorzystania w praktyce jak MMX czy też 3DNow!, ponieważ nie wystarczy samo przeprogramowanie aplikacji, tak by posługiwały się nowymi rozkazami. Główną barierę stanowi grupa nowych rejestrów, o których istnieniu nic nie wiedzą wielozadaniowe systemy operacyjne. 3D-Now! (podobnie jak MMX) korzysta jedynie z ośmiu oryginalnych 64-bitowych rejestrów MMO - MM7, które naprzemiennie przydzielane są dla operacji INT i FP.
Sytuacja ulega zmianie w przypadku ISSE. Przełączaniu procesora do kolejnych programów korzystających z instrukcji SIMD grupy I i II musi towarzyszyć zabezpieczanie i odtwarzanie zawartości rejestrów XMM. Jeżeli któryś z programów podejmie pracę z danymi przejętymi z innego modułu, katastrofa jest nieunikniona. Pentium III dysponuje parą rozkazów fxsave/fxstore, która zabezpiecza i restauruje zarówno rejestry MMO - MM7 (przynależne do jednostek MMX/FPU) jak i XMMO - XMM7 obsługiwane przez SIMD-FP. Omawiana para instrukcji przemieszcza w sumie 352 bajty.
Windows 95 należy niestety do grupy systemów, która nie pozwala na posługiwanie się rozkazami SIMD. Procesor Pentium III musi być zaprogramowany tak by nie wykraczał poza zakres, w którym porusza się Pentium II. Bez obawy można wykorzystać wywołania z grupy III i IV co poprawia nieco dostęp do pamięci i daje kilka nowych rozkazów MMX. W sumie jednak nie należy się spodziewać znaczących efektów z zastosowania nowego procesora w ramach tego systemu operacyjnego.
W lepszej sytuacji znajdują się użytkownicy Windows 98 ( Wersja pierwotna Windows 98 rozpoznaje Pentium III jako Pentium II ale mimo tego nowy procesor jest prawidłowo konfigurowany i może używać ISSE w pełnym zakresie. Zainstalowanie pierwszej nakładki z poprawkami (ServicePack 1) usuwa ten drobny błąd kosmetyczny.), bowiem spełnia on wszystkie niezbędne wymagania gwarantujące zabezpieczenie treści krytycznych rejestrów XMM. Aplikacje mogą w tym wypadku operować całą gamą nowych rozkazów. Wszystkie programy (nawet takie, które nie wiedzą nic o istnieniu nowych rozkazów) zwracające się do złącza DirectX 6.1 korzystają ponadto ze wsparcia ISSE w formie pośredniej. Funkcje tej biblioteki odwołują się bowiem już do nowych rozkazów.
W przypadku Windows NT 4.0 wymagana jest nakładka ServicePack 4 i dodatkowy sterownik programowy przygotowany przez firmę Intel. Z powodu braku wsparcia DirectX, korzyści mogą przynieść wyłącznie aplikacje, które same posługują się instrukcjami ISSE.
Pentium III Xenon
Pentium III Xenon jest odmianą procesora Pentium III przeznaczonego do wieloproce-sorowych serwerów i stacji roboczych. W stosunku do swojego pierwowzoru został wzbogacony o następujące możliwości:
Pamięć podręczna L2 pracuje z pełną częstotliwością procesora, a jej rozmiar może sięgać do do 2 MB.
Praca w systemie wieloprocesorowym możliwa jest z udziałem ośmiu CPU.
Procesor wykorzystuje złącze krawędziowe SC330 (Slot 2).
Xeon wyposażony jest w pamięć konfiguracyjną przechowującą dane charakterystyczne dla procesora.
Procesory współpracujące z magistralą 133 MHz zostały wyposażone w moduł OVCR (On Cartridge Yoltage Regulator}, dzięki czemu procesor generuje odpowiednie poziomy napięć zasilających.
Pentium III Xeon współpracuje z nowoopracowanym układem sterującym dla płyt głównych - Intel 840. Układ ten steruje magistralą 133 MHz oraz szyną AGP w trybie 4x. Pamięć systemu może być rozbudowana do 8 GB, i wykorzystuje szybkie pamięci SDRAM (PC 100) lub RDRAM (PC 600, PC 800).
Tabela 1.26.
Podstawowe dane procesorów Intel Pentium III Xenon (500-512; 500-1M; 500-2M; 550 - 512; 2,8V 600; 2,8V 667; 2,8V 733 ; 5/12V 600; 5/12V 667; 5/12V 733)
Architektura; RISC
Technologia; 0,25 um (500 do 550); 0,18 um (600 do 733)
Zegar CPU [MHz]; 500; 500; 500; 550; 600; 667; 733; 600; 667; 733
Magistrala [MHz]; 100; 100 ; 100; 100; 133; 133; 133; 133; 133 ; 133
Mnożnik; x5; x5; x5; x5,5; x4,5; x5; x5,5; x4,5; x5; x5,5
L1 Cache (kod); 16 kB
L1 Cache (dane); 16 kB
12 Cache (CPU Clock); 512; 1024; 2048; 512; 256 kB (od 600 do 733)
Cacheable Area; 64 GB
Pipe-Line Stages; I2(1NT)
FPL Units; 1 (Pipelined)
Integer Units; 2
MMX Units; 2
Speculative Execution; -
Miiltiple Branch Prediction; -
V#CORE [V]; 2,0 (500 do 550); 2,8 (600 do 733 -2,8V);5/12 (600 do 733 - 5/12V)
V#IO(GTL)[V]; 2.7; 2,7; 2,0 ; 2,0; od 600-2,8v puste
Pobór mocy, max. [W]; 36,0; 44,0; 36,2; 34,0; 21,3; 23,1; 27,3; 21,9; 23,9; 28,7
* - System wieloprocesorowy; do 8 procesorów do 2 procesorów
** - Podstawka; SC330** (500 do 550); SC330.1** (reszta)
*** -Wartość mnożnika nie ulega wpływom zewnętrznym Złącze krawędziowe SC330 określane było wcześniej mianem Slot 2. ""Złącze krawędziowe SC330. 1 to rozszerzenie złącza SC330 umożliwiające współpracę z magistralą 133 Mhz i obsługę OVCR.
Itanium
Procesor Intel Itanium (znany również pod kryptonimem Merced) rozpocznie nową rodzinę procesorów o 64-bitowej arcitekturze (tzw. IA-64). Pierwsze procesory tego typu powinny się pojawić w drugim półroczu 2000 roku.
Procesory IDT
WinChip C6
Omawiany tu procesor stworzony został w firmie Centaur Technology należącej do grupy IDT (Integrated Device Technology). Został on opracowany specjalnie dla zaspokojenia potrzeb rynku tanich komputerów (zarówno stacjonarnych jak i przenośnych). Niewątpliwą zaletąjest konkurencyjna cena przy zachowaniu zgodności na poziomie końcówek z procesorami grupy P54C (pojedyncze napięcie zasilające) mimo iż implementowane są instrukcje MMX (P55C). Procesor pracuje w otoczeniu odpowiadającemu podstawce typu Socket 7, a częstotliwości magistrali mogą przyjmować wartości 60, 66 lub 75 MHz. WinChip zna jedynie mnożniki całkowite, tj. x2, x3, x4 i x5 (Układ BF2 : BF l : BFO =1:1:1 interpretowana jest przez C6 jako x4. Ten sam układ odpowiada xl,5 dla Pentium P54C, ale x3,5 dla pozostałych procesorów rodziny x86.)
. Najszybszy model tej rodziny taktowany jest zegarem 240 MHz.
Prosta architektura rzutuje na mniejsze rozmiary struktury półprzewodnikowej (88 mm^2 w porównaniu do 162 mm^2 K6, oba w technologii 0,35 mikrometra) oraz mały pobór mocy równy prawie połowie tego co zużywają procesory K6 lub M2.
Architektura optymalizowana pod kątem szybkości wykonania najczęściej spotykanych instrukcji. Cierpiana tym oczywiście instrukcji kompleksowe, których czas wykonania jest znacznie dłuższy niż w innych procesorach rodziny x86. WinChip nie ma mechanizmów przepowiadania kierunku rozgałęzień (Branch Predictiori). Wszystkie rozkazy wykonywane są w naturalnej kolejności, takiej w jakiej występują w programie (In-Order Executiori). Procesor dekoduje w jednym cyklu zegarowym co najwyżej jeden rozkaz x86 (dla porównania Pentium MMX dwa rozkazy a K6 trzy rozkazy). Taka sama proporcja obowiązuje jeśli chodzi o ilość wykonywanych rozkazów. Jeśli dane nie znajdują się w pamięci podręcznej praca potoku ulega wstrzymaniu.
Specjalnością architektury WinChip jest mała pamięć podręczna PDC (Page Directory Cache}. PDC jest wyodrębnionym fragmentem TLB (wspólnym dla Data LI Cache TLE i Code L1 Cache TLE) o pojemności 8 rekordów. Nie ma jej ani w procesorach Intel, ani w AMD K6, ani w 6x86MX Cyrixa. Jej obecność przyczynia się do lepszego zagospodarowania miejsca w pamięci podręcznej i poprawia "współczynnik trafienia" w obrębie L1. WinChip nie ma natomiast (podobnie jak Pentium MMX i AMD K6) wbudowanej tablicy TLB dla pamięci podręcznej L2. Tablicę taką posiada z kolei 6x86MX Cyrixa.
Tabela 1.27.
Podstawowe dane procesorów IDT WinChip C6 (C6- 180; C6-200; C6-225; C6-240)
Architektura; RISC
Technologia; 0.35 um
Zegar CPU [MHz]; 180; 200; 225; 240
Magistrala [MHz]; 60; 66; 75; 60
Mnożnik (BF); x3; x3; x3; x4
L1 Cache (kod); 32 kB 2-Ways Associative
L1 Cache (dane); 32 kB 2-Ways Associative
Pipe-Lines; 1
Pipe-Line Stages; 5
Oitt of Order Execution; x
Branch Prediction; x
TLB; Code Cache TLB: 64 Entries 4-Ways; Data Cache TLB: 64 Entries 4-Ways
V#CORE;V#IO [V}; 3.52 V (3.45 - 3,6) lub 3.3 V (3. 135 - 3.6)
Pobór mocy, max. [W]; 11.5; 13.0; 14.8; 15,8
Return Stack; 8
Podstawka; Socket 7
Procesor posiada bardzo dobry system ograniczania poboru mocy. Większość "prądo-żernych" bloków zostaje samorzutnie wyłączana jeśli nie jest używana przez pewien dłuższy okres czasu. Do układów objętych nadzorem należą: pamięć podręczna LI (zarówno dla kodu jak i dla danych), jednostka MMX oraz jednostka FPU.
Pewną ciekawostkę stanowi również możliwość programowania odpowiedź na rozkaz cpuid. Pozwala to na wykorzystanie procesora w programach uzależniających swoją pracę od łańcucha znaków zwracanych w wyniku wywołania tego rozkazu. Bez przeprogramowania WinChip zwraca łańcuch "CentaurHauls", oraz sekwencję Family-Model-Stepping w postaci Ox05-0x04-0x... (... może oznaczać różne wartości).
WinChip 2
Prostota procesora C6 powoduje, iż mimo posiadania jednostki MMX, jest on praktycznie bezużyteczny w zmaganiach z aplikacjami multimedialnymi. Dla firmy IDT szybko stało się oczywiste, że aby nie wypaść z rynku należy procesor poddać zabiegom modernizacyjnym.
Oto główne zmiany wprowadzone do modelu WinChip 2.
Nowa poprawiona jednostka FPU. Nadal jednak pozostaje tylko jeden potok Integer (inne konkurencyjne procesory rodziny x86 mają dwa takie potoki).
Mechanizm przewidywania wyniku instrukcji warunkowych (rozgałęzień) pracujący w oparciu o dynamicznie aktualizowaną tablicę BHT (Branch History
Table). Każdy rekord tej tablicy opisuje (w formie liczby 12-bitowej) dotychczasowe zachowanie się jednego z rozgałęzień programowych. Tablica jest indeksowana co znacznie skraca czas dostępu.
Podwójna jednostka MMX może teoretycznie wykonywać do dwóch instrukcji MMX w jednym cyklu. Ponieważ jednak blok MMX-1 realizuje operacje mnożenia i dodawania natomiast blok MMX-2 odpowiedzialny jest za przesunięcia i rozkazy pakowania, nie jest możliwe parowanie dowolnych rozkazów MMX.
Implementowane są funkcje SDNow!, których wykonanie przebiega w blokach MMX-1 lubMMX-2.
Przystosowanie do pracy w otoczeniu zgodnym ze specyfikacją podstawki typu Super 7 (magistrala 100 MHz).
Procesory WinChip 2A wykorzystują ułamkowe mnożniki częstotliwości.
Tabela 1.28.
Podstawowe dane procesorów IDT WinChip 2
(W2-225; W2-240; W2-250; W2-266; W2-300; W2-220A; W2-233A; W2-266A; W2-300A;)
Architektura; RISC;
Technologia; 0,28 um/0,35 um (225 do 300); 0,25 um (200A do 300A);
Zegar CPU [MHz]; 225; 240; 250; 266; 300; 200; 233; 233; 250;
Magistrala [MHz]; 75; 60; 83; 66; 75/100; 66; 66; 100; 100;
Mnożnik (BF); x3; x4; x3; x4; x4/x3; x3; x3,5; 2,33; x2,5;
L1 Cache (kod); 32 kB, 2-Ways;
L1 Cache (dane); 32 kB, 4-Ways;
Pipe-Line Stages; 6;
Out of Order Execution; x;
TLB; Code Cache TLB: 128 Entries / 8-Ways, Data Cache TLB: 128 Entries / 8-Ways;
Branch Prediction; Branch History Table: 4 096 entries;
V#COM , V#IO [V]; 3,52 V (3,45 - 3,6) lub 3,3V (3,135 - 3,6);
Pobór mocy, max. [W]; 12; 13; 14; 15; 16; 12; 13; 14; 16;
Return Stack; 8;
Interface; Socket Super 7;
Rise mP6
Firma Rise Technology to grupa założona w 1993 przez zespół naukowców z IBM, Amdahl, Fujitsu, Fairchild, Integraph i Sun Microsystems. Opracowany przez nich procesor zaprezentowany został po raz pierwszy na targach Microprocessor Forum w San Jose w roku 1998.
Procesor mP6 występuje jak na razie w wersjach 166, 233, 266, 333 i 366. Początkowo mówiło się, iż jest przeznaczony do komputerów przenośnych ale wprowadzona też została wersja z podstawką typu Socket 7. Główna uwaga projektantów skupiała się na systemie oszczędzania poboru mocy. Cały procesor skonstruowany jest w oparciu o dość skomplikowany system określany jako DAR (Dynamie Allocation of Resources). Oznacza to, iż niektóre jednostki (na przykład adresujące) występują tylko raz w strukturze krzemowej i są dynamicznie przydzielane (przełączane) do różnych potoków.
Mimo stosunkowo prostej architektury, mP6 posiada elementy pozwalające mu nosić miano współczesnego procesora (Superscalar, 3-Way Superpipeline}. Struktura wykonana jest w technologii 0,25 lub 0,18 mikrometra z rozdzielonymi napięciami zasilania dla jądra CPU i obwodów I/O (Split Yoltage Technolog. Ma stosunkowo małą pamięć podręczną L1 (16 kB) ale za to potrój na jednostkę ALU i potrójny blok MMX (dla porównania M2 i K6 ma jedną a Pentium MMX, Pentium II i K6-2 po dwie). Wyliczenie uzupełnia dwutorowa jednostka FPU (Pipelined).
Procesor mógłby więc wykonywać w jednym cyklu zegarowym do trzech instrukcji Integer lub MMX lub dwie FPU co w praktyce jednak rzadko może mieć miejsce. Kłopot polega na tym, iż nie został zaimplementowany żaden z mechanizmów pracy poza kolejnością (Out-of-Order Executiorf). Występowanie w programie w naturalnej kolejności akurat takiej sekwencji instrukcji, którą można rozpisać na trzy potoki równolegle (z uwzględnieniem wzajemnych uzależnień i praw parowania) zdarza się jedynie od czasu do czasu.
Procesor mP6 zwraca w odpowiedzi na rozkaz cpuid łańcuch "RiseRiseRise", oraz sekwencję Family-Model-Stepping w postaci Ox05-0x00-0x... (... może oznaczać różne
wartości).
Tabela 1.29.
Podstawowe dane procesorów Rise mP6:
(166; 233; 266; 333; 366; 333; 366)
Architektura; x86 Native;
Technologia; 0,25 mikrometrów(procesory 166 do 366), 0,18 mikrometrów(procesory 333 do 366);
Zegar CPU [M H:]; 166; 190; 200; 238; 250; 238; 250;
Magistrala [MH:J; 83 ; 95; 100; 95; 100; 95; 100;
Mnożnik (RF); x2; x2; x2; x2,5; x2,5; x2,5; x2,5;
L 1 Cache (kod); 8kB;
L1 Cache (dane); 8kB;
L2 Cache on Chip; x;
Pipe-Lines; 3 INT + 1 FP;
Pipę- Linę Stages; 6INT;
On t of Order Execntion; x;
Branch Prediction;
Branch Target Buffer; 512;
V#CORE[V]; 2,8(procesory 166 do 366), 2,0(procesory 333 do 366);
V#I/O[V]; 3,3;
Pobór mocy, max. [W]; 7,28; 8,11; 8,56; 10,18; 10,72; 4,78; 5,0;
Return Stack; 8;
Renaming Registers;
Podstawka; Socket Super 7;
Jak rozpoznać typ procesora
Ponieważ procesory rodziny 80x86 nie są zgodne w dół (program napisany specjalnie dla procesora 486 nie będzie działał na procesorze 8086), może zaistnieć konieczność rozpoznawania, z jakim procesorem mamy do czynienia. Zaprezentowany algorytm (rysunek 1.41) bazuje na specyficznych własnościach poszczególnych grup procesorów. Na jego podstawie można określić, do jakiej grupy należy rozpatrywany procesor (zgodny z 8086, 80186, 80286, 80386, i486, Pentium), nie można jednak stwierdzić, kto jest jego producentem.
Czy procesor jest zgodny z układem 80286 lub lepszym
Jak widać, identyfikacja procesorów przebiega w dwóch gałęziach. W pierwszym kroku określane jest, czy procesor jest zgodny z układem 286 lub lepszym. Można to ustalić na podstawie rejestru stanu (FLAGS). Znaczenie bitów 12 - 15 w rejestrze stanu zostało zdefiniowane począwszy od procesora 80286 (oczywiście znaczenie bitów 0 - 11 nie uległo zmianie). W procesorach 8086/88 i 80186/88 bity 12 - 15 nie są wykorzystywane
- ich wartość jest zawsze równa 1. Zatem testując możliwość zmiany wartości bitów 12
- 15 w rejestrze stanu można rozpoznać, czy mamy do czynienia z procesorem 8086/88 lub 80186/88, czy 80286 albo lepszym.
Do sprawdzenia, czy procesor jest zgodny z procesorem 80286 lub lepszym można wykorzystać następujący ciąg instrukcji:
...
xor ax,ax ;wyzerowanie rejestru ax
push ax ;umieszczenie rejestru ax na stosie
popf ;i wpisanie jego wartości do rejestru stanu
pushf ;zapisanie wartości rejestru stanu na stosie
pop ax ;i wpisanie jego wartości do rejestru ax
and ax,OfOOOh ;wyzerowanie wszystkich bitów za wyjątkiem 12-15
cmp ax,OfOOOh ;sprawdzenie, czy bity 12-15 mają wartość 1
je mniej_286 ;jeżeli tak, to procesor 8086/88 lub 80186/88
jne lepiej_286 ;jeżeli nie, to procesor 80286 lub lepszy
...
Procesor 8086/88 czy 80186/88
Rejestr stanu nie możne być wykorzystany do odróżnienia procesorów 8086/88 od 80186/88. Trzeba znaleźć inną różnicę - na przykład zmiany dokonane w instrukcji przesunięcia logicznego (shr arg1, arg2).
Instrukcja shr przesuwa zawartość arg1 w prawo, o liczbę bitów określoną przez arg2. Począwszy od procesora 80186/88 wartość arg2 jest maskowana do 5 bitów - liczba bitów, o jaką można przesunąć arg1 mieści się w przedziale domkniętym <0, 31>. W procesorach 8086/88 nie było tego ograniczenia
Zatem aby odróżnić procesor 8086/88 od 80186/88 należy sprawdzić, czy możliwe jest przesunięcie argl o więcej niż 31 bitów.
Zastanówmy się, co się stanie, gdy argl równy OFFh (11111111b) przesuniemy o 021h (00100001 b). Procesor 80186/88 zamaskuje wartość arg2 do 5 bitów i dokona jednokrotnego przesunięcia w prawo - po wykonaniu instrukcji argl będzie miał wartość 07Fh (01111111 b). Z kolei procesor 8086/88 dokona trzydziestotrzykrotnego przesunięcia w prawo - arg1 będzie równy 0.
... ;
mov a1,Offh ;wpisanie do rejestru a1 wartości ffh - arg1
mov c1,021h ;wpisanie do rejestru c1 wartości 21h - arg2
shr a1,c1 ;dokonanie przesunięcia
jz p_8086 ;czy al jest równy O? tak, to procesor 8086/88
jnz p 80186 ;jeżeli nie, to procesor 80186/88
... ;
Procesor 80286
Do odróżnienia procesora 80286 od jego następców można ponownie wykorzystać rejestr stanu - bity 12-15 mają zawsze wartość 0.
Procesor 80386
Począwszy od procesora 80386 rejestr stanu został rozszerzony do 32 bitów. Do rozpoznania procesora 80386 można wykorzystać fakt, że w rejestrze stanu procesora 80386 bit 18 ma wartość O, podczas gdy w procesorach 486 i lepszych zdefiniowany został znacznik sprawdzania wyrównywania. Zatem jeżeli wartość 18 bitu w rejestrze stanu ma wartość O i nie można jej zmienić, to znaczy, że badany procesor jest układem 80386.
Procesor 486 czy Pentium
W procesorze Pentium został wprowadzony znacznik identyfikacji (21 bit w rejestrze statusu). W procesorach 486 wartość 21 bitu wynosi O i nie można jej zmieniać, dlatego znacznik identyfikacji można wykorzystać do odróżnienia procesorów 486 od Pentium - wystarczy sprawdzić, czy można ustawić 21 bit w rejestrze statusu.
Przedstawiony algorytm nie daje możliwości rozróżnienia procesorów i486DX, i486SX i i487SX (rozpoznanie procesora i486SX wymaga dodatkowego testu na brak koproce-sora).
Rozpoznawanie kolejnych generacji procesorów nie powinno już sprawiać takich trudności, gdyż - począwszy od procesora Pentium - lista rozkazów została wzbogacona o instrukcję cpuid, przeznaczoną do identyfikacji typu procesora (ustawiony znacznik identyfikacji oznacza, że procesor może tę instrukcję wykonać).
Koprocesory
Koprocesory wspomagają procesor w obliczeniach numerycznych. Każdy procesor 80x86 jest przystosowany do współpracy z odpowiadającym mu koprocesorem 80x87. Wyjątkiem jest procesor 80386, który w niektórych systemach może współpracować z układem 80287, zamiast 80387, oraz procesory 80486 i lepsze, które mają wbudowany koprocesor.
Z punktu widzenia programisty, obecność w systemie koprocesora powoduje postrzeganie układu procesor-koprocesor jako jednego procesora o:
zwiększonej liczbie rozkazów;
zwiększonej liczbie rejestrów;
zwiększonej liczbie typów danych.
Oczywiście układ procesor 80x86/koprocesor 80x87 jest zgodny w górę - program napisany dla układów 8086/8087 będzie działał na 80386/80387, pomimo tego, że zarówno architektura koprocesorów, jak i zasada współdziałania z procesorem ulegała nieznacznym zmianom.
Koprocesory 80x87 nie mogą pracować samodzielnie, mogą natomiast pracować równolegle z procesorem, wspomagając go w obliczeniach numerycznych.
Jeżeli podczas wykonywania programu procesor natknie się na instrukcję przeznaczoną dla koprocesora, to interpretuje ją jako rozkaz esc -jeśli jest to konieczne, oblicza adres argumentów i wykonuje cykl dostępu do pamięci, jako że koprocesor nie ma układu umożliwiającego obliczanie adresu (może natomiast realizować transmisję danych, jeżeli do skompletowania argumentu niezbędne są kolejne bajty z pamięci). Następnie procesor rozpoczyna wykonywanie kolejnej instrukcji, niezależnie od tego, czy koprocesor zakończył obliczenia.
Koprocesor "obserwuje" wykonywanie kolejnych instrukcji programu. Ignoruje rozkazy przeznaczone dla procesora. Po napotkaniu instrukcji przeznaczonej dla koprocesora przystępuje do jej wykonania. Jeżeli rozkaz wymaga dostępu do pamięci, pobiera z magistrali adresowej i zapamiętuje adres obliczony wcześniej przez procesor - umożliwia to skompletowanie całego argumentu.
W trakcie wykonywania obliczeń koprocesor utrzymuje aktywny sygnał na wyprowadzeniu BUSY - umożliwia on synchronizacje pracy procesora i koprocesora.
W czasie gdy procesor i koprocesor pracują równolegle, trzeba się zabezpieczyć przed:
-modyfikacją argumentów, z których korzysta koprocesor;
-wykonaniem kolejnej instrukcji esc przed zakończeniem działania koprocesora.
Do synchronizacji pracy procesora i koprocesora można wykorzystać instrukcję wait
powoduje ona wstrzymanie działań procesora do czasu pojawienia się aktywnego sygnału na wyprowadzeniu -TEST (wyprowadzenie to jest połączone z wyprowadzeniem BUSY koprocesora).
Koprocesor 8087
Koprocesor 8087 przeznaczony jest do współpracy z procesorami 8086/88. Jego wewnętrzna struktura składa się z dwóch mogących pracować niezależnie bloków:
- układu sterującego (ang. control unity,
- układu obliczeń numerycznych (ang. numeric execution unif).
Układ sterujący odpowiada za synchronizację pracy koprocesora z procesorem. Do jego zadań należy: pobieranie i dekodowanie rozkazów, pobieranie danych z pamięci i ich zapisywanie oraz wykonywanie rozkazów sterujących pracą koprocesora.
Z kolei układ obliczeń numerycznych wykonuje wszystkie rozkazy numeryczne - dodawanie, odejmowanie, dzielenie, mnożenie, wartość bezwzględną, zmianę znaku, resztę z dzielenia, zaokrąglanie, logarytmowanie, obliczanie pierwiastka kwadratowego,
itp. Koprocesor może również generować stałe umożliwiające obliczanie wartości wielu funkcji - +1,0; +0,0;" pi"; Iog(2;e); Iog(2;10); log(10;2); log(e;2).
Koprocesor 8087 -jako jedyny w rodzinie układów 80x87 - ma możliwość generowania żądania przerwania w przypadku wystąpienia nie zamaskowanego błędu. Z tego powodu programy tworzone dla systemu 8086/8087 mogą wymagać zmiany obsługi błędów numerycznych w przypadku przenoszenia ich do systemów 80286/80287 i lepszych.
Koprocesor 80287
Koprocesor 80287 przeznaczony jest w zasadzie do współpracy z procesorem 80286 (może pracować w trybie rzeczywistym i chronionym - zmianę trybu pracy umożliwia port OF1h). Jednak w praktyce można również natknąć się na systemy 80386/80287.
Koprocesor 80287, podobnie jak jego poprzednik, składa się z dwóch mogących pracować niezależnie bloków:
- układu sprzężenia magistrali (ang. bus interface unit);
- układu obliczeń numerycznych (ang. numeric execution unit).
Począwszy od procesora 80287 zmieniły się nieco zasady współpracy procesora z ko-procesorem. Procesory 80286 i lepsze automatycznie testują stan wyprowadzenia TEST po napotkaniu instrukcji esc - nie trzeba zatem programowo blokować możliwości wykonania kolejnej instrukcji koprocesora przed zakończeniem poprzedniej. W dalszym ciągu trzeba jednak dbać o to, by procesor i koprocesor nie żądały dostępu w tym samym czasie do tych samych danych.
Zmienił się również sposób pobierania danych. Procesor umieszcza argumenty w portach koprocesora (OF8h, OFAh, OFCh) - koprocesor 8087 pobierał dane z magistrali.
Kolejna różnica między koprocesorem 8087 a 80287 i 80387 to możliwość generowania żądania przerwania w razie wystąpienia nie zamaskowanego błędu w trakcie obliczeń. Koprocesory 80287 i 80387 są tej cechy pozbawione - po wystąpieniu błędu ustawiany jest sygnał ERROR (~ERROR=0), który oddziaływując bezpośrednio na procesor wymusza wykonanie procedury obsługi błędu.
Koprocesor 80387
Koprocesor 80387 przeznaczony jest do współpracy z procesorem 80386. Tryb pracy procesora (rzeczywisty, chroniony, wirtualny 8086) nie ma wpływu na działanie koprocesora, gdyż koprocesor operuje na rozkazach i danych przekazanych przez procesor.
Struktura koprocesora 80387 jest znacznie bardziej skomplikowana niż struktura wcześniejszych koprocesorów. W układzie 80387 można wyróżnić trzy mogące pracować niezależnie bloki:
układu sterowania magistrali (ang. bus control logie);
układu sterowania z układem sprzężenia magistral (ang. data interface and control unit);
układu obliczeń numerycznych (ang. numeric execution unif).
Układ sterowania magistrali zapewnia komunikację koprocesora z mikroprocesorem. Procesor traktuje ten układ jak układ wejścia-wyjścia o adresach portów OFOh - OFFh - koprocesor nie ma bezpośredniego dostępu do pamięci (za dostęp do pamięci odpowiada procesor). Układ sterowania magistrali musi pracować synchronicznie z procesorem.
Układ sterowania z układem sprzężenia magistral jest odpowiedzialny za przesyłanie danych do i z układu obliczeń numerycznych, pobieranie i dekodowanie rozkazów oraz sterowanie ich wykonaniem.
Układ obliczeń numerycznych został poważnie zmodyfikowany - koprocesory 80386 i lepsze mogą obliczać wartości funkcji trygonometrycznych.
Koprocesor i487SX
Coraz większe uzależnienie koprocesora od procesora doprowadziło do ich połączenia w jednym układzie - procesory począwszy od i486 mają wbudowany koprocesor. Wyjątkiem jest układ i486SX, w którym działanie koprocesora zostało zablokowane (odpowiadający mu koprocesor i487SX jest pełnowartościowym układem 486DX).
Jak rozpoznać typ koprocesora
Rozpoznawanie typu koprocesora może wydawać się zajęciem nieco archaicznym, gdyż począwszy od układu i486DX procesory 80x86 mają wbudowany koprocesor. Pracuje jednak jeszcze niewiele systemów wyposażonych w procesory 80386, które mogą współpracować z koprocesorem 80287 lub 80387. Dlatego umiejętność rozpoznawania koprocesorów może się czasami przydać.
Przedstawiony algorytm (rysunek 1.42) umożliwia wykrycie obecności koprocesora i rozpoznanie jego typu (8087, 80287, 80387). W algorytmie nie został uwzględniony koprocesor i487SX, gdyż jest to de facto pełnowartościowy układ 486DX - sprawdzenie, czy w systemie 486 jest koprocesor sprowadza się zatem do rozpoznania typu procesora i przeprowadzenia testu na obecność koprocesora (pierwszy krok algorytmu).
Czy w systemie jest koprocesor
Obecność koprocesora w systemie można sprawdzić na kilka sposobów. Najprostszy z nich to sprawdzenie zmiennej systemowej zawierającej listę sprzętu. Zmienna ta ma adres 0040:001Oh (0041 Oh). Jeżeli bit numer l jest ustawiony, to znaczy że, w systemie jest koprocesor.
Inna metoda - znacznie pewniejsza - to próba inicjalizacji koprocesora i sprawdzenie, czy w słowie stanu koprocesora zostały wyzerowane bity 0-7. Metoda ta jest niezawodna i bezpieczna (komendy koprocesora są ignorowane przez procesor).
... ;
finit ;inicjalizacja koprocesora
mov fpu_stan,5a5ah ; nadanie fpu_stan wartości różnej od O
fnstsw fpu_stan ;zapisanie słowa stanu w fpu_stan
mov ax,fpu_stan ;skopiowanie fpu_stan do rejestru ax
cmp a1,O ;sprawdzenie, czy bity 0-7 są równe O
jz jest_koprocesor ;tak - w systemie jest koprocesor
jnz bez_koprocesora ;nie - w systemie nie ma koprocesora
... ;
Można również sprawdzić, czy po inicjalizacji koprocesora ustawione są bity 8 i 9 w słowie sterującym.
Koprocesor 8087
Do identyfikacji koprocesora 8087 można wykorzystać znacznik maski przerwań (bit 7 w słowie sterującym). Decyduje on o tym, czy po wystąpieniu niezamaskowanego błędu ma być generowane przerwanie. Ponieważ koprocesory 80287 i lepsze nie generują w takiej sytuacji przerwania, jest on w nich zawsze równy O i nie można go zmienić.
Zatem aby rozpoznać koprocesor 8087, wystarczy sprawdzić, czy można ustawić bit 7 w słowie sterującym.
... ;
finit ;inicjalizacja koprocesora
and fpu_ster,Off7fh ;bit 7 w fpu_ster ma wartość O
fldcw fpu_ster ;załadowanie fpu_ster do słowa sterującego
fdisi ;ustawienie bitu 7 w słowie sterującym
fstcw fpu_ster ;skopiowanie słowa kontrolnego do fpu_ster
test fpu_ster, 80h ;sprawdzenie, czy bit 7 jest ustawiony
jne k_8087 ;tak - koprocesor 8087
je k_80287 ;nie - koprocesor 80287 lub lepszy
... ;
Koprocesor 80287 czy 80387
Aby odróżnić koprocesor 80287 od 80387 i lepszych trzeba wykorzystać fakt, że w procesorze 80287 nie można zmienić znaku nieskończoności (+ niesk. = -niesk.).
... ;
finit ;inicjalizacja koprocesora
fldl ;umieszcza na stosie stalą +1
fldz ;umieszcza na stosie stalą +0
fdiv ;generowanie nieskończoności (1/0)
fld st ;powielenie nieskończoności na stosie
fchs ;i zmienienie znaku
fcompp ;porównanie + i - nieskończoności
fstsw fpu_stan ;skopiowanie słowa stanu do fpu_stan
mov ax,fpu_stan ;a potem do rejestru ax
sahf ;skopiowanie rejestru ah do mniej
;znaczącego bajtu rejestru stanu
;odpowiednie znaczniki ze słowa stanu
;zostaną wstawione do rejestru stanu
jz k_80287 ;czy równe? tak - koprocesor 80287
jnz k_80387 ;nie - koprocesor 80387 lub lepszy
... ;
Architektura komputera PC/XT
Będący pierwowzorem dla modelu XT mikrokomputer IBM PC był konstrukcją ośmio-bitową, która ma dzisiaj znaczenie wyłącznie historyczne i którą nie będziemy się zajmować. Rozwiązania przyjęte w modelu XT nie różnią się w sposób istotny od stosowanych po dzień dzisiejszy w najnowszych modeiach PC/AT. Proces śledzenia etapów rozwojowych w tej dziedzinie rozpoczniemy więc od modelu XT.
Dostęp do przestrzeni wejścia-wyjścia
Procesory serii 80x86 mogą adresować dwa nakładające się na siebie obszary. Oba z nich adresowane są poprzez tę samą systemową magistralę adresową, a wymiana danych między nimi a procesorem odbywa się tą samą systemową magistralą danych.
Pierwszy z omawianych obszarów stanowi pamięć operacyjną. Można się do niego odwoływać używając przykładowo rozkazu mov x, y (gdzie x i y mogą określać adres w pamięci lub jeden z rejestrów procesora). Drugi obszar określany jest mianem przestrzeni wejścia-wyjścia (ang. l/O, Input/Outpitf), a zwracać się doń można za pomocą rozkazów in a, port i out port, a (gdzie port symbolizuje lokalizację w przestrzeni adresowej wejścia-wyjścia, zaś a jest akumulatorem -jednym z rejestrów procesora). Rozkazy z grupy mov dopuszczają użycie jako argumentu w zasadzie dowolnego rejestru procesora (z niewielkimi wyjątkami, na przykład niedozwolone są przesłania pomiędzy rejestrami segmentowymi). W przeciwieństwie do nich, rozkazy in i out akceptują wyłącznie akumulator - AX dla portów 16-bitowych lub AL dla portów 8-bitowych. O tym, który z tych dwóch obszarów będzie wybrany i jaki będzie kierunek przekazywania informacji (do czy od CPU) decydują sygnały systemowej magistrali sterującej:
IOWC - zapis do przestrzeni wejścia-wyjścia;
IORC - odczyt z przestrzeni wejścia-wyjścia;
MRDC - odczyt z pamięci;
MWDC - zapis do pamięci.
20 linii adresowych procesora 8086 umożliwia dostęp do przestrzeni adresowej o wielkości l MB. Zastosowany w 8086 mechanizm adresowania wykorzystuje tzw. segmen-tację. 20-bitowy adres fizyczny składany jest z 16-bitowego adresu segmentu (ang. segment address), zapisanego w jednym z rejestrów segmentowych procesora (CS, DS, ES lub SS) i 16-bitowego przemieszczenia wewnątrz segmentu (ang. offset address), zapisanego w jednym z pozostałych rejestrów(Nie wszystkie rejestry procesora 8086 mogą być użyte do adresowania pamięci. Nie da się w tym celu wykorzystać rejestrów AX, CX i DX).
.
Bezpośrednią konsekwencją przyjętego sposobu adresowania jest logiczny podział pamięci na segmenty o wielkości do 65 536 bajtów, natomiast najistotniejszą konsekwencją pośrednią- możliwość relokacji kodu z dokładnością do 16 bajtów (minimalna różnica pomiędzy początkami dwóch różnych segmentów). Sposób tworzenia adresu fizycznego na podstawie zapisanego w odpowiednich rejestrach adresu logicznego (w postaci segment:offset) przedstawia rysunek 1.43.
Procesor 8086 może zaadresować 65 536 portów jednobajtowych lub 32 768 portów dwubajtowych (albo ich kombinację nie przekraczającą łącznie rozmiarów segmentu, tj. 64 kB). Układy dekoderów adresowych płyty głównej ograniczają jednak ten obszar do l 024 bajtów, tj. adresów OOOh - 3FFh, przy zachowaniu możliwości koegzystencji portów 8- i 16-bitowych.
Porty przestrzeni adresowej wejścia-wyjścia stanowią swego rodzaju bramy, przez które procesor widzi rejestry wewnętrzne różnych urządzeń. Urządzenia te to na ogół wyspecjalizowane sterowniki (ang. controller), posiadające mniej lub bardziej rozbudowaną listę poleceń przyjmowanych przez jeden z portów. Stan, w jakim znajduje się dany sterownik, obrazowany jest zwykle poprzez zawartość tzw. rejestru statusowego (dostępnego też przez jeden z portów). Transport danych do i z urządzenia również odbywa się poprzez porty.
Procesor uzyskuje dzięki temu możliwość programowania różnych układów peryferyjnych za pomocą instrukcji out. Jest również możliwe sprawdzanie stanu urządzenia przez pobranie zawartości jego rejestru statusowego instrukcją in. Przekazywanie danych między obsługiwanym przez dany sterownik urządzeniem peryferyjnym a pamięcią odbywa się (w zależności od kierunku) za pomocą instrukcji in i out.
Procesory 8086 i 8088
Procesor 8086
Dla tego procesora charakterystyczne są dwa tryby pracy: minimalny i maksymalny.
W trybie minimalnym procesor sam wytwarza sygnały sterowania magistralą systemową. Tryb maksymalny wymaga obecności specjalnego dekodera 8288, który - bazując na sygnałach statusowych SO - S2 procesora - wytwarza niezbędne sygnały sterujące. W związku z powyższym końcówki 24 - 31 układu 8086 zmieniają swoje znaczenie w zależności od trybu pracy. Schemat wyprowadzeń mikroprocesora 8086 pokazany jest na rysunku 1.44.
Table). Każdy rekord tej tablicy opisuje (w formie liczby 12-bitowej) dotychczasowe zachowanie się jednego z rozgałęzień programowych. Tablica jest indeksowana co znacznie skraca czas dostępu.
Podwójna jednostka MMX może teoretycznie wykonywać do dwóch instrukcji MMX w jednym cyklu. Ponieważ jednak blok MMX-1 realizuje operacje mnożenia i dodawania natomiast blok MMX-2 odpowiedzialny jest za przesunięcia i rozkazy pakowania, nie jest możliwe parowanie dowolnych rozkazów MMX.
Implementowane są funkcje SDNow!, których wykonanie przebiega w blokach MMX-1 lubMMX-2.
Przystosowanie do pracy w otoczeniu zgodnym ze specyfikacją podstawki typu Super 7 (magistrala 100 MHz).
Procesory WinChip 2A wykorzystują ułamkowe mnożniki częstotliwości.
Tabela 1.28.
Podstawowe dane procesorów IDT WinChip 2
(W2-225; W2-240; W2-250; W2-266; W2-300; W2-220A; W2-233A; W2-266A; W2-300A;)
Architektura; RISC;
Technologia; 0,28 um/0,35 um (225 do 300); 0,25 um (200A do 300A);
Zegar CPU [MHz]; 225; 240; 250; 266; 300; 200; 233; 233; 250;
Magistrala [MHz]; 75; 60; 83; 66; 75/100; 66; 66; 100; 100;
Mnożnik (BF); x3; x4; x3; x4; x4/x3; x3; x3,5; 2,33; x2,5;
L1 Cache (kod); 32 kB, 2-Ways;
L1 Cache (dane); 32 kB, 4-Ways;
Pipe-Line Stages; 6;
Out of Order Execution; x;
TLB; Code Cache TLB: 128 Entries / 8-Ways, Data Cache TLB: 128 Entries / 8-Ways;
Branch Prediction; Branch History Table: 4 096 entries;
V#COM , V#IO [V]; 3,52 V (3,45 - 3,6) lub 3,3V (3,135 - 3,6);
Pobór mocy, max. [W]; 12; 13; 14; 15; 16; 12; 13; 14; 16;
Return Stack; 8;
Interface; Socket Super 7;
Oto znaczenie poszczególnych wyprowadzeń:
AD 15 - ADO 16-bitowa magistrala danych procesora oraz jednocześnie
16 mniej znaczących bitów 20-bitowej magistrali adresowej. W obsłudze magistrali wykorzystany jest proces zwany multipleksowaniem: końcówki AD15 - ADO są wykorzystane najpierw do wystawienia adresu, po czym zmieniają swe znaczenie i obsługują szynę danych.
A19 - A16 Brakujące cztery najbardziej znaczące bity adresu S6 - S3 i jednocześnie (multipleksowane) cztery linie statusowe, informujące o używanym w danej operacji rejestrze segmentowym oraz o stanie bitu IE (ang. Interrupt Enable) maskującego przerwania:
S3; S4; S5; S6; Rejestr segmentowy;
0; 0; IE; 0; ES;
1; 0; IE; 0; SS;
0; 1; IE; 0; CS;
1; 1; IE; 0; DS;
-BHE/S7 - (Bus High Enable) - sygnał używany przez procesor w operacjach bajtowych. Niezależnie od tego, czy przedmiotem operacji są pojedyncze bajty czy też dwubajtowe słowa, wykorzystywana jest ta sama 16-bitowa magistrala danych. Skutkiem tego, zależnie od parzystości lub nieparzystości adresu obiektu w przestrzeni adresowej, żądany bajt zajmie na magistrali jedną z dwóch możliwych pozycji. Biorąc pod uwagę stan bitu AO (informujący o parzystości adresu) otrzymujemy następujące kombinacje:
S7;AO;Znaczenie;
0;0;przekazywane jest słowo 16-bitowe;
0;1;bajt leży na liniach D15 - D8 (lokalizacja nieparzysta);
1;0;bajt leży na liniach D7 - DO (lokalizacja parzysta);
1;1;stan zabroniony - kombinacja wykluczona;
-RD - (Read) - aktywny stan tego wyjścia (odpowiadający poziomowi zera logicznego) informuje o żądaniu odczytu danych (z pamięci lub przestrzeni wejścia-wyjścia) przez procesor.
READY - Wejście wprowadzające procesor w stan oczekiwania. W stanie tym generowane są tzw. cykle oczekiwania (ang. wait state), a procesor czeka na zgłoszenie gotowości urządzenia wejścia-wyjścia lub pamięci. Dotyczy to obydwu kierunków wymiany danych, tzn. procesor może czekać zarówno na wystawienie danych na magistralę, jak i na ich zdjęcie. W rzeczywistości procesor otrzymuje tzw. synchronizowany sygnał READY, który niezależnie od asynchronicznego źródła przypada zawsze na zboczu impulsu taktującego CLK.
INTR - (Interrupi) - wejście zbierające zgłoszenia przerwań pochodzących od sprzętu. W rzeczywistości jest to "punkt wejścia" kontrolera przerwań.
-TEST - Stan tego wejścia badany jest instrukcją wait. W stanie wysokim procesor wprowadzany jest w swego rodzaju "bieg jałowy" i utrzymywany w nim tak długo, jak długo sygnał na tej końcówce utrzymuje się na wysokim poziomie logicznym.
NMI - (Nonmaskable Interrupi) - wejście przerwań niemaskowalnych. W chwili zgłoszenia takiego przerwania procesor kończy rozpoczęty rozkaz i zapamiętawszy swój stan przechodzi do wykonania procedury obsługi przerwania INT 2.
RESET - Wejście wymuszające inicjalizację procesora (powrót do stanu wyjściowego), oznaczającą załadowanie rejestrów wewnętrznych procesora ściśle określonymi wartościami oraz podjęcie wykonywania programu od adresu FOOO:FFFOh. W celu wywołania procedury inicjalizacji sygnał RESET musi utrzymać się w wysokim stanie logicznym przez co najmniej 4 cykle zegara taktującego CPU (ma to na celu uodpornienie wejścia na zakłócenia).
CLK - Sygnał taktujący dla procesora.
~SO,~S1,~S2 - Sygnały sterujące dla kontrolera magistrali 8288 (tylko
w trybie maksymalnym). Możliwe są następujące kombinacje:
S2;S1;S0;Znaczenie;
0;0;0;INTA, sygnał przyjęcia zgłoszenia przerwania (ang. IRO - Interrupt Request);
0;0;1;procesor czyta z przestrzeni wejścia-wyjścia;
0;1;0;procesor pisze do przestrzeni wejścia-wyjścia;
0;1;1;HALT, procesor w stanie oczekiwania;
1;0;0;trwa uzupełnianie podręcznej kolejki rozkazów;
1;0;1;procesor czyta z pamięci;
1;1;0;procesor pisze do pamięci;
1;1;1;stan
pasywny;
~RQ/GTO, ~RQ/GT1, LOCK - Regulują dostęp do szyny lokalnej, którą połączone są układy bezpośredniego dostępu do pamięci (DMA), procesor i koprocesor.
QSO-QS1 - Podają stan podręcznej kolejki rozkazów (Prefetch Queue).
MN/~MX - Przełącznik trybu pracy MIN/MAX (1 = tryb minimalny,0 = tryb
maksymaly).
V#CC - Wejście napięcia zasilającego (+5V).
GND = Masa zasilania.
Modele PC/XT używają procesora 8086 wyłącznie w trybie maksymalnym (wspomaganego kontrolerem magistrali 8288), tak więc nie będziemy się zajmować sygnałami procesora 8086 pracującego w trybie minimalnym.
Procesor 8088
Procesor 8088 jest oszczędnościową wersją układu 8086. Nie chodzi tu bynajmniej o oszczędności przy produkcji samego procesora, lecz o cenę 8-bitowych układów peryferyjnych z nim współpracujących.
W zakresie zestawu rozkazów i trybów adresowania oba układy są w pełni zgodne. Oba przetwarzają dane 16-bitowe, z tą jednak różnicą, że układ 8088 posiada wyprowadzone jedynie osjem bitów swojej 16-bitowej magistrali danych. Każda operacja dostępu do dwubajtowego słowa wykonywana jest w dwóch etapach. Przykładowe polecenie przesłania 16-bitowego słowa z pamięci do akumulatora AX "rozpisywane" jest przez sprzęt w niewidoczny dla oprogramowania sposób na dwie elementarne operacje jednobajtowe na rejestrach AH i AL, niezależnie od tego, czy dotyczy ono parzystego, czy nieparzystego adresu w pamięci.
Następną różnicę w stosunku do procesora 8086 stanowi zredukowana do 4 bajtów długość kolejki rozkazów. Kolejka ta jest uzupełniana jednocześnie z wykonywaniem rozkazu (jeśli aktualnie wykonywany rozkaz nie wymaga dostępu do magistrali) już przy "ubytku" jednego bajtu (dla porównania, w 8086 począwszy od dwóch bajtów). Czas dostępu do bajtu pamięci wynosi cztery cykle zegarowe. Może się więc zdarzyć, że kolejka wypełniona rozkazami nie wymagającymi argumentów pobieranych z pamięci (na przykład clc, ror, sti) wyczerpie się szybciej, niż nastąpi jej uzupełnienie. Stanowi to dodatkówy "hamulec" w pracy procesora.
Kontroler 8288
Układ scalony 8288 spełnia rolę pośrednika między samym procesorem a systemową magistralą sterującą. Jego głównym zadaniem jest dekodowanie sygnałów SO - S2 procesora 8086 (pracującego w trybie maksymalnym; jak wiemy, w trybie minimalnym niezbędne sygnały sterujące magistralami wytwarza sam procesor) i przetwarzanie ich na właściwe sygnały składowe magistrali sterującej, tj. IOWC, IORC, MWTC, MRDC, 1NTA oraz statusu procesora. Steruje on również pracą rejestrów zatrzaskowych (ang. latch) buforów magistrali adresowej i danych (.Są to rejestry przechowujące załadowaną do nich wartość do chwili załadowania następnej.).Stosowanie tego rodzaju rejestrów jest niezbędne, bowiem dane i adresy muszą być utrzymywane na szynach tak długo, jak długo jest to potrzebne dla prawidłowego zakończenia operacji transmisji danych.W przeciwnym przypadku mogłoby się zdarzyć, że wystawione przez pamięć lub układy wejścia-wyjścia na szynę danych słowo zniknęłoby z niej, zanim procesor zdążyłby je przejąć. To samo obowiązuje oczywiście przy operacji wysyłania danych przez procesor.
Rozkład wyprowadzeń układu 8288 przedstawia rysunek l .45.
Poszczególne wyprowadzenia opisano poniżej.
~SO - ~S2 - Połączone są z wyjściami ~SO - ~S2 procesora.
CLK - (Memory Read) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na pamięć -> CPU.
MB - Wejście sterujące trybem pracy magistral. Stan l (tryb MULTIBUS) odpowiada powszechnie stosowanemu protokołowi firmy Intel, O wymusza maksymalną prędkość pracy magistral.
-MWTC - (Memory Write) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na CPU-> pamięć.
-MRDC -
(Memory Read) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na pamięć -> CPU.
-IOWC - (Input/Output Write) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na CPU -> układ wejścia-wyjścia.
-IORC - (Input/Output Read) - niski poziom logiczny na tym wyjściu ustala kierunek przesyłania danych na układ wejścia-wyjścia ->CPU. DEN - (Data Enable) - niski poziom logiczny na tym wyjściu jest sygnałem dla rejestru zatrzaskowego bufora magistrali danych, powodującym "zamrożenie" w nim aktualnego stanu tej magistrali.
ALE - (Address Latch Enable) - niski poziom logiczny na tym wyjściu jest sygnałem dla rejestru zatrzaskowego bufora magistrali danych, powodującym "zamrożenie" aktualnego stanu tej magistrali.
DT/-R - (Data Transmit/Receive) - informuje o aktualnym ogólnym kierunku pracy szyny; l = zapis z procesora, O = odczyt przez procesor.
-1NTA - Sygnał potwierdzenia przyjęcia przerwania sprzętowego przez procesor.
~AEN - (Address Enable) - podanie na to wejście stanu niskiego powoduje uaktywnienie wyjść układu 8288 sterujących magistralami.
CEN - (Command Enable) - podanie na to wejście stanu niskiego ustawia wszystkie wyjścia sterujące magistralami oraz wyjścia DEN i -PDEN w stanie nieaktywnym.
MCE/-PDEN - (Master Cascade/Peripherial Data Enable) - w zależności od stanu wejścia MB wyjście to służy do obsługi priorytetu przerwań lub komunikacji z urządzeniami wejścia-wyjścia. W komputerach PC XT wyjście to nie jest wykorzystywane.
-AMWC - (Advanced Memory Write} - wystawienie sygnału na tym
wyjściu uprzedza układy pamięci o mającej nastąpić operacji zapisu.
-AIOWC - (Advanced l/O Write Command) - wystawienie sygnału na tym wyjściu uprzedza układy wejścia-wyjścia o mającej nastąpić operacji zapisu.
V#CC - Wejście napięcia zasilającego (+5V). GND - Masa zasilania.
Elementy składowe architektury komputera XT
Centralną częścią tego modelu jest oczywiście procesor 8086 lub 8088. Płyta główna XT jest przystosowana do instalacji koprocesora arytmetycznego 8087. W niektórych nowszych modelach PC/XT stosowane były procesory V20 i V30 firmy NEC, będące rozbudowanymi wersjami procesora 8088 i 8086.
Sygnał zegarowy 14,318180 MHz wytwarzany w układzie 8284, po podziale przez 3 do wielkości 4,77 MHz, stanowi główny sygnał taktujący. Nowsze modele XT odbiegają od tego, stosowanego głównie w PC, rozwiązania i posiadają układ generujący bezpośrednio przebieg taktujący o częstotliwości sięgającej 12 MHz. Wszystkie pozostałe elementy płyty głównej kontaktują się z procesorem poprzez magistrale (szyny) - rysunek l .46. W modelu XT wyróżniamy następujące magistrale:
magistralę lokalną, obejmującą 16-bitową szynę danych i 20-bitową szynę adresową procesora 8086;
magistralą systemową, sprzężoną z magistralą lokalną poprzez rejestry zatrzaskowe sterowane sygnałem ALE. Wszystkie 20 bitów adresu oraz 8 bitów systemowej magistrali danych wyprowadzone jest do gniazd rozszerzających. Magistrala systemowa dostarcza też zestawu sygnałów sterujących, takich jak ~IOR, -IOW, -MEMR, -MEMW , IRQ, DRQ/7, -DACKn itd.;
magistralą X, komunikującą się z pamięcią ROM zawierającą systemowy BIOS (ale nie z rozszerzeniami BIOS na kartach) oraz z portami układów na płycie głównej;
magistralę pamięciową, która łączy szyny systemowe z obwodami pamięci dynamicznej poprzez układy adresowania wierszy i kolumn pamięci;
magistralę zewnętrzną, która stanowi wyprowadzenie 20-bitowej systemowej szyny adresowej, 8-bitowej szyny danych i większości sygnałów systemowej szyny sterującej.
Oprócz procesora (i ewentualnie wspomagającego go koprocesora) oraz pamięci dynamicznej płyta główna w modelu XT zawiera główne elementy składowe wymienione na kolejnych stronach.
ROM - pamięć stała zawierająca procedury inicjalizujące (wykonywane w momencie włączenia komputera) oraz BIOS (Basic Input/Output System - zestaw podstawowych procedur wejścia i wyjścia);
8259A - kontroler przerwań sprzętowych. Jego 8 kanałów przyporządkowano w następujący sposób:
Linia IRQ; Wektor; Urządzenie;
0; 08h; zegar systemowy (kanał 0 generatora 8253);
1; 09h; klawiatura;
2; OAh; zarezerwowane;
3; OBh; COM2;
4; OCh; COM1;
5; ODh; kontroler dysku twardego;
6; OEh;kontroler napędu dysków elastycznych;
7; OFh; LPT1;
Wektor oznacza numer indeksu wskazującego adres procedury obsługi danego przerwania, umieszczony w tzw. tablicy wektorów przerwań. Tablica ta znajduje się w pamięci w obszarze OOOOOh - 003FFh i zawiera czterobajtowe pozycje reprezentujące kolejne adresy.
Do grupy przerwań sprzętowych należy też przerwanie niemaskowalne (NMI), nie jest ono jednak obsługiwane przez żaden z kontrolerów 8259A;
8253 - programowany układ czasowy zawierający trzy niezależne liczniki. Mają one następujące zastosowanie:
Licznik; Przeznaczenie;
0; generacja sygnału IRQO (zegar systemowy);
1; obsługa odświeżania pamięci;
2; obsługa głośnika;
8237A - kontroler DMA. Steruje on szybkim, bezpośrednim przekazywaniem danych pomiędzy układami wejścia-wyjścia a pamięcią (ang. Direct Memory Access} \ zawiera cztery kanały przedstawione na następnej stronie:
Kanał; Przeznaczenie;
0; układ odświeżania pamięci;
1; łącze synchroniczne SDLC (ang. Synchronons Data Link Control - standard łącza synchronicznego firmy IBM);
2; kontroler napędu dysków elastycznych;
3; kontroler dysku twardego;
8255 - interfejs programowalny (ang. PPI - Programmable Peripheral Jnter-face), obsługujący następujące urządzenia:
klawiaturę,
przełączniki pamięci konfiguracji (ang. configuration switches)
włączanie i wyłączanie głośnika,
sterowanie napędem pamięci kasetowej (funkcja ta ma znaczenie historyczne).
Powyższe układy peryferyjne zlokalizowane na płycie głównej oraz te, które umieszczone są na kartach rozszerzenia, tj. sterowniki dysków, łącz szeregowych, równoległych itd., mają ściśle określone obszary adresowe w przestrzeni wejścia-wyjścia, w której widoczne są ich rejestry sterujące. Zestawienie tych adresów podano w tabeli l .30.
Tabela 1.30.
Podział przestrzeni adresowej wejścia-wyjścia w komputerze PC/XT
Zakres; Przyporządkowanie;
OOOh-OOFh; kontroler DMA 8237A;
020h-021h; kontroler przerwań 8259A;
040h-043h; programowalny układ czasowy 8253;
060h-063h; interfejs programowalny 8255;
080h-083h; rejestry stron DMA;
0A0h-0AFh; rejestr maskujący NMI;
0C0h-0CFh; zarezerwowane;
0E0h-0EFh; zarezerwowane;
100h-1FFh; wolne;
200h-20Fh; karta gier;
210h-217h; zarezerwowane;
220h-24Fh; zarezerwowane;
278h-27Fh; łącze równoległe LPT2;
2F0h-2F7h; zarezerwowane;
2F8h-2FFh; łącze szeregowe COM2;
300h-31Fh; karta prototypowa;
320h-32Fh; sterownik dysku twardego;
378h-37Fh; łącze równoległe LPT1;
380h-38Fh; łącze synchroniczne SDLC;
3A0h-3AFh; zarezerwowane;
3B0-3DFh; karta graficzna VGA;
3C0h-3CFh; karta graficzna EGA;
3D0h-3DFh; kolorowa karta graficzna (EGA, CGA);
3B0h-3BFh; karta monochromatyczna i łącze równoległe LPT1;
3EOh-3E7h; zarezerwowany;
3F0h-3F7h; sterownik napędu dysków elastycznych;
3F8h-3FFh; łącze szeregowe COM1;
Ośmiobitowa magistrala zewnętrzna
Komputery klasy PC/XT wyposażone są w umieszczone na płycie głównej 62-końców-kowe gniazda rozszerzenia (ang. expansion slot). Liczba tych gniazd nie jest jednoznacznie sprecyzowana i zależy od modelu płyty. W gniazdach można umieszczać karty 8-bitowe (tzw. krótkie). Charakteryzują się one pojedynczym złączem grzebieniowym.
Teoretycznie jest całkowicie obojętne, w którym z gniazd umieszczona zostanie dana karta, bowiem wyprowadzenia wszystkich gniazd są połączone równolegle - wyjątkiem jest złącze J8 w starszych modelach XT obsługiwane nieco inaczej niż pozostałe gniazda. Pewne karty umieszczone w tym gnieździe nie funkcjonują prawidłowo. W praktyce pewne karty umieszczone zbyt blisko siebie mogą się wzajemnie zakłócać.
Karty rozszerzające są niezmiernie ważnym elementem architektury komputera. Dają one praktycznie nieograniczoną elastyczność w projektowaniu urządzeń peryferyjnych, które z punktu widzenia oprogramowania będą się zachowywały tak, jak gdyby znajdowały się na płycie głównej.
Znaczenia sygnałów zewnętrznej magistrali ośmiobitowej podano poniżej.
ą5V, ą 12V - Zestaw napięć zasilających, z których mogą korzystać karty rozszerzenia.
GND - Masa zasilania.
OSC - Sygnał zegara systemowego 14,318180 MHz; ten sam sygnał, po podzieleniu częstotliwości przez 3, otrzymuje procesor.
IRQ2 - IRQ7 - (Interrupt Requesi) - linie zgłoszeń przerwań sprzętowych. Kanały O (zegar systemowy) i l (klawiatura) obsługują urządzenia zainstalowane na płycie głównej, tak więc nie zostały wyprowadzone.
DRQ1 - DRQ3 - (DMA Reąuesf) - linie zgłoszeń żądania przydziału kanału 1, 2 lub 3 DMA. Kanał O DMA jest już zajęty (obsługuje odświeżanie pamięci), nie jest więc wyprowadzony.
~DACK1 - (DMA Acknowledge) - odpowiadające liniom DRQn linie
~DACK3 potwierdzenia przyjęcia żądania obsługi kanałem DMA.
~DACKO - Sygnał, który może być wykorzystany przez karty posiadające własną pamięć dynamiczną dla jej odświeżania. Pojawia się on równolegle z odbywającymi się z udziałem kanału O DMA cyklami odświeżania pamięci na płycie głównej.
~IOR - (I/O Read) - sygnał ten przyjmuje poziom niski (aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej wejścia-wyjścia w celu odczytu.
~IOW - (I/O Write) - sygnał ten przyjmuje poziom niski (aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej wejścia-wyjścia w celu zapisu.
~MEMR - (Memory Read) - sygnał ten przyjmuje poziom niski
(aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej pamięci w celu odczytu.
~MEMW - (Memory Write) - sygnał ten przyjmuje poziom niski
(aktywny) w chwili wystawienia przez procesor lub kontroler DMA żądania dostępu do przestrzeni adresowej pamięci w celu zapisu.
RESET - Przekazuje kartom rozszerzenia sygnał generowany na płycie po naciśnięciu przycisku RESET.
AO - A19 - 20-bitowa magistrala adresowa komputera. Stan linii AO - A19 odzwierciedla stan wyprowadzeń AO - A19 procesora 8086/8088 lub jest wytwarzany przez układ kontrolera DMA.
D7-DO - Dwukierunkowa, ośmiobitowa magistrala danych.
ALE - (Address Latch Enable) - sygnał wytwarzany przez kontroler magistrali 8288; informuje o ustabilizowaniu adresu na magistrali adresowej, co jest jednocześnie poleceniem dla układów kart rozszerzenia, że należy podjąć dekodowanie adresu i próbę "dopasowania go" do własnej przestrzeni adresowej.
l/O CHRDY - I/O Channel Ready) - poziom sygnału na tej linii sprawdzany jest przez procesor lub kontroler DMA w każdym cyklu dostępu do urządzeń wejść i a-wyjść i a. Powolne układy peryferyjne mogą w ten sposób sygnalizować konieczność wprowadzenia przez urządzenie żądające dostępu (tj. procesor lub kontroler DMA) tzw. cykli oczekiwania, czyli dodatkowych, "pustych" cykli zegarowych (ang. wait s tatę) w oczekiwaniu na dane. Poziom logicznej l oznacza gotowość urządzenia, logiczne O wymusza oczekiwanie.
~I/O CHK - ((I/O Channel Check) - układy zamontowane na kartach rozszerzenia mogą tą drogą zgłaszać płycie głównej swoje niedomagania wykluczające je z dalszej pracy. Sygnał aktywny (tj. zero logiczne) powoduje wygenerowanie przerwania 2 (INT 2), a więc takiej samej akcji jak w przypadku błędu parzystości pamięci na płycie (wyświetlenie odpowiedniego komunikatu i zatrzymanie systemu).
AEN - Wysoki poziom logiczny na tej linii oznacza, że kontroler DMA przejął kontrolę nad magistralami systemowymi (końcówki procesora znajdują się w stanie wysokiej impedancji).
T/C - (Terminal Count) - sygnał generowany przez kontroler DMA. Wskazuje na zakończenie cyklu dostępu DMA (wykonanie zaprogramowanej liczby transmisji).
Architektura komputera AT
Na płycie głównej komputera model AT można ostatnio prócz procesora znaleźć tylko kilka układów scalonych wysokiej skali integracji. Nie oznacza to bynajmniej, że nastąpiły jakieś gruntowne zmiany w stosunku do pierwowzoru, w którym można było jednoznacznie zlokalizować wszystkie charakterystyczne układy scalone Intel serii %nnn. Wysoka skala integracji układów scalonych nie narusza w żaden sposób pełnej zgodności funkcjonalnej elementów systemu, przydziału adresów itd.
W modelu AT wprowadzono oczywiście pewne unowocześnienia - inaczej nie można by przecież mówić o nowym modelu. Oto ogólna sylwetka architektury AT, określanej też mianem ISA (ang. Industry Standard Architecture):
Procesor otrzymuje sygnał taktujący z układu 82284, następcy 8284, stosowanego dla procesorów 8086/8088. Pierwsze modele AT taktowane były sygnałem 6 MHz. Obecnie na rynku znajdują się układy scalone 80286 produkcji firmy Harris, dające się taktować zegarem 25 MHz. Na tak wysokie częstotliwości zegarowe muszą być jednak przygotowane również inne elementy architektury, a nie tylko sam procesor.
24-bitowa magistrala adresowa komputera AT pokrywa przestrzeń adresową do 16 MB, co jednak wymaga oprogramowania wykorzystującego tzw. chroniony tryb pracy procesora (ang. protected modę). W zgodnym z 8086/8088 trybie rzeczywistym (ang. real modę) wykorzystanych jest tylko 20 linii adresowych.
Koprocesorem arytmetycznym współpracującym z procesorem 80286 jest układ 80287. Podstawka dla niego znajduje się na płycie głównej.
W modelu AT możemy wyróżnić następujące magistrale:
lokalną, zawierającą 24 linie adresowe i 16 linii danych, połączonych bezpośrednio z procesorem,
systemową, która jest ustabilizowaną (poprzez zastosowanie rejestrów zatrzaskowych), częściową "kopią" magistrali lokalnej. Magistrala systemowa AT zawiera wszystkie linie lokalnej szyny danych oraz linie AO-A19 lokalnej szyny adresowej,
magistralę X, przez którą realizowana jest komunikacja z ROM-BIOS (nie z rozszerzeniami BIOS na kartach) oraz z portami układów umieszczonych na płycie głównej,
pamięciową, łączącą linie magistrali systemowej z obwodami pamięci dynamicznej poprzez układy adresowania wierszy i kolumn pamięci,
magistralę L, wyprowadzającą linie A17 - A23 magistrali lokalnej do gniazd rozszerzających (tj. magistrali zewnętrznej),
zewnętrzną, która stanowi wyprowadzenie 24-bitowej systemowej szyny adresowej, 16-bitowej szyny danych i większości sygnałów systemowej szyny sterującej.
Należy wyraźnie zaznaczyć, że jedynymi układami mogącymi przejąć pełną kontrolę nad magistralami systemowymi (tzn. inicjować transmisję i decydować ojej kierunku) są procesor i kontroler DMA. Żaden inny procesor zamontowany na karcie rozszerzającej nie może sterować w bezpośredni sposób magistralami systemowymi. Na magistrali zewnętrznej wyprowadzany jest co prawda sygnał MASTER, ale procedura przejęcia sterowania rozpoczyna się od wymiany sygnałów uzgodnienia z kontrolerem DMA, który to dopiero odłącza procesor systemowy od magistral.
Dla zwiększenia liczby kanałów IRQ (linii przyjmujących zgłoszenia przerwań sprzętowych) wprowadzony został drugi układ 8259A (tzw. slave). Jest on podłączony do jednego z wejść układu głównego (master). Komputer AT dysponuje dzięki temu 15 kanałami IRQ, które zostały przyporządkowane następująco:
Linia IRQ; Wektor; Urządzenie;
0; 08h; zegar systemowy;
1; 09h; klawiatura;
2; 0Ah; wyjście kaskadowe do układu Slave;
3; 0Bh; COM2;
4; 0Ch; COM1;
5; 0Dh; LPT2;
6; 0Eh; kontroler napędu dysków elastycznych;
7; 0Fh; LPT1;
8; 70h; zegar czasu rzeczywistego;
9; 71h; wywołuje przerwanie IRQ2;
10; 72h; zarezerwowane;
11; 73h; zarezerwowane;
12; 74h; zarezerwowane;
13; 75h; koprocesor arytmetyczny;
14; 76h; kontroler dysku twardego;
15; 77h; zarezerwowane;
Wektor oznacza numer indeksu wskazującego adres procedury obsługi danego przerwania, umieszczony w tzw. Tablicy wektorów przerwań. Tablica ta znajduje się w pamięci w obszarze OOOOOh - 003 FFh i zawiera czterobajtowe pozycje reprezentujące kolejne adresy.
Do grupy przerwań sprzętowych należy też tzw. przerwanie niemaskowalne (NM1), nie jest ono jednak obsługiwane przez żaden z kontrolerów 8259A.
System obsługi DMA także otrzymał dodatkowe wsparcie w postaci drugiego układu scalonego 8237A obsługującego transmisje 16-bitowe. Kanały DMA zostały przydzielone w następujący sposób:
Kanał; Szerokość w bitach; Przeznaczeni;e
0; 8; zarezerwowany;
1; 8; układ transmisji synchronicznej SDLC;
2; 8; kontroler napędu dysków elastycznych;
3; 8; zarezerwowany;
4; -; kaskada;
5; 16; zarezerwowany;
6; 16; zarezerwowany;
7; 16; zarezerwowany;
Programowalny układ czasowy 8253 został zastąpiony unowocześnionym modelem 8254, którego trzy niezależne kanały obsługują następujące urządzenia:
Kanał; Przeznaczenie;
0; generacja sygnału IRQO (zegar systemowy);
1; odświeżanie pamięci;
2; obsługa głośnika;
Zrezygnowano z usług większości mikroprzełączników (DlP) dla ustalania parametrów konfiguracyjnych systemu. Ich miejsce zajęła podtrzymywana bateryjnie pamięć CMOS. W układzie MC 146818, zawierającym pamięć CMOS znalazło się też miejsce dla zasilanego bateryjnie zegara czasu rzeczywistego, pracującego również przy wyłączonym komputerze. W modelu XT zegar pracował tylko od włączenia do wyłączenia komputera.
Magistrala zewnętrzna otrzymała dostęp do wszystkich 16 bitów systemowej szyny danych oraz wzbogacona została o kilka nowych sygnałów sterujących.
Do wszystkich układów scalonych stanowiących składowe systemu można się odwoływać przez porty umieszczone w przestrzeni adresowej wejścia-wyjścia (tabela l .31).
Procesor 80286
Pod względem budowy wewnętrznej procesor 80286 nie różni się w istotny sposób od swego poprzednika. Nowością jest jedynie wprowadzenie tzw. chronionego trybu pracy (ang. protected modę). Jego istota polega na sprzętowej realizacji mechanizmu kontroli dostępu do określonych obszarów pamięci. Mechanizmy te znajdują zastosowanie w pracy wielozadaniowych systemów operacyjnych, takich jak OS/2 czy Windows NT.
Układ 80286 dysponuje specjalnym, dodatkowym zestawem rozkazów przeznaczonych do obsługi tego trybu pracy. Poza nim, w trybie rzeczywistym (ang. real modę) procesor dysponuje listą rozkazów zgodną z 8086, poszerzoną o pewne nowe. Należy podkreślić, że ich wykorzystanie w programach użytkowych mających działać na różnych komputerach, wliczając w to modele XT, nie jest możliwe.
Poszerzona do 24 bitów magistrala adresowa pokrywa przestrzeń adresową 16 MB. Z tak dużej pamięci można jednak korzystać w trybie chronionym procesora. W trybie rzeczywistym należy się zadowolić adresowalnym obszarem pamięci zgodnym z 8086, tj. l MB, przy czym sposób generacji adresu fizycznego jest identyczny jak w przypadku "przodka". W trybie tym układ 80286 zachowuje się jak szybki 8086. Na zwiększenie prędkości mają wpływ następujące czynniki: zwiększona do 25 MHz maksymalna częstotliwość taktująca, poprawki w konstrukcji wewnętrznej procesora, zmodyfikowana poprzez krótsze cykle obsługa magistrali.
Tabela 1.31.
Podział przestrzeni adresowej wejścia-wyjścia w komputerze PC/A T
Zakres
Przyporządkowanie
000h-00Fh;kontroler DMA 8237A, Master;
020h-021h;
kontroler przerwań 8259A Master;
040h-043h;
programowalny układ czasowy
8254;
060h-063h;
kontroler klawiatury 8042;
070h-071h;
zegar czasu rzeczywistego;
080h-083h;
rejestry stron DMA;
0A0h-0AFh;
kontroler przerwań 8259A, Slave;
0C0h-0CFh;
kontroler DMA 8237A, Slave;
0E0h-0EFh;
zarezerwowane;
0F0h-0FFh;
koprocesor 80287;
100h-1EFh;
wolne;
170-177H;
drugi kontroler dysku twardego AT-BUS;
1F0H-1F7H;
kontroler dysku twardego AT-BUS;
200h-20Fh;
karta gie;
210h-217h;
zarezerwowane;
220h-267h;
wolne;
278h-27Fh;
łącze równoległe LPT2;
2C0h-2DFh;
druga karta EGA;
2F8h-2FFh;
łącze szeregowe COM2;
300h-31Fh;
karta prototypowa;
320h-32Fh;
wolne;
370h-377h;
drugi kontroler napędu dysków elastycznych;
378h-37Fh;
łącze równoległe LPT1;
380h-38Fh;
łącze synchroniczne SDLC;
3A0h-3AFh;
zarezerwowane;
3B0h-3DFh;
karta graficzna VGA;
3B0h-3BFh;
karta monochromatyczna i łącze równoległe LPT1;
3C0h-3CFh;
karta graficzna EGA;
3D0h-3DFh;
kolorowa karta graficzna (CGA, EGA);
3E0h-3E7h;
zarezerwowany;
3F0h-3F7h;
sterownik dysków elastycznych;
3F8h-3FFh;
COM1;
Obszar przestrzeni adresowej dla urządzeń wejścia-wyjścia jest zgodny z możliwościami procesora 8086, obsługiwane jest 64 k portów 8-bitowych o adresach 0-65 535, 32 k portów 16-bitowych o parzystych adresach 0, 2, 4, ..., 65 534 lub ich kombinacje w zakresie do 64 kB. Podobnie jednak jak w modelu XT, wbudowany w płytę dekoder adresów wejścia-wyjścia rozpoznaje tylko 1024 z nich - są to porty ulokowane w zakresie0 - l 023 (000h - 3FFh).
Układ 8086 miał możliwość samodzielnego wytwarzania sygnałów sterowania magistralą, co pozwalało na rezygnację z udziału kontrolera 8288. Procesor 80286 nie ma takiej możliwości i musi współpracować z odpowiadającym mu kontrolerem magistrali 80288.
Magistrala zewnętrzna (16-bitowa)
Podobnie jak w modelu PC/XT, większa część sygnałów magistrali systemowej wyprowadzona jest do gniazd, w których można umieszczać karty rozszerzające. Gniazda te (rysunek 1.48) podzielone są na dwie grupy: pierwsza, 62-stykowa, jest zgodna (z wyjątkiem sygnałów OWS i REF) z 8-bitową magistralą XT, druga stanowi jej 36-stykowe uzupełnienie.
Płyta główna modelu AT posiada na ogół, oprócz złącz 16-bitowych, również jedno lub dwa gniazda 8-bitowe. Obowiązują tutaj te same uwagi jak w przypadku modeli XT. Nie należy jednak umieszczać kart 16-bitowych (tzw. długich) w "krótkich" złączach, choć jest to fizycznie możliwe. Tak umieszczone karty (na przykład VGA) w większości przypadków mogą pracować poprawnie, ale nie zostaną w pełni wykorzystane ich możliwości.
Poniżej omówione zostaną tylko linie nie występujące w 8-bitowej magistrali XT. Znaczenie pozostałych sygnałów jest takie samo, jak podano przy opisie magistrali XT.
~OWS - (O Wait States) - wystawiając na tej linii poziom zera
logicznego karta rozszerzenia daje sygnał, że jest dostatecznie szybka, aby być obsługiwaną bez dodatkowych cykli oczekiwania.
~REF - (Refresh) - sygnał ten informuje, że w danym momencie
odbywa się cykl odświeżania pamięci dynamicznej na płycie głównej. Jego źródłem nie jest kanał O DMA, lecz jeden z generatorów układu 8254 (ang. timer) lub specjalizowane układy obsługujące samą pamięć.
V#cc - Napięcie zasilające (+5V).
LA 17 - LA23 - (Large Address) - siedem najbardziej znaczących bitów 24-bitowej szyny adresowej procesora. Linie LA 17 - LA 19 pokrywają się logicznie z liniami A17 - A19 w części 8-bitowej złącza, z tą różnicą, że adres na liniach LAw? wystawiany jest wcześniej.
SD8 - SD 15 - (System Data) - bardziej znaczący bajt 16-bitowej systemowej szyny danych AT.
-SBHE - (System Bus High Enable) - sygnał ten jest wystawiany przez procesor lub inny układ przejmujący kontrolę nad magistralami (na przykład kontroler DMA) podczas procesu przekazywania danych 16-bitowych z udziałem bardziej znaczącego bajtu magistrali, tj. SD8-SD15.
~MEM CS16 - Sygnał ten generowany jest przez karty rozszerzające, które gwarantuj ą dostęp do pamięci w trybie 16-bitowym. Karta 16-bitowa, która nie odpowie w odpowiednim momencie wystawieniem niskiego poziomu logicznego na linii ~MEM CS16, będzie obsługiwana tak, jak karta 8-bitowa. Jeżeli karta 8-bitowa zostanie umieszczona w złączu 16-bitowym, to sygnał ~MEM CS16 będzie nieaktywny (na nie podłączonej linii ustala się wysoki poziom logiczny), co pozwala na automatyczną detekcję rozmiaru złącza karty.
~I/0 CS16 - Sygnał ten generowany jest przez karty rozszerzające, które gwarantują dostęp do przestrzeni wejścia-wyjścia w trybie 16-bitowym. Obowiązują tu te same uwagi co dla sygnału ~MEMCS16.
~MEMR - (Memory Read) - stan aktywny tej linii (niski poziom logiczny) oznacza żądanie odczytu przez procesor lub kontroler DMA danych z pamięci w zakresie 0-16 MB. Sygnał ~SMEMR w 8-bitowej części złącza generowany jest wyłącznie przy odczytach w przestrzeni adresowej O - l MB, zaś przy próbie dostępu do pamięci powyżej l MB pozostaje nieaktywny (wysoki poziom logiczny);
~MEMW - (Memory Write) - stan aktywny tej linii (niski poziom logiczny) oznacza żądanie odczytu przez procesor lub kontroler DMA danych z pamięci w zakresie 0-16 MB. Sygnał -SMEMW w 8-bitowej części złącza generowany jest wyłącznie przy odczytach w przestrzeni adresowej O - l MB, zaś przy próbie dostępu do pamięci powyżej l MB pozostaje nieaktywny (wysoki poziom logiczny).
IRQ10 - 12, ~IRQ14 - 15 - (Interrupt Reąuesf) - linie zgłoszeń przerwań sprzęto do datkowego w architekturze AT kontrolera przerwań 8259A (Slave). Linia IRQ13, przypisana standardowo obsłudze znajdującego się na płycie głównej koprocesora arytmetycznego, nie jest wyprowadzona.
DRQO,~DACKO - (DMA Reąuest - DMA Acknowledge) - wolny, 8-bitowy kanał obsługi DMA powstały po zlikwidowaniu mechanizmu odświeżania pamięci kanałem O DMA, pochodzącym z architektury XT.
DRQ5 - 7, ~DACK5 - 7 - 16-bitowe kanały DMA udostępniane przez dodatkowy układ kontrolera DMA 8237A (Slave).
~MASTER - Sygnał umożliwiający przejęcie sterowania systemem przez procesor znajdujący się na karcie rozszerzenia. Układowi takiemu należy wpierw przyporządkować jeden z kanałów DMA. Kontroler DMA przeprowadza rutynowo proces odłączania procesora zainstalowanego na płycie głównej (sekwencja sygnałów HRQ i HLDA) przed wysłaniem sygnału ~DACK do chcącego zawładnąć magistralami procesora. Ten reaguje uaktywnieniem linii -MASTER (tj. sprowadzeniem jej do poziomu zera logicznego) i przejmuje sterowanie systemem.
Architektura komputerów 386, 486 i Pentium
Modele AT wyposażone w procesory 80286 należą już do przeszłości. Ich miejsce zajęły komputery wyposażone w procesory 80386, 80486 (odchodzące już do lamusa) i Pentium. Płyty takie cechują 32-bitowe magistrale systemowe (danych i adresowa). Gniazda kart rozszerzających (magistrala zewnętrzna) mają jednak wyprowadzone w dalszym ciągu jedynie 16 linii danych i 24 linie adresowe. Odpowiedniego łamania i przesuwania bajtów dokonują specjalne układy pośredniczące między magistralą systemową a zewnętrzną. Pomijając te szczegóły można powiedzieć, że architektonicznie 32-bitowe modele AT nie różnią się w istocie od swych 16-bitowych pierwowzorów. Wzrost częstotliwości taktujących, pociągający za sobą w oczywisty sposób przyspieszenie pracy magistral systemowych, niesie w sobie wzrost mocy obliczeniowej.
Najwęższym gardłem architektury AT pozostaje po dziś dzień magistrala zewnętrzna. Decydują o tym dwa główne czynniki: jej szerokość i szybkość pracy. Tak się nieszczęśliwie składa, że układy peryferyjne najintensywniej wymieniające dane z pamięcią montowane są na kartach rozszerzających. Mowa tu w szczególności o.kontrolerach dysków twardych, kartach sieciowych i graficznych. Istnieją wprawdzie nieliczne wyjątki rozwiązań płyt głównych ze zintegrowanym na nich kontrolerem dysków lub wręcz kartami sieciowymi Ethernet, ale układy te komunikują się z procesorem nadal 16-bitową szyną danych, chociaż z powodzeniem mogłyby być obsługiwane z wykorzystaniem 32-bitowych strumieni danych. Drugim hamulcem jest częstotliwość taktowania magistrali zewnętrznej. Nawet w modelu 486DX-50 MHz magistrala zewnętrzna taktowana jest w najlepszym razie częstotliwością 12,5 MHz (zwykle 6-8 MHz). Wprowadzony wraz z magistralą AT standard ISA, którego producenci sprzętu muszą przestrzegać dla zachowania zgodności sprzętowej, wyznacza maksymalną częstotliwość pracy magistrali zewnętrznej na 8,33 MHz. Powstaje swego rodzaju błędne koło, gdyż szybkie układy peryferyjne nie wszędzie mogą być wykorzystane, a podnoszenie częstotliwości pracy magistrali nie gwarantuje niezawodnej pracy znajdujących się na rynku kart starszego typu.
Rozwiązanie tych problemów w ramach architektury AT nie jest możliwe. Z tego też względu powstało wiele konkurencyjnych standardów, z których tylko nieliczne ugruntowały swą pozycję na rynku. Oznacza to naturalnie, że istnieją nie tylko płyty główne innych standardów, ale - co nie mniej ważne - dostosowane do nich karty rozszerzające obsługujące te same urządzenia zewnętrzne, jak monitory, dyski itp.
Przed przejściem do omówienia cech charakterystycznych standardów magistral konkurencyjnych dla ISA podajmy dla porównania to, co wydaje się być najistotniejsze - osiąganą w każdym z nich teoretyczną przepustowość magistrali zewnętrznej.
Standard - Przepustowość magistrali
ISA - 8,33 MB/s
EISA - 33 MB/s
MCA - 20 MB/s
VESA - 120 MB/s
PCI - 132 MB/s
EISA
(Extended Industry Standard Architecture)
Jednym ze standardów, któremu udało się zdobyć rynek, jest niewątpliwie EISA. System ten stanowi istotny krok na drodze do wykorzystania pełnych możliwości procesorów 32-bitowych. Architektura EISA jest niezwykle kosztowna ze względu na swoją komplikację; zachowana zostaje bowiem możliwość współpracy z dotychczas stosowanymi peryferiami ISA. Kontroler magistrali decyduje każdorazowo, czy podczas bieżącej operacji można "iść" na 32-bitową "całość", czy też należy symulować stary, 16-bitowy tryb pracy. To samo dotyczy kontrolera DMA. W razie potrzeby nowoczesny, 32-bitowy kontroler DMA emuluje pracę swego 8-bitowego poprzednika.
Mimo iż technologia ta nie należy do tanich, ogromna konkurencja na rynku producentów osprzętu EISA doprowadziła do istotnego spadku cen, a co za tym idzie, popularyzacji systemu. Sztandarowym hasłem lansowanym przez wytwórców sprzętu standardu EISA jest kompatybilność (zgodność) z kartami ISA. Spełnienie tego wymogu powoduje, że posiadacz płyty głównej EISA i kart rozszerzających ISA może być pewien, że wszystko będzie razem doskonale współpracować, tyle tylko, że nic się na tym nie zyskuje. Dopiero wyposażenie takiej płyty w karty standardu EISA udostępnia pełne możliwości systemu.
Wprowadzone w stosunku do standardu ISA zmiany nie mają więc charakteru rewolucyjnego, a raczej poważnej operacji kosmetycznej. Dotyczą one kilku obszarów.
Wieloprocesorowość
Dowolny kontroler (procesor) umieszczony na jednej z kart rozszerzających EISA ma nieograniczone możliwości sterowania magistralą systemową. Oznacza to, że w systemie mogą "współżyć" różne procesory mające dostęp do tych samych zasobów komputera, takich jak dyski, pamięć itp. System przydziału magistral kolejnym procesorom jest dosyć rozbudowany i umożliwia hierarchiczno-priorytetowy sposób dostępu.
Magistrala zewnętrzna
Karty rozszerzające EISA mają do dyspozycji, oprócz wielu sygnałów sterujących, 32 bity systemowej szyny adresowej i 32 bity systemowej szyny danych. Na magistralę zewnętrzną EISA składa się 98 sygnałów standardu ISA oraz 90 nowych linii. Nie wszystkie nowe sygnały są jednoznacznie zdefiniowane - pozostawiono tu miejsce na specyficzne rozwiązania producentów wysoce specjalizowanych kart.
Aby zachować wymóg zgodności z kartami ISA, gniazda EISA mają szczególną konstrukcję. Styki gniazd ułożone są na dwóch poziomach. Poziom górny dostarcza wszystkich sygnałów standardu ISA, natomiast w dolnym, położonym w głębi gniazda,
rozlokowane są końcówki EISA. Normalna karta ISA nie może być wsunięta tak głęboko, by sięgnąć linii dodatkowych styków - uniemożliwiają to poprzeczne zapory. Nie są one jednak przeszkodą dla kart EISA, posiadających w odpowiednich miejscach wycięcia.
Kontroler DMA
Bardzo istotne zmiany wprowadzono w systemie DMA. Nie ma już znanych ze standardu ISA ograniczeń objętości przesyłanych danych do bloków po 64 kB (128 kB w kanałach 16-bitowych). Wykorzystywane są pełne zdolności 32-bitowej szyny adresowej, tzn. teoretycznie możliwe są transfery bloków o wielkości do 4 GB. Aby zachować zdolność obsługi kart ISA, stosowany w architekturze EISA nowoczesny, 32-bitowy kontroler DMA ma możliwość pracy w trybie układu 8237A. Każdy z siedmiu kanałów DMA może więc obsługiwać urządzenia 8-, 16-, i 32-bitowe.
Zmieniono też sposób przydziału kanałów urządzeniom. W miejsce stałych priorytetów poszczególnych kanałów wprowadzono rotacyjny system ich przydziału. Jest to krok w stronę systemów wielozadaniowych i wieloprocesorowych, mający uniemożliwić trwałe blokowanie kanałów przez uprzywilejowane urządzenie.
Kontroler przerwań sprzętowych
System EISA dysponuje, podobnie jak ISA, 15 kanałami IRQ. Istotnym novum jest natomiast zmiana sposobu wyzwalania przerwań. Standard ISA używał zboczy impulsu, co jest metodą bardzo podatną na zakłócenia. EISA wymaga od zgłaszającego przerwanie urządzenia utrzymania aktywnego poziomu sygnału, tj. przekroczenia określonego poziomu napięcia, a nie tylko jego wzrostu.
Kontroler magistral
Wszystkie magistrale EISA są 32-bitowe. Procesory 80386 i 80486 mają poza tym możliwość użytkowania magistral w tzw. trybie burst, co oznacza dostęp do adresowanego obiektu w jednym takcie zegarowym. Dla porównania, magistrala AT potrzebuje w najlepszym razie (bez cykli oczekiwania) czterech taktów zegara. Ze względu na zachowanie kompatybilności magistrala zewnętrzna EISA pracuje z maksymalną prędkością 8,33 MHz, natomiast dostęp do pamięci odbywa się już z pełną częstotliwością zegara CPU.
Najbardziej skomplikowaną częścią systemu EISA jest więc niewątpliwie kontroler magistral. Musi on umieć odróżnić od siebie pojedyncze cykle ISA i EISA, przełączać szynę w tryb burst oraz przeprowadzać łamanie i składanie bajtów przy dostępie do obiektów 8- i 16-bitowych.
Pamięć konfiguracji
64 bajty pamięci konfiguracji znane z architektury AT zastąpione zostały 4 kB w standardzie EISA. Pamięć ta przechowuje nie tylko informacje o konfiguracji płyty głównej, ale i o zainstalowanych kartach. W systemie EISA nie ma żadnych przełączników kon-figurujących (DIP) ani zwór; konfigurowanie systemu odbywa się całkowicie programowo.
MCA
(Micro Channel Architecture)
Architektura MCA jest wytworem firmy IBM i została po raz pierwszy wprowadzona w modelach PS/2. Ma w niej miejsce zdecydowany odwrót od tradycji upartego (w celu zachowania kompatybilności) trzymania się standardu ISA. Dotyczy to zarówno cech logicznych architektury, jak i nowej geometrii kart i złącz, która wyklucza współpracę z osprzętem ISA. Polityka koncernu IBM poszła w tym wypadku zupełnie inną drogą. Wszystkie charakterystyczne cechy systemu zostały opatentowane, a licencje na produkcję urządzeń w tym standardzie wydawane są dosyć skąpo. Ma to oczywiście na celu utrzymanie monopolu w tej dziedzinie, co niewątpliwie się udało. Niestety, każdy kij ma dwa końce, a przyjęta metoda nie wyszła na dobre propagowaniu tej technologii. Brak konkurencji na rynku producentów utrzymuje stosunkowo wysokie ceny i hamuje sprzedaż wyrobów. Ponadto dominacja IBM w tym sektorze stała się zalążkiem dla rozwinięcia konkurencyjnej technologii - tak właśnie, jako obrona rynku producentów przed monopolem IBM, powstała architektura EISA.
MCA jest ukierunkowana wyraźnie na potrzeby systemów wielozadaniowych typu OS/2 i 32-bitowych procesorów 80386 i 80486. Mimo ogromnych różnic architektonicznych, programy pracujące na urządzeniach PS/2 pod nadzorem systemu DOS nie sprawiają żadnych trudności, jeżeli tylko nie sięgają bezpośrednio do rejestrów.
Dla użytkownika poruszającego się na poziomie systemu operacyjnego i aplikacji jednoznaczne stwierdzenie rodzaju architektury płyty głównej nie jest wcale rzeczą łatwą (pomijamy tu oczywiście ewidentne różnice wynikające ze wzrostu mocy obliczeniowej systemu).
Przepustowość magistrali zewnętrznej MCA sięga 20 MB/s Bardzo szybka, bowiem pracująca w takt zegara procesora, jest magistrala lokalna łącząca procesor bezpośrednio z pamięcią. Magistrala systemowa ma co prawda szerokość 32 bitów (zarówno w części adresowej, jak i danych), ale taktowana jest zegarem 10 MHz i, co gorsza, na każdą transmisję przypadają dwa cykle zegarowe (dla porównania: ISA - 4 cykle, EISA - l cykl).
Gruntownie zmodyfikowany został system DMA. Po pierwsze, w transmisjach DMA używany jest zawsze pełny, 32-bitowy adres pokrywający całą przestrzeń adresową systerou. Zrezygnowano z emulowania 8- i 16-bitowego trybu układu 8237A. Po drugie, co jest absolutnym novum, wszystkie osiem kanałów DMA może być jednocześnie aktywne. Nie trzeba chyba dodawać, jakie znaczenie ma to dla systemów wielozadaniowych.
System przerwań sprzętowych, dzięki realizacji idei wyzwalania poziomem (a nie zboczem, jak to ma miejsce w architekturze ISA) i przydziału jednego kanału wielu urządzeniom, zapewnia obsługę 255 urządzeń.
Centralny procesor na płycie głównej (ang. host CPU) może być wspomagany przez 16 dodatkowych mikroprocesorów umieszczonych na kartach rozszerzających. Dla potrzeb wzajemnej komunikacji między procesorami, uwzględnienia ich priorytetów, przydziału odcinków czasowych dla dysponowania magistralami itd. dedykowano specjalną 4-bitową szynę sterującą.
Karty rozszerzające systemu MCA nie są już anonimowe. Każda z nich ma swój niepowtarzalny numer identyfikacyjny - produktom innych wytwórców nadawane są numery uzgadniane centralnie z IBM. System ten umożliwia jednoznaczną identyfikację rodzaju karty. Jej konfiguracja odbywa się wyłącznie w drodze dialogu z programem instalacyjnym. Na karcie brak jest jakichkolwiek zwór i przełączników. Informacja o konfiguracji karty przechowywana jest w systemowej pamięci CMOS.
Również pojedyncze gniazda magistrali zewnętrznej zaczęły być identyfikowalne w ramach systemu. Dało to możliwość programowego, a więc bez otwierania obudowy komputera, odłączania karty tkwiącej fizycznie w złączu, co pozwala na znaczne uelastycznienie konfiguracji sprzętowej. W systemie mogą być na stałe zamontowane wykluczające się wzajemnie karty. W stosownym momencie można aktywować jedną z nich bez potrzeby sięgania po śrubokręt.
System zbudowany w oparciu o architekturę ISA reaguje bardzo stanowczo na stwierdzenie błędu działania pamięci podczas jej kontroli po załączeniu. Załadowanie systemu operacyjnego z pewnością nie nastąpi, jeśli choć jedna komórka w całych 16 MB pamięci jest niesprawna. System MCA toleruje drobne ubytki w pamięci operacyjnej. W takim wypadku cała dostępna pamięć powyżej miejsca uszkodzenia ulega logicznemu prze-adresowaniu. Segment o długości 64 kB, w którym stwierdzono uszkodzenie, zostaje przesunięty na koniec przestrzeni adresowej i tam dezaktywowany. Powstała luka zostaje wypełniona sprawnym segmentem.
Aby nie blokować gniazd magistrali zewnętrznej, niezbędne elementy architektury, takie jak złącza szeregowe i równoległe czy karta VGA, zostały zintegrowane z płytą główną. Użytkownik ma oczywiście możliwość ich zablokowania i skorzystania z usług odpowiednich kart. Należy nadmienić, że konstrukcja złącz MCA umożliwia stosowanie nie tylko kart 32-bitowych, ale i ich uproszczonych wersji o szerokości 8 i 16 bitów.
VESA Local Bus
Zgodnie z zasadą, że gdzie dwóch się bije tam trzeci korzysta, duże powodzenie zdobyły różne systemy 32-bitowych szyn lokalnych (ang. local bus). Początkowo każdy z producentów preferował swój standard. Z czasem, z gromady rozmaitych rozwiązań (lansowanych między innymi przez firmy Intern, Opti, Elitegroup) na czoło wysunął się zdecydowanie pseudo-standard VESA, stworzony przez organizację o nazwie Video Electronics Standards Association, w której główny udział ma firma NEC. "Pseudo", gdyż peryferia noszące znamiona VESA wcale nie muszą (do czasu normalizacji pracować poprawnie w dowolnej płycie głównej VESA.
( Oficjalna specyfikacja standardu VESA 1.0 została opublikowana we wrześniu 1992 roku. Większość obecnie produkowanego osprzętu VLB odpowiada tej specyfikacji.)
Pod nazwą VESA (lub VLB, VESA Local Bus) kryje się system 32-bitowej szyny lokalnej dedykowanej w zasadzie obsłudze tylko dwóch urządzeń - karty sterownika monitora i kontrolera dysków.
Struktura magistrali VESA jest bardzo mocno związana ze sprzętem, ponieważ jest ona bezpośrednio połączona z magistralą lokalną procesora i486. Rozwiązanie takie sprawia, że koszt umieszczenia magistrali VESA w systemie 386/486 jest bardzo niski. Z drugiej jednak strony, tak silne związanie sprawi, że magistrala VESA umrze śmiercią naturalną wtedy, gdy systemy 386/486 wyjdą z użycia.
Rozwiązanie to jest swego rodzaju dodatkiem do architektury ISA, gdyż - nie naruszając cech standardu - wymaga dobudowania na zwykłej płycie AT od jednego do trzech 32-bitowych złącz VESA.
Magistrala zewnętrzna VESA taktowana jest zegarem procesora, którego częstotliwość nie może przekraczać 40 MHz. Przepustowość szyny danych dochodzi do 120 MB/s, co głównych konkurentów (MCA, EISA) pozostawia daleko w tyle. Samo złącze VESA nie jest niczym innym, jak dodatkowym gniazdem umieszczonym w jednej linii z gniazdem ISA (tysunek 1.51). Daje to możliwość użytkowania w takim gnieździe zarówno kart nowego standardu, które sięgają swymi stykami do dodatkowego gniazda, jak i zwyczajnych kart ISA nie czerpiących korzyści z rozszerzenia architektury.
Płyta główna standardu VESA jest tańsza od EISA, zważywszy prostotę jej budowy. Również karty rozszerzenia pracujące w tym systemie są bardziej dostępne dla kieszeni zwykłego użytkownika. Karty graficzne standardu VLB są 2 - 3 razy szybsze od swoich klasycznych konkurentek. Dodatkowy wzrost wydajności karty w środowisku Windows gwarantują specjalnie opracowane procesory graficzne (między innymi Weitek W5086, S3 86C911, C&T 82C453), które jednak podczas pracy w środowisku DOS nie dają żadnych korzyści.
Inaczej wygląda sprawa kontrolerów dysków VLB. Żaden układ nie jest w stanie poprawić parametrów samego dysku. Powszechnie stosowane dyski twarde typu IDE mają przecież zintegrowany w sobie sterownik, więc jeżeli przepustowość danych na odcinku głowice-sterownik jest mała, to magistrala nic tu nie pomoże. Jeżeli natomiast dysk dysponuje obszernym własnym buforem (ang. onboard cache), to zalety szybkiej, 32-bitowej magistrali VESA można z powodzeniem wykorzystać.
Magistrala PCI
(Peripherial Component Interconnect)
Magistrala PCI opracowana przez firmę Intel jest najnowszym rozwiązaniem 32-bitowej szyny lokalnej. Pomimo zbliżonych parametrów, w dość krótkim czasie wyparła magistralę VESA. Stało się tak z bardzo prostej przyczyny: magistrala VESA oparta jest na magistrali lokalnej procesorów 386 i 486, a co za tym idzie - karty rozszerzeń są dostosowane do współpracy z tymi procesorami. Magistrala PCI jest niezależna od typu procesora - dzięki temu wykorzystywana jest również w komputerach opartych na procesorach PowerPC.
Magistrala PCI daje możliwość tworzenia złożonych systemów. W jednym systemie, zgodnie ze specyfikacją 2. l standardu PCI, może współpracować do 256 magistral PCI, przy czym każda z nich może obsługiwać do 32 urządzeń PCI, a każde urządzenie może pełnić do 8 funkcji (zintegrowane urządzenia nie są nowością wprowadzoną przez standard PCI - na przykład typowa karta ISA Multi I/O zawiera 4 urządzenia: dwa porty szeregowe, port równoległy i gamę port). O możliwościach architektury PCI może świadczyć fakt, że w produkowanych obecnie komputerach klasy PC opartych na architekturze PCI wykorzystywana jest tylko jedna magistrala PCI, obsługująca około 10 urządzeń.
Magistrala PCI może pracować z częstotliwością od O do 33 MHz (wersja 2.1 standardu dopuszcza częstotliwości do 66 MHz), co daje przepustowość w granicach 132 MB/s. Magistrala PCI pracuje w trybie burst, co oznacza dostęp do adresowanego obiektu w jednym takcie zegarowym.
Zdefiniowane jest również 64-bitowe rozszerzenie magistrali PCI, które umożliwia transfer danych z prędkością do 264 MB/s pomiędzy 64-bitowymi urządzeniami PCI. Wymiana danych pomiędzy urządzeniami 64- i 32-bitowymi jest wolniejsza niż na 32-bitowej magistrali PCI ze względu na wprowadzenie dodatkowego cyklu umożliwiającego rozpoznanie sposobu transmisji danych.
Zasada działania magistrali PCI jest bardzo prosta: do magistrali mogą być podłączone dwa rodzaje urządzeń: inicjatory - mogące przejmować kontrolę nad magistralą, slave - mogące tylko transmitować dane. Transmisja danych może przebiegać między dwoma inicjatorami lub inicjatorem i slavem.
Każda transmisja (rysunek 1.53) rozpoczynana jest przez inicjator wystawieniem na magistralę sygnału -FRAME - jest to sygnał dla pozostałych urządzeń PCI, by odczytały adres urządzenia docelowego (sygnały AD - Address) i rozkaz określający sposób transmisji (sygnały C/-BE - Command). Adres urządzenia docelowego i sposób transmisji wystawiony jest na magistrali przez jeden cykl zegara.
Gdy urządzenie slave rozpozna, że transmisja danych skierowana jest do niego, wystawia na magistrali sygnał ~DEVSEL (Device Selecf) - jeżeli sygnał ~DEVSEL nie zostanie wystawiony w odpowiednim czasie, transmisja zostanie zaniechana. Wystawienie przez urządzenie slave sygnału ~DEVSEL kończy nawiązywanie połączenia (fazę adresową) pomiędzy inicjatorem i urządzeniem slave. W następnym etapie (fazie przesyłania danych) rozpoczyna się przesyłanie danych (sygnały AD - Data). Liczbę bajtów przesyłanych danych określają sygnały C/~BE (Byte Eanble) ustawiane przez inicjator.
Transfer danych powinien przebiegać w trakcie jednego cyklu zegara. Inicjator i urządzenie docelowe wystawiają sygnały ~IRDY (Initiator Ready) i ~TRDY (Terminator Ready) informujące o tym, że są gotowe do przekazywania danych. Jeżeli z jakichś względów inicjator bądź urządzenie docelowe nie są w stanie przekazywać danych, to zmieniają ustawienie sygnałów ~IRDY lub ~TRDY w celu wprowadzenia dodatkowych cykli oczekiwania (ang. wait states).
Inicjator informuje o zakończeniu fazy przekazywania danych wycofując sygnał ~FRAME. Zaniknięcie sygnału ~DEVYSEL informuje inne inicjatory, że magistrala jest wolna.
Dwa dodatkowe sygnały (~REQ i ~GNT) umożliwiają arbitraż w sytuacji, gdy kilka inicjatorów próbuje równocześnie przejąć kontrolę nad magistralą. Wystawienie przez inicjator sygnału ~REQ (Reąuest) oznacza żądanie dostępu do magistrali, zaś sygnał ~GNT (Granf) oznacza przyznanie przez układ arbitrażu kontroli nad magistralą określonemu inicjatorowi. Para sygnałów ~REQ i ~GNT doprowadzana jest osobno od arbitera do każdego inicjatora. Specyfikacja PCI nie definiuje sposobu arbitrażu. Zwykle arbiter umieszczony jest w układzie sprzęgającym magistralę lokalną procesora z magistralą PCI.
Na rysunku 1.54 przedstawiono przykładowy arbitraż: dwa inicjatory równocześnie żądają dostępu do magistrali - inicjator A ma do przeprowadzenia dwie transmisje, a inicjator B jedną. Arbiter przyznaje magistralę na przemian inicjatorowi A i B.
Ponieważ sygnały AD i C/~BE mają różne znaczenie zależne od fazy transmisji, urządzenia PCI wykorzystują znacznie mniej sygnałów (inicjator 49, slave 47 - sygnały podstawowe, rysunek l .55) niż urządzenia korzystające z magistrali VESA Local Bus.
Na rysunku 1.55. przedstawiono wszystkie sygnały wykorzystywane przez magistralę PCI. Do realizacji trzydziestodwubitowej transmisji danych niezbędne są sygnały podstawowe. Sygnały dodatkowe zwiększają możliwości magistrali PCI. Umożliwiają one wykorzystanie sześdziesięcioczterobitowej transmisji danych, dostęp do pamięci podręcznej, testowanie magistrali i zgłaszanie przerwań sprzętowych przez urządzenia podłączone do magistrali.
Na kolejnych stronach omówione zostało znaczenie sygnałów magistrali PCI.
AD[31-00] -(Addres Data Bits) - sygnały te mają różne znaczenie, zależnie od fazy transmisji. W fazie adresowej (w pierwszym cyklu zegara po przyznaniu inicjatorowi kontroli nad magistralą - równocześnie z wystawieniem sygnału -FRAME) wystawiony jest na nich adres urządzenia docelowego. W fazie przekazywania danych służą do przekazywania danych - o sposobie przekazywania danych decydują sygnały C/~BE[3-0].
C/~BE[3-0] -(Command/Byte Enable) - sygnały te mają różne znaczenie,
zależnie od fazy transmisji: w fazie adresowej przekazują komendę PCI określającą typ transmisji (Command).
C/~BE3; C/~BE2; C/~EE2; C/~BE; Komenda;
0; 0; 0; 0; Interrupt Acknoweledge;
0; 0; 0; 1; Special Cycle;
0; 0; 1; 0; 1/0 Read;
0; 0; 1; 1; I/O Write;
0; 1; 0; 0; zarezerwowane;
0; 1; 0; 1; zarezerwowane;
0; 1; 1; 0; Memory Read;
0; 1; 1; 1; Memory Write;
1; 0; 0; 0; zarezerwowane;
1; 0; 0; 1; zarezerwowane;
1; 0; 1; 0; Configuration Read;
1; 0; 1; 1; Configuration Write;
1; 1; 0; 0; Memory Read Multiple;
1; 1; 0; 1; Dual-Address Cycle;
1; 1; 1; 0; Memory Read Linę;
1; 1; 1; 1; Memory Write and Invalidate;
W fazie przekazywania danych zawierają informację o tym, które linie danych są wykorzystywane do transmisji danych (Byte Enable). Ustawienie wartości O oznacza, że liniami danych kontrolowanymi przez sygnał C/-BE będzie transmitowany bajt danych, l oznacza, że dane na określonych liniach nie mają znaczenia.
Byte Enable; Kontrolowane linie danych;
C/~BE3; AD[3 1-24] - czwarty bajt podwójnego słowa;
C/-BE2; AD[23-16] - trzeci bajt podwójnego słowa;
C/-BE1; AD[1 5-08] - drugi bajt podwójnego słowa;
C/-BEO; AD[00-07] - pierwszy bajt podwójnego słowa;
PAR =
(Parity Signal) - sygnał kontroli parzystości linii AD[31-00] i C/~BE[3-0]. Sygnał ten jest wystawiany przez inicjator po zakończeniu fazy adresowej.
Urządzenie docelowe, którego adres został wystawiony na magistrali, oblicza wartość sygnału kontroli parzystości odebranego adresu i porównuje go z sygnałem wystawionym na magistrali. Różne wartości oznaczają błąd parzystości adresu. Urządzenie docelowe, które wykryło błąd parzystości w fazie adresowej, musi ustawić bit 15 w swoim rejestrze stanu. Dalsza akcja zależy od stanu bitu 8 w rejestrze komend. Jeżeli bit jest ustawiony, to urządzenie wystawia sygnał
~SERR, co w konsekwencji prowadzi do wywołania przerwania NMI i zatrzymania systemu. Jeżeli bit ten jest wyzerowany, urządzenie docelowe może wystawić sygnał
~DEVSEL i przeprowadzić transmisję, wystawić sygnał ~DEVSEL, lecz nie wystawiać sygnału ~TRDY, co w konsekwencji doprowadzi do zaniechania transmisji przez inicjator lub wystawić sygnał -STOP, co spowoduje zaniechanie transmisji.
W fazie przekazywania danych sygnał parzystości wystawiany jest przez urządzenie transmitujące dane w cyklu następującym po zakończeniu transmisji danej. Urządzenie odbierające dane oblicza wartość tego sygnału na podstawie odczytanych danych i porównuje go z sygnałem wystawionym na magistrali. Różne wartości oznaczają błąd parzystości danych. Urządzenie, które wykryło błąd parzystości, musi ustawić bit 15 w swoim rejestrze stanu.
Jeżeli błąd parzystości wystąpił podczas zapisu danych, dalsza akcja zależy od stanu bitu 6 w rejestrze komend urządzenia docelowego. Jeżeli bit jest ustawiony, to urządzenie wystawia sygnał ~PERR, informujący inicjator o wystąpieniu błędu parzystości. Jeżeli bit ma wartość zero, transmisja przebiega dalej, gdyż urządzenie docelowe nie jest w stanie poinformować inicjatora o wystąpieniu błędu. Inicjator ma obowiązek ustawić bit 8 w swoim rejestrze stanu po wykryciu sygnału ~PERR.
Jeżeli błąd parzystości wystąpił podczas odczytu danych, dalsza akcja zależy od stanu bitu 6 w rejestrze komend inicjatora . Jeżeli bit jest ustawiony, to inicjator wystawia sygnał ~PERR, co w konsekwencji prowadzi do ustawienia bitu 8 w rejestrze stanu inicjatora.
Zatem jeżeli kontrola parzystości danych jest włączona (ustawiony jest bit 15 w rejestrze stanu), to wystąpienie błędu parzystości powoduje ustawienie bitu 8 w rejestrze stanu inicjatora. Reakcja na wykryty błąd zależy od programowania.
~FRAME - (Cycle Frame) - sygnał ten wystawiany jest przez inicjator, któremu układ arbitrażu przyznał kontrolę nad magistralą i oznacza przejęcie nad nią kontroli. Przed wystawieniem sygnału -FRAME inicjator musi sprawdzić, czy sygnały -FRAME i -DEYSEL są ustawione. Jeżeli są ustawione, to znaczy, że dokonywana jest transmisja kontrolowana przez inny inicjator, w przeciwnym przypadku kontroler może wystawić sygnał -FRAME i przejąć kontrolę nad magistralą.
Inicjator kończy wystawianie sygnału ~FRAME, gdy jest gotowy do transmisji ostatniej danej.
~TRDY - (Target Ready) - sygnał ten wystawiany jest przez urządzenie docelowe, gdy jest ono gotowe do transmisji danych i wycofywany po zakończeniu transmisji (równocześnie z wycofaniem sygnału
-DEYSEL). Wycofanie tego sygnału w trakcie przekazywania danych wprowadza cykl oczekiwania (ang. wait state)\
~IRDY - (Initiator Ready) - sygnał ten wystawiany jest przez inicjator, gdy jest on gotowy do transmisji danych i wycofywany po zakończeniu transmisji (równocześnie z wycofaniem sygnału -DEYSEL). Wycofanie tego sygnału w trakcie przekazywania danych wprowadza cykl oczekiwania (ang. wait state).
~STOP - (Stop) - sygnał ten wystawiany jest przez urządzenie docelowe, gdy z jakichś powodów chce ono natychmiast zakończyć transmisję danych. Po wykryciu sygnału -STOP inicjator kończy transmisję. Dalsze zachowanie inicjatora zależy od stanu linii
-TRDY i -DEYSEL w chwili ustawienia sygnału -STOP. Sygnał
-STOP jest wycofywany po wycofaniu sygnału -FRAME przez inicjator.
~STOP - 1;
~DEVSEL - 1;
~TRDY - 1;
Przyczyna
- Urządzenie docelowe jest zajęte (nie jest w stanie dokończyć wymiany bieżącej danej w ciągu 8 cykli zegara magistrali PCI).
W trybie burst urządzenie docelowe nie jest w stanie rozpoznać adresu (sekwencja sygnałów AD[ 1-0] niezrozumiała dla urządzenia docelowego - zgodna
z późniejszą wersją specyfikacji).
Kolejna dana wykroczy poza przestrzeń adresową urządzenia docelowego.
W trybie burst dane wykroczą poza rozmiar jednej linii pamięci podręcznej.;
Reakcja inicjatora - Jeżeli inicjator potrzebuje kolejne dane. to transmisja począwszy od następnej danej może zostać ponownie zaaranżowana
~STOP - 1;
~DEVSEL - 1;
~TRDY - 0;
Przyczyna
- W trybie burst urządzenie
docelowe nie jest w stanie
rozpoznać adresu (sekwencja
sygnałów AD[1-0]
niezrozumiała dla urządzenia
docelowego).
Urządzenie docelowe jest
zajęte (nie jest w stanie
dokonać wymiany pierwszej
danej w ciągu 16 cykli zegara
magistrali PCI).
Urządzenie docelowe jest
cache'owane i układ kontroli
pamięci podręcznej wykrył,
że modyfikowany obszar
pamięci jest oznaczony jako
zmodyfikowany i wymaga
aktualizacji.
Reakcja inicjatora - Transmisja zostanie powtórzona
~STOP - 1;
~DEVSEL - 1;
~TRDY - 1;
Przyczyna
- Wystąpienie błędu
krytycznego.
Uszkodzenie urządzenia
docelowego.
Błąd parzystości w fazie
adresowej.
Błąd w adresie wejścia-wyiścia
Reakcja inicjatora - Generuje przerwanie
umożliwiające sterownikom
sprawdzenie rejestru stanu
inicjatora.
Jeżeli bit 8 w rejestrze komend jest
ustawiony, inicjator wystawia
sygnał -SERR, co w konsekwencji prowadzi do wywołania przerwania
NMI i zatrzymania systemu.
~DEVSEL - (Device Selecf) - sygnał ten wystawiany jest przez urządzenie docelowe, które rozpoznało swój adres w fazie adresowej. Wystawienie sygnału ~DEVSEL oznacza nawiązanie połączenia pomiędzy inicjatorem i urządzeniem docelowym. Sygnał jest wycofywany po zakończeniu transmisji ostatniej danej lub po wystawieniu sygnału ~STOP. Urządzenie docelowe musi wystawić sygnał ~DEVSEL najpóźniej po dwóch cyklach oczekiwania od zakończenia fazy adresowej (układy sprzęgające dwie magistrale PCI po trzech cyklach oczekiwania). Maksymalna liczba cykli oczekiwania, po której urządzenie docelowe może wystawić sygnał ~DEVSEL, jest przechowywana w bitach 9 i 10 rejestru stanu.
IDSEL - (Initialization Device Selecf) - sygnał używany podczas konfigurowania magistrali PCI.
(Requesf) - sygnał wystawiany przez inicjator żądający dostępu do magistrali.
(Grańf) - sygnał wystawiany przez układ arbitrażowy, przydzielający kontrolę nad magistralą konkretnemu inicjatorowi.
CLK - (PCI Clock Signaf) - sygnał zegara taktującego magistralę PCI (0-33 MHz).
~RST- (Reset Signal) - wystawienie tego sygnału powoduje inicjalizację wszystkich urządzeń podłączonych do magistrali PCI.
-PERR - (Parrity Errof) - sygnał informujący inicjator o wystąpieniu
błędu parzystości danych. Wystawienie sygnału -PERR powoduje ustawienie bitu 8 w rejestrze stanu inicjatora. Wystawianie sygnału
-PERR może być zablokowane przez ustawienie bitu 8 w rejestrze komend urządzenia odczytującego dane. Specyfikacja PCI nie definiuje reakcji inicjatora na wykrycie błędu parzystości danych.
-SERR - (System Error) - sygnał oznacza wystąpienie krytycznego błędu innego niż błąd parzystości danych. Ustawienie tego sygnału wywołuje niemaskowalne przerwanie (NMI) i w rezultacie powoduje restart systemu. Urządzenie, które wystawia sygnał
-SERR musi również ustawić bit 14 w swoim rejestrze stanu. Wystawienie sygnału -SERR może być zablokowane przez wyzerowanie bitu 8 w rejestrze komend urządzeń PCI.
AD[63-32] - (Data Bus) - sygnały te, będące odpowiednikami sygnałów AD[31-00], są wykorzystywane w 64-bitowej magistrali PCI. W fazie przekazywania danych umożliwiają przekazanie czterech górnych bajtów 64-bitowej danej. O sposobie przekazywania danych decyduj ą sygnały C/~BE[7-4]. Jeżeli 64-bitowy inicjator próbuje zapisać dane do 32-bitowego urządzenia docelowego, to sygnały AD[63-32] wystawione dla pierwszej danej są automatycznie przenoszone do linii AD[31-00] jako druga dana.
C/~BE[7-4] - (Byte Enable) - sygnały te są wykorzystywane w 64-bitowej magistrali PCI. W fazie przekazywania danych zawierają informację o tym, które linie danych są wykorzystywane do transmisji danych (Byte Enable). Ustawienie wartości O oznacza, że liniami danych kontrolowanymi przez sygnał C/-BE będzie transmitowany bajt danych, l oznacza, że dane na określonych liniach nie mają znaczenia.
Byte Enable; Kontrolowane linie danych;
C/-BE7; AD[63-56] - czwarty bajt drugiego podwójnego słowa;
C/-BE6; AD[55-48] - trzeci bajt drugiego podwójnego słowa;
C/-BE5; AD[47-40] - drugi bajt drugiego podwójnego słowa;
C/-BE4; AD[39-32] - pierwszy bajt drugiego podwójnego słowa;
Jeżeli 64-bitowy inicjator próbuje zapisać dane do 32-bitowego urządzenia docelowego, to sygnały C/~BE[7-4] wystawione dla pierwszej danej są automatycznie przenoszone do linii C/~BE[3-0], kontrolujących przekazywanie drugiej danej.
PAR64 - (Parity Signalfor the upper doubleword) - sygnał kontroli parzystości linii AD[63-32] i C/~BE[7-^]. Sygnał ten jest odpowiednikiem sygnału kontroli parzystości linii AD[31-00] i C/~BE[3-0] (PAR).
~REQ64 - (Recjuest 64-bit Transfer) - sygnał informujący urządzenie docelowe o próbie przeprowadzenia 64-bitowego transferu danych. Sygnał ten jest odpowiednikiem sygnału -FRAME (ma takie same przebiegi czasowe).
-ACK64 - (Acknoweledge 64-bit Transfer) - sygnał wystawiany przez urządzenie docelowe, wyrażający zgodę na przeprowadzenie 64-bitowej transmisji. Sygnał ten jest odpowiednikiem sygnału ~DEVSEL (ma takie same przebiegi czasowe). Urządzenia 32 bitowe nie wystawiają sygnału -ACK64.
64-bitowe inicjatory, które mają do przeprowadzenia transmisję jednej danej, muszą po fazie adresowej wprowadzić dodatkowe cykle oczekiwania (utrzymując sygnał -FRAME na wysokim, a sygnał -IRDY na niskim poziomie), w czasie których monitorują sygnały -DEYSEL i -ACK64 . Wystawienie obydwu sygnałów oznacza transmisję jednej 64-bitowej danej (przed rozpoczęciem transmisji danej inicjator musi wycofać sygnał -FRAME). Wystawienie tylko sygnału -DEYSEL oznacza transmisje dwóch 32-bitowych danych (sygnał -FRAME musi zostać wycofany po zakończeniu transmisji pierwszej danej.
-LOCK - (Lock) - sygnał ten umożliwia inicjatorowi zablokowanie dostępu innym inicjatorom do określonego urządzenia docelowego. Inicjator blokuje urządzenie docelowe ustawiając sygnał -LOCK i kończąc transmisję. Zablokowane urządzenie nie jest w stanie nawiązać połączenia z jakimkolwiek inicjatorem, tak długo, jak długo sygnał -LOCK jest ustawiony - żaden inny inicjator nie jest w stanie zmienić stanu tego sygnału. Gdy inicjator blokujący dostęp do urządzenia docelowego próbuje nawiązać z nim ponownie łączność, usuwa sygnał -LOCK po przejęciu kontroli nad magistralą.
Mechanizm blokowania wykorzystywany jest przez inicjatory, w przypadku, gdy urządzenie docelowe jest cache'owane i układ kontroli pamięci podręcznej wykrył, że modyfikowany obszar pamięci jest oznaczony jako zmodyfikowany i wymaga aktualizacji.
~CLKRUN - (Clock Run) - sygnał określa, czy magistrala taktowana jest ze standardową czy obniżoną częstotliwością. Sygnał ten jest wykorzystywany w systemach, w których zaimplementowany jest subsystem oszczędzania energii;
~SBO - (Snoop Back OfJ) -jest jednym z dwóch sygnałów
zabezpieczających inicjator przed zapisem lub odczytem danych z/do cache'owanego, niezaktualizowanego obszaru pamięci. Sygnał ustawiony oznacza, że dane są zaktualizowane. Niski poziom sygnału oznacza, że dane wymagają aktualizacji.
Sygnał ~SBO musi być zaimplementowany w systemach wykorzystujących pamięć podręczną typu write-back. W systemach opartych o pamięć podręczną write-through sygnał ~SBO ma zawsze wartość l.
Sygnał ~SBO jest ustawiany przez sterownik magistrali PCI.
SDONE - (Snoop Done) -jest jednym z dwóch sygnałów
zabezpieczających inicjator przed zapisem lub odczytem danych z/do cache'owanego, niezaktualizowanego obszaru pamięci. Sygnał ustawiony oznacza, że sterownik magistrali sprawdził, czy dane są zaktualizowane (wynik sprawdzenia ustawiony jest na linii ~SBO). Niski poziom sygnału oznacza, że sterownik magistrali jest w trakcie sprawdzania cache'owanych obszarów pamięci.
SDONE; ~SBO; Opis; Reakcja urządzenia docelowego; Reakcja inicjatora;
0; x; sterownik magistrali jest w trakcie sprawdzania cache'owanych obszarów pamięci; wycofuje sygnał ~TRDY wprowadzając cykle oczekiwania; czeka;
1; 1; dane w pamięci są zaktualizowane ustawia sygnał ~TRDY; realizuje transmisje;
1; 0; dane w pamięci wymagają aktualizacji; przerywa połączenie ustawiający sygnał ~STOP; próbuje ponownie przeprowadzić transmisję;
TDI - (Test Input)- sygnał testujący.
TDO - (Test Output) - sygnał testujący.
TCK - (Test Clock) - sygnał testujący
TM S - (Test Modę Select) - sygnał testuj ący.
~TRST - (Test Resei) - sygnał testujący.
~INT[A-D] - (Intermpt Request) - kanały przerwań sprzętowych magistrali PCI.
Magistrala zewnętrzna
Sygnały magistrali PCI wyprowadzone są do gniazd, w których można umieszczać karty rozszerzające. Gniazda te odbiegają kształtem od gniazd magistral ISA i VESA Local Bus, co uniemożliwia umieszczenie karty PCI w niewłaściwym gnieździe (i vice versa).
Na płytach głównych umieszcza się zwykle 4 gniazda magistrali PCI (standard dopuszcza 32 gniazda), przy czym na każdej karcie rozszerzającej może być umieszczone do 8 urządzeń PCI. Na ogół, oprócz 32-bitowych złącz PCI, umieszczane są na płycie dwa lub trzy gniazda 16-bitowej magistrali ISA. Umożliwia to wykorzystanie kart rozszerzających starszego typu.
Gniazda magistrali PCI mogą mieć kilka wariantów (rysunek 1.56). Klucz uniemożliwiający włożenie niewłaściwego typu karty jest umieszczony w różnych miejscach - zależnie od poziomu napięcia zasilającego magistralę (3,3 V lub 5 V). Gniazdo 64-bitowej magistrali PCI wygląda jak gniazdo magistrali 32-bitowej, do którego dodano
jedną sekcję.
Do gniazd doprowadzone są wszystkie złącza magistrali PCI (podstawowe i dodatkowe). Ponadto dodane są dwa sygnały (-PRSNT1 i -PRSNT2) umożliwiające określenie maksymalnej mocy pobieranej przez karty rozszerzające - sygnały te nie są wykorzystywane przez urządzenia PCI umieszczone na płycie głównej.
~PRSNT1; ~PRSNT2; Znaczenie
1; 1; brak karty rozszerzającej;
0; 1; karta o maksymalnym poborze mocy do 25 W;
1; 0; karta o maksymalnym poborze mocy do 1 5 W;
0; 0; karta o maksymalnym poborze mocy do 7,5 W;
Kontroler przerwań sprzętowych
System PCI dysponuje tylko czterema kanałami przerwań sprzętowych (-INTA, -INTB, -INTC, -INTD) - każdy kanał może być dzielony przez kilka urządzeń. W przypadku zgłoszenia przerwania sprzętowego przez jedno lub kilka urządzeń dzielących ten sam kanał wykonywane są, zgodnie z założonym przez system priorytetem, procedury obsługi urządzeń podłączonych do tego kanału (niezależnie od tego, czy zgłaszają przerwanie, czy nie), tak długo, aż obsłużone zostaną wszystkie urządzenia zgłaszające przerwanie sprzętowe. W przypadku, gdy urządzenie podłączone do aktywnego kanału nie zgłasza przerwania, procedura obsługi sprowadza się do rozpoznania tego faktu i przejścia do obsługi następnego urządzenia.
Za prawidłową obsługę przerwań sprzętowych odpowiedzialny jest programowalny router przerwań, który "przekłada" przerwania sprzętowe magistrali PCI na niewykorzystywane kanały IRQ magistrali ISA (rysunek 1.57).
Pamięć konflguracyjna urządzeń PCI
Urządzenia PCI wyposażone są w 256-bajtową pamięć konflguracyjna, w której przechowywane są informacje niezbędne do pracy urządzenia. Pamięć konflguracyjna podzielona jest na dwie części:
pierwsze 64 bajty stanowią nagłówek, którego struktura jest jednakowa dla wszystkich urządzeń PCI (za wyjątkiem układów sprzęgających dwie magistrale PCI);
pozostałe 192 bajty to rejestry specyficzne dla danego urządzenia.
Na rysunku 1.58 przedstawiona jest struktura nagłówka pamięci konfiguracyjnej urządzenia PCI (struktura nagłówka układu sprzęgającego magistrale PCI nie zostanie omówiona, ponieważ w typowych komputerach klasy PC wykorzystywana jest tylko jedna magistrala PCI). Czarnym kolorem oznaczone są rejestry, które muszą być predefmio-wane.
Na kolejnych stronach omówione zostało znaczenie poszczególnych rejestrów nagłówka pamięci konfiguracyjnej.
Identyfikator producenta (Vendor ID)
bit 15;bit 14;bit 13;bit12;bit 11;bit 10;bit 9;bit 8;bit7;bit6;bit 5;bit 4;bit 3;bit 2;bit l; bit 0;
bity 15-0 - Identyfikator producenta, wartość bitów określana jest przez PCI SIG (PCI Special Interest Group) i jednoznacznie identyfikuje producenta urządzenia. Wartość FFFFh jest zastrzeżona, i jest zwracana przez sterownik magistrali PCI podczas próby odczytu identyfikatora producenta urządzenia, którego nie ma w systemie.
Komunikacja procesora z innymi elementami architektury komputera
159
Identyfikator urządzenia (Device ID)
bit 15; bit 14; bit 13; bit 12; bit 11; bit 10; bit 9; bit 8; bit 7; bit 6; bit 5, bit 4; bit 3; bit 2; bit 1; bit 0;
bity 15-0 - Typ urządzenia, wartość bitów określana jest przez producenta.
Rejestr komend (Command Register)
X; X; X; X; X; X; bit 9; bit 8; bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
bity 15-10 - Zarezerwowane.
bit 9 - (Fast Back-to-Back Enable) - bit określający, czy inicjator może inicjować transakcje w trybie fast back-to-back (następujące kolejno po sobie transmisje, bez cyklu oczekiwania pomiędzy fazą przesyłania danych pierwszej transmisji i fazą adresową kolejnej). Jeżeli bit 7 w rejestrach stanu wszystkich urządzeń podłączonych do magistrali PCI jest ustawiony, oprogramowanie konfigurujące urządzenia podłączone do magistrali powinno ustawić ten bit. Bit zaimplementowany jest tylko w inicjatorach.
bit 8 - (System Error Enable) - bit określający, czy urządzenie ma sygnalizować wystąpienie błędu krytycznego (wystawiać sygnał
-SERR). Po inicjalizacji urządzenia bit powinien mieć wartość O (brak sygnalizacji błędu krytycznego).
bit 7 - (Wait Cy cle Enable) -bit określający, czy urządzenie jest
w stanie wystawić adres bądź dane w jednym cyklu zegara, czy też wymaga dodatkowych cykli oczekiwania przed wystawieniem adresu i danych (ang. stepping). Urządzenia, które zawsze wykorzystują stepping, muszą mieć ten bit zawsze ustawiony. W urządzeniach, które nie mogą pracować w tym trybie, bit ten powinien mieć zawsze wartość 0. W pozostałych urządzeniach bit powinna być ustawiany po inicjalizacji urządzenia.
bit 6 - (Parity Error Response) - bit określający, czy urządzenie ma sygnalizować wystąpienie błędu parzystości (wystawiać sygnał
-PERR). Po inicjalizacji urządzenia bit powinien mieć wartość O (brak sygnalizacji błędu parzystości).
bit 5 - (VGA Palette Snoop enable) - bit umożliwiający jednoczesną zmianę palet w kilku kartach graficznych podłączonych do jednej magistrali. Ustawienie tego bitu powoduje, że karta graficzna podczas zmiany palety barw odczytuje dane z magistrali PCI, nie wystawiając żadnych sygnałów na magistralę. Zmiana palety barw w systemach z kilkoma kartami graficznymi jest potencjalnym źródłem konfliktów, gdyż wymaga, aby kilka urządzeń jednocześnie odczytywało dane z magistrali PCI.
Dlatego na jednej karcie graficznej bit ten powinien mieć wartość O (ta karta komunikuje się z procesorem podczas zmiany palety barw), podczas gdy na pozostałych powinien mieć wartość l (te karty "śledzą" wymianę danych i odpowiednio modyfikują swoje palety barw).
Inicjalizacja kart graficznych powoduje ustawienie tego bitu na kartach innych niż VGA i jego wyzerowanie na kartach zgodnych ze standardem VGA.
bit 4 = (Memory Write and Invalidate Enable) - bit określający, czy inicjator może wykorzystywać komendę Write and Invalidate zamiast komendy Write podczas dostępu do cache'owanych obszarów pamięci. Bit ten nie może być ustawiony, dopóki nie jest ustawiony rejestr długości linii pamięci podręcznej. Po inicjalizacji wartość tego bitu jest zerowana.
bit 3 - (Special Cycle Recognitiori) - bit określający, czy urządzenie ma monitorować cykl specjalny. Po inicjalizacji wartość tego bitu jest zerowana.
bit 2 - (Master Enable) - bit określający, czy urządzenie może
przejmować kontrolę nad magistralą (czy jest inicjatorem). Po inicjalizacji wartość tego bitu jest zerowana.
bit l -(Memory Access Enable) - bit określający, czy urządzenie mające zaimplementowany dekoder adresów ma dostęp do przestrzeni adresowej magistrali PCI. Po inicjalizacji wartość tego bitu jest zerowana.
bit 0 - (I/OAccess Enable) - bit określający, czy urządzenie mające zaimplementowany dekoder adresów wejścia-wyjścia ma dostęp do przestrzeni adresowej wejścia-wyjścia magistrali PCI. Po inicjalizacji wartość tego bitu jest zerowana.
Rejestr stanu (Status Register)
bit 15; bit 14; bit 13; bit 12; bit 11; bit 10; bit 9; bit 8; bit 7; bit 6; bit 5; 0; 0; 0; 0; 0;
bit 15 - (Detected Parity Error) - bit jest ustawiany, gdy urządzenie wykryło błąd parzystości (bit ten powinien być ustawiany niezależnie od tego, czy bit 6 w rejestrze komend jest ustawiony, czy nie).
bit 14 - (Signaled System Error) - bit nie musi być zaimplementowany w urządzeniach, które nie mogą wystawiać sygnału ~SERR. Bit jest ustawiany, gdy urządzenie wystawiło sygnał ~SERR.
bit 13 (Received Master Abort) - bit zaimplementowany tylko
w inicjatorach, jest ustawiany, gdy transmisja danych nie doszła do skutku w wyniku przekroczenia czasu przez urządzenie docelowe.
bit 12 (Received Target Abort) - bit zaimplementowany tylko
w inicjatorach, jest ustawiany, gdy inicjator wykryje, że transakcja została przerwana przez urządzenie docelowe w wyniku błędu krytycznego (wystawiony sygnał ~STOP, brak sygnałów ~TRDY i ~DEYSEL).
bit 11 (Signaled Target Abort) - bit ustawiany przez urządzenie
docelowe, które przerwało transmisję w wyniku błędu krytycznego (ustawiło sygnał~STOP i wycofało sygnały ~TRDY i ~DEVSEL).
bity 10-9 (Device Select Timing) - bity tylko do odczytu, określają najdłuższy czas, po którym urządzenie wystawia sygnał ~DEVSEL:
00 - fast: w cyklu następującym po wystawieniu adresu przez inicjator,
01 - medium: jeden cykl zwłoki,
10 - słów: dwa cykle zwłoki,
11- zarezerwowane.
bit 8 (Data Parity Reported) - bit zaimplementowany tylko
w inicjatorach (w urządzeniach slave ma zawsze wartość 0), jest ustawiany, gdy ustawiony jest bit 6 w rejestrze komend i inicjator wykrył błąd parzystości i ustawił sygnał -PERR lub wykrył, że urządzenie docelowe wystawiło sygnał -PERR.
bit 7 (Fast Back-to-Back Capable) -bit jest ustawiany jeżeli urządzenie obsługuje transmisje w trybie fast back-to-back (następujące kolejno po sobie transmisje, bez cyklu oczekiwania pomiędzy fazą przesyłania danych pierwszej transmisji i fazą adresową kolejnej).
bit 6 (User Defined Features Supported) - bit jest ustawiany, jeżeli urządzenie wymaga zdefiniowania niektórych parametrów przez użytkownika (na przykład numer węzła na karcie sieciowej), wartości zdefiniowanych parametrów są przechowywane w plikach o rozszerzeniu .pcf.
bit 5 (66 MHz Capable) - bit jest ustawiany, gdy urządzenie może współpracować z magistralą taktowaną zegarem do 66 MHz, wartość O oznacza, że urządzenie może współpracować z magistralą taktowaną zegarem do 33 MHz.
bity 4-0 Zarezerwowane, muszą mieć wartość 0.
Numer wersji urządzenia (Revision ID)
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
bity 7-0 Numer wersji urządzenia określony przez producenta.
Kod klasy urządzenia (Class Code)
bit 23; bit 22; bit 21; bit 20; bit 19; bit 18; bit 17; bit 16; bit 15; bit 14; bit 13; bit 12; bit 11; bit 10; bit 9; bit 8; bit 7; bit 6 bit 5; bit 4 bit 3; bit 2; bit 1; bit 0;
bity 23-16 - Kod klasy urządzenia,
bity 15-8 - Kod podklasy urządzenia,
bity 7-0 - Kod interfejsu.
Kod klasy urządzenia umożliwia jednoznaczne określenie przeznaczenia i właściwości urządzenia. Tabela 1.32. przedstawia klasyfikację urządzeń PCI.
Tabela 1.32.
Klasyfikacja urządzeń PCI
Klasa; Podklasa; Interfejs; Opis;
00h; urządzenia wyprodukowane przed wprowadzeniem specyfikacji PCI 2.0 s
00h; 00h; 00h; urządzenia inne niż karta graficzna VGA
00h; 0lh; 0lh; karta graficzna VGA
0lh; kontrolery pamięci masowych
0lh; 00h; 00h; kontroler SCSI
0lh; 0lh; 00h; kontroler napędu dysków elastycznych
0lh; 03h; 00h; kontroler IPI
0lh; 04h; 00h; kontroler RAID
0lh; 80h; 00h; kontroler innej pamięci masowej
02h; karty sieciowe
02h; 00h; 00h; kontroler Ethernet
02h; 0lh; 00h; kontroler Token Ring
02h; 02h; 00h; kontroler FDDI
02h; 03h; 00h; kontroler ATM
02h; 80h; 00h; inna karta sieciowa
03h; karty graficzne
03h; 00h; 00h; karta graficzna zgodna z VGA: adresy portów wejścia-wyjścia: 03BOh - 03BBh pamięci karty graficznej AOOOOh - BOOOOh
03h; 00h; 0lh; karta graficzna zgodna z 8514, adresy portów wejści-wyjścia: 02E8h, 02EAh, 02Efh
03h; 0lh; 00h; karta graficzna XGA
03h; 80h; 00h; inna karta graficzna
04h; urządzenia multimedialne
04h; 00h; 00h; urządzenie video
04h; 0lh; 00h; urządzenie audio
04h; kontrolery pamięci
05h; 00h; 00h; kontroler pamięci RAM
05h; 0lh; 00h; kontroler pamięci Flash
05h; układy sprzęgające magistrale
06h; 00h; 00h; Host/PCI
06h; 0lh; 00h; PCI/ISA
06h; 02h; 00h; PCI/EISA
06h; 03h; 00h; PCI/MCA
06h; 04h; 00h; PCI/PCI
06h; 05h; 00h; PCI/PCMCIA
06h; 06h; 00h; NuBus
06h; 07h; 00h; CardBus
06h; 80h; 00h; inny układ sprzęgający
07h; kontrolery portów komunikacyjnych
07h; 00h; 00h; kontroler portu szeregowego 8250
07h; 00h; 0lh; kontroler portu szeregowego 16450
07h; 00h; 02h; kontroler portu szeregowego 16550
07h; 0lh; 00h; kontroler portu równoległego
07h; 0lh; 0lh; kontroler dwukierunkowego portu równoległego
07h; kontrolery portów komunikacyjnych
07h; 0lh; 02h kontroler portu równoległego ECP
07h; 80h; 00h inne urządzenie komunikacyjne
08h; kontrolery urządzeń peryferyjnych
08h; 00h; 00h; 8259 programowany kontroler przerwań
08h; 00h; 0lh; ISA programowany kontroler przerwań
08h; 00h; 02h; EISA programowany kontroler przerwań
08h; 0lh; 00h; 8237 kontroler DMA
08h; 0lh; 0lh; ISA kontroler DMA
08h; 0lh; 02h; EISA kontroler DMA
08h; 02h; 00h; 8254 układ odmierzania czasu
08h; 02h; 0lh; ISA układ odmierzania czasu
08h; 02h; 02h; EISA układ odmierzania czasu
08h; 03h; 00h; kontroler RTC
08h; 03h; 0lh; kontroler ISA RTC
08h; 80h; 00h; inne urządzenie peryferyjne
09h; kontrolery urządzeń wejścia-wyjścia
09h; 00h; 00h; kontroler klawiatury
09h; 01h; 00h; kontroler digitizera
09h; 02h; 00h; kontroler myszy
09h; 80h; 00h; kontrolery innych urządzeń wejścia-wyjścia
0Ah; docking stations
0Ah; 00h; 00h; standardowa docking station
0Ah; 80h; 00h; inny typ docking station
0Bh; procesory
0Bh; 00h; 00; 386
0Bh; 0lh; 00h; 486
0Bh; 02h; 00h; Pentium
0Bh; 03h; 00h; Pentium Pro
0Bh; l0h; 00h; Alpha
0Bh; 40h; 00h; koprocesor
0Ch; kontrolery szeregowych interfejsów cyfrowych
0Ch; 00h; 00h; Firewire (IEEE 1394)
0Ch; 0lh; 00h; ACCESS.bus
0Ch; 02h; 00h; SSA
0Dh - FEh; zarezerwowane
FFh; urządzenia, które nie należą do żadnej z powyższych kategorii
Tabela 1.33.
Kody interfejsu kontrolera IDE
Bit; Wartość; Opis
7-4; 0; zarezerwowane (0)
3; 1; drugi (secondary) kontroler dysków może pracować w dwóch trybach
0; drugi (secondary) kontroler dysków może pracować tylko w trybie określonym przez bit 2
2; 1; tryb pracy drugiego (secondary) kontrolera dysków zgodny z PCI (rejestr danych: przesunięcie 0x1 8h, rejestr stanu: przesunięcie 0x1 Ch)
0; tryb pracy drugiego (secondary) kontrolera dysków zgodny z ISA (rejestr danych 170h, rejestr stanu 376h, IRQ 15)
1; 1; pierwszy (primary) kontroler dysków może pracować w dwóch trybach
0; pierwszy (primary) kontroler dysków może pracować tylko w trybie określonym przez bit 0
0; 1; tryb pracy pierwszego (primary} kontrolera dysków zgodny z PCI (rejestr danych: przesunięcie OxlOh, rejestr stanu: przesunięcie Oxl4h)
0; tryb pracy pierwszego (primary) kontrolera dysków zgodny z ISA (rejestr danych IFOh,
rejestr stanu 3F6h, IRQ 14)
Rozmiar linii pamięci podręcznej (Cache Linę Size)
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1 bit 0;
bity 7-0 - Rozmiar linii pamięci cache wyrażony w podwójnych słowach.
Urządzenie korzystające z cache'owanego obszaru pamięci powinno mieć ten rejestr zaimplementowany.
Rejestr ten jest wykorzystywany do rozpoznawania, czy w trybie burst dane wykroczyły poza linię pamięci podręcznej.
Minimalny czas transmisji (Latency Timer)
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
bity 7-0 - Minimalny czas trwania transmisji wyrażony w cyklach zegara magistrali PCI.
Minimalny czas transmisji określa minimalny czas, na który inicjator ma prawo przejąć kontrolę nad magistralą.
Po przejęciu kontroli nad magistralą zawartość tego rejestru jest dekrementowana po każdym cyklu zegara.
Rejestr ten zabezpiecza inicjator przed odebraniem mu kontroli nad magistralą przed upływem minimalnego czasu
potrzebnego na przeprowadzenie transmisji danych. Gdy układ arbitrażowy odbierze inicjatorowi prawo do kontrolowania
magistrali, inicjator może kontynuować transmisję dopóki rejestr ten nie jest wyzerowany.
Rejestr ten jest zaimplementowany tylko w inicjatorach i powinien być programowalny.
Typ nagłówka (Header Type)
bit 7; 0; 0; 0; 0; 0; 0; 0;
bit 7 - Minimalny czas trwania transmisji wyrażony w cyklach zegara magistrali PCI.
bity 6-0 - Typ nagłówka - powinny być wy zerowane.
Na razie zdefiniowane są dwa typy nagłówków:
0000000 określający dowolne urządzenie nie będące układem sprzęgającym dwie magistrale PCI;
0000001 określający układ sprzęgający dwie magistrale PCI.
Zależnie od typu nagłówka podwójne słowa 4 - 15 w nagłówku pamięci konfiguracyjnej mają różne znaczenie.
BIST (Build-in Self-test)
bit 7; bit 6; x; x; bit 3; bit 2; bit 1; bit 0;
bit 7 - (BIST Capable) - bit jest ustawiony, gdy urządzenie ma zaimplementowane procedury testujące.
bit 6 - (Start BIST) - ustawienie tego bitu powoduje rozpoczęcie procedury testującej. Po zakończeniu procedury bit jest zerowany.
bity 5-4 - Zarezerwowane.
bity 3-0 -(Completion Code) - pozytywne zakończenie procedury testującej powoduje wyzerowanie tych bitów. W przeciwnym przypadku zawierają numer błędu specyficzny dla danego urządzenia.
Rejestr jest zaimplementowany w urządzeniach PCI, wyposażonych w procedury samotestujące.
Adres bazowy (Base Address)
Rejestry adresów bazowych służą do określenia obszarów pamięci operacyjnej lub przestrzeni wejść i a-wyjść i a, wykorzystywanych przez to urządzenie.
Przydzielenie urządzeniu pamięci operacyjnej lub przestrzeni wejść i a-wyjść i a składa się z dwóch etapów. W pierwszym określany jest rozmiar bloku pamięci, w drugim przydzielany jest urządzeniu adres bazowy.
Określenie rozmiaru bloku pamięci jest bardzo proste. Należy wpisać do rejestru adresu bazowego wartość FFFFFFFFh, a następnie odczytać i zdekodować jego zawartość.
Przydzielenie adresu sprowadza się do wpisania adresu do rejestru adresu bazowego.
Struktura danych odczytanych z rejestru adresu bazowego podczas określania rozmiaru bloku pamięci zależy od tego, czy adres powinien być umieszczony w pamięci operacyjnej, czy w przestrzeni wejścia-wyjścia.
Zawartość rejestru adresu bazowego zawierającego adres pamięci operacyjnej ma następującą strukturę:
bit31; bit30; bit29; bit28; bit27; bit26; bit25; bit24; bit23; bit22; bit21; bit20;
bit19; bit18; bit17; bit16;
bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8; bit7; bit6; bit5; bit4;
bit3; bit2; bit1; 0
bity 31-4 - Rozmiar bloku pamięci operacyjnej (jeżeli adres może być
umieszczony w 64-bitowej przestrzeni adresowej, rozmiar bloku kodowany jest w bitach 63-4 - wykorzystywane są dwa kolejne rejestry);
bit 3 - l - blok pamięci nie może być cache'owany, 0 - blok pamięci może być cache'owany.
bity 2-1 - 11 - zarezerwowane,
10 - adres umieszczony jest w 64-bitowej przestrzeni adresowej,
01 - adres umieszczony jest poniżej l MB,
00 - adres umieszczony jest w 32-bitowej przestrzeni adresowej.
bit 0 - l - adres umieszczony jest w przestrzeni wejścia-wyjścia, 0 - adres umieszczony jest w pamięci operacyjnej.
Zawartość rejestru adresu bazowego zawierającego adres pamięci operacyjnej ma następującą strukturę:
bit31; bit30; bit29; bit28; bit27; bit26; bit25; bit24; bit23; bit22; bit21; bit20;
bit19; bit18; bit17; bit16;
bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8; bit7; bit6; bit5; bit4;
bit3; bit2; bit1; 1
bity 31-2 - Rozmiar bloku przestrzeni wejścia-wyjścia. bit l Zarezerwowany.
bit 0 - l - adres umieszczony jest w przestrzeni wejścia-wyjścia, 0 - adres umieszczony jest w pamięci operacyjnej.
Rozmiar bloku pamięci określany jest przez pierwszy ustawiony bit w obszarze bloku pamięci (na przykład ustawiony bit 8 oznacza blok 256-bajtowy). Najmniejszy możliwy do określenia blok pamięci wynosi 4 bajty w przestrzeni wejścia-wyjścia i 16 bajtów w pamięci operacyjnej.
Na przykład wartość FFFFFF0h odczytana z rejestru adresu bazowego oznacza 256-bajtowy blok umieszczony w przestrzeni wejścia wyjścia. Z kolei wartość FFF00000h oznacza blok o rozmiarze l MB umieszczony w 32-bitowej przestrzeni adresowej.
Wskaźnik CardBus CIS (CardBus CIS Pointer)
0 ; bit30; bit29; bit28; bit27; bit26; bit25; bit24; bit23; bit22; bit21; bit20;
bit19; bit18; bit17; bit16;
bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8; bit7; bit6; bit5; bit4;
bit3; bit2; bit1; 0
bit 31 - Zarezerwowany, bit ma wartość 0.
bity 30-28 Definiują obszar pamięci, w którym umieszczony jest obszar informacji o karcie (CIS):
111 - rozszerzenie pamięci ROM urządzenia,
110 - obszar pamięci wskazywany przez rejestr adresu bazowego 5,
101 - obszar pamięci wskazywany przez rejestr adresu bazowego 4,
100 - obszar pamięci wskazywany przez rejestr adresu bazowego 3,
011 - obszar pamięci wskazywany przez rejestr adresu bazowego 2,
010 - obszar pamięci wskazywany przez rejestr adresu bazowego l,
001 - obszar pamięci wskazywany przez rejestr adresu bazowego 0,
000 - pamięć konfiguracyjna karty PCMCIA lub CardBus.
bity 27-0 - Przesunięcie (ang. offset) obszaru informacji o karcie względem początku obszaru pamięci zdefiniowanej przez bity 30 - 28.
Rejestr ten jest zaimplementowany w sterownikach złącza PCMCIA obsługujących 16-bitowe karty PCMCIA zgodne ze specyfikacją 2.x lub 32-bitowe karty CardBus zgodne ze specyfikacją CardBus 95. W rejestrze tym przechowywany jest wskaźnik do obszaru informacji o karcie (CIS - Car d Information Structure), zawierającego informacje o funkcjach karty i sposobie jej konfiguracji.
Dodatkowy identyfikator producenta (Subsystem Vendor ID) i dodatkowy identyfikator urządzenia (Subsystem ID)
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0
bity 7-0 - Dodatkowy identyfikator producenta określany przez PCI SIG.
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
bity 7-0 - Dodatkowy identyfikator urządzenia określony przez producenta.
Te dwa rejestry mają za zadanie umożliwienie rozróżnienia tych samych urządzeń PCI (mających taki sam identyfikator producenta, identyfikator urządzenia i kod klasy urządzenia) umieszczonych na płycie głównej i różnych kartach rozszerzających. Oprogramowanie konfigurujące system wykorzystuje te rejestry do jednoznacznej identyfikacji urządzeń.
Adres bazowy rozszerzenia ROM (Expansion ROM Base Address)
Rejestr adresu bazowego rozszerzenia pamięci ROM jest zaimplementowany w urządzeniach wyposażonych we własną pamięć ROM i służy do określenia adresu bazowego tej pamięci.
Przydzielenie adresu składa się z dwóch etapów. W pierwszym określany jest rozmiar bloku pamięci ROM, w drugim przydzielany jest adres bazowy.
Aby określić rozmiar pamięci ROM, należy wpisać do rejestru adresu bazowego pamięci ROM wartość FFFFFFFEh, a następnie odczytać i zdekodować jego zawartość.
Przydzielenie adresu sprowadza się do wpisania adresu do rejestru adresu bazowego pamięci ROM.
Zawartość rejestru adresu bazowego pamięci ROM ma następującą strukturę:
bit 31; bit 30; bit 29; bit 28; bit 27; bit 26; bit 25; bit 24; bit 23; bit 22; bit 21; bit 20; bit 19; bit 18; bit 17; bit 16;
bit 15; bit 14; bit 13; bit 12; bit 11; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; bit 0;
bity 31-11 - Rozmiar rozszerzenia pamięci ROM. bity 10-1 - Zarezerwowane, mają wartość 0.
bit 0 - l - dekoder adresów pamięci ROM jest włączony, 0 - dekoder adresów pamięci ROM jest wyłączony.
Rozmiar pamięci ROM określany jest przez pierwszy ustawiony bit w obszarze rozmiaru rozszerzenia pamięci ROM (na przykład ustawiony bit 14 oznacza 16 kB pamięci ROM). Najmniejszy rozmiar rozszerzenia pamięci ROM wynosi 2 kB.
Linia IRQ (Interrupt Linę)
bity 7 - 0
bit 7, bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
Numer linii IRQ przyporządkowanej urządzeniu przez programowany router przerwań sprzętowych. Wartości 0-15 odpowiadają numerom linii 1RQ, wartości 16 - 254 są zarezerwowane, wartość 255 oznacza, że urządzeniu nie została przyporządkowana linia IRQ.
Linia INT (Interrupt Pin)
bity 7-0
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
Numer kanału INT przyporządkowany urządzeniu przez producenta (rejestr tylko do odczytu). Wartość O oznacza, że urządzenie nie ma przyporządkowanego kanału przerwań sprzętowych. Wartości l - 4 odpowiadają kanałom ~INTA -~INTD. Wartości 5 - 255 są zarezerwowane.
Długość transmisji (Min_Gnt)
bity 7-0
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
Średni okres, na jaki urządzenie przejmuje kontrolę nad magistralą - czas wyrażony jest jako wielokrotność 250 ns. Rejestr tylko do odczytu zaimplementowany w inicjatorach.
Częstość (Max_Lat)
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
bity 7-0 - Średni odstęp pomiędzy kolejnymi żądaniami dostępu do
magistrali - czas wyrażony jest jako wielokrotność 250 ns. Wartość O oznacza, że urządzenie nie ma konkretnych wymagań. Rejestr tylko do odczytu zaimplementowany w inicjatorach.
Rejestry długości i częstotliwości transmisji pełnią rolę informacyjną. Określają jak często i na jak długo powinno urządzenie przejmować kontrolę nad magistralą. Wartości zapisane w tych rejestrach mają wartości orientacyjne, które mogą być wykorzystywane przez układ arbitrażowy podczas określania priorytetu dostępu do magistrali.
Mechanizmy dostępu do pamięci konfiguracyjnej
Procesory serii x86 mogą adresować dwa obszary pamięci: pamięć operacyjną i przestrzeń wejścia-wyjścia, natomiast magistrala PCI wykorzystuje trzy obszary pamięci: pamięć operacyjną, przestrzeń wejścia-wyjścia i pamięć konfiguracyjną.
Pamięć konfiguracyjną nie została umieszczona w przestrzeni wejścia-wyjścia ze względu na swoje rozmiary - 256 bajtów dla urządzenia może dać do 64 kB pamięci konfiguracyjnej. W przestrzeni wejścia-wyjścia oprócz portów magistrali PCI muszą się zmieścić porty wykorzystywane przez wcześniejsze rozwiązania (ISA, EISA).
Aby zachować zgodność z wcześniejszymi systemami i umożliwić implementację magistral ISA i EISA w systemach PCI, zostały zdefiniowane dwa mechanizmy dostępu do pamięci konfiguracyjnej urządzeń PCI, wykorzystujące porty umieszczone w przestrzeni wejścia-wyjścia.
Pierwszy mechanizm dostępu do pamięci konfiguracyjnej
Pierwszy, preferowany mechanizm dostępu do pamięci konfiguracyjnej jest bardzo prosty:
w pierwszym etapie należy wpisać do 32-bitowego portu 0CF8h numer rejestru urządzenia PCI;
w drugim etapie należy wpisać lub odczytać zawartość tego rejestru z 32-bitowego portu o adresie 0CFCh.
Mechanizm ten umożliwia dostęp do wszystkich rejestrów konfiguracyjnych, wszystkich urządzeń podłączonych do magistrali PCI, ponieważ pierwszy port pozwala na jednoznaczne zakodowanie numeru podwójnego słowa pamięci konfiguracyjnej wszystkich urządzeń PCI. Z kolei rozmiar drugiego portu odpowiada rozmiarowi zaadresowanego podwójnego słowa.
Sposób kodowania numeru rejestru odpowiada następującemu schematowi:
bit31; 0; 0; 0; 0; 0; 0; 0; bit23; bit22; bit21; bit20;
bit19; bit18; bit17; bit16;
bit15; bit14; bit13; bit12; bit11; bit10; bit9; bit8; bit7; bit6; bit5; bit4;
bit3; bit2; 0; 0;
bit 31 - Określa sposób dostępu do rejestrów konfiguracyjnych. Wartość l oznacza transakcję konfiguracyjną, natomiast O transakcję wejścia-wyjścia.
bity 30 - 24 - Zarezerwowane, muszą mieć wartość 0.
bity 23-16 - Określają numer magistrali PCI, do której dołączone jest urządzenie (0 - 255).
Określają numer urządzenia PCI (0-31). Określają numer funkcji urządzenia PCI (0-7).
Określają numer podwójnego słowa pamięci konfiguracyjnej (0-63).
bity l - 0 - Zarezerwowane, muszą mieć wartość 0.
Drugi mechanizm dostępu do pamięci konfiguracyjnej
Drugi mechanizm dostępu do pamięci konfiguracyjnej, zdefiniowany został ze względu na zgodność ze specyfikacją l .0
standardu PCI. Jest on nieco bardziej skomplikowany:
w pierwszym etapie należy wpisać do 8-bitowego portu 0CFAh numer magistrali
PCI (0-255);
w drugim etapie należy wpisać do 8-bitowego portu 0CF8H numer funkcji urządzenia;
w trzecim etapie należy dokonać zapisu lub odczytu jednego, dwóch lub czterech bajtów odpowiadających właściwemu
rejestrowi konfiguracyjnemu w przestrzeni wejścia-wyjścia od adresu C000h do CFFFh.
Sposób kodowania numeru funkcji urządzenia odpowiada następującemu schematowi:
bit 7; bit 6; bit 5; bit 4; bit 3; bit 2; bit 1; bit 0;
bity 7-4 - Jeżeli są ustawione, sterownik magistrali może dokonać zmian w rejestrach konfiguracyjnych urządzeń.
bity 3 - 1 - Numer funkcji urządzenia PCI (0 - 7). bit 0 - Jeżeli jest ustawiony, umożliwia sterownikowi magistrali PCI
przeprowadzenie specjalnego cyklu.
Rejestry konfiguracyjne urządzeń PCI umieszczone w przestrzeni wejścia-wyjścia od adresu C000h do CFFFh podzielone
są na 16 grup (począwszy od Ć000h - C0FFh, skończywszy na CF00h - CFFFh). Każda grupa odpowiada urządzeniu PCI
o numerze określonym przez trzecią cyfrę w adresie (C7xxh odpowiada urządzeniu o numerze 7).
PCI BIOS
Do pamięci konfiguracyjnej urządzeń PCI można się również dostać przez procedury BIOS. Specyfikacja PCI 2.1
wprowadziła funkcję Blh do przerwania INT 1Ah. Pod-funkcje tej funkcji umożliwiają:
wykrycie PCI BIOS,
wykrycie urządzeń PCI,
odczytanie kodu klasy urządzeń PCI,
generowanie specjalnego cyklu magistrali PCI,
odczytanie i zapisanie danych w rejestrach konfiguracyjnych urządzeń PCI,
odczytanie informacji dotyczących przypisania kanałów przerwań urządzeniom PCI,
przypisanie kanałów przerwań urządzeniom PCI.
Odwołanie do PCI BIOS może nastąpić przez wywołanie funkcji B1h przerwania 1Ah (systemy pracujące w trybie 16-bitowym) lub bezpośrednie odwołanie do adresu 000FFE6Eh (systemy pracujące w trybie 32-bitowym).
Autokonfiguracja urządzeń PCI
Urządzenia PCI, podobnie do urządzeń EISA i MCA, nie mają zwór konfiguracyjnych. Konfiguracja przebiega automatycznie, przez wpisanie odpowiednich wartości do rejestrów urządzeń PCI. Możliwość zmiany wartości tych rejestrów umożliwia rekon-figurację urządzeń po dołączeniu do systemu nowego urządzenia.
Urządzenia podłączone do magistrali PCI są automatycznie wykrywane i konfigurowane przez oprogramowanie systemowe przed rozpoczęciem testów POST (Power On Self Test). Na podstawie wartości zapisanych w rejestrach urządzeń PCI oprogramowanie systemowe decyduje o przydzieleniu kanałów przerwań, przydzieleniu obszarów pamięci, sposobie arbitrażu. Oprogramowanie systemowe zapewnia konfigurację umożliwiającą uruchomienie komputera. Po uruchomieniu systemu konfiguracja urządzeń PCI może być zmieniona przez system operacyjny.
Magistrala AGP (Accelerated Graphics Port)
Pomimo niezmiernie dynamicznego rozwoju akceleratorów graficznych w które wyposaża się komputery klasy PC, systemy zbudowane na bazie architektury tego typu długo jeszcze nie będą w stanie konkurować ze stacjami graficznymi. W ostatnim czasie czyni się bardzo wiele w celu zmniejszenia dystansu dzielącego te dwa światy. Nie jest to łatwe zadanie jeśli wziąć pod uwagę konieczność zachowania rozsądnych wskaźników ekonomicznych. Komputer klasy PC ma przecież w niedalekiej przyszłości znaleźć się w każdym gospodarstwie domowym i nie może być zbyt drogi.
Udział graficznych form wyrazu we współczesnych aplikacjach stale rośnie. Animacje obiektów trójwymiarowych pochłaniają znaczną część mocy obliczeniowej procesora i blokują magistrale. Obiekty 3D już dawno przestały być prezentowane na płaskim ekranie monitora w formie "drucianego szkieletu". Aby oddać złudzenie realności szkieletowe modele pokiywa się elektronicznie pięknymi teksturami, które z punktu widzenia komputera stanowią barwne mapy bitowe. Problem polega na tym, iż stopień realizmu tak spreparowanych obiektów rośnie wraz z rozmiarami tekstur bowiem ich powierzchnie są bardziej bogate w szczegóły.
Wytwarzany strumień danych już teraz mieści się z trudem w ramach oferowanych przez specyfikację magistrali PCI a wymagania rosną z dnia na dzień. Aby sprostać tym nowym wyzwaniom powołany został w roku 1996 z inicjatywy firmy Intel komitet w skład
którego wchodzili przedstawiciele producentów kontrolerów graficznych i płyt głównych. Efektem wspólnej pracy tego gremium jest opracowanie nowoczesnej magistrali określanej mianem AGP (Accelerated Graphics Port}. Integracja AGP w architekturze PC przedstawiona została w sposób schematyczny na rysunku l .59.
Mimo iż nie widać tego na pierwszy rzut oka, AGP stanowi jedynie pewne przedłużenie magistrali PCI i nie jest magistralą jako taką. Nie ma i nie będzie płyt głównych z wieloma gniazdami AGP bowiem jedynym urządzeniem umieszczanym w takim gnieździe może być akcelerator 3D. Magistrala AGP nie przyspiesza operacji graficznych, natomiast pozwala na bardziej wydajną pracę procesora graficznego. Sprawuje on jako Master wyłączną władzę nad magistralą i kieruje swe żądania w stronę pamięci operacyjnej (Target}.
Duże znaczenie w rozwoju koncepcji AGP miało oddziaływanie czynnika ekonomicznego. Średnia cena modułów DRAM i SDRAM spada w zawrotnym tempie a dobre pamięci graficzne SGRAM nadal nie są zbyt tanie. Karty wyposażone w 24 MB pamięci lokalnej jeszcze długo nie będą dominowały na rynku zwykłego konsumenta. Dzięki technice AGP kontroler graficzny "widzi" znacznie więcej pamięci lokalnej niż jest jej zainstalowanej. W ten sposób dla celów graficznych używana jest tania pamięć operacyjna.
Gniazdo AGP umieszczane jest na płycie głównej nieopodal złącz PCI ale z pewnym przesunięciem wynikającym z innych rozmiarów kart AGP (rysunek l .60).
Dominujący bardzo długo standard PCI w wersji 2.0 ograniczał częstotliwość taktowania magistrali do 33 MHz. AGP bazuje na specyfikacji PCI w wersji 2.1 (zegar 66 MHz), która nie zdobyła nigdy nadmiernej popularności, jako że przytłaczająca większość wyprodukowanych dotychczas kart gwarantowała niezawodne funkcjonowanie jedynie w zakresie do 33MHz. AGP rozszerza standard bazowy (PCI 2.1) o dodatkowe funkcje, zmienia znaczenie niektórych dotychczasowych sygnałów oraz wprowadza szereg nowych. Mnogość sygnałów zmusza konstruktorów do opracowania nowego złącza krawędziowego o stosunkowo wysokiej gęstości pól kontaktowych (raster l mm) - rysunek 1.61. Karty AGP posiadają dwustronną listwę połączeniową o 132 kontaktach (po 66 z każdej strony).
Transfer zgodny z normą PCI odbywa się w rytmie zegara pracującego z częstotliwością 33 MHz. Przy szerokości magistrali równej 32 bity (4 bajty) otrzymujemy cytowaną często wartość 132 MB/s.
Magistrala AGP może pracować w jednym z trzech trybów oznaczanych symbolicznie l x, 2x i 4x. Oto co kryje się za tymi określeniami:
- Tryb lx. Proste rozszerzenie standardu PCI polegające na przyspieszeniu pracy magistrali. Osiągane przez podwojenie częstotliwości pracy zegara taktującego do wysokości 66 MHz. Maksymalny transfer osiąga więc wartość 264 MB/s (66 MHz x 4 B).
- Tryb 2x. Częstotliwość zegara nie ulega zmianie ale wymiana danych odbywa się w momentach wyznaczanych przez obydwa zbocza impulsów taktujących. W efekcie następuje "pozorny" wzrost częstotliwości zegara do wartości 133
MHz . (Dokładna wartość częstotliwości zegara leży nieco powyżej 66 MHz. Wielkość 132 jest wynikiem zaokrąglenia w dół.).
Teoretyczna przepustowość magistrali sięga w tym przypadku 532 MB/s (133 MHz x 4 B). Obniżenie poziomów napięć z 5 V do 3,3 V łagodzi wymagania na stromość zboczy coraz to krótszych sygnałów. Transfer zgodny z protokołem 2x inicjowany może być wyłącznie przez kontroler graficzny a płyta główna musi odpowiadać na żądania wyrażone w tym trybie.
Tryb 4x. Opcja 4x wprowadzona została przez Intela do specyfikacji AGP w wersji 2.0 i nie należy jak na razie do obowiązkowego wyposażenia ani kart graficznych ani płyt głównych. Rozszerzenie należy traktować jako potencjalną rezerwę tkwiącą w systemie AGP. Tryb 4x pracuje na znacznie obniżonych poziomach napięć (1,5 V). Tak spłaszczone przebiegi mają dostatecznie strome zbocza by podołać wymogom bardzo szybkiej transmisji. Magistrala przesyła w porównaniu z trybem 2x podwójną ilość danych bowiem pomiędzy dowolnymi dwoma zboczami zegara mają miejsce dwie transakcje. Odpowiada to teoretycznej przepustowości równej l 064 MB/s (266 MHz x 4 B).
Istnienie dwóch odmiennych standardów poziomów napięć oznacza dla producentów kart graficznych konieczność rozróżniania wyrobów w wersji 1,5 V od modeli 3,3 V. Służy temu specjalnie uformowana listwa kontaktowa gwarantująca blokadę mechaniczną. Oprócz tego, karty pracujące w trybie 3,3 V pozostawiają sygnał -TYPEDET (końcówka A2) na wysokim poziomie podczas gdy modele klasy 1,5 V s prowadzaj ą ten sygnał do masy.
Specyfikacja dopuszcza istnienie uniwersalnego gniazda AGP, które jest w stanie rozróżniać i obsługiwać karty obydwu standardów: zarówno 3,3 V jak i 1,5 V. Wszystkie trzy typy złącz AGP przedstawione zostały na rysunku 1.62, a znaczenie poszczególnych końcówek zebrane zostało w tabeli l .34.
Tabela 1.34.
Rozmieszczenie zlącz w gnieździe AGP
Styk;Złącze 3,3 V-A;Złącze 3,3 V-B;Złącze uniwersalne=A;Złącze uniwer.=B;Złącze 1,5 V-A;Złącze 1,5 V-A;
1;~OVRCNT;12V;~OVRCNT;12Y;~OVRCNT;12Y;
2;5V;~TYPEDET;5V;~TYPEDET;5V;~TYPEDET;
3;5V;Zarezerwowane;5V;Zarezerwowane;5V;Zarezerwowane;
4;USB+; USB-;USB+;USB-;USB+;USB-;
5;GND;GND;GND;GND;GND;GND;
6;~INTB;~INTA;~INTB;~INTA;~INTB;~INTA;
7;CLK;-RST;CLK;-RST;CLK;-RST;
8;~REQ; GND;~REQ;GND;~REQ;GND;
9;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;
10;STO;ST1;STO;ST1;STO;ST1;
11;ST2;Zarezerwowane;ST2;Zarezerwowane;ST2;Zarezerwowane;
12;~RBF;-PIPĘ;~RBF;-PIPĘ;-RBF;-PIPĘ;
13;GND;GND;GND;GND;GND;GND;
14;Zarezerwowane;Zarezerwowane;Zarezerwowane;-WBF;Zarezerwowane;-WBF;
15;SBAO;SBA1;SBAO;SBA1;SBAO;SBA1;
16;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;
17;SBA2;SBA3;SBA2;SBA3;SBA2;SBA3;
18;SB_STB;Zarezerwowane;SB_STB;SB_STB;SB_STB;SB_STB;
19;GND; GND;GND;GND;GND;GND;
20;SBA4;SBA5;SBA4;SBA5;SBA4;SBA5;
21;SBA6;SBA7;SBA6;SBA7;SBA6;SBA7;
22;Klucz;Klucz;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;
23;Kłucz;Klucz;GND;GND;GND;GND;
24;Klucz;Klucz;GND;GND;GND;GND;
25;Klucz;Klucz;VCC3.3;VCC3.3;VCC3.3;VCC3.3;
26;AD31;AD30;AD31;AD30;AD31;AD30;
27;AD29;AD28;AD29;AD28;AD29;AD28;
28;CCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;VCC3.3;
29;AD27;AD26;AD27;AD26;AD27;AD26;
30;AD25;AD24;AD25;AD24;AD25;AD24;
31;GND; GND;AND;GND;GND;GND;
32;AD_STB1;Zarezerwowane;AD_STB1;-AD_STB1;AD_STB1;~AD_STB 1;
33;AD23;C/-BE3; AD23;C/-BE3;AD23;C/-BE3;
34;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;YDDpl.5;VDDQ1.5;
35;AD21;AD22; AD21;AD22;AD21;AD22;
36;AD 19;AD20; AD19;AD20;AD 19;AD20;
37;ON D;GND; GND;GND;GND;GND;
38;C/-BE2;AD16;C/-BE2;ADI6;C/-BE2;AD16;
40;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;VDDQ1.5;VDDQ1.5;
41;-IRDY;-FRAM E;-IRDY;-FRAME;-IRDY;-FRAME;
42;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Klucz;Klucz;
43;AND;GND;GND;GND;Klucz;Klucz;
44;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Klucz;Klucz;
45;VCC3.3;VCC3.3;VCC3.3;VCC3.3;Klucz;Klucz;
46;-DEVSEL;-TRDY;-DEVSEL;-TRDY;-DEVSEL;-TRDY;
47;VDDQ3.3;-STOP;VDDQ;-STOP;VDDQ1.5;-STOP;
48;-PERR;-PME;-PERR;~PME;~PERR;-PME;
49;GND; GND;GND;GND;GND; GND;
50;-SERR;PAR;-SERR;PAR; -SERR; PAR;
51;C/-BE1;AD 15;C/-BE1;AD15;C/-BE1;AD15;
52;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;VDDQ1.5;VDDQ1.5;
53;AD14;AD 13; AD14;AD13;AD14; D13;
54;AD12;AD11;AD12;AD11;AD12;AD 11;
55;GND; GND;GND;GND;GND;GND;
56;AD 10;AD9;AD10;AD9;AD10;AD9;
57;AD8;C/-BEO;AD8;C/-BEO;AD8;C/-BEO;
58;VDDQ3.3;VDDQ3.3;VDDQ;VDDQ;VDDQ1.5;VDDQ1.5;
59;AD_STBO;Zarezerwowane;AD_STBO;~AD_STBO;AD_STBO;~AD_STBO;
60;AD7;AD6;AD7;AD6;AD7;AD6;
61;GND;GND;GND;GND;GND;GND;
62;AD5;AD4;AD5;AD4;AD5;AD4;
63;AD3;AD2;AD3;AD2;AD3;AD2;
64;VDDQ3.3;VDDQ3.3VDDQ;VDDQ;VDDQ1.5;VDDQ1.5;
65;AD1;ADOAD1;ADO;AD1;ADO;
66;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;Zarezerwowane;
Sygnały magistrali AGP
Szyna AD
AD[31-0] - 32 linie magistrali AGP (używane również w transakcjach PCI).
Sygnały PCI
C/-~BE[3-0] - (Command/Byte Enable*) Mają nieco inne znaczenie niż przy PCI. Podczas transakcji AGP linie te sterowane są przez stronę Master. W trakcie przesyłania komendy (kolejkowania żądań) przy użyciu sygnału -PIPĘ szyną tą przekazywany jest typ rozkazu.
~REQ - (Request) Sygnalizuje chęć dostępu do magistrali.
~RST - (Reset) Znaczenie identyczne z PCI, powoduje inicjalizację wszystkich podłączonych do magistrali urządzeń.
~GNT - (Grant) Znaczenie takie jak przy PCI z rozszerzeniem o informacje przekazywane przez magistralę statusową.
~LOCK - Magistrala AGP nie korzysta z tego sygnału. Nie ma on zastosowania ani w trakcie cykli AGP ani PCI.
PAR - (Parity) Sygnał parzystości, jakkolwiek nie jest oceniany w ramach protokołu, musi być generowany przez urządzenie mające w posiadaniu magistralę AGP.
-FRAME - (Cycle Frame) Sygnał nie ma zastosowania w klasycznych cyklach AGP i używany jest wyłącznie w trybie FW (Fast Write).
-TRDY - (Target Ready) Sygnalizuje gotowość jednostki Target do
dostarczenie żądanych danych (w całości lub ich fragmentu). Jednorazowy transfer całości nie może trwać dłużej niż cztery cykle zegarowe. Przekazy fragmentaryczne mogą być natomiast uzupełniane cyklami oczekiwania (Wait States).
-IRDY - (Initiator Ready) Sygnalizuje gotowość jednostki Master do
przeprowadzenia aktualnej transakcji. Wszystkie przewidziane do wysłania dane są gotowe. Master, który aktywował sygnał -IRDY w trakcie operacji zapisu nie może już wprowadzać cykli oczekiwania.
-STOP - Sygnał nie znajduje zastosowania w kolejkowanych transakcjach AGP. Używany jest jedynie w trybie FW dla sygnalizowania pewnych stanów wyjątkowych.
-DEVSEL - (Device Selecf) Używany w trybie FW do wskazywania błędu. Nie ma zastosowania w kolejkowanych transakcjach AGP.
IDSEL - (Initialization Device Selecf) Wewnętrzny sygnał generowany przez interfejs graficzny, nie należy do linii złącza AGP.
-PERR - (Parity Error) Sygnał nie jest respektowany w transakcjach AGP.
-SERR - (System Error) Znaczenie takie samo jak w przypadku PCI: błąd krytyczny inny niż parzystość danych. Prowadzi do wygenerowania przerwania niemaskowalnego (NMI).
~INTA(B) - (Interrupt Reąuesf) Znaczenie identyczne z PCI.
Sygnały kontroli przepływu
-RBF - (Read Buffer Fuli) Sygnał stanowi wskaźnik zajętości bufora dla danych typu LP (Low Priority) zamawianych przez stronę Master. Dane takie wolno przesyłać jedynie wtedy, gdy sygnał jest w stanie wysokim.
-WBF - (Write Buffer Fuli) Sygnalizator zajętości bufora dla danych przesyłanych przez stronę Target w trybie FW (Fast Write). Transakcja FW może być zapoczątkowana jedynie w razie stwierdzenia wysokiego poziomu tego sygnału.
Sygnały obsługi żądań AGP
SBA[7-0] - Pomocnicza magistrala 8-bitowa (Side Band Addressport) może być wykorzystywana do transportu adresów i rozkazów. Sygnały SBA mogą być sterowane wyłącznie przez stronę Master i wysyłane w kierunku Target.
-PIPE - Sygnał aktywowany zostaje przez stronę Master w celu wskazania chęci umieszczenia żądania w kolejce poleceń oczekujących na dostęp do magistrali AGP. Master może przesłać cały szereg żądań, jak długo sygnał -PIPE utrzymywany jest na niskim poziomie. Kluczowanie odbywa się przy pomocy narastających zboczy sygnału ~CLK.
Status
-ST[2-0] - Linie ST2, ST l i STO stanowią szynę statusową (Status) sterowaną wyłącznie przez jednostkę Target, tj. układy stowarzyszone z płytą główną (Chip-Set Corelogic). Dostarcza ona informacji pomocniczych identyfikujących fazę w jakiej znajduje się magistrala AGP. Stan magistrali statusowej odczytywany jest przez stronę Master w oknie czasowym wyznaczanym aktywnością sygnału ~GNT. Możliwe są następujące kombinacje:
ST2; ST1; ST0; Znaczenie;
0; 0; 0; Target przesyła do strony Master (uprzednio żądane) dane typu LP (Lo\v Priority).
0; 0; 1; Target przesyła do strony Master (uprzednio żądane) dane typu HP (High Priority}.
0; 1; 0; Master jest w trakcie przesyłania danych typu LP, zgodnie z umieszczonym w kolejce żądaniem zapisu do jednostki Target.
0; 1; 1; Master jest w trakcie przesyłania danych typu HP, zgodnie z umieszczonym w kolejce żądaniem zapisu do jednostki Target.
1; 0; 0; Zarezerwowane.
1; 0; 1; Zarezerwowane.
1; 1; 0; Zarezerwowane.
1; 1; 1; Master uzyskał zezwolenie od układu arbitrażu (regulującego dostęp do magistrali AGP) do przeprowadzenia transakcji. Może więc umieścić kolejne żądanie w jednej z kolejek (aktywując sygnał -PIPĘ) lub rozpocząć cykl PCI (korzystając z linii -FRAME).
Sygnały kluczujące
CLK - Podstawowy sygnał kluczujący magistral AGP i PCI.
AD_STBO - (AD Bus Strobe 0} Sygnał kluczujący magistrali AGP pracującej w trybie 2x. Odnosi się do linii AD15 - ADO.
~AD_STBO - Stanowi odwrócenie sygnału AD_STBO. Para sygnałów
~AD_STBO/ AD_STBO kluczuje transfer AGP w trybie 4x (w odniesieniu do linii AD15 -ADO).
AD_STB l - (AD Bus Strobe /) Sygnał kluczujący magistrali AGP pracującej w trybie 2x dla linii AD31 - AD16.
~AD_STB l - Stanowi odwrócenie sygnału AD_STB 1. Para sygnałów
~AD_STB 1/ AD_STB 1 kluczuje transfer AGP w trybie 4x na liniach AD31 -AD 16.
SB_STB - (Side Band Strobe) Sygnał taktujący 8-bitowej magistrali
pomocniczej (SBA) pracującej w trybie 2x. Źródłem sygnału jest zawsze strona Master. Transfer w trybie l x korzysta wyłącznie z zegara CLK.
~SB_STB - Stanowi odwrócenie przebiegu na linii SB_STB. Para sygnałów
~SB_STB/SB_STB steruje magistralą SBA pracującą w trybie 4x.
Sygnały USB
USB+/USB - Para sygnałów tworząca magistralę USB (Universal Serial Bus). Zagadnieniom związanym z USB poświęcony jest rozdział szesnasty.
-OYRCNT - Wyprowadzenie czujnika prądowego (Overcurrent Indicator) źródła napięcia +5 V. W warunkach normalnych sygnał ten utrzymuje się na wysokim poziomie.
System zarządzania zużyciem energii
~PME - Sygnał ten (Power Management Evenf) nie jest wykorzystywany przez protokół AGP, ale znajduje zastosowanie przy obsłudze urządzeń PCI.
Sygnały specjalne
-TYPEDET - (Type Deteci) Sygnalizuje wysokość poziomów napięć jakie wykorzystuje dany typ interfejsu AGP (1,5 V lub 3,3 V).
AGP w teorii
Wersja 1.0 specyfikacji AGP dopuszczała inicjowanie transferów w trybie 2x jedynie przez inicjator AGP (określany też często mianem Master), tj. sterownik karty graficznej. Szybkie kopiowanie danych z pamięci operacyjnej komputera do pamięci lokalnej sterownika graficznego odbywało się dotychczas w dwóch etapach. W pierwszym z nich procesor pisał dane do pamięci RAM i powiadamiał inicjator. Etap drugi obejmował pobranie danych przez sterownik karty, przy czym sama transmisja odbywała się pod dyktando inicjatora. Oczywiście nic nie stoi na przeszkodzie by transfery tego typu (RAM ->VGA) przebiegały w sposób klasyczny z wykorzystaniem magistrali i protokołu PCI jako podzbiorów funkcji AGP.
W wersji 2.0 specyfikacji (dostępna w Internecie pod adresem www.agpforum.org) pojawia się po raz pierwszy termin Fast Writes oznaczający możliwość uruchamiania szybkich transferów danych w kierunku kontrolera graficznego również przez CPU (ewentualnie układy sterujące płyty głównej).
Teoretyczne wartości transferów sięgające l GB/s (tryb 4x) możliwe są do osiągnięcia jedynie dzięki pewnym specjalnym zabiegom modernizacyjnym i uzupełnieniom, którym poddana została magistrala PCI i jej protokół.
Kolejkowanie
Magistrala AGP jest uniwersalnym środkiem transportu. Mogą nią być przesyłane nie tylko strumieniowe przekazy AGP ale i klasyczne, znane z protokołu PCI, sekwencje typu Adres~Przerwa~Dane. Transfer PCI obarczony jest z natury rzeczy cyklami oczekiwania, choćby spowodowanymi czasem odpowiedzi pamięci. W przerwach tych szyna PCI stoi niewykorzystana, co oczywiście zmniejsza jej wydajność.
Zupełnie inna filozofia przyświecała twórcom protokołu AGP, którzy zaimplementowali magistralę jako potok (AGP Pipelining). W modelu tym nie ma niewykorzystanych przerw, bowiem czas oczekiwania na reakcję pamięci wypełniony jest przez inne transmisje, np. wysyłanie kolejnych adresów.
Dzięki zespoleniu idei potoku z zasadą kolejkowania (AGP Oueuing) możliwe jest prawie stuprocentowe wykorzystanie teoretycznej przepustowości. Pojedyncza transakcja AGP zawiera nadal fragment określający typ żądania i adres. Napływające w ślad za tym żądaniem dane sąjednak wyraźnie oddzielone od fazy "adresowo-rozkazowej'".
Stroną inicjującą transakcję (AGP Master) jest kontroler graficzny a układy sterujące płyty głównej (Córę Logic) pełnią funkcję podrzędną (AGP Target). Master wysyła kolejne żądania (na przykład "prześlij dane znajdujące się pod adresem..."), które są zbierane przez Target w kolejce rozkazowej (Reąuest Qneue). Kolejka ta rozróżnia dwa typy zgłoszeń: o niskim i wysokim priorytecie (Low/High Priority) a ich obsługa odbywa się z uwzględnieniem stopnia ważności. Układy sterujące płyty głównej sięgają do określonych w żądaniach lokalizacji i sprowadzają potrzebne dane umieszczając je w specjalnej kolejce zwrotnej (Read Data Return Queue). Stąd ekspediowane są one w kierunku inicjatora. Zamawiane dane przejmuje specjalny bufor zlokalizowany w bloku interfejsu AGP.
Możliwy jest również odwrotny kierunek transmisji, w którym Master wyraża żądanie zapisu do pamięci. Dane takie przygotowywane są w kolejce zapisu (Write Data Queue) i podawane na magistralę AGP w ślad za rozkazem "zapisz dane pod adres...". Target odbiera przesyłkę i umieszcza ją w swej kolejce zapisu. Układy sterujące płyty głównej przejmują dalszy fragment transakcji umieszczając dane w wyznaczonym miejscu w pamięci.
Jakkolwiek cały system AGP jest dość złożony, ilość możliwych do przeprowadzenia operacji zamyka się w kilku prostych poleceniach definiujących kierunek przesyłania danych. Magistrala AGP w odróżnieniu od szyny PCI umożliwia dostęp wyłącznie do pamięci operacyjnej (w przypadku PCI zakres dostępu obejmuje pamięć operacyjną, przestrzeń wejścia/wyjścia oraz własną pamięć konfiguracyjną). Przekazywanie poleceń może się odbywać za pośrednictwem magistrali pomocniczej SBA lub bez jej udziału, tj. wprost poprzez szynę AGP. Jeśli nie wykorzystuje się SBA, 29 najstarszych bitów magistrali AGP (AD31 - AD3) niesie adres początkowy obszaru a linie ADO do AD3 jego wymiar (w jednostkach Q-Word). Maksymalna długość bloku wynosi więc 64 bajty. Kod operacji podawany jest w tym wypadku poprzez linie C/-BE3 - C/-BEO.
C/~BE3; C/~BE2; C/~BEI; C/~BE0; Kod operacji;
0; 0; 0; 0; Read LP;
0; 0; 0; 1; Read HP;
0; 0; 1; 0; Zarezerwowane;
0; 0; 1; 1; Zarezerwowane;
0; 1; 0 0; Write LP;
0; I; 0 1; . Write HP;
0; 1; 1 0; Zarezerwowane;
0; 1; 1; 1; Zarezerwowane;
1; 0; 0; 0; Long Read LP;
1; 0; 0; 1; Long Read H P;
1; 0; 1; 0; Flush;
1; 0; 1; 1; Zarezerwowane;
1; 1; 0; 0; Fence;
1; 1; 0; 1; DAC;
1; 1; 1; 0; Zarezerwowane;
I; 1; 1; 1; Zarezerwowane;
Dane przesyłane w wyniku działania komend z przyrostkiem HP (High Priority) mają wyższy stopień uprzywilejowania i muszą osiągnąć adresata nie później niż w pewnym określonym przez system czasie. Obowiązek taki nie ciąży na danych przesyłanych w wyniku realizacji żądań kodowanych przez rozkazy z przedrostkiem LP (Low Priority).
Naprzemienne kolejkowanie komend LP i HP powoduje, iż w buforach danych strony odbiorczej mogą zalegać bloki przynależne do rozkazów o niskim priorytecie mimo iż z punktu widzenia jednostki Master operacja zapisu do pamięci dawno się już zakończyła. Dla oczyszczenia tych kolejek kontroler graficzny wystosowuje co pewien czas komendę Flush. Polecenie Fence gwarantuje iż nie dojdzie do sytuacji, w której pobierane z pamięci rozkazem Read HP dane nie zostały zaktualizowane poprzez wydane znacznie wcześniej (i zalegające w kolejce) polecenie zapisu o niskim priorytecie. Komendy Flush i Fence nie mają bezpośredniego wpływu na przepływ danych o wysokim priorytecie jedynie pozwalają na wzgląd systemu operacyjnego do wewnętrznych buforów danych magistrali AGP.
DAC (Dual Address Cycle) jest specjalnym modyfikatorem przetwarzającym wszystkie pozostałe 32-bitowe polecenia w funkcje 64-bitowe. Wystąpienie kodu DAC w żądaniu oznacza iż następujące po nim polecenie niesie w sobie właściwy kod funkcji (oraz 4 starsze bajty adresu 64-bitowego). Cztery młodsze bajty adresu zawarte są w fazie pierwszej opatrzonej kodem DAC.
Rozkazy z przedrostkiem Long stosuje się przy odwołaniach do długich i spójnych obiektów. W takim przypadku przeskalowaniu ulega współczynnik określający wymiar transmitowanego bloku. Wartość kodowana przez bity ADO do AD3 interpretowana jest w jednostkach równych 32 bajtom. Maksymalna długość bloku, który może być przesłany przy pomocy jednej komendy Long rośnie więc do 256 bajtów.
Magistrala SBA
SBA (Sideband Addressing) jest 8-bitową magistralą pomocniczą służącą do przekazywania adresów i rozkazów (do płyty głównej). Jeśli kontroler graficzny korzysta z tej możliwości, całe pasmo przenoszenia 32-bitowej magistrali AGP wykorzystywane jest do transportu danych a ruch dodatkowy kierowany jest na szynę SBA. Posługiwanie się SBA nie jest obowiązkowe i zarówno komendy jak i adresy mogą być przesyłane magistralą główną. Koncepcja AGP jest bardzo elastyczna i dopuszcza nawet sytuacje, w których kolejkowane sekwencje AGP mogą być przeplatane klasycznymi cyklami PCI. Nie jest natomiast możliwe mieszanie stylu przesyłania komend: albo stosuje się magistralę SBA albo AGP. Decyzja musi być podjęta w fazie inicjowania systemu i później nie można już nic zmieniać.
Magistrala SBA pozostaje zawsze w wyłącznym władaniu jednostki Master (kontrolera graficznego). Format komend AGP transmitowanych szyną SBA nie ulega zmianie, tzn. są one nadal 32-bitowe. Przed skierowaniem ich na szynę 8-bitową dokonuje się skomplikowanego procesu łamania na trzy lub cztery grupy dwubajtowe. Te z kolei przesyła się w dwóch częściach: najpierw bajt starszy a potem młodszy. W trybie 1x magistrala taktowana jest wprost sygnałem zegarowym CLK. Przejmowanie danych odbywa się wraz z pojawieniem się kolejnego narastającego zbocza tego impulsu.
Specyfikacja trybu 2x wprowadza dodatkowy sygnał zegarowy SB_STB. Podwojenie pasma przenoszenia uzyskuje się poprzez prostą sztuczkę polegającą na dwukrotnej synchronizacji magistrali w ramach jednego okresu zegara. Dane przejmowane są zarówno przy narastających (młodszy bajt komendy) jak i przy opadających (bajt starszy) zboczach przebiegu SB_STB.
Praca magistrali SBA z prędkością 4x wymaga podwojenia częstotliwości zegarowej oraz wprowadzenia drugiego przebiegu taktującego. Jego rolę pełni zanegowany sygnał SB_STB? W trybie tym wykorzystuje się jedynie opadające zbocza sygnałów taktujących: tylne zbocze impulsu SB_STB kluczuje starszy bajt komendy a wraz z tylnym zboczem ~SB STB transportowany jest bajt młodszy.
GART
Pamięć AGP musi być dostępna zarówno dla procesora jak i akceleratora graficznego. Jednolity tryb dostępu gwarantowany jest dzięki istnieniu tablicy GART (Graphics Address Remapping Table). Tablica ta wkomponowana jest w układy scalone płyty głównej (rozwiązanie sprzętowe) lub realizowana jako nakładka uzupełniająca system przydziału pamięci (rozwiązanie programowe). Obecność GART powoduje przeadreso-wanie pewnego wąskiego fragmentu przestrzeni adresowej. Jakiekolwiek odwołania do tego zakresu kierowane są w inne miejsce. Obszar wejściowy GART lokalizowany jest tuż obok pamięci lokalnej kontrolera graficznego oznaczonej na rysunku l .69 jako LFB (Local Frame Buffer}. Przestrzeń adresowa kontrolera składa się z dwóch okien: przez jedno widoczna jest własna pamięć lokalna a przez drugie tablica GART.
Sprzętowy mechanizm stronicowania, w który wyposażony jest procesor przetwarza wirtualny adres liniowy w adres fizyczny. Pamięć przydzielana jest jednak nie w formie ciągłej lecz w postaci stron (4 kB), które niekoniecznie muszą przylegać do siebie. Dzięki pośrednictwu tabeli GART, kontroler graficzny widzi spójny obszar pamięci. Zarówno kontroler jak i CPU używają tych samych adresów zwracając się do pamięci AGP (lub do pamięci lokalnej akceleratora). W zakresie okna GART mechanizm stronicowania jest wyłączony i system adresowania CPU pracuje w trybie 1:1 (adres wirtualny jest jednocześnie adresem fizycznym).
DIME
Każdy punkt składowy prezentowanego na ekranie obiektu 3D może podlegać cieniowaniu lub mapowaniu. Cieniowanie jest stosunkowo prostą operacją polegającą na uśrednieniu parametrów barwnych danego punktu w oparciu o stan punktów z jego otoczenia. W dużym przybliżeniu można nawet przyjąć, iż pewien rozległy obszar bryły składa się z punktów o jednolitej barwie (na przykład cała ściana prostopadłościanu). Taki prymitywny model nie uwzględnia nawet oświetlenia obiektów a już na pewno nie bierze pod uwagę skomplikowanych niuansów typu odbicia, połysk, zamglenia itp., to znaczy tego wszystkiego co decyduje o naturalnym wyglądzie.
Nadawanie obiektom bardziej naturalnego wyglądu możliwe jest dzięki technice mapowania, czyli nakładania na powierzchnię bryły pewnego płaskiego obrazu nazywanego teksturą. Projekcja tekstury zmienia wartości początkowe punktów leżących "pod teksturą". W zależności od stopnia komplikacji i doskonałości modelu proces mapowania
stanowi szereg skomplikowanych obliczeń biorących za punkt wyjścia zarówno punkty pokrywane jak i nakładane. Wspomniane obliczenia przeprowadzane są przez akcelerator graficzny 3D. Ponieważ mapy bitowe tekstur przechowywane są na dysku twardym, konieczne jest ich sprowadzenie do pamięci lokalnej karty graficznej. Schemat przepływu tekstur w komputerze wyposażonym w magistralę PCI przedstawiony jest na rysunku 1.70. Model taki określany jest często mianem Local Texturing.
Oprócz kontrolera graficznego w transfer zaangażowany jest procesor i magistrala PCI. System musi przeprowadzić następujące operacje:
- Pobranie pliku tekstur z dysku twardego i umieszczenie go w pamięci operacyjnej - 1
- Wysłanie tekstur do pamięci lokalnej akceleratora 3D - 2, 3, 4.
- Kontroler graficzny sięga do swej pamięci i pobiera niezbędne do obliczeń parametry punktów - 5. Wyniki zapisywane są - 6 - w buforze obrazu (fragment pamięci lokalnej).
W powyższych operacjach CPU korzysta zwykle z kanału DMA lub posługuje się wielokrotnie instrukcjami I/O. Niezależnie jednak od tego, system dysponuje dwoma kopiami tej samej tekstury: jedną w pamięci głównej i drugą w lokalnej. Proszę też zwrócić uwagę na stosunkowo duże obciążenie magistrali PCI.
Architektura AGP oferuje technikę określaną mianem DIME (Direct Memory Execute). Dzięki niej, akcelerator graficzny może operować na teksturach bez potrzeby sprowadzania ich do swej pamięci lokalnej (AGP Texturing).
Przedstawiona na rysunku 1.71 ścieżka przepływu ulega znacznemu skróceniu:
- Nadal konieczne jest pobranie tekstury z dysku i umieszczenie jej w pamięci operacyjnej - 1.
- Kontroler "widzi" tekstury w pamięci operacyjnej bowiem dzięki AGP stanowi ona rozszerzenie jego przestrzeni adresowej. Tam też wykonywane są wszelkie obliczenia - 2.
Komputer dysponujący szyną AGP nie zawsze musi robić użytek z funkcji DIME. Już sam transport tekstur szybką magistralą AGP przynosi pewne korzyści. Transakcje mają jednak charakter długich sekwencyjnych przekazów w odróżnieniu od krótkich sporadycznych cykli dostępu do tekstury przetwarzanej zdalnie w pamięci operacyjnej.
Mimo niewątpliwych zalet oferowanych przez mechanizm DIME szybkość z jaką osiągane są tekstury zlokalizowane w pamięci lokalnej kontrolera jest większa niż poprzez AGP. Akcelerator graficzny może uzyskać lepszą wydajność przechowując "pod ręką" często używane mapy bitowe. Produkty przeznaczone dla użytkownika o najwyższych wymaganiach (High-End) konstruowane są więc często z wykorzystaniem obu technik: lokalnej i AGP. System taki nosi nazwę DIMEL (Direcł Memory Execitte and Local). Pamięć lokalna sięga w tym przypadku rozmiarów nawet 32 MB.
AGP w praktyce
AGP stanowi rozwinięcie specyfikacji PCI w wersji 2.1 co oznacza pełną zgodność "w dół". Protokół AGP zawiera w sobie wszystkie funkcje PCI a urządzenie tkwiące w gnieździe AGP można zawsze uznać za odpowiadające standardowi PCI. Pełna zgod-
ność od strony sprzętowej nie oznacza bynajmniej tego samego na polu oprogramowania. W pracach nad pierwotnymi wersjami Windows 95 i NT nie uwzględniano bowiem obecności żadnych tworów typu AGP. Podobny los spotkał uzgodniony zbyt późno standard USB. Uznanie przez system operacyjny urządzeń tego typu możliwe jest dzięki wprowadzeniu różnych nakładek programowych i uzupełnień. Pełna integracja AGP przewidziana jest dopiero w funkcjach DirectDraw systemów operacyjnych Windows 98 i Windows 2000.
Póki co AGP wzbogaca system o jedno dodatkowe złącze. Klasyczne płyty główne wyposażane są zwykle w trzy (rzadziej w cztery) gniazda PCI a karta graficzna nie musi już blokować jednego z nich przez co wszystkie pozostają wolne dla innych kart. To samo odnosi się do samej magistrali PCI. Do dyspozycji systemu stoi jej pełna przepustowość, nie ograniczana przez przepływ sekwencji wideo i strumienia danych towarzyszących grafice 3 D.
Wymagania sprzętowe i programowe
Karta graficzna AGP funkcjonować będzie poprawnie w każdej płycie głównej wyposażonej w to złącze i to bez konieczności instalowania sterowników (poprawnie, czyli tak jak zwykłe urządzenie PCI). Aby wykorzystać możliwości oferowane przez AGP potrzeba znacznie więcej:
Windows 95 we właściwej wersji. Pełne wykorzystanie funkcji oferowanych przez AGP możliwe jest pod kontrolą systemu operacyjnego Windows 95 OSR 2.1 lub nowszej. W celu sprawdzenia numeru wersji Windows 95 należy wywołać panel sterujący, uruchomić program System i wybrać opcję głównych parametrów. Poniżej nagłówka System można odczytać numer wersji:
Numer wersji; Wersja systemu operacyjnego;
4.00.950; Windows 95;
4.00.950A; Windows 95 uaktualniony przez Service Pack 1 lub wersja OEM na poziomie SR-1;
4.00.950B; Windows 95 w wersji OEM na poziomie SR-2 (znany jako OSR 2) lub SR-2. 1 (określany mianem OSR 2. 1 );
4.00.950C; Windows 95 w wersji OEM na poziomie SR-2. 5 (inna nazwa: OSR 2. 5);
Dla AGP decydująca jest obecność pakietu USB Supplement to OSR2, który występuje począwszy od wersji SR-2.l. Jeśli był pierwotnie zainstalowany widoczny jest na liście programów w panelu sterującym. Usunięcie z wersji OSR 2.5 pakietu USB powoduje iż system zgłasza się jako 4.00.950B
Omawiane uzupełnienie wzbogaca Windows 95 o sterownik VGARTD.VXD, który programuje tablicę GART. W ten sposób system operacyjny ma możliwość jednolitych odwołać do pamięci graficznej, niezależnie od tego czy jest ona lo-
kalna czy udostępniana przez AGP. Na potrzeby akceleratora graficznego symuluje się ponadto ciągłość pamięci lokalnej i AGP.
Windows NT w wersji 4.0 nie jest szczególnie dogodną platformą do gier komputerowych i animacji 3D. Decyduje o tym generalny brak wsparcia dla funkcji Direct3D. Wraz z pakietem Service Pack 3 (SP-3) instalowane sąjedynie implementacje typu DirectDraw.
Microsoft DirectX w wersji 5 lub nowszej. DirectX stanowi uniwersalną platformę programową pozwalającą na odwołania do zaawansowanych funkcji oferowanych przez urządzenia multimedialne przy pomocy zestawu ujednoliconych procedur.
Cała koncepcja opiera się na konstrukcji dwupoziomowej. W warstwie pierwszej (DirectX Foundation) zawarte są funkcje "niskiego poziomu" ściśle współpracujące ze sprzętem: sterownikami kart graficznych, przetwornikami dźwięku, myszami, joystickami, klawiaturami itp. W wyniku ich działania kreowana jest abstrakcyjna maszyna multimedialna HAL (Hardware Abstraction Layer), która niezależnie od swej rzeczywistej konstrukcji, reaguje na zestaw unormowanych funkcji sterujących. Dla pogłębienia stopnia "iluzji" emuluje się nawet programowo nieistniejące w naturze fragmenty sprzętu (np. akcelerator 3D).
Górną warstwę systemu stanowią skomplikowane usługi wyższego poziomu (DirectX Media Layer), które opierają się na platformie HAL. Funkcje te współpracują bardziej z użytkownikiem i jego oprogramowaniem, (to znaczy jak na razie głównie grami komputerowymi) niż z samym sprzętem. W warstwie tej realizowane są animacje obrazów, przetwarzanie i strumieni audio i wideo oraz funkcje interakcyjne.
DirectX stanowi integralną część systemów operacyjnych Windows 98 i Windows 2000. Posiadacze wersji wcześniejszych muszą doinstalować niezbędne nakładki. Można je sprowadzić z fnternetu (ftp.microsoft.com}.
Powyższe wyliczenie sygnalizuje jedynie złożoność problemów na jakie można napotkać eksperymentując z AGP i nie ma na bynajmniej na celu odstraszania Czytelnika od wszelkich prób w tym kierunku. Jeśli któryś z elementów połączonego łańcucha sprzęto-wo-programowego nie funkcjonuje poprawnie, system przechodzi w klasyczny tryb PCI a funkcje AGP po prostu nie są aktywowane.
Kontrola działania
Obecność magistrali AGP w komputerze przeznaczonym głównie do celów biurowych jest trudna do zauważenia. Na pewno nie można stwierdzić żadnego wzrostu szybkości działania standardowych aplikacji. Pierwsza generacja kart graficznych ze złączem AGP nie różniła się od modeli PCI. Układy scalone akceleratorów graficznych 3D wzbogacone zostały jedynie o tzw. combo-interface, pasujący zarówno do PCI jak i AGP. Karty tego typu pracują w podstawowym trybie lx. Firma ATI rozpoczęła jako pierwsza produkcję układów pracujących w trybie 2x (Rage-II-Pro).
Aby wydobyć na światło dzienne zalety magistrali AGP komputer trzeba poddać testom bazującym w głównej mierze na operacjach graficznych w przestrzeni 3D. Najlepsze do tego celu są gry komputerowe korzystające ze scenerii złożonych z dużej liczby tekstu-rowych obiektów. Im większe są rozmiary tekstur, tym wyniki pomiarów porównawczych AGP/PCI przechylają się na korzyść AGP. Zauważalne różnice można stwierdzić dopiero wówczas, gdy sceneria operuje tak dużymi teksturami (lub tak dużą ich liczbą) iż nie mieszczą się one w pamięci lokalnej kontrolera graficznego.
Warto zdawać sobie sprawę, iż dana karta graficzna (bez względu na to jaki ma typ interfejsu) dysponuje tym samym akceleratorem 3D, który dokonuje obliczeń parametrów punktów w przestrzeni (rendering). Nie ma i nie może być różnicy w samej szybkości przetwarzania (budowania obrazu) a co najwyżej w szybkości przesyłania danych
i rozkazów do samej karty. Prawdziwą eksplozję wydajności wiąże się więc dopiero z jednoczesnym zastosowaniem magistrali AGP i akceleratorów graficznych dysponujących własnym koprocesorem geometrycznym (Geometry Engine) całkowicie odciążającym CPU. Obecna generacja układów scalonych przekazuje nadal znaczną część obliczeń do procesora wykonując jedynie operacje wstępne (Setup Engine).
To, co jest możliwe do osiągnięcia to bardziej realistyczny wygląd obiektów. Stopień realizmu uzależniony jest w od aktywności tzw. filtrów. Opisana w rozdziale dziewiątym technika uśredniania tekstur (Mipmapping) pochłania dodatkowo sporą część mocy obliczeniowej. W takim właśnie przypadku z pomocą przychodzi AGP i DIME. Czasochłonne uśredniania tekstur przeprowadzane są bezpośrednio w pamięci operacyjnej bez potrzeby przesyłania ich do karty graficznej.
Typowa karta graficzna (4 MB pamięci lokalnej) z akceleratorem 3D musi przeznaczyć
2 MB na bufor ramki i bufor-Z. Dla tekstur pozostaje 2 MB co pozwala na konstrukcję scenerii o średnim stopniu komplikacji i zaprezentowanie jej w rozdzielczości 640x480. Zwiększenie pojemności pamięci tekstur do wysokości 8 MB dzięki technice AGP powoduje wyraźny wzrost urealnienia obiektów 3D a obserwator ma odczucia oglądania obrazu w dużo wyższej rozdzielczości niż ma to w istocie miejsce. Samo zwiększenie rozdzielczości obrazu (na przykład do 800x600) przy tym samym stopniu skomplikowania scenerii nie podnosi liczby trójkątów elementarnych, które CPU musi przetransportować do akceleratora graficznego. Wraz ze wzrostem rozdzielczości rośnie jedynie sumaryczna liczba punktów barwnych (piksli) wypełniających coraz to większe trójkąty. Każdy taki punkt musi być oddzielnie przeliczony przez akcelerator graficzny a na szybkość tych obliczeń nie ma wpływu żadna magistrala.
Koncepcja AGP ma bardzo istotną cechę: aplikacje nie muszą wiedzieć o istnieniu tego mechanizmu. Pamięć wideo akceleratora 3D jest większa od rzeczywiście zainstalowanej na karcie. Jeżeli w trakcie budowy scenerii lokalna pamięć tekstur ulega wyczerpaniu, sterownik graficzny czerpie z dodatkowych zasobów emulowanych przez AGP
Aktywność funkcji AGP można stwierdzić na przykład przy pomocy programu DirectX-Show z zestawu DirectX-SDK firmy Microsoft. Należy wybrać punkt Primary Display-Adapter/Mem i odczytać wartość parametru Non-Local Vid-Mem. Obecność w tym miejscu liczby większej od zera jest gwarancją funkcjonowania mechanizmu AGP.
Można też odwołać się do obecnego w panelu sterującym (po udanej instalacji nakładki DirectX w wersji 5.0) modułu konfiguracyjnego bloku Direct-Draw. Wymiar pamięci w okienku Video Memory musi przy tym przewyższać faktycznie zainstalowaną pamięć lokalną na karcie graficznej.
Popularny program testujący 3D-Winbench97 autorstwa grupy Ziff-Davis (ZDLabs) daje się również zaadaptować do celów diagnostyki funkcji AGP. Należy jedynie załadować specjalną scenerię bazującą na bardzo dużych teksturach o rozmiarach powyżej 6 MB. Skoro tylko przełączymy tryb wideo na wysoką rozdzielczość i dużą liczbę kolorów (od High-Color wzwyż) pamięć lokalna (nawet kart wyposażonych w 8 MB) nie jest wstanie pomieścić całej tekstury i kontroler zmuszony jest do zrzutów jej fragmentów. Porównanie wyników przebiegu 3D-Winbench97 w systemie z i bez AGP prowadzi do wniosków, iż wzrost prędkości systemu jest tym bardziej zauważalny im większa jest rozdzielczość obrazu. W trybie 768x1024 wykazywany jest przyrost około 200% podczas gdy przejście do 480x640 nie daje żadnych korzyści.
Systemy wieloprocesorowe
W pogoni za coraz to większą mocą obliczeniową komputerów poszukuje się stale nowych rozwiązań. Jednym z nich jest rozdział ogólnych zadań całego systemu pomiędzy pewną liczbę współpracujących ze sobą procesorów.
Architektura tego typu wymaga od projektantów pewnej deklaracji wstępnej, która rzutuje później na konfigurację całego układu. Mowa tu o sposobie korzystania z pamięci przez współpracujące jednostki CPU. Wyróżnić należy dwa podstawowe punkty podejścia do tego zagadnienia:
- Każdy z procesorów stanowi niezależną jednostkę obliczeniową i dysponuje własną pamięcią operacyjną. Model ten określany jest mianem pamięci rozproszonej (Distributed Memory). Koordynacja pracy poszczególnych podsystemów odbywa się na drodze wymiany wiadomości, najczęściej w formie pakietów.
(Jako standard w tej dziedzinie przyjęły się dwa protokoły: MP1 (Mes.sage Passing Interface) i PVM (Paket Parallel Yirtual Machinę).)
Czas dostępu do danych może się znacznie wydłużać, jeżeli leżą one w obszarze zarządzanym przez inny procesor.
- Cała pamięć systemowa jest ogólnodostępna i leży w zasięgu działania każdego z procesorów (Shared Memory). Czas dostępu do danych jest jednakowy dla każdej z jednostek, jednakowoż protokół dostępu musi uwzględniać możliwość występowania kolizji.
Architektura MPP
Model z pamięcią rozproszoną ma wiele zalet. Pozwala między innymi na łączenie ze sobą dowolnie wielu bloków procesorowych ( W literaturze angielskojęzycznej używa się w tym miejscu terminu Nodes (węzły)).
Stąd też wywodzi się określenie dobrze charakteryzujące ten styl podejścia do systemów wieloprocesorowych: Massive Parallel Processing (MPP). Poszczególne moduły połączone są ze sobą przez specjalne magistrale (np. GTL+) lub adaptowane do tego celu rozwiązania sieciowe.
Równoległe połączenie setek lub nawet tysięcy procesorów prowadzi do osiągnięcia fenomenalnej mocy obliczeniowej, która może jednak być wykorzystana jedynie w nielicznych przypadkach. Stopień w jakim dana aplikacja czerpie korzyści z architektury MPP zależy w ogromnym stopniu od stylu programowania. Konieczność częstej komunikacji między procesorami pochłania moc obliczeniową i blokuje wspólną magistralę.
Cały proces obliczeniowy musi więc być rozpisany na wątki operujące na niezależnych danych. Nie każda aplikacja poddaje się takim zabiegom. Już sama specyfika danego zagadnienia może wykluczyć taką możliwość. Pierwsza z brzegu duża baza danych jest tego najlepszym przykładem. Decyduje tu czas dostępu do ogromnych plików dyskowych, którego nie zmniejszy wzbogacenie systemu o kolejnych 100 procesorów. Samo przetwarzanie rekordu jest zwykle ułamkiem tego czasu. Dobrym materiałem do przetwarzania równoległego są natomiast numeryczne obliczenia inżynierskie i naukowe, gdzie występuje zwykle bardzo intensywne przetwarzanie małej liczby danych.
Systemy wieloprocesorowe w konfiguracji MPP można najczęściej spotkać w centrach komputerowych ośrodków uniwersyteckich niż w ośrodkach obliczeniowych banków.
Architektura UMA
U podstaw architektury UMA (Uniform Memory Access} leży idea wspólnej pamięci globalnej, którą może adresować w całym zakresie każdy z procesorów.
Jeżeli pominąć pewne sytuacje szczególne (moment ładowania i uruchamiania systemu operacyjnego), architektura tego typu wykazuje cechy symetryczne (SMP, Symmetric Multi Processing}. Każdy z procesorów może wykonywać zarówno dowolny fragment aplikacji jak i systemu operacyjnego. Podobnie jest z obsługą przerwań: choć zwykle w systemach wieloprocesorowych deleguje się do tego celu jeden z procesorów, nie jest to konieczne - każdy z CPU jest równouprawniony.
Niepodważalną zaletą UMA jest łatwość w przenoszeniu programów ze środowiska jednoprocesorowego. Cały nakład pracy związany z zarządzaniem takim układem bierze na siebie system operacyjny. Jeśli ma on w sobie zaimplementowaną obsługę SMP, od aplikacji wykonywanej pod jego kontrolą nie wymaga się już żadnych dodatkowych działań. Udostępnianie mocy obliczeniowej dla aktualnie realizowanych procesów odbywa się przy tym już nie na zasadzie przydziału wycinków czasowych jedynego CPU ale na oddaniu we władanie aplikacji jednego z pełnowartościowych procesorów systemowych. Również pisanie nowego programu pod system SMP nie wymaga od programisty żadnych dodatkowych umiejętności: nad sprawiedliwym przydziałem procesorów czuwa system operacyjny.
Szczególny przypadek stanowią monstrualnych wielkości aplikacje wykonywane jako jeden proces. Tutaj system operacyjny SMP jest bezsilny. Przełączanie na kolejne procesory nie może oczywiście przynieść przyspieszenia działania. Kod tego typu musi zostać zmodyfikowany poprzez rozbicie na mniejsze procesy lub wątki.
Komunikacja z pamięcią
Systemy oparte na architekturze UMA bardzo szybko osiągają nasycenie mocy obliczeniowej mimo dodawania kolejnych procesorów W literaturze wymienia się często jako graniczną ilość osiem procesorów.Wspólna magistrala pamięciowa staje się wąskim gardłem skutecznie tamującym wymianę danych. Jak zawsze w takim przypadku, pewne rozładowanie przynosi zastosowanie pamięci podręcznej (Cache). W małą pamięć podręczną pierwszego poziomu (LI Cache) wyposażone są wszystkie współczesne procesory. Istotną rolę odgrywa jednak w tym przypadku pamięć podręczna wyższego poziomu.
Procesory Pentium korzystają w tym wypadku z zainstalowanej na płycie głównej pamięci L2, w rozmiarze 256 - 512 kB (rysunek 1.74).
Wspólny bufor L2, który muszą dzielić między sobą poszczególne jednostki stawia pod poważnym znakiem zapytania możliwość profesjonalnego zastosowania tego typu CPU w systemach wieloprocesorowych. Maksymalna częstotliwość taktowania pamięci buforowej L2 sięga (w zależności od typu CPU) 66 MHz.
Następna generacja procesorów (Pentium Pro oraz Pentium II) jest już pozbawiona tej wady (rysunek 1.75). Każdy z nich ma do swojej dyspozycji własny bufor L2 co zdecydowanie przemawia za ich stosowaniem w omawianych systemach.
Buforowa pamięć podręczna (Cache)
Pamięć cache jest formą szybkiej pamięci podręcznej, w której przechowywane są często używane dane ( Pod szeroko rozumianym pojęciem dane rozumie się tutaj zarówno dane używane przezprogram jak i sam kod programu. Te dwie grupy informacji zwykło się separować jedyniew oddzielnych obszarach pamięci Cache poziomu LI (zintegrowanej we wnętrzu CPU).Pamięci buforowe poziomów wyższych nie rozróżniają już danych od kodu.).
Czas dostępu do pamięci operacyjnej waha się w granicach 50
- 70 ns. Procesor Pentium taktowany zegarem 200 MHz wykonuje większość instrukcji w czasie jednego taktu zegarowego (5 ns). Bezpośrednie połączenie szybkiego procesora z magistralą pamięciową powoduje natychmiastowe uformowanie się wąskiego gardła, a o wykorzystaniu pełnej mocy obliczeniowej nie może być mowy.
Optymalne wykorzystanie przyspieszających funkcji pamięci pośredniej wymaga zwykle działań wielopoziomowych - pierwszy bufor jest bardzo szybki i stosunkowo mały, a drugi stopień pośredni już większy lecz nieco wolniejszy. Rozwiązanie takie godzi interesy ekonomiczne z parametrami technicznymi - szybkie pamięci SRAM są niesłychanie drogie i zużywają w stosunku do tanich DRAM niewspółmiernie więcej energii. Bufor pierwszego poziomu (L1 Cache) o rozmiarze kilku do kilkunastu kilobajtów osadzany jest wprost na krzemowej strukturze scalonej procesora i pracuje synchronicznie z nim. Architektura i lokalizacja podręcznej pamięci buforowej stopnia drugiego (L2 Cache) zależna jest od typu procesora, przy czym wyróżnić można trzy sposoby podejścia:
Pamięć podręczna L2 stanowi odrębną strukturę krzemową zamykniętą we wspólnej obudowie z procesorem. Połączenia są krótkie co pozwala na taktowanie synchroniczne. Typowym przedstawicielem architektury tego typu jest procesor Pentium Pro.
Bufor drugiego poziomu zbudowany jest z niezależnych układów scalonych leżących w bliskim sąsiedztwie CPU ale na tyle daleko, że dostęp przebiega z połową częstotliwości taktowania procesora. Takie rozwiązanie w stylu hybrydowym zastosowano w modelu Pentium II.
Pamięć podręczna L2 umieszcza się w pobliżu pamięci operacyjnej na płycie głównej komputera, w otoczniu innych układów scalonych. Cierpi na tym czas dostępu a zyskuje ekonomika. Rozwiązanie to jest najpowszechniej spotykane i towarzyszy w chwili obecnej większości zastosowań procesorów klasy Pentium w komputerach PC. Nawet proste systemy wieloprocesorowe (zwykle nie więcej niż dwa Pentium) dzielą między sobą jeden wspólną pamięć podręczną drugiego poziomu.
Sprawne funkcjonowanie systemu buforowania ( Pod pojęciem buforowania rozumie się począwszy od tego miejsca zagadnienia odnoszące się do pamięci podręcznej drugiego poziomu (L2), jako że zjawiska zachodzące w LI mają zupełnie inny charakter. Bufor LI jest w pełni niewidzialny dla oprogramowania a jego obecność jest znaczenie bardziej istotna dla wnętrza CPU niż dla spełniania funkcji wieloprocesorowych.)wymaga przyjęcia pewnej organizacji pamięci. Jest ona dzielona na bloki (strony W literaturze angielskojęzycznej używa się tu pojęcia Page (strona), czego nie należy jednak mylić ze stronami pamięci w systemach adresowania lub też dostępu do pamięci w trybie nakładania się stron.), o rozmiarze równym ilości dgstępnej pamięci buforowej. Pamięć podręczna L2 nie stanowi monolitycznej całości. Operuje ona jednostkami przydziału o długości 32 bajtów (rysunek 1.76). Każda jednostka (linijka) stanowi niezależną strukturę opatrzoną własnym adresem oraz dodatkowymi informacjami określającymi status zawartej w nich danych. Linijka napełniana jest w cyklu czterech następujących po sobie (Bursi) operacji odczytu z pamięci (przy 32 bitowej szynie danych).
Przyporządkowanie linijek pamięci operacyjnej linijkom pamięci buforowej może przyjmować różne formy. W najprostrzym przypadku adresy odwzorowuje się w stosunku 1:1 - buforowane są kolejne linijki strony w naturalnej kolejności występowania. Mówimy wtedy o odwzorowaniu bezpośrednim (Direct Mapped). Sprzętowa realizacja tego modelu nie nastręcza wiele trudności, jest on jednak mało wydajny i nieelastyczny.
Podział dostępnych zasobów L2 na mniejsze jednostki (Ways) pozwala już na pewną dozę elastyczności. Strony stają się mniejsze a bufor może operować na rozłącznych obszarach pamięci. Maksymalny stopień swobody zapewnia naturalnie całkowita rezygnacja ze stron i przejście na organizację w formie linijek (Fully Associative Cache). Każda z nich może wtedy pokrywać dowolny adres. W miarę wzrostu swobody w operowaniu buforami rośnie niezbędny nakład na administrowanie tak skomplikowaną strukturą. W praktyce spotyka się różne kompromisowe rozwiązania mieszane.
Żądania dostępu do pamięci filtrowane są przez układ kontrolera pamięci podręcznej. Jeżeli potrzebna informacja znajduje się w buforze przekazuje sieją procesorowi. Brak informacji lub jej nieaktualność powoduje uruchomienie magistrali pamięciowej w celu sięgnięcia do odpowiedniego adresu. W pierwszym przypadku mowa jest o tzw. trafieniu (Cache-Hif). Stan przeciwny stanowi Cache-Miss.
Sytuacja komplikuje się znacznie, jeżeli w systemie operuje kilka procesorów (lub innych układów mających prawo zapisu do pamięci). Aktualność przechowywanej w buforze informacji zależy już nie tylko od gospodarza danego L2 ( Nieco inna logika obowiązuje w systemach wieloprocesorowych dzielących wspólną pamięć podręczną poziomu drugiego.)Dla zachowania zbieżności ze stanem pamięci należy przedsięwziąć pewne działania dodatkowe. W tym celu wszystkie zainteresowane strony stale podsłuchują (Snooping) co dzieje się na magistrali pamięciowej. Analizie podlegają adresy odwołań do pamięci, które porównuje się ze stanem posiadania w buforze L2. Każda z linijek otrzymuje dodatkową etykietę zgodnie z tzw. protokołem MESI.
Protokół MESI jest zbiorem reguł odnoszących się do statusu poszczególnych linijek pamięci podręcznej. Opracowany został pod względem optymalizacji dostępu do pamięci, tzn. bezpośredni i czasochłonny zapis lub odczyt z/do pamięci opóźnia się tak długo jak tylko jest to jeszcze możliwe bez utraty koherencji (zbieżności). Protokół bierze swoją nazwę od pierwszych liter możliwych stanów: Modified, Exclusive, Shared, Invalid.
Exclusive. Linijka o tym statusie obecna jest tylko w tym jednym buforze pamięci podręcznej i nie powtarza się w żadnym innym. Jej zawartość jest w pełni zgodna z buforowanymi komórkami pamięci. Jeżeli procesor żąda danych z zakresu pokrywanego przez linijkę opatrzoną statusem E nie wyzwala to cyklu odczytu z pamięci - dane pobierane są z pamięci podręcznej. Zapis danych do obszaru objętego tą linijką również nie powoduje aktywowania magistrali ale zmienia się status linijki z E na M (Modified).
Modified. Statusem tym oznaczana jest linijka, która podobnie jak w przypadku E nie wystęuje w żadnym innym buforze. Jej zawartość jednak została zmodyfikowana i nie jest już zgodna ze stanem pamięci. Ponieważ jednak ostatnia modyfikacja tego adresu odbyła się w buforze pamięci podręcznej, on to właśnie (a nie pamięć) zawiera bardziej aktualną informację. Tak więc zapis jak i odczyt z tego obszaru stanowi trafienie (Hit) i nie wywołuje pobudzenia magistrali pamięciowej.
Shared. Stan ten odzwierciedla sytuację dublowania się danych w różnych buforach pamięci podręcznej. Dochodzi do niej w przypadku sięgania przez różne procesor}'- do tego samego obszaru pamięci. Odczyt z dowolnej linijki (Zawartość wszystkich linijek o statusie S (odnoszących się do tego samego adresu) jest naturalnie ta sama.); opatrzonej statusem S stanowi naturalnie trafienie i nie uruchamia magistrali. Sytuacja komplikuje się w momencie zapisu pod jeden z buforowanych przez nią adresów. Jest to nadal trafienie ale powstaje niebezpieczny stan rozbieżności. Eliminuje się go poprzez natychmiastowy zapis aktualnej wartości linijki do pamięci (pracuje magistrala) a status wszystkich innych z nią związanych zostaje przestawiony na I (lnvalid).
Invalid. Informacja zawarta w linijce o tym statusie jest bezwartościowa i nie może być wykorzystana. Żądanie odczytu powoduje pobudzenie magistrali pamięciowej i napełnienie linijki a zapis do niej wyzwala cykl zapisu do pamięci.
Algorytm zmian statusu MESI wywołanych określonymi akcjami zebrane zostały w poniższej tabeli:
Status;Odczyt; Zapis;
Invalid; 1. Read Miss 2. Linę Fill (pobudzenie magistrali pamięciowej, cykl odczytu z pamięci) 3. I -> E; 1. Write Miss 2. Write-Through (pobudzenie magistrali pamięciowej, cykl zapisu do pamięci) 3. I -> I;
Shared; 1. Read Hit, brak aktywności magistrali pamięciowej 2. S -> S; 1. Write Hit 2.Write-Through (wywołanie cyklu zapisu do pamięci) 3.S -> E 4.-> I w linijkach innych pamięci podręcznej (Invalidatiori);
Exclusive; 1. Read Hit, brak aktywności magistrali pamięciowej 2. E-> E; 1. Write Hit, brak aktywności magistrali pamięciowej 2. E -> M;
Modified; 1. Read Hit, brak aktywności magistrali pamięciowej 2. M -> M; 1. Write Hit, brak aktywności magistrali pamięciowej 2. M -> M;
Obsługa układów peryferyjnych
Wśród wielu koncepcji połączenia współpracujących ze sobą procesorów jedna zasługuje na szczególną uwagę, bowiem właśnie ona została zastosowana jako rozszerzenie klasycznej architektury AT w płytach głównych powszechnego użytku. U podstaw tego standardu leży opracowana przez firnie Intel specyfikacja MP (MultiProcessor Specifi-catiori). Opracowanie dotyczy oczywiście procesorów produkowanych przez Intel.
Specyfikacja przyjmuje dwa podstawowe założenia wstępne określające pełną symetrię systemu. W części dotyczącej dostępu do pamięci zdecydowano się na architekturę UMA. Niezależnie od liczby zainstalowanych procesorów wykonywana jedna i ta sama kopia każdej aplikacji (a w szczególności również systemu operacyjnego). Każdy z procesorów jest równouprawniony i identyczny pod względem sprzętowym, może wykonywać dowolny fragment kodu oraz porozumiewać się z innymi procesorami (brak uwarunkowań typu Mastar-Slave).
Pełna symetria króluje również w obszarze komunikacji ze światem zewnętrznym. Każdy z procesorów dysponuje w tym samym stopniu możliwościami dostępu do przestrzeni adresowej portów I/O. Mimo iż specyfikacja dopuszcza by dowolny procesor mógł obsługiwać przerwania29 z dowolnego źródła, (a nawet za każdym razem z innego) w praktycznych realizacjach MP zwykło się dedykować jeden z CPU wyłącznie na potrzeby obsługi przerwań i operacji wejścia/wyjścia.
Specyfikacja MP stanowi bardzo szerokie opracowanie, integrujące w sobie szereg najróżnorodniejszych opcji sprzętowych. W przypadku ogólnym możliwe jest jednoczesne występowanie w tym samym systemie UMA wielu procesorów i wielu zewnętrznych magistral I/O (np. VL-Bus i PCI).
Wszystkie niezbędne parametry takiego złożonego układu wieloprocesorowego przekazywane są systemowi operacyjnemu w formie specjalnie zdefiniowanej tablicy konfiguracji. Należy podkreślić, iż nawet tak skomplikowana architektura sprzętowa jest w pełni przezroczysta dla klasycznego oprogramowania pisanego pod zwykły komputer AT. To jedynie system operacyjny poszerzony zostaje o funkcje obsługi MP.
Droga rozwoju procesorów Intela dość długo przebiegała w kierunku systemów j edno-procesorowych. Stała konieczność zachowania zgodności w dół zmuszała projektantów do dublowania pewnych anachronizmów, nawet w rodzinach procesorów najnowszej generacji. Zintegrowanie takich wybitnie jednoprocesorowych struktur w ramach nowoczesnej architektury wieloprocesorowej nie jest łatwe. Szczególnie mało podatny na przeróbki okazał się panujący w niezmiennej formie od czasu pierwszego komputera AT system obsługi przerwań sprzętowych.
Specyfikacja MP definiuje w tym przypadku pewną nadbudowę do standardu. W tym miejscu pojawia się pojęcie kontrolera APIC (Advanced Programmable Interrupt Con-troller). W myśl powyższego, na system obsługi przerwań układu wieloprocesorowego składają się dwa elementy: APIC lokalny i APIC I/O. Tak zdefiniowana rozproszona architektura kontrolera przerwań daje się łatwo zaadaptować zarówno do procesorów Intel 486 jak i do CPU wyższej generacji. Układy APIC współpracują naturalnie ze standardowym kontrolerem 8259A przejętym z architektury AT dla zachowania zgodności na poziomie portów I/O. Dla potrzeb komunikacji pomiędzy układami APIC, system wyposażony jest w specjalną magistralę ICC (Interrupt Controller Communications}. Przerwanie odbierane jest przez człon I/O po czym przekazywane do obsługi przez człon Local. Cały ruch związany z obsługą przerwań kierowany jest właśnie na tą szynę co stanowi znacznie odciążenie dla magistrali pamięciowej.
Rozruch systemu
Przyjęte wcześniej założenie o pełnej symetrii nie obowiązuje w momencie rozruchu całego układu. Na ten krótki czas jeden z procesorów wyróżniony zostaje mianem BSP (Bootstrap Processor). W tym kontekście pozostałe CPU nazywane są jednostkami AP (Application Processor).
Obszary zacieniowane na rysunku l .78 pokrywają układy wyłączone z ruchu. Procesory AP uaktywniane są dopiero w momencie zakończenia czynności wstępnych związanych z rozruchem. Do momentu załadowania systemu operacyjnego i przekazania mu sterowania, układ stanowi maszynę jednoprocesorową dobrze znaną z architektury komputera PC/AT. Z punktu widzenia kontrolerów APIC, układ przechodzi do trybu pracy zwanego PIC-Mode. Przerwania omijają elementy APIC i kierowane są bezpośrednio do obsługi przez procesor BSP.
Wymuszenie tego trybu odbywa się za pośrednictwem bitu bO rejestru IMCR. Dostęp do niego możliwy jest poprzez dwa porty I/O: 0x22 (adres) i 0x23 (sterowanie):
mov al , 0x70 ; out 0x22 , al ; selekcja IMCR mov al , 0x00 ; out 0x23 , al ; wymuszenie trybu PIC
Przejście do pracy symetrycznej
Załadowanie systemu operacyjnego kończy fazę przygotowawczą i pozwala na przejście do wykonywania aplikacji w trybie wieloprocesorowym.
Tym razem dezaktywowany zostaje kontroler 8259A. Jego linie wejściowe zostają albo zamaskowane albo zmuszone do pracy równoległej z układem I/O APIC. Skierowanie źródeł przerwań do układów I/O APIC oraz odblokowanie procesorów AP uzyskuje się poprzez ustawienie bO w rejestrze sterującym IMCR:
mov al , 0x70 ; out 0x22 , al ; selekcja IMCR
mov al , 0x01; out 0x23 , al ; wymuszenie trybu symetrycznego
System Dual-Pentium PCI
Specyfikacja MP predeflniuje kilka dwuprocesorowych konfiguracji sprzętowych. Z szerokiego grona mniej lub bardziej egzotycznych zestawów, na dokładniejsze omówienie zasługuje model maszyny z magistralą PCI bazującej na dwóch procesorach typu Pentium wyposażonych w kontrolery Local-APIC (rysunek 1.80).
Żaden z procesorów nie jest w jakikolwiek sposób wyróżniony. Obydwa muszą być jednakowego typu (albo z serii ze scalonym Local-APIC albo MMX) i dostosowane do taktowania tym samym zegarem. Jedyny stan asymetrii pojawia się w momencie aktywowania linii INIT (reset systemu). Wtedy to procesor AP przechodzi w stan zawieszenia HALT i pozostaje w tym trybie aż do otrzymania od systemu operacyjnego polecenia STARTUP IPI.
Kontroler APIC I/O posiada 16 linii wejściowych, które przyporządkowane zostają następującym źródłom sygnałów przerwań:
Wejście APICI/O; Sygnał; Komentarz;
INTINO; PIĆ 8259A; Wyjście INTR układu Master 8259A
INTIN1; IRQ1; Sygnał przepełnienia bufora klawiatury
INTIN2; IRQO; Programowany timer 8254
INTIN3; IRQ3;
INTIN4; IRQ4;
INTIN5; IRQ5;
INTIN6; IRQ6;
INTIN7; IRQ7;
INTIN8; IRQ8; Zegar czasu rzeczywistego;
INTIN9; IRQ9;
INTIN10; IRQ10;
INTIN11; IRQ11;
INTIN12; IRQ12;
INTIN13; IRQ13; Przerwanie od koprocesora arytmet.;
INTIN14; IRQ14;
INTIN15; IRQ15;
Napływające z magistrali PCI przerwania zewnętrzne wpływają do jednego z czterech kanałów wejściowych: INTA, INTB, INTC i INTD. Specjalny układ programowanego routera pozwala na przypisanie kanałom PCI odpowiednich linii IRQ.
Układy APIC-Local wyposażone są w dwa wejścia, które w omawianej właśnie konfiguracji wykorzystuje się w następujący sposób:
Wejście APIC-Local; Sygnał; Komentarz
LINTINO; PIĆ 8259A; Wyjście INTR układu Master 8259A
LINTIN1; NMI; Przerwanie niemaskowalne
Sprzętowe skojarzenie sygnałów INTR i NMI do połączonych równolegle wejść układów APIC-Local pozwala na bardzo elastyczne sterowanie. Dzięki niemu system operacyjny może decydować w trakcie pracy (maskując wybrane linie LINTINx), który z procesorów przejmie obsługę danego przerwania.
Tabela konfiguracji M P
System operacyjny musi mieć dostęp do informacji określających konfigurację układu wieloprocesorowego. Zgodnie ze specyfikacją MP niezbędne dane zebrane są w tabeli zwanej tablicą konfiguracji (MP Configuration Table).
( Specyfikacja MP przewiduje uproszczoną formę przekazu jeśli konfiguracja systemu daje się sprowadzić do jednego z predefiniowanych uproszczonych modeli. Aktualna wersja specyfikacji określa do 255 takich typów przy czym definiuje tylko 8 (pozostałe zarezerwowane do późniejszego wykorzystania). Zgodnie z tym opisem układ Dual-Pentium ISA / PCI stanowi typ nr. 5. Praktyczne wykorzystanie tej możliwości jest znikome, bowiem zdefiniowane typy standardowe są bardzo nieelastyczne. Wspomniany model numer 5 wymaga
stałej obecności dwóch procesorów i nie nadaje się do opisu konfiguracji dla płyty z dwoma podstawkami i zmienną liczbą CPU: jeden lub dwa.).
).
Wskaźnik na adres początkowy wspomnianej tabeli umieszczany jest w obrębie specjalnego znacznika (Floating Pointer Structure}.
System operacyjny poszukuje sygnatury znacznika (_PM_) kolejno w jednym z poniżej określonych obszarów przestrzeni adresowej:
- jeśli został zdefiniowany segment EBDA (Extended BIOS Data Area), w pierwszym kilobajcie tego segmentu,
- jeśli segment EBDA nie jest zdefiniowany, w ostatnim kilobajcie pamięci podstawowej (639 - 640 kB dla systemów wyposażonych w 640 kB),
- lokalizacja rezerwowa to fragment obszaru przyznanego ROM-BIOS: OxEOOOOh - OxFFFFFh.
Sama obecność znacznika jest sygnałem, że dany system spełnia wymogi określane przez specyfikację MP. Dwunasty bajt (MP Feature Byte 7) daje odpowiedź na pytanie, czy dany system daje się sprowadzić do jednej z konfiguracji standardowych, a jeśli tak, zawiera jej numer. Wyzerowanie wszystkich bitów tego bąjtu wskazuje na obecność tablicy konfiguracji. Sama tablica lokowana jest w jednym z wymienionych powyżej obszarów, a jej dokładny adres odłożony jest w bajtach 0x04-0x07 znacznika(W przypadku
nieobecności tabeli, wszystkie cztery bajty adresu wskaźnika ustawiane są na zero).
Suma kontrolna w bajcie OxOa musi być tak dobrana, by po zsumowaniu wszystkich 16 bajtów znacznika (wraz z bajtem OxOa) otrzymać wartość zero. Bit 7 w bajcie OxOc (MP Feature Byte 2) odnosi się do konfiguracji APIC w momencie rozruchu systemu: l oznacza implementację formy PIC-Mode, O wskazuje na tryb Virtual Wire.
Tablica MP jest konstrukcją o zmiennej długości rozpoczynającą się od nagłówka o stałym wymiarze 44 bajtów. Po nim następują kolejne bloki informacyjne (rekordy), których ilość i długość może być różna w zależności od konfiguracji systemu. Pierwszy bajt rekordu zawiera zawsze informację o jego typie, co z kolej i jednoznacznie określa długość. W ten sposób system operacyjny dochodzi "po łańcuszku" do analizy kolejnych rekordów. W grupie tzw. podstawowej (BASE MP Configuration Table Entries) specyfikacja MP definiuje następujące bloki informacyjne:
- Processor Entry. Dla każdego z obecnych w systemie procesorów redagowany jest jeden rekord o długości 20 bajtów.
- Bus Entry. W skomplikowanych systemach wyposażonych w kilka magistral (np. EISA/PCI) każda z nich identyfikowana jest z własnym rekordem informacyjnym o długości 8 bajtów.
- I/O APIC Entry. Rekord niesie informację o rozmiarze przestrzeni adresowej okupowanej przez każdy z obecnych w systemie programowanych układów kontrolera przerwań (I/O APIC). Stanowi strukturę o długości 8 bajtów.
- l/O Interrupt Assignment Entry. Dla każdego z aktywnych wejść każdego układu I/O APIC umieszczany jest w tablicy MP jest jeden 8-bajtowy rekord. Wszyskie razem stanowią mapę przyporządkowań zewnętrznych (pochodzących od magistral I/O) źródeł przerwań do końcówek I/O APIC.
- Local Interrupt Assignment Entry. Stanowi zestaw 8-bajtowych rekordów tworzących razem mapę przyporządkowań źródeł przerwań do końcówek kontrolerów Local-APlC.
Specyfikacja MP przewiduje możliwość dołączania do rekordów grupy podstawowej (BASE) dodatkowych jednostek informacyjnych objętych wspólną definicją rekordów rozszerzonych (Extended MP Configuration Table Entries). Zagadnienia z tym związane (np. hierarchia szyn I/O) wybiegają znacznie poza zakres tej publikacji, a zainteresowanych Czytelników trzeba odesłać do tekstów źródłowych.
Architektura komputerów przenośnych
Architektura komputerów przenośnych w zasadzie nie różni się od komputerów stacjonarnych. Laptopy mogą być wyposażone w magistralę ISA, VESA lub PCI. Podstawowa różnica pomiędzy komputerami przenośnymi i stacjonarnymi sprowadza się do tego, że dążenie do miniaturyzacji wyeliminowało gniazda rozszerzające magistrali zewnętrznej - wszystkie niezbędne elementy (karta graficzna, kontroler dysków itd.) zostały umieszczone na płycie głównej. Pierwsze laptopy utraciły więc podstawową cechę komputerów PC - możliwość rozbudowy. Nie można było rozbudować pamięci,
dołączyć karty sieciowej, podłączenie modemu zewnętrznego (ze względu na rozmiary i pobór mocy) było sprawą problematyczną. Rozwiązaniem tego problemu okazało się złącze, opracowane w 1989 roku, przez Personal Computer Memory Card International Association (PCMCIA), określane jako złącze PCMCIA.
Złącze PCMCIA
Idea złącza jest prosta: sterownik złącza PCMCIA, karta rozszerzająca (wielkości karty kredytowej) i oprogramowanie tworzą jedno urządzenie podłączone do magistrali systemowej. Urządzenie takie może pełnić różne funkcje, zależne od włożonej karty rozszerzającej. Oprogramowanie systemowe musi śledzić funkcje takiego urządzenia, gdyż konstrukcja złącza umożliwia wymianę kart rozszerzających podczas pracy komputera (jako ostatnie rozłączane są styki masy).
Pierwotnie (specyfikacja 1.0) 16-bitowe złącze PCMCIA było wykorzystywane do rozszerzania pamięci komputerów przenośnych, gdyż sterownik złącza miał dostęp do pamięci operacyjnej.
Wzrost popularności kart PCMCIA sprawił, że kolejne specyfikacje (2.x) zdefiniowały sposób dostępu do przestrzeni wejścia-wyjścia, co umożliwiło umieszczenie na kartach PCMCIA modemów, kart sieciowych i pamięci masowych (dysków twardych). Jednak niejednoznaczne sformułowania określające obszar informacji o karcie (CIS - Card Information Structure) w specyfikacji 2.0 w powiązaniu z dużą liczbą producentów kart PCMCIA i sterowników złącza PCMCIA doprowadziły do tego, że nie wszystkie układy sterownik-karta chciały ze sobą współpracować. Błędy te zostały wyeliminowane w kolejnych wersjach specyfikacji.
Rozwój architektury komputerów PC, a w szczególności wprowadzenie 32-bitowych magistral systemowych doprowadziło do powstania kolejnej specyfikacji (CardBus 95), która zdefiniowała: sposób komunikacji z 32-bitowymi kartami rozszerzającymi, dostęp do kanałów DMA i zasilanie karty napięciem 3,3 V.
W chwili obecnej można spotkać się z 16- i 32-bitowymi kartami PCMCIA typu I, II i III (typ karty określa grubość karty - odpowiednio: 3,3, 5,0 i 10,5 mm - nie ma wpływu na złącze jako takie). Warunki kompatybilności zapewniają, że nowszy sterownik powinien współpracować ze starszymi typami kart, natomiast nowsze typy kart nie muszą współpracować ze starszymi typami sterowników.
Wyszukiwarka
Podobne podstrony:
Komunikacja jako istotny element w procesach zmianROZDZIAŁ 01 Zasady dziedziczenia predyspozycji do nowotworówArchitektura KomputerówInnne architektury komputerów DSPArchitektura Komputerow wiedza01 Rozdział 01MLP FIM Fanfic Wojna o Equestrię Rozdział 01Wirusy komputerowe Architektura komputerów M Ciepły, K Składzieńarchitektura komputera03 Rozdział 01 Granica i ciągłość funkcji wielu zmiennychwięcej podobnych podstron