Procesory od środka. Procesory od wewnątrz Projekt płyty głównej komputera

Obecnie główny udział w rynku mikroprocesorów uniwersalnych zajmują mikroprocesory 32-bitowe i 64-bitowe. W tym rozdziale opisano 32-bitowe mikroprocesory firmy Intel, które tworzą rodzinę IA-32 (Intel Architecture-32). Ta architektura stanowi podstawę 64-bitowej architektury x86-64 firmy Intel i architektury AMD-64 firmy AMD.

2.1 Budowa i funkcje rejestrów

Rejestry zwana szybką pamięcią umieszczoną wewnątrz procesora i przeznaczoną do przechowywania danych w trybie online oraz szybkiego dostępu do nich z wewnętrznych elementów procesora. Na przykład podczas optymalizowania pętli programu pod kątem szybkości zmienne dostępne w pętli są umieszczane w rejestrach procesora, a nie w pamięci. Całość wszystkich takich rejestrów jest czasami nazywana pamięcią notatnika (CoRAM).

2.1.1 Rejestry podstawowe

Rysunek 2.1 przedstawia strukturę rejestrów głównych i ich nazwy. Jest 8 rejestrów ogólny cel(RON), 6 rejestrów segmentowych, rejestr flagi, rejestr wskaźnika instrukcji, a także rejestry systemowe, rejestry debugowania i testowania.

Rejestry ogólnego przeznaczenia (RON). Rejestry te służą głównie do wykonywania operacji arytmetycznych i przesyłania danych. Każdy RON może być dostępny jako rejestr 32-bitowy lub jako rejestr 16-bitowy. Niektóre rejestry mogą być dostępne jako 8-bitowe. Na przykład rejestr EAX ma 32 bity, ale jego dolne 16 bitów nazywane jest rejestrem AX. Górne 8 bitów rejestru AX to AH, a dolne 8 bitów to AL. 16-bitowe części rejestrów indeksowych i rejestrów wskaźników są zwykle używane tylko podczas pisania programów dla trybu adresowania rzeczywistego, tj. dla MS-DOS lub jego emulacji w systemie Windows.

Znaczenie skrótów nazw rejestrów:

Przedrostek E na początku nazw rejestrów jest rozszerzany.

Postfiks X na końcu nazw rejestrów oznacza rzeczywisty rejestr.

AX - Akumulator (napęd).

BX - Rejestr bazowy (rejestr bazowy).

CX - Licznik (licznik).

DX - Dane (dane).

AL - Akumulator niski (dolna połowa rejestru AX).

AH - Wysoki stan akumulatora (wyższa połowa rejestru AX).

BL - Base low (dolna połowa rejestru BX).

BH - Baza wysoka (wyższa połowa rejestru BX).

CL - Licznik niski (dolna połowa rejestru CX).

CH - Licznik wysoki (wyższa połowa rejestru CX).

DL - Niski poziom danych (dolna połowa rejestru DX).

DH - Data high (wyższa połowa rejestru DX).

SI - Indeks źródłowy (indeks źródłowy). Zawiera bieżący adres źródłowy.

DI - Indeks miejsca docelowego (indeks odbiorcy). Zawiera aktualny adres odbiorcy.

BP - Wskaźnik bazowy (wskaźnik bazowy). Do losowego dostępu do danych wewnątrz stosu

SP - Wskaźnik stosu (wskaźnik stosu). Zawiera górny wskaźnik stosu.

CS - Segment kodu (segment kodu).

DS - Segment danych (segment danych).

ES - Segment Extra Data (dodatkowy segment danych).

FS - Rozszerzony segment danych (dodatkowy segment danych).

GS - Rozszerzony segment danych (dodatkowy segment danych).

SS - Segment stosu (segment stosu).

IP - Wskaźnik instrukcji (wskaźnik instrukcji lub licznik instrukcji).

F - Flagi (rejestr flag).

GDTR - Globalny rejestr tablicy deskryptorów (rejestr globalnej tablicy deskryptorów).

IDTR - Rejestr tablicy deskryptorów przerwań (rejestr tablicy deskryptorów przerwań).

TR - Rejestr zadań (rejestr zadań).

LDTR - Lokalny rejestr tablicy deskryptorów (lokalny rejestr tablicy deskryptorów).

DR - Rejestr debugowania (rejestr debugowania).

TR - Rejestr testowy (rejestr testowy).

CR - Rejestr kontrolny (rejestr kontrolny).

Funkcje korzystania z rejestrów. Podczas wykonywania instrukcji przez procesor niektóre rejestry ogólnego przeznaczenia mają specjalny cel.

    Zawartość rejestru EAX jest automatycznie wykorzystywana podczas wykonywania instrukcji mnożenia i dzielenia. Ponieważ rejestr ten jest zwykle związany z wykonywaniem instrukcji arytmetycznych, często określa się go jako rozszerzony rejestr akumulatorów (rozszerzony akumulator).

    Rejestr ECX jest automatycznie wykorzystywany przez procesor jako licznik cykli.

    Rejestr ESP uzyskuje dostęp do danych przechowywanych na stosie. Stos to obszar pamięci systemowej, do którego dostęp odbywa się zgodnie z zasadą FILO (First input - last output) „pierwszy zapis, ostatni odczyt”. Ten rejestr zwykle nigdy nie jest używany do wykonywania zwykłych instrukcji arytmetycznych i przesyłania danych. To często zwany rozszerzonym rejestrem wskaźnika stosu (rozszerzony stos wskaźnik). Rejestr ESP wskazuje na adres wierzchołka stosu (adres, pod który komenda PUSH wypchnie następną zmienną).

    Rejestry ESI i EDI są powszechnie używane do szybkiego przesyłania instrukcji z jednej lokalizacji pamięci do drugiej. Dlatego czasami są nazywane rozszerzone rejestry indeksów źródłowych I odbiorca dane (rozszerzony źródło indeks I rozszerzony miejsce docelowe indeks). Rejestr ESI jest adresem źródłowym i zawiera adres początku bloku informacyjnego dla operacji „przenieś blok” (pełny adres DS:ESI), a rejestr EDI jest adresem docelowym (pełny adres ES:EDI).

    Rejestr EBP jest powszechnie używany przez kompilatory języków wysokiego poziomu do odwoływania się do parametrów funkcji i do odwoływania się do zmiennych lokalnych przydzielonych na stosie. Nie należy go używać do wykonywania zwykłych operacji arytmetycznych ani do przenoszenia danych, z wyjątkiem sytuacji, gdy doświadczeni programiści używają specjalnych technik programowania. Jest to często określane jako sprawa rozszerzona wskaźnik ramki stosu (rozszerzony rama wskaźnik). Rejestr EUR zawiera adres, z którego informacje są wypychane lub umieszczane na stosie (lub „głębokość” stosu). Parametry funkcji mają przesunięcie dodatnie względem EBP, zmienne lokalne mają przesunięcie ujemne, a pełny adres tej komórki pamięci jest przechowywany w parze rejestrów SS:EBP.

    Rejestr EIP przechowuje offset adresu instrukcji. Pełny adres następnej instrukcji wykonywalnej jest przechowywany w parze rejestrów CS:EIP.

    Rejestry ESP, EBP, ESI, EDI przechowują offset adresu danych.

rejestry segmentowe. Rejestry te są używane jako rejestry podstawowe podczas uzyskiwania dostępu do wstępnie przydzielonych obszarów pamięci RAM, które są nazywane segmenty. Istnieją trzy rodzaje segmentów i odpowiednio rejestrów segmentów:

    kod (CS), przechowują tylko polecenia procesora, tj. kod maszynowy programu;

    data (DS, ES, FS i GS), przechowują obszary pamięci przeznaczone na zmienne programowe i dane;

    stack (SS), przechowują systemowy obszar pamięci o nazwie stos, w którym dystrybuowane są lokalne (tymczasowe) zmienne programu i parametry przekazywane do funkcji w momencie ich wywołania.

Rejestry segmentów są ładowane przez selektory segmentów, które są przesunięciami w stosunku do globalnej tablicy deskryptorów (GDT) lub lokalnej tablicy deskryptorów (LDT).

Bity rejestru segmentowego zawierają następujące informacje:

0 - 1. RPL - Żądany poziom uprawnień. Żądany poziom uprawnień.

2. TI – wskaźnik tabeli. Bit tabeli wskaźników. Informuje procesor, gdzie szukać określonego selektora. Jeśli bit jest ustawiony, to procesor odczytuje selektor z lokalnej tablicy deskryptorów. Jeśli bit jest czysty, to procesor odczytuje selektor z globalnej tablicy deskryptorów.

3 - 15. Bity te przechowują indeks globalnej lub lokalnej tablicy deskryptorów.

Rejestr CS jest zbyt mały, aby pomieścić segment kodu, więc musi być ustawiony na segment wykonywalny. Rejestr SS jest zbyt mały, aby pomieścić segment stosu, więc musi być ustawiony na zapisywalny segment danych.

Poziom uprawnień ustawiony w rejestrze segmentów CS jest poziomem uprawnień uruchomionego programu i jest nazywany bieżącym poziomem uprawnień (CPL). Rejestry segmentowe DS, ES, FS, GS są dla danych i muszą być ustawione na segment danych z prawem zapisu. Poziomy uprawnień wymagane przez każdy z tych selektorów muszą być wyższe niż bieżący poziom uprawnień CPL.

Rejestry deskryptorów cienia są powiązane z każdym z sześciu rejestrów segmentowych. 32-bitowy adres bazowy segmentu, 20-bitowy limit i atrybuty (uprawnienia) z tablic deskryptorów są przepisywane do rejestrów cienia w trybie chronionym.

Rejestr wskaźników instrukcji. Rejestr EIP przechowuje przesunięcie względem początku programu (przesunięcie) następnej instrukcji do wykonania. W procesorze znajduje się kilka instrukcji, które wpływają na zawartość tego rejestru. Zmiana adresu zapisanego w rejestrze EIP powoduje przeniesienie sterowania do nowej sekcji programu.

Rejestr flagi EF (EFLAGZ) . Bity tego rejestru nazywane są flagami i odpowiadają albo za specyfikę wykonania niektórych instrukcji CPU, albo odzwierciedlają wynik wykonania poleceń przez ALU. Flagi rejestru są wymienione w tabeli 2.1. Bity od 22 do 31 włącznie są zarezerwowane.

Tabela 2.1 Rejestr flag

Aby przeanalizować bity tego rejestru, dostarczane są specjalne instrukcje procesora. Mówią flaga zainstalowany, gdy bit flagi wynosi 1, i że flaga upuszczony, gdy jego wartość bitowa wynosi 0. Ponadto rozszerzony rejestr EF zawiera pięć nowych flag w porównaniu z rejestrem F.

Flagi kontrolne. Stan bitów w rejestrze EFLAGS, odpowiadających flagom sterującym, programista może zmienić za pomocą specjalnych poleceń procesora. Te flagi (DF, IF, TF) kontrolują wykonanie niektórych instrukcji procesora:

8. TF - flaga pułapki. Flaga śledzenia (tryb krokowy). Gdy jest ona ustawiona (TF=1), po wykonaniu każdej instrukcji wywoływane jest wewnętrzne przerwanie INT 1, które zatrzymuje proces obliczeniowy, umożliwiając sprawdzenie zawartości rejestrów.

9.IF - Flaga zezwolenia na przerwanie. Flaga włączenia przerwania. Przy IF=1 włączone są maskowane przerwania sprzętowe. Jeśli IF=0, jest wyłączone.

10. DF - Flaga kierunku. Flaga kontrolująca kierunek przetwarzania tablic w poleceniach łańcuchowych. Gdy DF=1, rejestry indeksowe SI, DI, które biorą udział w poleceniach łańcuchowych, są automatycznie zmniejszane o liczbę bajtów operandów, przetwarzając w ten sposób łańcuchy od końca do początku. Przy DF=0 są one zwiększane, przetwarzając od początku do końca łańcucha.

Flagi stanu. Flagi te odzwierciedlają różne wskazania wyniku wykonywania instrukcji arytmetycznych i logicznych procesora:

0.CF - Przenieś flagę. Flaga przeniesienia jest ustawiana, jeśli podczas wykonywania operacji arytmetycznej bez znaku uzyskana zostanie liczba, której szerokość bitowa przekracza szerokość bitową przydzielonego jej pola wynikowego. W instrukcjach przesunięcia flaga CF ustala wartość najbardziej znaczącego bitu.

2. PF - flaga parzystości. Flaga parzystości/parzystości jest ustawiana, gdy w wyniku jest parzysta liczba jedynek.

4. AF - Noszenie pomocnicze. Flaga do dodatkowego przelewu/pożyczki z tetrady niższej na starszą (od trzeciej do czwartej cyfry). Stosowany jest w poleceniach do przetwarzania danych 8-bitowych, najczęściej liczb BCD.

6. ZF - flaga zerowa. Flaga zero jest ustawiana, jeśli wynikiem operacji arytmetycznej lub logicznej jest liczba równa zeru (tj. wszystkie bity wyniku są równe 0).

7. SF - Flaga znakowa. Flaga znaku powiela wartość najbardziej znaczącego bitu wyniku. SF=0 dla wartości dodatniej, SF=1 dla wartości ujemnej.

11. OF - Flaga przepełnienia. flaga przepełnienia , Lub ) jest ustawiany, jeśli podczas wykonywania operacji arytmetycznej ze znakiem uzyskana zostanie liczba, której głębia bitowa przekracza szerokość bitową przydzielonego jej pola wynikowego.

Flagi, dodane do rejestru WF:

12-13. IOPL oznacza poziom uprawnień wejścia/wyjścia. Flaga poziomu uprawnień we/wy. Używany w trybie chronionym mikroprocesora do kontroli dostępu do poleceń I/O, w zależności od uprawnień do zadania.

14. NT — flaga zadania zagnieżdżonego. Flaga zagnieżdżania zadań. Używany w trybie chronionym mikroprocesora do rejestrowania faktu, że jedno zadanie jest zagnieżdżone w innym.

16. RF — flaga wznowienia. Wznów flagę. W trybie debugowania pojedyncza wartość RF pozwala na ponowne uruchomienie polecenia po przerwaniach. Używany w połączeniu z rejestrami punktów przerwania debugowania.

17. VM — flaga trybu wirtualnego. Flaga trybu wirtualnego. Znak pracy mikroprocesora w trybie wirtualnym 8086. 1 – procesor pracuje w trybie wirtualnym 8086; 0 - Procesor działa w trybie rzeczywistym lub chronionym.

18. AC — kontrola wyrównania. Flaga trybu pracy procesora, w którym następuje kontrola wyrównania. Używane tylko na poziomie uprawnień 3. Jeśli AC=1 i AM=1 (AM jest bitem w rejestrze kontrolnym CR0), to jeśli uzyskano dostęp do operandu, który nie jest wyrównany do odpowiedniego limitu (2 lub 4 lub 8) bajtów, zostanie zgłoszony wyjątek 17 Wyrównanie argumentu w granicach 2,4,8 oznacza, że ​​adres argumentu jest wielokrotnością odpowiednio 2,4,8.

19. VIF - Wirtualna flaga przerwania. Flaga włączenia przerwania w trybie procesora wirtualnego.

20. VIP — Wirtualne przerwanie w toku. Flaga opóźnienia przerwania w trybie procesora wirtualnego.

21. ID - Identyfikacja procesora. Flaga identyfikacyjna procesora. Flagę można zmienić, jeśli procesor obsługuje polecenie CPUID.

W rejestrach kontrolnych CR0-CR3 to zapisane znaki stanu procesora wspólne dla wszystkich zadań. Rejestr CR0 ma następujące bity:

0. PE — ochrona włączona. Flaga trybu chronionego. Jeśli PE=1, tryb procesora jest chroniony.

1. MP - Teraźniejszość matematyczna. Flaga obecności koprocesora matematycznego. Jeśli MP=1, to obecny jest koprocesor matematyczny.

2. EM — emuluj rozszerzenie numeryczne. Flaga emulacji instrukcji zmiennoprzecinkowych. Gdy flaga jest ustawiona, polecenia do pracy z liczbami rzeczywistymi mogą być emulowane w oprogramowaniu.

3.TS — przełączanie zadań. Flaga przełączania zadań. Flaga jest ustawiana po przełączeniu zadania.

4. ET — typ rozszerzenia. Flaga typu rozszerzenia. Ustaw, jeśli obecny jest koprocesor arytmetyczny 387 lub wyższy.

5. NE — włączenie błędu numerycznego. Flaga rozwiązywania błędów koprocesora. Jeśli flaga jest ustawiona, to w przypadku błędu w koprocesorze generowany jest wyjątek 16.

16.WP — ochrona przed zapisem. Flaga ochrony przed zapisem. Jeśli flaga jest ustawiona, to do jądra systemu operacyjnego przypisywane są strony pamięci w trybie tylko do odczytu (tylko do odczytu).

18:00 — Maska wyrównania. Flaga maskująca wyrównania. Gdy flaga jest ustawiona, to w przypadku dostępu do niewyrównanych operandów zostanie wygenerowany wyjątek 17. Jeśli flaga jest wyzerowana, to taki wyjątek jest maskowany.

29. NW - Nie zapisuj przez. Flaga wyłączenia zapisu.

30. CD - Wyłącz pamięć podręczną. Wyłącz flagę buforowania.

31.PG — Włączanie stronicowania. Flaga trybu stronicowania pamięci. Gdy flaga jest ustawiona, system operacyjny działa w trybie stronicowania.

Pozostałe bity rejestru CR0 są zarezerwowane.

Rejestr CR1 jest zarezerwowany. Rejestr CR2 przechowuje 32-bitowy adres liniowy, pod którym otrzymano błąd strony. 20 MSB CR3 przechowuje fizyczny adres bazowy tablicy katalogu strony i bity kontrolne pamięci podręcznej. Rejestr CR4 zawiera bity włączające dla rozszerzeń architektury MP. Ogólnie rzecz biorąc, rejestry te są używane w programowaniu systemowym i ustawiają tryb pracy procesora (normalny, chroniony itp.), stronicowanie pamięci i tak dalej.

Systemowe rejestry adresowe. Globalna tablica deskryptorów GDTR i rejestry systemowe tablicy przerwań IDTR przechowują odpowiednio 32-bitowe adresy bazowe i 16-bitowe granice tablicy. Rejestry segmentu zadań systemowych TR i tablica deskryptorów lokalnych LDTR to 16-bitowe selektory. Odpowiadają one rejestrom deskryptora cienia, które zawierają 32-bitowy adres bazowy segmentu, 20-bitowy limit i bajt uprawnień.

W rejestrach debugowania DR0-DR3 zawierają 32-bitowe adresy punktów przerwania w trybie debugowania; DR4-DR5 są zarezerwowane i nieużywane; DR6 wyświetla stan punktu kontrolnego; DR7 - zarządza rozmieszczeniem punktów kontrolnych w programie.

Rejestry testowe TR należą do grupy rejestrów specyficznych dla modelu, ich skład i liczba zależą od typu procesora: MP 386 wykorzystuje dwa rejestry TR6 i TR7 do sterowania systemem przywoławczym przydziału pamięci przez system operacyjny. Pentium II i nowsze używają dwunastu rejestrów TR1-TR12. Ta grupa rejestrów zawiera również wyniki testów pamięci MP i pamięci podręcznej.

Artykuł ujawnia znaczenie terminu „64 bity”. W artykule dokonano krótkiego przeglądu historii rozwoju systemów 64-bitowych, opisano najpopularniejsze obecnie 64-bitowe procesory architektury Intel 64 oraz 64-bitowy system operacyjny Windows.

Wstęp

W ramach architektury komputerowej termin „64-bitowy” odnosi się do 64-bitowych liczb całkowitych i innych typów danych o rozmiarze 64 bitów. „64-bitowe” systemy mogą odnosić się do 64-bitowych architektur mikroprocesorów (np. EM64T, IA-64) lub 64-bitowych systemów operacyjnych (np. Windows XP Professional x64 Edition). Możemy mówić o kompilatorach, które generują 64-bitowy kod programu.

W tym artykule omówimy różne zagadnienia związane z technologiami 64-bitowymi. Artykuł jest przeznaczony dla programistów, którzy chcą rozpocząć tworzenie programów 64-bitowych, a skierowany jest do programistów Windows, ponieważ dla nich najbardziej istotna jest kwestia znajomości systemów 64-bitowych.

Historia systemów 64-bitowych

System 64-bitowy dopiero niedawno pojawił się w życiu większości użytkowników i programistów aplikacji. Jednak praca z danymi 64-bitowymi ma długą historię.

1961: IBM wypuszcza superkomputer IBM 7030 Stretch, który wykorzystuje 64-bitowe słowa danych, 32-bitowe lub 64-bitowe instrukcje maszynowe.

1974: Control Data Corporation uruchamia superkomputer wektorowy CDC Star-100, który wykorzystuje 64-bitową architekturę słów (poprzednie systemy CDC miały architekturę 60-bitową).

1976: Cray Research wypuszcza pierwszy superkomputer Cray-1, który implementuje 64-bitową architekturę słów i będzie służył jako podstawa dla wszystkich kolejnych superkomputerów wektorowych Cray.

1985: Cray wypuszcza UNICOS, pierwszą 64-bitową implementację systemu operacyjnego Unix.

1991: MIPS Technologies wypuszcza pierwszy 64-bitowy procesor, R4000, który implementuje trzecią iterację architektury MIPS ich firmy. Procesor ten jest używany w graficznych stacjach roboczych SGI od modelu IRIS Crimson. Firma Kendall Square Research wypuszcza swój pierwszy superkomputer KSR1 zbudowany w oparciu o własną 64-bitową architekturę RISC z systemem OSF/1.

1992: Digital Equipment Corporation (DEC) wprowadza całkowicie 64-bitową architekturę Alpha, pomysł projektu PRISM.

1993: DEC wypuszcza 64-bitowy, podobny do Uniksa system operacyjny DEC OSF/1 AXP (później przemianowany na Tru64 UNIX) dla swoich systemów Alpha.

1994: Intel ogłasza plany opracowania 64-bitowej architektury IA-64 (z firmą Hewlett-Packard) jako następcy swoich 32-bitowych procesorów IA-32. Data wydania ustalona na lata 1998-1999. SGI wypuszcza IRIX 6.0 z 64-bitową obsługą chipsetu R8000.

1995: Sun wprowadza na rynek 64-bitową rodzinę procesorów SPARC UltraSPARC. HAL Computer Systems, spółka zależna Fujitsu, wprowadza na rynek stacje robocze oparte na 64-bitowym procesorze SPARC64 pierwszej generacji opracowanym niezależnie przez firmę HAL. IBM wypuszcza mikroprocesory A10 i A30, a także 64-bitowe procesory PowerPC AS. IBM wydaje również 64-bitową aktualizację dla AS/400, która może przekształcić system operacyjny, bazy danych i aplikacje.

1996: Nintendo wprowadza konsolę do gier Nintendo 64, opartą na tańszym wariancie MIPS R4000. HP udostępnia 64-bitową implementację 2.0 swojej zastrzeżonej architektury PA-RISC PA-8000.

1997: IBM wprowadza linię RS64 64-bitowych procesorów PowerPC/PowerPC AS.

1998: Sun wypuszcza Solaris 7 z pełną obsługą 64-bitowego UltraSPARC.

1999: Intel wypuszcza zestaw instrukcji dla architektury IA-64. AMD publicznie ogłasza swój zestaw 64-bitowych rozszerzeń dla IA-32, który został nazwany x86-64 (później przemianowany na AMD64).

2000: IBM wypuszcza swój pierwszy 64-bitowy komputer mainframe zSeries z900 zgodny z ESA/390, a także nowy system operacyjny z/OS.

2001: Intel w końcu wprowadza na rynek linię 64-bitowych procesorów, obecnie nazywanych Itanium, dla serwerów o wysokiej wydajności. Projekt nie spełnia oczekiwań ze względu na liczne opóźnienia we wprowadzaniu IA-64 na rynek. NetBSD staje się pierwszym systemem operacyjnym działającym na procesorze Intel Itanium po jego wydaniu. Ponadto Microsoft wypuszcza również Windows XP 64-Bit Edition dla architektury IA-64 z rodziny Itanium, chociaż zachowuje możliwość uruchamiania aplikacji 32-bitowych przy użyciu warstwy WoW64.

2003: AMD wprowadza linie procesorów Opteron i Athlon 64 oparte na architekturze AMD64, która jest pierwszą 64-bitową architekturą procesora opartą na architekturze x86. Apple zaczyna używać 64-bitowego procesora IBM „G5” PowerPC 970. Intel twierdzi, że rodzina układów procesorowych Itanium pozostanie jedynymi 64-bitowymi procesorami opracowanymi przez ich firmę.

2004: W odpowiedzi na komercyjny sukces AMD, Intel przyznaje, że opracowywał klon rozszerzeń AMD64, które nazwali IA-32e (później przemianowany na EM64T, a następnie ponownie na Intel 64). Intel również wydaje zaktualizowane wersje Rodziny procesorów Xeon i Pentium 4 z obsługą nowych poleceń.

2004: VIA Technologies wprowadza swój 64-bitowy procesor Isaiah.

2005: 31 stycznia Sun wypuszcza system Solaris 10 z obsługą procesorów AMD64/Intel 64. 30 kwietnia Microsoft wypuszcza system Windows XP Professional x64 Edition dla procesorów AMD64/Intel 64.

2006: Sony, IBM i Toshiba wprowadzają na rynek 64-bitowy procesor Cell dla PlayStation 3, serwerów, stacji roboczych i innych urządzeń. Firma Microsoft wydaje system Windows Vista z dołączoną wersją 64-bitową dla procesorów AMD64/Intel 64, która obsługuje zgodność z 32-bitową. Wszystkie aplikacje i składniki systemu Windows są 64-bitowe, ale wiele z nich ma wersje 32-bitowe dołączone jako wtyczki w celu zachowania zgodności.

2009: Podobnie jak Windows Vista, system Windows 7 firmy Microsoft zawiera pełną wersję 64-bitową dla procesorów AMD64/Intel 64, a większość nowych komputerów jest domyślnie dostarczana z wersją 64-bitową. System operacyjny firmy zostaje wydany Apple Mac OS X 10.6, „Snow Leopard”, który ma 64-bitowe jądro i jest przeznaczony dla procesorów AMD64 / Intel 64, jednak ten system jest instalowany domyślnie tylko na niektórych najnowszych modelach komputerów Apple. Większość aplikacji dostarczanych z systemem Mac OS X 10.6 jest teraz również 64-bitowa.

Aby uzyskać więcej informacji na temat historii rozwoju systemów 64-bitowych, zobacz artykuł Johna Maszy „Długa droga do 64-bitów” oraz encyklopedyczny artykuł Wikipedii „64-bit”.

Programowanie aplikacji i systemy 64-bitowe

W chwili pisania tego tekstu w 2010 roku najbardziej znane i rozpowszechnione były dwie architektury 64-bitowych mikroprocesorów: IA64 i Intel 64.
  1. IA-64 64-bitowa architektura mikroprocesorów opracowana wspólnie przez firmy Intel i Hewlett Packard. Zaimplementowane w mikroprocesorach Itanium i Itanium 2. Bardziej szczegółowe zapoznanie się z architekturą IA-64 można znaleźć w następujących artykułach Wikipedii: „IA-64”, „Itanium”, „Itanium 2”. Obsługiwana jest architektura Itanium duża liczba producenci serwerów: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP, NEC, SGI i Unisys. Dostawcy ci dołączyli do firmy Intel i wielu programistów, tworząc Itanium Solutions Alliance, aby ulepszyć architekturę i przyspieszyć tempo przenoszenia oprogramowania.
  2. Intel 64(AMD64 / x86-64 / x64 / EM64T) - ta architektura jest rozszerzeniem architektury x86 z pełną kompatybilnością wsteczną. Istnieje wiele wariantów nazwy tej architektury, co prowadzi do nieporozumień, choć w rzeczywistości wszystkie te nazwy oznaczają to samo: x86-64, AA-64, Hammer Architecture, AMD64, Yamhill Technology, EM64T, IA-32e , Intel 64, x64. Aby dowiedzieć się więcej o tym, jak powstało tak wiele imion, zobacz artykuł w Wikipedii: „X86-64”. Procesory o architekturze Intel 64 są szeroko stosowane w komputerach osobistych. I najprawdopodobniej twój komputer jest wyposażony w procesor o tej architekturze.
Ważne jest, aby zrozumieć, że IA-64 i Intel 64 (AMD64) to zupełnie różne, niekompatybilne architektury mikroprocesorów. W dalszej części artykułu rozważymy tylko architekturę Intel 64 (x64 / AMD64), ponieważ jest ona bardziej popularna wśród twórców aplikacji. oprogramowanie dla systemu operacyjnego Windows. Dla zwięzłości model programowania Intel 64 dostępny dla programisty w 64-bitowym systemie Windows nosi nazwę Win64.

Architektura Intel 64 (AMD64)

Rozważana architektura Intel 64 jest prostym, ale potężnym, kompatybilnym wstecznie rozszerzeniem starszej przemysłowej architektury x86. Dodaje 64-bitową przestrzeń adresową i rozszerza zasoby rejestrów, aby zapewnić lepszą wydajność rekompilowanych programów 64-bitowych. Architektura zapewnia obsługę starszego 16-bitowego i 32-bitowego kodu aplikacji i systemów operacyjnych bez modyfikacji lub ponownej kompilacji.

Charakterystyczną cechą Intel 64 jest obsługa szesnastu 64-bitowych rejestrów ogólnego przeznaczenia (x86-32 miał osiem rejestrów 32-bitowych). 64-bitowa arytmetyka i operacje logiczne nad liczbami całkowitymi. Obsługiwane są 64-bitowe adresy wirtualne. Do zaadresowania nowych rejestrów dla rozkazów wprowadzono „prefiksy rozszerzeń rejestrów”, dla których wybrano zakres kodów 40h-4Fh, stosowanych dla rozkazów INC<регистр>i grudzień<регистр>w trybie 32- i 16-bitowym. Polecenia INC i DEC w trybie 64-bitowym muszą być zakodowane w bardziej ogólnej postaci dwubajtowej.

Rejestry:

16 64-bitowych rejestrów całkowitych ogólnego przeznaczenia (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15),
8 80-bitowych rejestrów zmiennoprzecinkowych (ST0 - ST7),
8 64-bitowych rejestrów Multimedia Extensions (MM0 - MM7, przestrzeń współdzielona z rejestrami ST0 - ST7),
16 128-bitowych rejestrów SSE (XMM0 - XMM15),
64-bitowy wskaźnik RIP i 64-bitowy rejestr flagowy RFLAGS.

Zapotrzebowanie na architekturę 64-bitową jest określane przez aplikacje, które potrzebują dużej przestrzeni adresowej. Przede wszystkim są to wysokowydajne serwery, systemy zarządzania bazami danych, systemy CAD i oczywiście gry. Takie aplikacje odniosą ogromne korzyści z 64-bitowej przestrzeni adresowej i większej liczby rejestrów. Mała liczba rejestrów dostępnych w starszej architekturze x86 ogranicza wydajność zadań obliczeniowych. Zwiększona liczba rejestrów zapewnia wystarczającą wydajność dla wielu aplikacji.

Podkreślamy główne zalety architektury x86-64:

  • 64-bitowa przestrzeń adresowa;
  • rozbudowany zestaw rejestrów;
  • zestaw poleceń znanych programistom;
  • możliwość uruchamiania starych 32-bitowych aplikacji w 64-bitowym systemie operacyjnym;
  • możliwość korzystania z 32-bitowych systemów operacyjnych.

64-bitowe systemy operacyjne

Prawie wszystkie nowoczesne systemy operacyjne mają teraz wersje dla architektury Intel 64. Na przykład Microsoft dostarcza Windows XP x64. Główni programiści systemy UNIX udostępniają również wersje 64-bitowe, takie jak Linux Debian 3.5 x86-64. Nie oznacza to jednak, że cały kod takiego systemu jest całkowicie 64-bitowy. Część kodu systemu operacyjnego i wiele aplikacji może równie dobrze pozostać 32-bitowych, ponieważ Intel 64 zapewnia kompatybilność wsteczną z aplikacjami 32-bitowymi. Na przykład 64-bitowy Wersja Windowsa wykorzystuje specjalny tryb WoW64 (Windows-on-Windows 64), który tłumaczy wywołania z 32-bitowych aplikacji na zasoby 64-bitowego systemu operacyjnego.

WoW64

Windows-on-Windows 64-bit (WoW64) to podsystem systemu operacyjnego Windows, który umożliwia uruchamianie 32-bitowych aplikacji we wszystkich 64-bitowych wersjach systemu Windows.

Podsystem WoW64 nie obsługuje następujących programów:

  • programy skompilowane dla 16-bitowych systemów operacyjnych;
  • programy trybu jądra skompilowane dla 32-bitowych systemów operacyjnych.
Istnieją różnice w WoW64 w zależności od architektury procesora. Na przykład 64-bitowa wersja systemu Windows zaprojektowana dla procesora Intel Itanium 2 używa WoW64 do emulacji instrukcji x86. Ta emulacja jest bardzo zasobożerna w porównaniu z WoW64 dla architektury Intel 64, ponieważ przełącza się z trybu 64-bitowego do trybu zgodności podczas wykonywania programów 32-bitowych.

WoW64 na architekturze Intel 64 (AMD64/x64) nie wymaga emulacji instrukcji. Tutaj podsystem WoW64 emuluje tylko środowisko 32-bitowe, ze względu na dodatkową warstwę między 32-bitową aplikacją a 64-bitowym Windows API. Gdzieś ta warstwa jest cienka, gdzieś nie tak bardzo. Dla program drugorzędny straty wydajności spowodowane obecnością takiej warstwy wyniosą około 2%. W przypadku niektórych programów ta wartość może być wyższa. Dwa procent to niewiele, ale należy pamiętać, że aplikacje 32-bitowe działają nieco wolniej w 64-bitowym systemie operacyjnym Windows niż w środowisku 32-bitowym.

Kompilacja 64-bitowego kodu nie tylko eliminuje potrzebę WoW64, ale także zapewnia dodatkowy wzrost wydajności. Wynika to ze zmian architektonicznych w mikroprocesorze, takich jak zwiększenie liczby rejestrów ogólnego przeznaczenia. W przypadku przeciętnego programu można oczekiwać od 5 do 15% wzrostu wydajności po prostej rekompilacji.

Ze względu na obecność warstwy WoW64 programy 32-bitowe działają mniej wydajnie w środowisku 64-bitowym niż w środowisku 32-bitowym. Mimo to proste aplikacje 32-bitowe mogą korzystać z uruchamiania ich w środowisku 64-bitowym. Prawdopodobnie wiesz, że program skompilowany z przełącznikiem /LARGEADDRESSAWARE:YES może przydzielić do 3 gigabajtów pamięci, jeśli 32-bitowy system operacyjny Windows zostanie uruchomiony z przełącznikiem /3gb. Tak więc ten sam 32-bitowy program działający w systemie 64-bitowym może przydzielić prawie 4 GB pamięci (w praktyce około 3,5 GB).

Podsystem WoW64 izoluje programy 32-bitowe od programów 64-bitowych poprzez przekierowanie dostępu do plików i rejestru. Zapobiega to przypadkowemu dostępowi programów 32-bitowych do danych aplikacji 64-bitowych. Na przykład aplikacja 32-bitowa, która uruchamia plik DLL z katalogu %systemroot%\System32, może przypadkowo uzyskać dostęp do 64-bitowego pliku DLL, który jest niezgodny z programem 32-bitowym. Aby tego uniknąć, podsystem WoW64 przekierowuje dostęp z folderu %systemroot%\System32 do folderu %systemroot%\SysWOW64. To przekierowanie pomaga zapobiegać błędom zgodności, ponieważ wymaga pliku DLL zaprojektowanego specjalnie do pracy z aplikacjami 32-bitowymi.

Dowiedz się więcej o mechanizmach przekierowań system plików a rejestr można znaleźć w sekcji MSDN „Uruchamianie aplikacji 32-bitowych”.

Model programowania Win64

Podobnie jak w Win32, rozmiar strony w Win64 wynosi 4 KB. Pierwsze 64 KB przestrzeni adresowej nigdy nie są mapowane, więc najmniejszy prawidłowy adres to 0x10000. W przeciwieństwie do Win32, systemowe biblioteki DLL są ładowane powyżej 4 GB.

Osobliwością kompilatorów dla Intela 64 jest to, że mogą najskuteczniej wykorzystywać rejestry do przekazywania parametrów do funkcji, zamiast używać stosu. Pozwoliło to twórcom architektury Win64 pozbyć się czegoś takiego jak konwencja wywoływania (konwencja wywoływania). W Win32 możesz używać różnych konwencji: __stdcall, __cdecl, __fastcall i tak dalej. W Win64 jest tylko jedna konwencja wywoływania. Rozważmy przykład, w jaki sposób cztery argumenty typu całkowitego są przekazywane w rejestrach:

  • RCX: pierwszy argument
  • RDX: drugi argument
  • R8: trzeci argument
  • R9: czwarty argument
Argumenty po pierwszych czterech liczbach całkowitych są przekazywane na stos. W przypadku argumentów zmiennoprzecinkowych używane są rejestry XMM0-XMM3, a także stos.

Różnica w konwencjach wywoływania oznacza, że ​​w tym samym programie nie można używać zarówno kodu 64-bitowego, jak i 32-bitowego. Innymi słowy, jeśli aplikacja jest kompilowana w trybie 64-bitowym, wszystkie używane biblioteki (DLL) również muszą być 64-bitowe.

Przekazywanie parametrów przez rejestry to jedna z innowacji, dzięki której programy 64-bitowe są wydajniejsze niż programy 32-bitowe. Dodatkowy wzrost wydajności można uzyskać, stosując 64-bitowe typy danych.

Przestrzeń adresowa

Podczas gdy 64-bitowy procesor może teoretycznie zaadresować 16 eksabajtów pamięci (2^64), Win64 obsługuje obecnie 16 terabajtów (2^44). Jest tego kilka powodów. Obecne procesory mają dostęp tylko do 1 terabajta (2^40) pamięci fizycznej. Architektura (ale nie sprzęt) może rozszerzyć tę przestrzeń do 4 petabajtów (2^52). Jednak w tym przypadku potrzebna jest ogromna ilość pamięci dla tablic stron mapowanych w pamięci.

Oprócz tych ograniczeń ilość pamięci dostępnej w określonej wersji 64-bitowego systemu operacyjnego Windows zależy również od względów handlowych firmy Microsoft. Poniżej znajdują się informacje o ilości pamięci obsługiwanej przez różne wersje 64-bitowych wersji systemu Windows:

Windows XP Professional — 128 GB;
Windows Server 2003, standardowy — 32 GB;
Windows Server 2003, Enterprise — 1 TB;
Windows Server 2003, Datacenter — 1 TB;
Windows Server 2008, Datacenter — 2 TB;
Windows Server 2008, Enterprise — 2 TB;
Windows Server 2008, standardowy — 32 GB;
Windows Server 2008, serwer WWW — 32 GB;
Vista Home Basic — 8 GB;
Vista Home Premium - 16 GB;
Vista Business — 128 GB;
Vista Enterprise — 128 GB;
Vista Ultimate - 128 GB;
Windows 7 Home Basic — 8 GB;
Windows 7 Home Premium - 16 GB;
Windows 7 Professional - 192 GB;
Windows 7 Enterprise - 192 GB;
Windows 7 Ultimate - 192 GB;

Tworzenie aplikacji 64-bitowych

Kwestie tworzenia aplikacji 64-bitowych są najpełniej omówione na kursie ”

W 1985 roku firma Intel wypuścił 32-bitowy mikroprocesor, który stał się przodkiem rodziny IA-32. Rozwój tej rodziny przebiegał przez kilka etapów, wśród których można wyróżnić: implementację bloku do przetwarzania liczb zmiennoprzecinkowych bezpośrednio na chipie MP (mikroprocesor I486), wstęp MMX-stacjonarna technologia przetwarzania danych zgodnie z zasadą SIMD - pojedyncza instrukcja z wieloma danymi(jeden strumień instrukcji - wiele strumieni danych) w mikroprocesorze Pentium MMX oraz rozwój tej technologii na liczbach zmiennoprzecinkowych ( SSE — przesyłanie strumieniowe rozszerzenia SIMD), który pojawił się po raz pierwszy w MP Pentium III. Jednak główne cechy tej architektury pozostają niezmienione do chwili obecnej.

Architektura mikroprocesora 32-bitowego znacznie różni się od architektury 16-bitowego. Niektóre z tych różnic są czysto ilościowe, podczas gdy inne są fundamentalne.

Główną różnicą zewnętrzną jest zwiększenie szerokości szyny danych i szyny adresowej do 32 bitów. To z kolei wiąże się ze zmianami w głębi bitowej wewnętrznych elementów mikroprocesora oraz w mechanizmie wykonywania niektórych procesów, na przykład tworzenia adresu fizycznego.

Rejestry jednostki przetwarzania stałoprzecinkowego stały się 32-bitowe. Do każdego z nich można uzyskać dostęp jako jedno podwójne słowo (32 bity). Dostęp do niższych 16 bitów tych rejestrów można uzyskać w taki sam sposób, jak w 16-bitowym mikroprocesorze.

W bloku rejestrów segmentowych zaszły zarówno zmiany ilościowe, jak i jakościowe. Oprócz czterech rejestrów używanych w trybie rzeczywistym, CS, DS, SS i ES, dodano jeszcze dwa: FS i GS. Chociaż głębia bitowa rejestrów tego bloku pozostała taka sama (każdy 16 bitów), są one wykorzystywane w różny sposób przy tworzeniu adresu fizycznego pamięci RAM. Gdy mikroprocesor pracuje w tzw. trybie chronionym, ma za zadanie szukać deskryptora (deskryptora) segmentu w odpowiednich tablicach systemowych, a adres bazowy i atrybuty segmentu są już zapisane w deskryptorze. Generowanie adresu w tym przypadku jest wykonywane przez blok segmentacji menedżera pamięci.

Jeśli oprócz segmentów pamięć jest również podzielona na strony, to ostateczne obliczenie adresów fizycznych jest wykonywane przez blok kontrolny strony.

Począwszy od mikroprocesora I486, układ mikroprocesora zawiera jednostkę przetwarzania liczb zmiennoprzecinkowych, która zawiera osiem 80-bitowych rejestrów do reprezentowania znaków, mantys i wykładników takich liczb.

Chip mikroprocesora posiada również wewnętrzną pamięć podręczną, która jest specjalnie zorganizowaną szybką pamięcią buforową przeznaczoną do przechowywania najczęściej używanych informacji (polecenia i dane). W różnych modelach mikroprocesorów ilość pamięci podręcznej waha się od 8 KB do 512 KB.

Mikroprocesor na poziomie sprzętowym obsługuje tryb wieloprogramowości komputera, czyli możliwość posiadania w pamięci kilku programów gotowych do wykonania w tym samym czasie, które są uruchamiane przez system operacyjny zgodnie z algorytmami jego funkcjonowania lub w zależności od o szczególnych sytuacjach, które powstają podczas eksploatacji urządzeń zewnętrznych.

Z tą możliwością nierozerwalnie związane są zabezpieczenia pamięci, które zapewniają kontrolę nad nieautoryzowanymi interakcjami między poszczególnymi programami. Obejmują one ochronę zarządzania pamięcią i ochronę uprawnień.

Główne cechy rozszerzonego formatu poleceń to możliwość wykorzystania dowolnego rejestru ogólnego przeznaczenia w dowolnym trybie adresowania, a także dodanie jeszcze jednego trybu adresowania - względnego indeksu bazowego ze skalowaniem. W takim przypadku adres efektywny jest tworzony w następujący sposób:

EA = (podstawa) + (indeks) skala + disp,

gdzie (podstawa) jest wartością rejestru podstawowego; (indeks) - wartość rejestru indeksu; skala - wartość współczynnika skali (skala = 1,2,3,4); disp to wartość przesunięcia zakodowana w samym poleceniu.

Należy zauważyć, że w architekturze 32-bitowej adres efektywny jest zwykle określany jako przesunięcie, odróżniając go od przesunięcia zakodowanego w samej instrukcji (przesunięcie).

Bitowa architektura komputera.

Kod Win64 łączy w sobie podstawowe funkcje kodu 32-bitowego, a także zawiera zmiany zwiększające liczbę bitów. Programator posiada:

· 64-bitowe wskaźniki;

· 64-bitowe typy danych;

· 32-bitowe typy danych;

Interfejs API Win64.

Należy zauważyć, że 32-bitowe typy danych nie zniknęły, gdy platforma zwiększyła liczbę bitów (tak jak miało to miejsce w przypadku 16-bitowych typów danych po przejściu na Win32). Dzieje się tak, ponieważ nawet w aplikacjach 64-bitowych w większości przypadków zmienne nie wymagają 8 bajtów pamięci, więc użycie typów 64-bitowych w takich przypadkach byłoby wyjątkowo nieefektywne. system operacyjny Musiałbym dodać zera do wysokich bitów, aby zwiększyć rozmiar danych do 8 bajtów (takie dane są również bardzo niewygodne w czytaniu). Prowadziłoby to do pogorszenia wydajności.

Inny los spotkał wskaźniki 32-bitowe: całkowicie zniknęły. Faktem jest, że użycie 32-bitowych wskaźników nakłada ograniczenie na ilość adresowalnej pamięci. Na przykład jedną z głównych zalet płaskiego modelu pamięci (który jest głównym modelem programowania aplikacji 32-bitowych na platformę NT) przy użyciu 32-bitowych wskaźników jest możliwość tworzenia segmentów o wielkości do 4 GB. Nowe 64-bitowe wskaźniki zapewniają możliwość adresowania do 16 TB pamięci (1 TB = 1012 MB). Ta objętość jest dość wymagana przez nowoczesne aplikacje biznesowe.

Funkcje w Win64 API przeszły drobne zmiany. Tylko nazwy niektórych z nich zostały zmienione, aby odzwierciedlić platformę 64-bitową. W większości przypadków zmieniły się tylko typy parametrów będących argumentami wywołań funkcji. Wszystkie inne korzyści (możliwość zaprzestania używania plików stronicowania itp.) są związane albo ze zwiększoną ilością adresowania, albo z nowymi typami danych.

Projektowanie płyt systemowych. Współczynnik kształtu

Projekt płyty głównej komputera

Płyta główna(angielska płyta główna, MB, używana jest również nazwa angielskiej płyty głównej - płyta główna; slang. mama, matka, płyta główna) to złożona wielowarstwowa płytka drukowana, na której zainstalowane są główne komponenty komputer osobisty(procesor centralny, kontroler pamięci RAM i właściwa pamięć RAM, boot ROM, kontrolery podstawowych interfejsów I/O). Z reguły płyta główna zawiera złącza (gniazda) do podłączenia dodatkowych kontrolerów, dla których zwykle używane są magistrale USB, PCI i PCI-Express.

procesor

Zestaw logiki systemowej (ang. Chipset) - zestaw układów scalonych, które łączą procesor z pamięcią RAM i kontrolerami urządzeń peryferyjnych. Z reguły nowoczesne zestawy logiki systemowej budowane są w oparciu o dwa VLSI: „północny” i „południowy most”.

most Północny(Angielski mostek północny), MCH (Memory controller hub), kontroler systemowy - zapewnia połączenie procesora z węzłami za pomocą wysokowydajnych magistrali: RAM, kontroler graficzny.

FSB, takie jak Hyper-Transport i SCI, mogą być używane do łączenia procesora z kontrolerem systemu.

Zwykle pamięć RAM jest podłączona do kontrolera systemu. W tym przypadku zawiera kontroler pamięci. Tak więc typ używanego kontrolera systemu zwykle zależy od maksymalna głośność RAM, a także przepustowość magistrali pamięci komputera osobistego. Ale obecny trend polega na wbudowywaniu kontrolera pamięci RAM bezpośrednio w procesor (na przykład kontroler pamięci jest wbudowany w procesor w AMD K8 i Intel Core i7), co upraszcza funkcje kontrolera systemu i zmniejsza wytwarzanie ciepła.

PCI Express służy jako magistrala do podłączenia kontrolera graficznego na nowoczesnych płytach głównych. Wykorzystano wcześniej współdzielone magistrale (ISA, VLB, PCI) oraz magistralę AGP.

most południowy(ang. Southbridge), ICH (koncentrator kontrolera I / O), kontroler peryferyjny - zawiera kontrolery urządzeń peryferyjnych ( twardy dysk, Ethernet, audio), kontrolery magistrali do podłączania urządzeń peryferyjnych (magistrale PCI, PCI-Express i USB), a także kontrolery magistrali do podłączania urządzeń niewymagających dużej przepustowości (LPC - służy do podłączania boot ROM; także magistrala LPC używana do podłącz multikontroler (angielski Super I / O) - mikroukład zapewniający obsługę „przestarzałych” interfejsów przesyłania danych o niskiej wydajności: interfejsy szeregowe i równoległe, kontroler klawiatury i myszy).

Z reguły mostki północne i południowe są realizowane jako osobne VLSI, ale zdarzają się również rozwiązania jednoukładowe. To zestaw logiki systemowej decyduje o wszystkim kluczowe cechy płyta główna i jakie urządzenia mogą się z nią łączyć.

Pamięć o dostępie swobodnym (również pamięć o dostępie swobodnym, RAM) – w informatyce – pamięć, część systemu pamięci komputera, do której procesor może uzyskać dostęp w jednej operacji (skok, przesunięcie itp.). Przeznaczony jest do tymczasowego przechowywania danych i poleceń niezbędnych procesorowi do wykonywania operacji. Pamięć RAM przesyła dane do procesora bezpośrednio lub za pośrednictwem pamięci podręcznej. Każda komórka RAM ma swój indywidualny adres.

Pamięć RAM może być wyprodukowana jako oddzielna jednostka lub zawarta w projekcie komputera jednoukładowego lub mikrokontrolera.

Boot ROM - przechowuje oprogramowanie uruchamiane natychmiast po włączeniu zasilania. Z reguły bootowalna pamięć ROM zawiera BIOS, ale może również zawierać oprogramowanie działające w ramach EFI.

Cechy architektoniczne 64-bitowego MP


5.1. Itanium 2 Intel

Procesor został opracowany od podstaw i równolegle w dwóch wersjach jednocześnie: przez inżynierów Intela i Hewlett-Packard. Jednak oba układy były naturalnie oparte na tych samych pomysłach, ponieważ mimo to zostały stworzone wspólnie i oba powinny były stać się założycielami tej samej rodziny. Scementującą kompozycją była oczywiście jedna ideologia, która zastąpiła CISC - EPIC (Explicitly Parallel Instruction Computing) oraz nowa architektura - IA-64, która zawiera zestaw instrukcji, opis rejestrów i inne podobne rzeczy. Jednak architektura to tylko rzecz zmienna, wystarczy przypomnieć sobie, czym różnią się od siebie takie procesory CISC jak 8086 i i80486, oba stworzone w oparciu o 80x86.
Podobnie z Merced i McKinley, Itanium i Itanium 2 – oba zbudowane są w oparciu o tę samą ideologię, ale w różnych odmianach architektury. Kiedyś ta sama historia dotyczyła Pentium i Pentium Pro. Jednak te miały cechy wspólne, i te też je mają, EPIC jest za to „odpowiedzialny”. Przede wszystkim mówimy o pełnoprawnej superskalarności na dużą skalę, czyli możliwości wykonywania kilku instrukcji jednocześnie. Po co oczywiście procesor zawiera moduły wykonawcze - do operacji na liczbach całkowitych, na liczbach zmiennoprzecinkowych itp.
W przeciwieństwie do Pentium i jego następców, którzy samodzielnie opracowują kod, procesory EPIC w dużej mierze polegają na kompilatorze, który sam musi przeanalizować kod, aby znaleźć optymalne miejsca do zrównoleglenia jego wykonania i dostarczyć procesorowi te informacje. Dlatego używane jest „jawnie” - procesor nie powinien próbować zrozumieć, co może być wykonywane równolegle, a co nie itp. - kompilator wyjaśni mu to wszystko z góry. Do tego potężne mechanizmy przewidywania rozgałęzień, wstępnego wykonania fragmentów kodu, wstępnego ładowania danych itp. – ładowanie jednostek wykonawczych powinno być rozłożone możliwie równomiernie.
Radykalnie rozwiązano problem rejestrów, których liczbę zwiększono kilkakrotnie: dla Itanium ich liczba wynosi 128 do celów ogólnych (rys. 1), 128 do przechowywania liczb zmiennoprzecinkowych, 8 rejestrów przejściowych i 64 odpowiedzialnych dla ra -bota mechanizmów predykcyjnych. Tutaj wszystko jest oczywiste - taka liczba rejestrów, i to nawet naprawdę 64-bitowych, wystarczy do zapisania dowolnych wymaganych numerów dla dowolnej rozsądnej liczby modułów wykonawczych. Itanium, pierwszy przedstawiciel rodziny, ma tylko pięć takich rejestrów – dwa całkowite, dwa do operacji pamięciowych i cztery do operacji zmiennoprzecinkowych. Pamięć fizyczna adresowana jest liczbami 44-bitowymi, co faktycznie ogranicza jej rozmiar do „zaledwie” 17,6 terabajtów, bloki zmiennoprzecinkowe działają z liczbami w reprezentacji 82-bitowej.

Intel porzucił pomysł zaimplementowania 32-bitowego rdzenia 80x86 w formie sprzętowej, uznając to za zbyt nieefektywne wykorzystanie obszaru matrycy. Aby więc móc wykonać kod Itanium 80x86, stworzono system translacji, który konwertuje kod 80x86 na IA-64 w locie.
Oczywiście przy niezmiennych innych parametrach wydajność takiego rozwiązania będzie niższa niż czystego x86 pracującego z tą samą częstotliwością. Jednak nikt nie spodziewał się szybkiego wykonywania programów x86 od Itanium - obsługa tej architektury to raczej koszt okresu przejściowego. Niemniej jednak pozostaje faktem, że ta rodzina nie nadaje się do rozwiązywania problemów 32-bitowych. Jednak mało kto będzie używał Itanium do takich celów w obecności pełnoprawnego oprogramowania 64-bitowego.
Ponadto sam Itanium był w zasadzie projektem pilotażowym, podobnie jak Pentium Pro, więc ogólnie procesor powinien być postrzegany bardziej jako demonstracja możliwości architektury. Charakterystyczny akcent - chipset dla Itanium, 460GX, obsługuje tylko PC100 SDRAM jako pamięć, co mówi coś o szybkości, z jaką procesor jest w stanie przetwarzać dane. Z drugiej strony jednak do pewnego stopnia niezbyt szybki interfejs z Baran kompensowana przez bardzo dużą pamięć podręczną L3 - 2 lub 4 MB, pracującą z pełną częstotliwością procesora (733 lub 800 MHz) z przepustowością dochodzącą do 12,8 GB/s.
Kolejnym zadaniem Itanium było rozwiązanie problemu z kompilatorami – w końcu procesory EPIC, jak już wspomniano, bardzo od nich zależą. W przeciwieństwie do kompilatorów dla procesorów 80x86, które prawie nie miały wpływu na ich wydajność, tutaj kompilatory są pełnoprawnymi partnerami procesora - wszak dostarczają mu informacji, które są niezwykle potrzebne do pracy, a jak wysoka będzie ich jakość, będzie zależeć od on - zawiesza prędkość wykonywania tego programu przez procesor.
Itanium 2 jest już znacznie bardziej interesującym komercyjnie produktem. Stworzony przez firmę Hewlett-Packard, która wzięła udział w tworzeniu 64-bitowych procesorów z serii PA-RISC, chip okazał się znacznie bardziej zaawansowany. Z nieco mniejszą ilością L3 (1,5 lub 3 MB) i nieco wyższą częstotliwością, 900 MHz lub 1 GHz, zapewnia półtora do dwóch razy większą wydajność przy tych samych zadaniach co Itanium. Jest on w istocie pierwszym przedstawicielem architektury IA-64.
Co więcej, planowana jest jeszcze większa równoległość w najmodniejszy na dziś sposób: procesor będzie musiał przełączyć się na dwa fizyczne rdzenie, co niemal podwoi wydajność w dość rozsądnej cenie – przynajmniej wynik okaże się znacznie tańszy niż gdyby taką samą liczbę modułów wykonawczych, rejestrów itp. próbowało osiągnąć na jednym chipie.

5.2. Athlona 64 AMD

Przede wszystkim zauważamy, że procesor Athlon 64 jest dokładnie tym 64-bitowym procesorem do komputerów stacjonarnych, który AMD pierwotnie planował wypuścić. Następnie, w świetle wypuszczenia szybkich procesorów Pentium 4, pojawienia się w nich magistrali 800 MHz i technologii Hyper-Threading, AMD pilnie zdecydowało się skierować jednoprocesorowy Opteron na rynek komputerów stacjonarnych, nadając mu nazwę Athlon 64 FX. Jednak Athlon 64 FX, ze względu na swoje serwerowe pochodzenie, okazał się drogi i niezbyt powszechnie stosowany. To właśnie Athlon 64 powinien naprawdę promować architekturę AMD64 do masowego użytku.
Poniżej znajduje się Tabela 1 ze specyfikacjami 64-bitowych Athlon 64 3200+, Athlon 65 FX-51 i Athlon XP 3200+ MPs:

Tabela 1

* Zwróć uwagę, że pamięć w Athlonie 64 i Athlonie 64 FX jest taktowana względem zegara rdzenia, więc rzeczywiste zegary pamięci w tym przypadku wynoszą 129,4, 157,1 i 200 MHz.
Tak naprawdę Athlon 64 różni się od swojego starszego odpowiednika Athlona 64 FX, poza kształtem i wymiarami obudowy, tylko kontrolerem pamięci. Chociaż jednocześnie oba procesory są wykonane z tych samych kryształów. Kontroler pamięci w Athlonie 64 jest jednokanałowy i jest to zarówno jego słabość, jak i zaleta w porównaniu z Athlonem 64 FX. Wada jednokanałowego kontrolera pamięci w Athlonie 64 jest oczywista: jest to teoretyczna mniejsza przepustowość.
Biorąc pod uwagę, że Athlon 64 może współpracować z pamięcią DDR400, maksymalna przepustowość kontrolera pamięci wbudowanego w procesor wynosi 3,2 GB na sekundę. To dwa razy mniej niż podobna charakterystyka Athlona 64 FX. Zaletą kontrolera pamięci Athlon 64 jest to, że w przeciwieństwie do kontrolera Athlon 64 FX obsługuje on konwencjonalne niezarejestrowane moduły pamięci. Takie moduły są tańsze w porównaniu z modułami rejestrów, mają bardziej agresywne timingi i działają szybciej, nawet przy tych samych ustawieniach co moduły rejestrów. Oznacza to, że przy mniejszej przepustowości zapewnianej przez kontroler pamięci Athlon 64 podsystem pamięci, który go wykorzystuje, ma mniejsze opóźnienie, co pokażemy poniżej.
AMD Athlon 64 wygląd podobny do Opterona i Athlona 64 FX.
Różnice występują jedynie w oznakowaniu i mniejszej liczbie styków na odwrocie, ponieważ procesory Athlon 64 są instalowane w płyty główne z gniazdem Socket 754 i nie są kompatybilne z płytami Socket 940 przeznaczonymi dla rodzin procesorów Athlon 64 FX i Opteron.
Oprócz wymienionych powyżej funkcji nowe procesory Athlon 64 mają jeszcze jedną. Te procesory mają wsparcie dla technologii Cool'n'Quiet, z której właściwie do nich przyszło opcje mobilne POSEŁ. Tak naprawdę Cool'n'Quiet to swego rodzaju energooszczędna technologia PowerNow!, która od dawna stosowana jest w mobilnych MP od AMD. Ale teraz ta technologia w końcu dotarła do procesorów komputerów stacjonarnych firmy. Obsługa Cool'n'Quiet to kolejna przewaga Athlona 64 nad Athlonem 64 FX/Opteron, które jeszcze nie mają takiej technologii. AMD od dawna zwraca baczną uwagę na obniżenie poziomu rozpraszania ciepła przez swoje procesory do komputerów stacjonarnych.
Trzeba powiedzieć, że firma od dawna przewyższa Intela w tym: starsze modele procesorów AMD emitują znacznie mniej ciepła przy maksymalnym obciążeniu niż starsze modele Pentium 4. Ponadto procesory wykorzystują technologie, które zmniejszają rozpraszanie ciepła nawet przy niskim obciążeniu. Więcej rodzin posłów
Funkcje Athlona XP miały możliwość przełączania się w „tryb gotowości” (Halt/Stop Grant) podczas wykonywania polecenia HALT, co skutkowało spadkiem temperatury procesora, gdy był obciążony poniżej 100%. Teraz jednak AMD poszło jeszcze dalej. Nowe procesory Athlon 64 są wyposażone w jeszcze bardziej inteligentny system redukcji ciepła.
Oprócz stanów Halt/Stop Grant, Athlon 64 może zresetować częstotliwość zegara i napięcie, aby jeszcze bardziej zmniejszyć rozpraszanie ciepła. Podczas pracy z wykorzystaniem tej technologii częstotliwość taktowania procesora jest kontrolowana przez sterownik procesora, który resetuje ją lub zwiększa na podstawie danych o obciążeniu. Rzeczywiście, jeśli procesor w pełni radzi sobie z przydzieloną mu pracą, a jego obciążenie jest znacznie mniejsze niż 100%, wówczas możliwe jest zmniejszenie częstotliwości taktowania bez uszczerbku dla funkcjonowania systemu jako całości: nie wpłynie to na działanie systemu w jakikolwiek sposób. Na przykład podczas bezczynności, pracy w aplikacjach biurowych, oglądania filmów, defragmentacji dysków i podobnych zadań moc procesora nie jest w pełni wykorzystywana. W takich przypadkach sterownik procesora przełącza Athlona 64 na niższą częstotliwość taktowania. Gdy procesor musi dawać pełną moc wyjściową, na przykład w grach, podczas rozwiązywania problemów obliczeniowych, w zadaniach związanych z kodowaniem danych itp., Częstotliwość procesora wzrasta do wartości nominalnej. Dokładnie tak działa technologia Cool'n'Quiet.
W praktyce wygląda to tak. W normalnych warunkach, przy minimalnym obciążeniu MP, sterownik procesora resetuje częstotliwość Athlona 64 3200+ ze standardowych 2 GHz na 800 MHz. Napięcie procesora jest następnie zmniejszane do 1,3 V. Jak widać, zmniejszenie częstotliwości taktowania zapewnia zmniejszenie mnożnika procesora do 4x. Nawiasem mówiąc, determinuje to również fakt, że procesory Athlon 64 3200+ są dostarczane z nieustalonym mnożnikiem. W tym trybie procesor kontynuuje pracę, dopóki jego obciążenie nie przekroczy 70-80%. W szczególności mogliśmy jednocześnie przeprowadzać defragmentację dysku, odtwarzać pliki mp3 (pliki audio) i oglądać filmy MPEG-4 (pliki wideo), podczas gdy procesor nadal działał z częstotliwością 800 MHz.
Gdy obciążenie procesora Athlon 64 przy 800 MHz przekroczy dopuszczalny limit, sterownik przełącza MP do następnego stanu, w którym częstotliwość Athlona 64 3200+ wynosi 1,8 GHz, a napięcie zasilania wynosi 1,4 V. Osiąga się to ponownie poprzez zmniejszenie mnożnika, tym razem do 9x. I tylko jeśli w tym przypadku obciążenie procesora ponownie okaże się zbyt duże, sterownik przełącza MP w normalny tryb: częstotliwość wynosi 2 GHz, napięcie zasilania wynosi 1,5 V.
Zwróć uwagę, że w trybach niskiego poboru mocy i niskiej częstotliwości rozpraszanie ciepła procesora Athlon 64 3200+ gwałtownie spada. Dla porównania przedstawiamy tabelę 4 z rozpraszaniem ciepła tego procesora w głównych trybach.

Tym samym zastosowanie technologii Cool'n'Quiet pozwala znacznie obniżyć temperaturę procesora nie tylko w czasie bezczynności, ale także podczas szeregu zadań, które nie wymagają maksymalnej wydajności od MP. Co ważne, wydajność MP w zadaniach wymagających zasobów procesora wcale nie spada. W rezultacie, w przypadku stosowania systemów chłodzenia z wentylatorami o zmiennej prędkości, zastosowanie technologii Cool'n'Quiet może znacznie obniżyć poziom hałasu.