Programy używają adresowania logicznego do adresowania operandów w fizycznej przestrzeni adresowej. Procesor automatycznie tłumaczy adresy logiczne na fizyczne, które następnie są wydawane na magistralę systemową.

Architektura komputera rozróżnia fizyczną przestrzeń adresową (PHA) i logiczną przestrzeń adresową (LAP). Fizyczna przestrzeń adresowa jest prostą jednowymiarową tablicą bajtów, do której dostęp uzyskuje się przez sprzęt pamięci pod adresem obecnym na szynie adresowej systemu mikroprocesorowego. logiczna przestrzeń adresowa organizowane przez programistę w oparciu o konkretne potrzeby. Tłumaczenie adresów logicznych na fizyczne jest realizowane przez jednostkę zarządzającą pamięcią MMU.

W architekturze nowoczesnych mikroprocesorów LAP jest reprezentowany jako zbiór struktur elementarnych: bajtów, segmentów i stron. Wykorzystanie mikroprocesorów następujące opcje organizacje logiczna przestrzeń adresowa:

  • płaskie (liniowe) LAP: składa się z tablicy bajtów, która nie ma zdefiniowanej struktury; translacja adresu nie jest wymagana, ponieważ adres logiczny jest taki sam jak adres fizyczny;
  • segmentowane LAP: składa się z segmentów - ciągłych obszarów pamięci zawierających w ogólnym przypadku zmienną liczbę bajtów; adres logiczny składa się z 2 części: identyfikator segmentu i przesunięcie w obrębie segmentu; translacja adresu jest wykonywana przez jednostkę segmentacji MMU;
  • strona PA: składa się ze stron - ciągłych obszarów pamięci, z których każdy zawiera ustaloną liczbę bajtów. Adres logiczny składa się z numeru strony (identyfikatora) i przesunięcia w obrębie strony; translacja adresu logicznego na adres fizyczny jest wykonywana przez jednostkę przywoławczą MMU;
  • segment-strona LAP: zawiera segmenty, które z kolei składają się ze stron; adres logiczny składa się z identyfikatora segmentu i przesunięcia w obrębie segmentu. MMU odwzorowujący segment tłumaczy adres logiczny na numer strony i przesunięcie strony, które są następnie tłumaczone na adres fizyczny przez MMU odwzorowujące strony.

Mikroprocesor może pracować w dwóch trybach: rzeczywistym i chronionym.

Podczas pracy w tryb rzeczywisty możliwości procesora są ograniczone: pojemność pamięci adresowalnej wynosi 1 MB, nie ma stronicowania pamięci, segmenty mają stałą długość 216 bajtów.

Ten tryb jest zwykle używany na początkowym etapie uruchamiania komputera, aby wejść tryb obronny.

W tryb rzeczywisty rejestry segmentowe procesora zawierają górne 16 bitów adresu fizycznego początku człon. Przesunięty o 4 bity w lewo selektor podaje 20-bitowy adres bazowy segmentu. Adres fizyczny uzyskuje się przez dodanie tego adresu do 16-bitowej wartości przesunięcia w segmencie, utworzonej zgodnie z określonym trybem adresowania dla operandu lub wyodrębnionej z rejestru EIP dla instrukcji (rys. 3.1). Pod otrzymany adres informacje są pobierane z pamięci.



Ryż. 3.1. Schemat uzyskania adresu fizycznego

Możliwości adresowania pamięci mikroprocesora są w pełni realizowane podczas pracy w tryb obronny. Ilość pamięci adresowalnej zostaje zwiększona do 4 GB, pojawia się możliwość trybu adresowania stron. Segmenty może mieć zmienną długość od 1 bajta do 4 GB.

Ogólny schemat tworzenia adresu fizycznego przez mikroprocesor pracujący w tryb obronny, pokazany na ryc. 3.2.

Jak już wspomniano, podstawą utworzenia adresu fizycznego jest adres logiczny. Składa się z dwóch części: selektor oraz offsety w segmencie.

Selektor zawarty w rejestrze segmentowym mikroprocesora i umożliwia odnalezienie opisu segmentu (deskryptor) w specjalnej tabeli deskryptorów. Deskryptory segmenty są przechowywane w specjalnych tablicach deskryptorów globalnych (GDT) i lokalnych (LDT) obiektów systemowych. Deskryptor odgrywa bardzo ważną rolę w funkcjonowaniu mikroprocesora, począwszy od tworzenia adresu fizycznego z różną organizacją przestrzeni adresowej, a skończywszy na organizacji wieloprogramowego trybu pracy. Dlatego rozważmy bardziej szczegółowo jego strukturę.

Segmenty mikroprocesor dobiega tryb obronny, charakteryzują się dużą liczbą parametrów. Dlatego w 32-bitowych mikroprocesorach ogólnego przeznaczenia informacje o segmentach są przechowywane w

Ryż. 3.2. Tworzenie adresu fizycznego w organizacji pamięci segment-strona

specjalna 8-bajtowa struktura danych o nazwie deskryptor, a główna funkcja jest przypisana do rejestrów segmentowych - określanie położenia deskryptora.

Struktura deskryptor segmentu pokazano na ryc. 3.3.

Ryż. 3.3. Struktura deskryptora segmentu

Zastanowimy się nad strukturą, a nie formatem deskryptora, ponieważ podczas przejścia z mikroprocesora i286 na 32-bitowy MP układ poszczególnych pól deskryptora stracił harmonię i częściowo zaczął wyglądać jak „łatki” umieszczone w celu mechanicznego zwiększenia głębi bitowej tych pól.

32-bitowe pole adresu bazowego umożliwia określenie początkowego adresu segmentu w dowolnym miejscu 232-bajtowej (4 GB) przestrzeni adresowej.

Pole limitu(limit) wskazuje długość segmentu (dokładniej długość segmentu minus 1: jeśli to pole jest zapisane jako 0, to oznacza to, że segment ma długość 1) w jednostkach adresowalnych, czyli największy rozmiar segment to 2 20 elementów.

Wartość elementu jest określona przez jeden z atrybutów bitu deskryptora G (Granularity - ziarnistość lub frakcyjność):

Zatem segment może mieć rozmiar z dokładnością do 1 bajta w zakresie od 1 bajta do 1 Mbajta (przy G = 0). Przy rozmiarze strony 2 12 = 4 KB, możesz ustawić rozmiar segmentu na 4 GB (przy G = l):

Ponieważ w architekturze IA-32 segment może zaczynać się w dowolnym punkcie przestrzeni adresowej i mieć dowolną długość, segmenty w pamięci mogą częściowo lub całkowicie zachodzić na siebie.

Bit wymiaru(Domyślny rozmiar) określa domyślnie długość adresów i operandów użytych w instrukcji:

według własnego uznania. Oczywiście ten bit nie jest dla zwykły użytkownik, i dla programista systemowy, który używa go na przykład do zaznaczania segmentów do wyrzucania śmieci lub segmentów, których adresy bazowe nie mogą być modyfikowane. Ten bit jest dostępny tylko dla programów działających na najwyższym poziomie uprawnień. Mikroprocesor nie zmienia go ani nie wykorzystuje w swojej pracy.

Bajt dostępu określa podstawowe zasady obsługi segmentu.

Bit obecności P (obecny) oznacza możliwość dostępu do segmentu. System operacyjny (OS) oznacza segment przeniesiony z pamięci RAM do pamięci zewnętrznej jako tymczasowo nieobecny, ustawiając jego deskryptor na P = 0. Gdy P = 1, segment znajduje się w pamięci fizycznej. W przypadku wybrania deskryptora z P = 0 (segment nie znajduje się w pamięci RAM), pola adresu bazowego i limitu są ignorowane. To naturalne: na przykład, jak możemy mówić o adresie bazowym segmentu, jeśli sam segment nie jest w? pamięć o dostępie swobodnym? W takiej sytuacji procesor odrzuca wszystkie kolejne próby użycia deskryptor w zespołach i zdefiniowane deskryptor Wydaje się, że przestrzeń adresowa „znika”.

Istnieje szczególny przypadek braku obecności segmentu. W tym samym czasie system operacyjny kopiuje żądany segment z dysku do pamięci (możliwe, że usuwa inny segment), ładuje go do deskryptor adres bazowy segmentu, ustawia P = 1 i ponownie uruchamia instrukcję, która uzyskała dostęp do segmentu, który nie był w pamięci RAM.

Dwucyfrowe pole DPL (Descriptor Privilege Level) wskazuje jeden z czterech możliwych (od 0 do 3) obsługiwać poziomy uprawnień, który określa możliwość dostępu do segmentu przez określone programy (poziom 0 odpowiada najbardziej wysoki poziom przywileje).

Odwrócenie bit A (Dostęp) jest ustawiony na „1” przy każdym dostępie do segmentu. Używany przez system operacyjny do śledzenia segmentów, do których nie korzystano najdłużej.

Niech np. raz na sekundę system operacyjny zresetuje w deskryptorach wszystkich segmentów bit A. Jeśli po pewnym czasie konieczne będzie załadowanie do pamięci RAM nowego segmentu, na który nie ma wystarczającej ilości miejsca, system operacyjny określa "kandydatów" do wyczyszczenia części pamięci RAM , wśród tych segmentów w deskryptory którego bit A nie został do tej pory ustawiony na „1”, to znaczy, do którego nie uzyskano ostatnio dostępu.

Wpisz pole w bajcie dostępu określa cel i zastosowanie segmentu. Jeśli bit S (system - bit 4 bajtu dostępu) wynosi 1, to deskryptor opisuje rzeczywisty segment pamięci. Jeśli S = 0, to ten deskryptor opisuje specjalny obiekt systemowy, który może nie być segmentem pamięci, takim jak brama wywołań używana w przełączniku zadań lub uchwyt do lokalnej tablicy deskryptorów LDT. Przypisanie bitów<3...0>bajt dostępu jest określony przez typ segmentu (rys. 3.4).

Ryż. 3.4. Dostęp do formatu pola typu bajtu

W segmencie kodu: bit podporządkowania C (zgodny) definiuje dodatkowe reguły obsługi, które zapewniają ochronę segmentów programu. Dla C = 1 ten segment to podrzędny segment kodu. W tym przypadku jest on celowo pozbawiony ochrony przywilejów. Takie narzędzie jest wygodne do organizowania np. podprogramów, które powinny być dostępne dla wszystkich zadań uruchomionych w systemie. Gdy C = 0, jest to normalny segment kodu; Bit odczytu R (do odczytu) określa, czy do segmentu można uzyskać dostęp tylko w celu wykonania, czy w celu wykonania i odczytu, na przykład stałych jako danych przy użyciu prefiksu zastępowania segmentu. Gdy R = 0, dozwolony jest tylko wybór z segmentu poleceń do ich wykonania. Gdy R = 1, dozwolony jest również odczyt danych z segmentu.

Zapisywanie w segmencie kodu jest zabronione. Każda próba zapisu powoduje przerwanie programowe.

W segmencie danych:

  • ED (Expand Down) - bit kierunku ekspansji. Gdy ED = 1, ten segment jest segmentem stosu, a przesunięcie w segmencie musi być większe niż rozmiar segmentu. Gdy ED = 0, jest to rzeczywisty segment danych (przesunięcie musi być mniejsze lub równe rozmiarowi segmentu);
  • zapis zezwalający na bit W (zapisywalny). Gdy W = 1, modyfikacja segmentu jest dozwolona. Gdy W = 0, zapis do segmentu jest zabroniony; przy próbie zapisu do segmentu następuje przerwanie programowe.

W przypadku żądania operandu odsunięcie segmentu jest tworzony przez mikroprocesor zgodnie z trybem adresowania argumentów określonym w poleceniu. Przesunięcie w segmencie kodu jest wyodrębniane z rejestr - wskaźnik instrukcji EIP.

Suma adresu początkowego segmentu pobranego z deskryptora i wygenerowanego przesunięcia w segmencie daje adres liniowy(LA).

Jeżeli w mikroprocesorze używana jest tylko segmentowa reprezentacja przestrzeni adresowej, to otrzymany adres liniowy jest również adresem fizycznym.

Jeśli oprócz pierwszego segmentu wykorzystywany jest mechanizm przywoławczy do organizowania pamięci, to adres liniowy reprezentowane jako dwa pola: najwyższe cyfry zawierają liczbę strona wirtualna i najniższe przesunięcie na stronie. Konwersja wirtualnego numeru strony na fizyczny numer strony odbywa się za pomocą specjalnych tabel systemowych: katalog tabeli stron(KTS) i tabele stron(TS). Lokalizacja katalogu tablicy stron w pamięci jest określona przez rejestr systemowy CR3. Adres fizyczny jest obliczany jako suma fizycznego adresu strony uzyskanego z tablicy stron i przesunięcia strony uzyskanego z adresu liniowego.

Rozważmy teraz bardziej szczegółowo wszystkie etapy konwersji adresu logicznego na fizyczny.

Mikroprocesor 80386 jest pełną 32-bitową wersją poprzednich 16-bitowych mikroprocesorów 8086/80286 i stanowi znaczący postęp w architekturze procesora od 16-bitowej do 32-bitowej. Wraz ze wzrostem głębi bitowej pojawiło się również wiele ulepszeń i dodatkowe funkcje. Mikroprocesor 80386 zapewnia: przełączanie zadań, ulepszone zarządzanie pamięcią, zarządzanie pamięcią wirtualną ze stronicowaniem lub bez, ochronę oprogramowania i możliwość pamięci masowej. Wszystko oprogramowanie, napisany dla starszych mikroprocesorów 8086/8088 i 80286 jest kompatybilny bottom-up i dla mikroprocesora 80386. Ilość pamięci adresowalnej przez procesor wzrosła z 1 MB (dla mikroprocesora 8086/8088) lub 16 MB (dla 80286 mikroprocesor) do 4 GB dostępnych dla procesora 80386 w trybie chronionym. Mikroprocesor 80386 może przejść z trybu chronionego do trybu rzeczywistego bez twardy reset mikroprocesor, co jest czasochłonne i było konieczne w przypadku korzystania z procesora 80286.

Mikroprocesor 80486 jest ulepszoną wersją mikroprocesora 80386 i wykonuje wiele jego instrukcji w jednym cyklu zegara. Mikroprocesor 80486 ma również wewnętrzną pamięć podręczną L1 o wielkości 8 KB oraz zintegrowany wysokowydajny koprocesor matematyczny, który jest zgodny z oprogramowaniem koprocesora 80387. Należy zauważyć, że procesor 80486DX4 ma pamięć podręczną 16 KB. Mikroprocesor 80486, działający z tą samą częstotliwością zegara, co mikroprocesor 80386, jest o 50% bardziej wydajny.

Mikroprocesor 80386

Najpopularniejsze były dwie wersje mikroprocesora 80386: procesor 80386DX i uproszczony procesor 80386SX z zewnętrzną 16-bitową szyną danych, chociaż wewnętrznie używał 32-bitowej szyny.

Procesor 80386DX został umieszczony w 132-pinowej obudowie PGA (pin grid array). Więcej nowa wersja mikroprocesor 80386 - 80386EX zawiera: jednostkę sterującą szyny AT, jednostkę sterującą dynamiczną regeneracją pamięci RAM, programowalną jednostkę wyboru kryształu, kontroler przerwań, kontroler DMA, jednostkę czasową, jednostkę transmisji danych szeregowych, 26 pinów magistrali adresowej, 16 danych piny magistrali.

Mikroprocesor 80386DX, posiadający 32-bitową szynę danych i 32-bitową szynę adresową, może adresować 4 GB pamięci fizycznej. Mikroprocesor 80386SX, podobnie jak mikroprocesor 80286, adresuje 16 MB pamięci i ma tylko 24-bitową szynę adresową i 16-bitową szynę danych. Mikroprocesor 80386SX został opracowany po mikroprocesorze 80386DX do użytku bez konieczności pełna wersja Szyna 32-bitowa. Mikroprocesor 80386SX był używany w wielu komputery osobiste kto użył tego samego płyta główna tak samo jak mikroprocesor 80286. W czasach, gdy większość aplikacji, w tym Windows, wymagała mniej niż 16 MB pamięci, procesor 80386SX był popularną i tańszą wersją mikroprocesora 80386. Później, mimo że procesor 80486 stawał się coraz bardziej tańszy do budowy nowych systemów obliczeniowych, zresztą procesor 80386 przez długi czas pozostał popyt na wiele zastosowań. Na przykład mikroprocesor 80386EX, chociaż nie jest używany w komputerach osobistych, był bardzo popularny w systemach wbudowanych.

Mikroprocesor 80386, a także poprzednie wersje rodziny Mikroprocesory Intel, wymaga tylko jednego zasilacza +5,0 V. Częstotliwość 16 MHz. Ponadto pojawiła się wersja procesora o taktowaniu 33 MHz, która miała pobór prądu na poziomie 600 mA. Pobór prądu mikroprocesora 80386EX wynosi 320 mA przy pracy z częstotliwością 33 MHz.

W pewnych trybach pracy procesor pobiera prąd o natężeniu do 1,0 A. Oznacza to, że zasilacz i okablowanie zasilające muszą być w stanie poradzić sobie z tymi skokami prądu. Procesor posiada liczne piny V CC i V SS , które dla prawidłowe działanie mikroprocesor musi być w całości podłączony do źródła prąd stały+5,0 V (V CC) i uziemiony (V SS). Niektóre styki procesora są oznaczone jako N/C (brak połączenia) i nie powinny być nigdzie podłączane. Oprócz wymienionych istniało kilka innych wersji mikroprocesorów 80386SX i 80386EX, które miały obniżone napięcie zasilania +3,3 V. Procesory te były stosowane w przenośnych notebookach (notebookach) lub laptopy(laptop).

System pamięci

Fizyczny system pamięci, do którego może uzyskać dostęp mikroprocesor 80386DX, ma pojemność 4 GB. Dodatkowo procesor posiada wsparcie pamięć wirtualna do 64 TB mapowanych do pamięci fizycznej za pomocą MCU i deskryptorów. Należy zauważyć, że adresowanie wirtualne pozwala na korzystanie z programu ponad 4 GB w obecności metody wymiany (swapping) i przy dużej pojemności dysku twardego. Na ryc. Rysunek 6.4 przedstawia organizację fizycznego systemu pamięci mikroprocesora 80386DX.

Pamięć podzielona jest na cztery 8-bitowe banki pamięci o pojemności do 1 GB każdy. Ta 32-bitowa organizacja pamięci umożliwia dostęp do bajtu, słowa lub podwójnego słowa. Mikroprocesor 80386DX jest w stanie przesłać 32-bitowe dane w jednym cyklu pamięci, podczas gdy mikroprocesor 8088 wymagał czterech cykli, a mikroprocesory 80286 i 80386SX wymagały dwóch cykli. Duża szerokość danych jest bardzo ważna, szczególnie w przypadku liczb zmiennoprzecinkowych o pojedynczej precyzji, które zajmują 32 bity. Wystarczająco zaawansowane oprogramowanie używa liczb zmiennoprzecinkowych do przechowywania danych, więc 32-bitowe lokalizacje pamięci przyspieszają wykonywanie programu, jeśli jest on pisany z myślą o pamięci.

Adres każdego bajtu pamięci jest reprezentowany w notacji szesnastkowej, jak for poprzednie wersje procesory. Różnica polega na tym, że mikroprocesor 80386DX wykorzystuje 32-bitową magistralę adresową z adresowalną pamięcią z zakresu 00000000H-FFFFFFFFH.

Dwa banki pamięci w systemie zbudowanym na mikroprocesorach 8086, 80286 i 80386SX są dostępne za pośrednictwem sygnałów BLE (A0 w 8086 i 80286) i OUT. Mikroprocesor 80386DX uzyskuje dostęp do banków pamięci za pomocą czterech sygnałów BE3-BE0. Ta organizacja pamięci umożliwia dostęp do jednego bajtu, gdy mikroprocesor aktywuje jeden sygnał zezwolenia.

Gdy dwa sygnały zezwolenia są aktywowane, procesor jest adresowany do słowa. W większości przypadków adresowanie słowa odnosi się do banku 0 i 1 lub banku 2 i 3. Lokalizacja pamięci 00000000H jest w banku 0, lokalizacja 00000001H jest w banku 1, lokalizacja 00000002H jest w banku 2, a lokalizacja 00000003 jest w banku 3. Mikroprocesor 80386DX nie ma pinów adresowych A0 i A1, ponieważ są one dekodowane wewnętrznie jako sygnały zezwalające na bajty. Podobnie 16-bitowy mikroprocesor 80386SX nie posiada pinu adresowego A0, ponieważ jest dekodowany na sygnały BLE i OUT. Mikroprocesor 80386EX adresuje słowo danych znajdujące się w dwóch bankach 16-bitowego systemu pamięci, gdy sygnał BS8 jest pasywny (wysoki stan logiczny), lub bajt w systemie 8-bitowym, gdy ten sygnał jest aktywowany.

Rejestry kontrolne

Mikroprocesor 80386 ma inne rejestry kontrolne oprócz rejestru flagowego EFLAGS i wskaźnika instrukcji EIP. Rejestr kontrolny CR0 (rejestr kontrolny) jest identyczny z rejestrem stanu maszyny MSW(słowo stanu maszyny) mikroprocesora 80286, z tą różnicą, że jest to rejestr 32-bitowy, a nie 16-bitowy. Dodatkowe rejestry kontrolne to CR1, CR2 i CR3.

Na ryc. 6.5. przedstawia strukturę rejestrów kontrolnych mikroprocesora 80386.

Rejestr kontrolny CR1 nie jest używany w mikroprocesorze 80386, ale jest zarezerwowany dla przyszłych produktów. Rejestr kontrolny CR2 przechwytuje adres liniowy, pod którym odebrano ostatni błąd strony pamięci. Wreszcie rejestr kontrolny CR3 ustala adres bazowy tablicy stron. Dolnych 12 bitów od 0 do 11 32-bitowego rejestru zawiera zera i jest połączonych z resztą bitów rejestru w celu określenia początku tablicy stron 4K.

Rejestr CR0 ma pewną liczbę specjalnych bitów kontrolnych, które są zdefiniowane w mikroprocesorze 80386 w następujący sposób:

Bit PG (włączenia stronicowania) jest przeznaczony do wyboru konwersji tablicy stron z adresów liniowych na adresy fizyczne, gdy PG = 1. Stronicowanie pamięci umożliwia przypisanie dowolnej fizycznej lokalizacji w pamięci do adresu liniowego.

ET

Bit ET (typ rozszerzenia) jest wskaźnikiem obsługi instrukcji koprocesora matematycznego. Jeśli ET wynosi 0, to wybierany jest koprocesor 80287, a jeśli ET = 1, to wybierany jest koprocesor 80387. Ten bit został dodany, aby odzwierciedlić fakt, że system ma koprocesor 80387.

Bit TS (przełącznik zadań) wskazuje, że mikroprocesor wykonał przełączenie zadania (zmiana zawartości rejestru zadań TR w trybie bezpiecznym ustawia bit TS). Jeśli bit TS jest ustawiony, to instrukcja koprocesora cyfrowego skutkuje przerwaniem typu 7 (koprocesor niedostępny).

JEŚĆ

Bit EM (emuluj koprocesor) jest ustawiony tak, aby wyzwalać przerwanie typu 7 za każdym razem, gdy podjęta zostanie próba wykonania każdego polecenia ESC, tj. instrukcji związanej z koprocesorem. Jest to często używane do emulacji oprogramowania koprocesora. Emulacja zmniejsza koszt systemu, ale wykonanie instrukcji emulowanego koprocesora często trwa dłużej, być może nawet 100-krotnie.

Bit MP (koprocesor monitorujący) jest ustawiony na wyzwalanie przerwania typu 7 przy każdym poleceniu oczekiwania, gdy ustawiony jest bit TS.

ODNOŚNIE

Bit PE (włączenie ochrony) jest ustawiony tak, aby przełączyć mikroprocesor 80386 w tryb chroniony. Może również zresetować się, aby rozpocząć dość długą sekwencję instrukcji, aby przejść do trybu rzeczywistego. W mikroprocesorze 80286 ten bit można ustawić tylko. Mikroprocesor 80286 nie jest w stanie powrócić do trybu rzeczywistego bez wykonania twardego resetu, co wyklucza jego użycie w większości systemów z trybem chronionym.

Deskryptory i selektory

Zanim omówimy blok stronicowania, spójrzmy na deskryptory i selektory mikroprocesora 80386. Mikroprocesor 80386 używa deskryptorów w podobny sposób jak mikroprocesor 80286. Deskryptor w obu mikroprocesorach jest to ciąg ośmiu bajtów, który zawiera informacje o segmencie pamięci i jego lokalizacji. Selektor(zawartość rejestru segmentowego) służy do identyfikacji deskryptora określonego w tablicy deskryptorów. Główna różnica między mikroprocesorami 80286 i 80386 polega na tym, że ten ostatni ma dwa dodatkowe selektory (FS i GS), a dwa najbardziej znaczące bajty deskryptora są zdefiniowane dla mikroprocesora 80386. Inną różnicą jest to, że deskryptory mikroprocesora 80386 używają 32-bitowego adresu bazowego segmentu i 20-bitowego pola limitu segmentu zamiast 24-bitowego adresu bazowego i 16-bitowego pola limitu segmentu, które można znaleźć w mikroprocesorze 80286.

Mikroprocesor 80286 adresuje obszar pamięci 16 MB za pomocą 24-bitowego adresu bazowego i ma długość segmentu 64 KB z 16-bitowym polem limitu. Mikroprocesor 80386 używa 32-bitowego adresu bazowego do adresowania obszaru pamięci 4 GB, a rozmiar segmentu jest określany przez 20-bitowe pole limitu, które jest używane przez dwa różne sposoby. Bit granulacji G (granularity) deskryptora lub bit ułamkowy określa jednostkę miary dla rozmiaru segmentu: jeśli G = 0, rozmiar jest określony w bajtach, a jeśli G = 1, to w 4K stron. Zatem rozmiar segmentu z 20-bitowym polem limitu może wynosić odpowiednio 1 MB lub 4 GB.

W deskryptorze pojawił się bit ziarnistości G, począwszy od mikroprocesora 80386. Jeżeli bit G = 0, to wartość zapisana w polu limit jest traktowana bezpośrednio jako limit rozmiaru segmentu, umożliwiając dostęp do dowolnego segmentu 00000H-FFFFFG o wielkości 1 MB. człon. Jeżeli bit G = 1, to liczba przechowywana w polu limitu jest interpretowana jako 00000XXXH-FFFFFXXXH, gdzie XXX to dowolna wartość z zakresu 000H do FFFH. Zapewnia to dostęp do rozmiaru segmentu od 0 bajtów do 4 GB w kawałkach po 4 KB. Wartość limitu 00001H wskazuje, że limit rozmiaru sektora wynosi 4 KB, gdy bit G wynosi 1, lub 1 bajt, gdy bit G wynosi 0. Przykładem może być segment rozpoczynający się pod adresem fizycznym 10000000H. Dla wartości granicznej 00001H i bitu G = 0, ten segment zaczyna się o 10000000H i kończy o 10000001H. Jeśli bit G = 1 z tą samą wartością graniczną (00001H), segment zaczyna się w lokalizacji 100000000H i kończy w 10001FFFH.

Na ryc. Rysunek 6.6 pokazuje, jak mikroprocesor 80386 adresuje segment pamięci w trybie chronionym za pomocą selektora i deskryptora. Przedstawione adresowanie jest identyczne ze sposobem adresowania segmentu przez mikroprocesor 80286. Różnica polega na wielkości segmentu dostępnego dla mikroprocesora 80386. 13 górnych bitów (bitów 15-3) selektora służy do wyboru deskryptora z tablicy deskryptorów. Bit wskaźnika tabeli TI (wskaźnik tablicy) (bit 2 selektora) wskazuje typ tablicy deskryptorów: lokalna, jeśli bit TI = 1, lub globalna, jeśli bit TI = 0. Dolne dwa bity RPL (żądany poziom uprawnień) ( bity 1-0) selektora określają żądany poziom uprawnień dostępu do sektora.

Ponieważ selektor używa 13-bitowego kodu, aby uzyskać dostęp do deskryptora, każda tabela (lokalna lub globalna) zawiera nie więcej niż 8192 deskryptorów. Ponieważ możliwy rozmiar segmentu dla mikroprocesora 80386 sięga 4 GB, dostęp do 16 384 segmentów można uzyskać za pomocą dwóch tabel deskryptorów. Wszystko to pozwala mikroprocesorowi 80386 obsługiwać pamięć wirtualną do 64 TB (1 TB = 1024 MB). Oczywiście faktycznie może istnieć system pamięci o pojemności do 4 GB. Jeśli program w pewnym momencie wymaga więcej niż 4 GB pamięci, wymagane dane można wpompować do systemu pamięci z dysku lub innego dużego urządzenia pamięci masowej.

Mikroprocesor 80386 używa tablic deskryptorów dla globalnych ( GDT) i lokalne (LDT) deskryptory. Trzecia tablica deskryptorów jest używana przez deskryptory przerwań ( DOSTAŁ) lub zawory(bramy). Pierwsze sześć bajtów deskryptora mikroprocesora 80386 jest takich samych jak te z mikroprocesora 80286, co zapewnia wyższą kompatybilność oprogramowania z nim. Dwa starsze bajty deskryptora mikroprocesora 80286 były zarezerwowane i zawierały wartość 00H. Deskryptory dla mikroprocesorów 80286 i 80386 przedstawiono na rys. 6.7.

Deskryptor mikroprocesora 80386 zawiera 32-bitowy adres bazowy, 20-bitowe pole limitu segmentu i bit granulacji G, który określa mnożnik limitu segmentu (1 lub 4 tys. razy) lub, w przeciwnym razie, w jakich jednostkach limit jest ustawiony: w bajtów (G = 0) lub stron 4K każda (G = 1). Poniższe jest przeznaczeniem pól deskryptora mikroprocesora 80386:

Podstawa (B31-B0)

Pole Base określa bazowy (początkowy) 32-bitowy adres segmentu w fizycznej przestrzeni adresowej 4 GB mikroprocesora 80386.

Limit (L19-L0)

Pole Limit określa limit rozmiaru segmentu w bajtach, jeśli bit ziarnistości G = 0 lub na stronach 4K, jeśli G = 1. Pozwala to na dowolny rozmiar segmentu od 1 bajta do 1 MB, jeśli bit G = 0 lub od 4 KB do 1 GB, jeśli bit G = 1. Przypomnijmy, że limit wskazuje ostatni bajt w człon.

Prawa dostępu

Pole Prawa dostępu określa poziom uprawnień i inne informacje dotyczące segmentu. Ten bajt jest inny dla różne rodzaje deskryptorów i jest określony dla każdego z nich.

Bit ziarnistości G (ziarnistość) wybiera mnożnik 1 lub 4K dla pola limitu segmentu. Jeśli bit G = 0, to mnożnik wynosi 1, jeśli bit G = 0, to mnożnik wynosi 4K.

Bit D (domyślny rozmiar) określa domyślny rozmiar używanych operandów i rejestrów. Jeśli D = 0, to 16 bitów, jak w mikroprocesorze 80286; jeśli D = 1, to 32 bity, jak w mikroprocesorze 80386. Ten bit określa, czy przedrostki są wymagane dla 32-bitowych rejestrów danych i indeksów. Jeśli D = 0, prefiks jest wymagany, aby uzyskać dostęp do 32-bitowych rejestrów i używać 32-bitowych wskaźników. Jeśli D = 1, prefiks jest wymagany do uzyskania dostępu do 16-bitowych rejestrów i 16-bitowych wskaźników. Atrybuty use16 i use32, używane z dyrektywą segment w asemblerze, kontrolują ustawienie bitu D. tryb rzeczywisty operacja zawsze zakłada, że ​​rejestry są 16-bitowe, więc każda instrukcja adresowana przez rejestr 32-bitowy lub wskaźnik musi być poprzedzony prefiksem.

Bit AVL (dostępny) jest dostępny dla system operacyjny i może być używany w razie potrzeby. Nie jest on stosowany ani analizowany przez procesor i jest przeznaczony do użytku przez programy użytkowe.

Istnieją dwa rodzaje deskryptorów: deskryptor segmentu kodu i danych oraz deskryptor segmentu systemu. Pierwszy deskryptor definiuje segmenty danych, stosu i kodu. Deskryptor segmentu systemu jest przeznaczony do przechowywania informacji o tabelach systemowych, zadaniach i bramkach.

Superkomputery zawsze były uważane za specjalną klasę technologii obliczeniowej. Ponieważ takie maszyny są budowane, aby rozwiązywać nietypowe problemy, budżety są niezwykłe, a to z kolei dawało poczucie nieskończonych możliwości: wydawało się, że problem zawsze dotyczy tylko pieniędzy, a jeśli wlejesz kolejne dziesiątki lub dwa miliony, wydajność można zwiększać w nieskończoność. To, co wydarzyło się w ostatnich miesiącach i latach, a wyrażone przez nową listę 500 najpotężniejszych gryzących na świecie – znanego wam TOP500.org – daje jednak powód, by twierdzić, że „nieskończoność” się skończyła. Superkomputery są pierwszymi z nowoczesnych systemy komputerowe natknął się na fizyczne granice możliwości elektroniki półprzewodnikowej - a dla nich przede wszystkim konieczne jest teraz znalezienie wyjścia z impasu. Nowa technologia przetwarzanie danych.

Formalną wskazówką dla tak daleko idącego stwierdzenia był dziwny wzorzec zauważony przez kompilatorów powyższej listy. Top 500 jest aktualizowany dwa razy w roku, a w najwyższe pozycje jego Ostatnia wersja, opublikowany w zeszłym tygodniu, nie było prawie żadnych zmian (tylko jedna została dodana do pierwszej dziesiątki) nowy członek, a łączna wydajność wszystkich pięciuset maszyn nieznacznie wzrosła, z 0,223 do 0,250 egzalopów). Nastąpiła jednak ogólna zmiana jakościowa: „środek ciężkości” listy przesunął się na jej szczyt lub, mówiąc prościej, główna moc obliczeniowa jest teraz skoncentrowana w stosunkowo niewielkim (historycznie – rekordowo- łamanie) liczba najszybszych maszyn. Wygląda to tak: połowa skumulowanej mocy Top 450 pochodzi tylko z pierwszych 17 komputerów z listy. Ten trend nie pojawił się wczoraj, ale w ciągu ostatnich sześciu lat ukształtował się tak bardzo, że trzeba się nad nim zastanowić.

Nie ma jednego ostatecznego wyjaśnienia. Jednym z najbardziej przekonujących są kwestie finansowe: w ostatnich latach superkomputery stały się znacznie droższe (około czterokrotnie w porównaniu, powiedzmy, z liczbą bitów ze średnią zerową), a zatem są obecnie dostępne tylko dla stosunkowo nielicznych rządów agencje i duże firmy. Ponadto projektanci i nabywcy nowych, niezbyt potężnych maszyn nie starają się znaleźć się w rankingu, aby nie zepsuć swojego wizerunku. Okazuje się więc, że im dalej, tym jaśniejszy trend się objawia: silni stają się silniejsi, słabi nieliniowo szybko pozostają w tyle.

Ważny wniosek: superkomputery nie przestały być potrzebne, tylko stały się mniej dostępne. Ale co z nieśmiertelnym prawem Moore'a? Czy nie powinno to zrekompensować wzrostu ceny ciaśniejszym opakowaniem, a tym samym wyższą wydajnością? Tu pojawia się główne podejrzenie. Wygląda na to, że dotarliśmy do mety, gdzie prawo Moore'a, choć nadal działa, jest już zbyt drogie w użyciu dla większości graczy.

Naukowcy formułują wynik w następujący sposób: przy braku przełomowych technologii, które w jednym skoku zapewniłyby nieosiągalną wcześniej prędkość obliczeniową, branża superkomputerów jest zmuszona podążać szeroką ścieżką - głupio zwiększając liczbę procesorów na swoich maszynach. A co gorsza: skoro ta droga nie jest w stanie zaspokoić apetytów użytkowników (a liczba biterów jest tradycyjnie nie tylko narzędziem do przetwarzania danych, ale także sposobem na ustanowienie autorytetu korporacyjnego i krajowego), projektanci postawili na grafikę akceleratory, które, powiedzmy, nadają się do rozwiązywania nie żadnych zadań. Liczba superkomputerów, które aktywnie korzystają z procesorów graficznych, wzrosła o rząd wielkości w ciągu ostatnich pięciu lat!

I tutaj bardzo przydatne jest przypomnienie nadchodzącego zastąpienia słynnego testu Linpacka, który od samego początku publikacji Top 500 (dwadzieścia lat temu) był głównym miernikiem wydajności systemów superkomputerowych. Proponuje się zastąpienie go nowo opracowanym testem HPCG (High Performance Conjugate Gradient). Powód: Linpack - napisany w "Fortran" już w 1979 roku - pokazuje, że prawdziwa wydajność mierzonych systemów jest niezadowalająca, a rozbieżności rosną.

Ogólnie rzecz biorąc, nawet ich wspólny współautor Jack Dongarra nie potrafi jasno wyjaśnić różnicy między Linpackiem a HPCG. Ale, w dużym uproszczeniu, różnicę można sprowadzić do następujących: Linpack ocenia głównie zdolność superkomputera do wykonywania czystych obliczeń (które akceleratory GPU radzą sobie dobrze), podczas gdy HPCG bierze również pod uwagę wydajność komunikacji wewnętrznej, co jest ważne w rozwiązywanie praktycznych problemów naukowych i technicznych (np. częste nieregularne dostępy do pamięci).

Jeśli HPCG nie zastąpi, to uzupełni Linpack po kilku latach „docierania” (dla zainteresowanych kody źródłowe dostępne są na licencji BSD ze strony Sandia Labs). A to może doprowadzić do znacznego przetasowania całej listy Top 500, powrotu do niej małych uczestników, którzy zaczną otrzymywać wyższe, bardziej sprawiedliwe oceny, a nawet dostosowania architektury superkomputerów, gdy przestaną one być zoptymalizowane pod kątem Linpack. Choć oczywiście nie należy szczególnie liczyć na to drugie – w końcu nie ma przecież przełomowej technologii obliczeniowej!

I bez przełomów w świecie Numberbiters zapanowała nuda. Jak zbudować mocniejszą maszynę? Umieść więcej procesorów - a zatem znajdź więcej pieniędzy. Ale rzeczywistość jest taka, że ​​zrównoleglenie zadań praktycznych powyżej pewnego (i już osiągniętego) poziomu nie przynosi przyrostów prędkości, a nawet najbardziej potężne superkomputery są już tak drogie, że ich budowę i eksploatację mogą zapewnić jednostki, jak omówiono powyżej. W rezultacie strumień superkomputera wysycha. To koniec ery technologicznej, koniec półprzewodników, jakie znamy od pięćdziesięciu lat. I dopóki nie pojawi się technologia, która może podnieść wydajność komputera na nowy poziom, będziemy w stagnacji, zadowoleni z kilkuprocentowego rocznego przyrostu.

Co może zapewnić taki przełom? Zachodnia prasa wpatruje się w nanorurki, z których chłopakom ze Stanforda udało się zbudować jednowymiarowe tranzystory polarne (CNFET), uczą się robić mikroukłady z gwarantowaną funkcjonalnością (główny problem: nadal trudno tego uniknąć duża liczba niewłaściwie umieszczone nanorurki), a nawet zbudować komputer zgodny z MIPS, zademonstrowany w zeszłym tygodniu na konferencji superkomputerowej ACM / IEEE SC13 („Computerra” napisał o tym projekcie: patrz „”). W przyszłości technologia ta będzie w stanie zapewnić 13-krotną przewagę wydajności na jednostkę zużycia energii do chipy półprzewodnikowe. Ciekawe, czy ktoś tutaj zajmuje się nanorurek?

Wielu entuzjastów technologia komputerowa pamiętają z doświadczeniem czasy, kiedy częstotliwości procesorów były mierzone w megahercach, a producenci (czyli Intel i AMD) próbowali wyprzedzić się w tym wskaźniku. Następnie poziom zużycia energii i rozpraszania ciepła przez procesory wzrósł tak bardzo, że kontynuowanie tego wyścigu stało się niemożliwe. W ostatnich latach zaczęli zwiększać liczbę rdzeni procesorów, ale w rezultacie osiągnięto granicę, gdy wzrost ten stał się nieopłacalny. Teraz uzyskanie największej mocy na wat stało się głównym czynnikiem wpływającym na wydajność.

Wszystkie te zmiany nie nastąpiły, ponieważ twórcy stanęli w obliczu fizycznych ograniczeń dalszego rozwoju istniejących procesorów. Wydajność ograniczał raczej fakt, że postęp w niektórych obszarach – przede wszystkim w zakresie efektywności energetycznej – był wolniejszy niż w innych obszarach, takich jak rozszerzanie funkcjonalności i zestawów instrukcji. Czy jednak może być tak, że teraz fizyczny limit procesorów i ich? moc obliczeniowa już blisko? Igor Markov z University of Michigan poruszył tę kwestię w artykule w czasopiśmie Nature.

Biorąc pod uwagę przeszkody

Markov zauważa, że ​​na podstawie czysto fizycznych ograniczeń niektórzy naukowcy obliczyli, że prawo Moore'a będzie obowiązywać przez kolejne sto lat. Z drugiej strony grupa International Technology Roadmap for Semiconductors (ITRS) daje mu kilkadziesiąt lat życia. Można jednak zakwestionować prognozy ITRS: ta grupa służyła do przewidywania procesorów o częstotliwości 10 GHz w czasach chipów Core2. Powodem tej rozbieżności jest to, że wiele poważnych ograniczeń fizycznych nigdy nie weszło w grę.

Na przykład skrajnym limitem wielkości jednostki funkcjonalnej jest jeden atom, który jest ostatecznym limitem fizycznym. Ale na długo przed osiągnięciem tego limitu fizyka ogranicza możliwość dokładnego kontrolowania przepływu elektronów. Innymi słowy, obwody mogą być potencjalnie tak cienkie jak jeden atom, ale ich zachowanie stanie się zawodne znacznie wcześniej. Wiele z trwających prac Intela nad przejściem na cieńsze procesy produkcyjne (mniejsze tranzystory) dotyczy Poszczególne komponenty aby mogły nadal działać zgodnie z oczekiwaniami.

Istotę argumentacji Markowa można zrozumieć mniej więcej tak: chociaż istnieją twarde ograniczenia fizyczne, często są one nieistotne dla problemów związanych z postępem współczesnego półprzewodnika. Zamiast tego mamy do czynienia z łagodniejszymi ograniczeniami, które często można ominąć. „Kiedy przychodzi moment na pewne ograniczenie utrudniające postęp, zrozumienie jego natury jest kluczem do jego przezwyciężenia” – pisze. „Niektóre ograniczenia można po prostu zignorować, podczas gdy inne pozostają hipotetyczne i oparte wyłącznie na danych empirycznych; są trudne do zainstalowania wysoki stopień pewność."

W rezultacie to, co wydaje się być barierami rozwoju, jest często przezwyciężane przez połączenie kreatywnego myślenia i ulepszonej technologii. Przykładem Markowa jest granica dyfrakcji. Początkowo miało to zapobiegać wytrawianiu przez lasery argonowo-fluorowe struktur cieńszych niż 65 nanometrów. Ale przy dyfrakcji subfalowej pracujemy obecnie nad strukturami 14 nm przy użyciu tego samego lasera.

Gdzie są nowoczesne ograniczenia?

Markov zwraca uwagę na dwie kwestie, które uważa za największe ograniczenia: energię i komunikację. Kwestia zużycia energii wynika z tego, że ilość energii zużywanej przez nowoczesne obwody nie zmniejsza się proporcjonalnie do zmniejszania się ich fizycznych rozmiarów. Główny rezultat tego: wysiłki podejmowane w celu zablokowania części chipa, gdy nie są one używane. Ale przy obecnym tempie rozwoju to podejście w danym momencie większość układu jest nieaktywna — stąd termin „ciemny krzem”.

Zużycie energii jest proporcjonalne do napięcia roboczego układu, a tranzystory po prostu nie mogą działać poniżej 200mV. Teraz ich napięcie jest 5 razy wyższe, więc jest miejsce na redukcję. Ale postęp w obniżaniu napięcia roboczego uległ spowolnieniu, więc możemy ponownie osiągnąć granice technologiczne przed fizycznymi.

Problem zużycia energii jest związany z kwestią komunikacji: większość fizycznej objętości chipa i większość jego zużycia energii jest przeznaczana na interakcję między jego różnymi blokami lub resztą komputera. Tutaj naprawdę dochodzimy do granic fizycznych. Nawet gdyby sygnały w chipie podróżowały z prędkością światła, chip powyżej 5 GHz nie byłby w stanie przekazywać informacji z jednej strony chipa na drugą. Najlepsze, z czym możemy zrobić nowoczesne technologie jest próba opracowania chipów, w których bloki, które często wymieniają między sobą dane, byłyby fizycznie blisko siebie. Włączenie do równania trzeciego wymiaru (tj. trójwymiarowych łańcuchów) mogłoby pomóc, ale tylko w niewielkim stopniu.

Co dalej?

Markow nie jest szczególnie optymistycznie nastawiony do nadchodzących zmian. W najbliższym czasie spodziewa się, że zastosowanie nanorurek węglowych do okablowania i optycznych połączeń komunikacyjnych będzie kontynuacją trendu, który pomoże nam uniknąć fizycznych ograniczeń. Zauważa jednak, że obie te technologie mają swoje ograniczenia. Nanorurki węglowe mogą być małe, o średnicy do nanometra, ale mają też limit rozmiaru. A fotony, gdyby były używane do komunikacji, wymagałyby sprzęt komputerowy i energia.

Wielu pokłada swoje nadzieje w komputerach kwantowych, ale Markov nie jest jednym z ich fanów. " komputery kwantowe, zarówno cyfrowe, jak i analogowe, są obiecujące tylko w zastosowaniach niszowych i nie oferują znaczącej wydajności w ogólnych zastosowaniach komputerowych, ponieważ nie są w stanie szybko wykonać sortowania i innych konkretnych zadań”, mówi. Problem polega też na tym, że sprzęt ten najlepiej sprawdza się w temperaturach bliskich zeru bezwzględnego, podczas gdy w temperaturze pokojowej wydajność jest wyjątkowo niska.

Jednak wszystkie obliczenia w pewnym stopniu opierają się na efektach kwantowych, a Markov uważa, że ​​można się czegoś pożytecznego nauczyć od systemów kwantowych. „Poszczególne urządzenia kwantowe zbliżają się do limitów energii potrzebnej do przełączania, podczas gdy urządzenia niekwantowe pozostają w tyle o rząd wielkości”. Oczywiście uzyskanie nawet niewielkiego stopnia wydajności układów kwantowych może stanowić duży start w zużyciu energii w całym chipie.

Kolejna fizyczna granica Markowa: wymazanie części informacji wiąże się z kosztem termodynamicznym, którego nie da się uniknąć – obliczenia zawsze zużywają energię. Jednym z pomysłów na uniknięcie tego limitu jest „obliczanie odwracalne”, w którym składniki są zwracane do stan początkowy po obliczeniu. Ta metoda może, przynajmniej teoretycznie, pozwolić odzyskać część zużytej energii.

Ten pomysł nie jest całkowicie teoretyczny. Markov przytacza prace z wykorzystaniem obwodów nadprzewodzących (które nazywa „dość egzotycznymi”), aby zapewnić odwracalne zachowanie i rozpraszanie energii poniżej granicy termodynamicznej. Oczywiście używa się tutaj tylko 4 mikrokelwinów, więc więcej energii zużywa się na sprawdzenie funkcjonalności obwodów niż na ich rzeczywistą pracę.

Poza fizyką

Podczas gdy fizyka i materiałoznawstwo nakładają wiele ograniczeń na sprzęt, matematyka nakłada ograniczenia na to, co możemy z nimi zrobić. I pomimo reputacji nauki ścisłej, ograniczenia matematyczne są znacznie bardziej niejasne niż ograniczenia fizyczne. Na przykład nadal nie ma odpowiedzi na równość klas złożoności P i NP, pomimo wieloletnich wysiłków. I chociaż możemy udowodnić, że niektóre algorytmy są najskuteczniejsze w ogólnych przypadkach, łatwo jest również znaleźć zakresy problemów, w których alternatywne podejścia obliczeniowe sprawdzają się lepiej.

Największym problemem, który widzi tutaj Markov, jest walka o wydobycie większej paralelizmu z kodu. Nawet tanie smartfony teraz pracujesz procesory wielordzeniowe, ale jak dotąd ich wykorzystanie nie jest optymalne.

Ogólnie wydaje się, że głównym ograniczeniem jest ludzki umysł. Chociaż Markov nie widzi nadchodzących fantastycznych nowych technologii, optymistycznie ma nadzieję, że obecne przeszkody zostaną usunięte lub ominięte przez postęp w innych obszarach.

Od redaktora. Nasi stali czytelnicy wiedzą, że okazjonalnie w naszej gazecie pojawiają się przedruki najsłynniejszych, klasycznych artykułów i prac z dziedziny informatyki. „Fizyczne granice obliczeń” chcieliśmy drukować od dawna… około piętnastu lat. Ale ten cudowny artykuł jakoś nie miał miejsca, jeśli chodzi o skład innych materiałów, wyglądałby zbyt dziwnie w gazecie, wydrukowany „tak po prostu”. A potem takie szczęście! Artykuł został wspomniany (całkowicie zasłużony) w ostatnim wykładzie naszego zaawansowanego kursu szkoleniowego, jako jedno z nielicznych źródeł informacji na ten temat w języku rosyjskim. Oczywiście nie mogliśmy przegapić okazji. Mamy nadzieję, że spodoba ci się odkrywanie tego wspaniałego, popularnego materiału. Przecież nawet 24 (!) lata, które minęły od jego publikacji, nie uczyniły go „przestarzałym”, choć oczywiście technologie poszły naprzód o parseki! Ale podstawowe prawa są zbyt surowe nawet dla technologii!

Jakie czynniki fizyczne ograniczają proces obliczeniowy? Czy istnieje minimalna minimalna energia wymagana, na przykład do wykonania jednego logicznego kroku? Podobno takie minimum nie istnieje, ale są inne pytania, które wciąż pozostają otwarte.

Kalkulacja, niezależnie od tego, czy jest wykonywana urządzenia elektryczne, na zwykłych kontach lub system biologiczny, taki jak mózg, jest procesem fizycznym. Stosują się do niego te same pojęcia, co do innych procesów fizycznych. Ile energii potrzeba do wykonania danego obliczenia? Jak długo to zajmie? Jaki rozmiar powinno mieć urządzenie komputerowe? Innymi słowy, jakie są fizyczne ograniczenia procesu obliczeniowego?

Oczywiście zadawanie tych pytań jest znacznie łatwiejsze niż odpowiadanie na nie. Ograniczenia, którymi jesteśmy zainteresowani, są w jakiś sposób bardzo dalekie od rzeczywistych ograniczeń, z którymi mamy do czynienia. nowoczesna technologia. Dlatego nie możemy twierdzić, że nasze badania pomagają inżynierowi lub technologowi w jego pracy. Badania te mają bardziej teoretyczny charakter. Naszym celem jest zidentyfikowanie ogólnych przepisów regulujących wszystkie rodzaje przetwarzania informacji, niezależnie od środków i metod tego przetwarzania. Wszelkie znalezione przez nas ograniczenia muszą opierać się wyłącznie na fundamentalnych zasadach fizycznych, a nie na obecnie stosowanych technologiach.

To poszukiwanie fundamentalnych ograniczeń miało już precedens. W latach czterdziestych K. Shannon, ówczesny pracownik Bell Telephone Laboratories, ustalił, że istnieją ograniczenia dotyczące ilości informacji, które mogą być przesyłane kanałem komunikacyjnym w obecności hałasu. Te ograniczenia obowiązują niezależnie od sposobu zakodowania wiadomości. Praca Shannona oznaczała narodziny nowoczesnej teorii informacji. Jeszcze wcześniej, w połowie i pod koniec ubiegłego wieku, fizycy, próbując określić podstawowe ograniczenia sprawności silnika parowego, stworzyli naukę zwaną „termodynamiką”. Około 1960 roku Landauer (jeden z autorów tego artykułu) wraz z J. Swansonem, pracując w IBM, próbowali zastosować tego rodzaju analizę w procesie obliczeniowym. Od połowy lat 70. coraz więcej grup naukowców z innych organizacji zaczęło dołączać do tych badań.

W naszej analizie fizycznych ograniczeń obliczeń używamy terminu „informacja” w sensie, w jakim jest on zdefiniowany w teorii informacji. Zgodnie z tą definicją informacja znika, gdy dwie wcześniej odrębne sytuacje stają się nie do odróżnienia. W systemy fizyczne, charakteryzujący się brakiem sił tarcia, informacja nie może zostać zniszczona, ponieważ gdy informacja zostanie zniszczona, pewna ilość energii musi przejść w ciepło. Jako przykład rozważ dwie łatwe do odróżnienia sytuacje fizyczne. W jednym z nich gumowa piłka jest podparta na wysokości 1 m od podłogi, w drugim na wysokości 2 m. Jeśli piłka zostanie wypuszczona, spadnie i odbije się od podłogi. W przypadku braku tarcia i pod warunkiem, że kula jest idealnie sprężysta, obserwator zawsze będzie w stanie stwierdzić, jaki był początkowy stan kuli (w tym przypadku na jakiej wysokości była w początkowym momencie czasu), ponieważ piłka, która spadła z wysokości 2 m, odbije się wyżej, niż gdy spadnie z wysokości 1 m.

Jednak w obecności sił tarcia, za każdym razem, gdy piłka odbija się od podłogi, część energii zostanie rozproszona i ostatecznie piłka przestanie się odbijać i pozostanie na podłodze. Wtedy nie będzie można określić, jaki był stan początkowy piłki: piłka, która spadła z wysokości 2 m będzie całkowicie identyczna z piłką, która spadła z wysokości 1 m. Informacje zostaną utracone w wyniku rozpraszanie energii.

Konwencjonalne urządzenia obliczeniowe, liczydło i mikroprocesor rozpraszają energię podczas pracy. Rozpraszanie energii przez bramki logiczne mikroprocesora wynika z zanikania informacji. Są też inne powody: elektroniczne obwody Mikroprocesory zużywają energię, nawet jeśli po prostu przechowują informacje bez ich przetwarzania. Rachunki są rozpraszające z powodu sił tarcia, których nie można wyeliminować: w przypadku braku tarcia statycznego „kości” zmieniałyby położenie pod wpływem losowego ruchu termicznego cząsteczek. Tarcie statyczne reprezentuje pewną minimalną siłę, która nie zależy od prędkości „kości”, dlatego liczydło wymaga pewnej minimalnej energii, bez względu na to, jak wolno pracują.

Podajmy kolejny przykład znikania informacji. Wyrażenie „2 + 2” zawiera więcej informacji niż wyrażenie „= 4”. Jeśli wiemy tylko, że liczba 4 została uzyskana przez dodanie dwóch liczb, to nie będziemy w stanie określić, które liczby zostały dodane: 1 + 3, 2 + 2, 0 + 4, czy jakaś inna para liczb. Ponieważ informacje wyjściowe są zawarte niejawnie już w danych wejściowych, możemy założyć, że żadne obliczenia nie generują informacji.

Konwencjonalne bramki logiczne rozpraszają energię, ponieważ odrzucają niepotrzebne informacje. Na przykład, jeśli wyjście bramki AND ma wartość 0, to nie możemy określić, co było na wejściach.

W rzeczywistości obliczenia wykonywane na nowoczesnych komputerach przeprowadzane są za pomocą wielu operacji niszczących informacje. Tak zwany zawór I ” to urządzenie z dwiema liniami wejściowymi, z których każda może być ustawiona na sygnał równy 1 lub 0, a jedna linia wyjściowa - wartość jego sygnału jest określona przez wartości wejść. Jeśli oba wejścia mają wartość 1, to wyjście również będzie równe 1. Jeśli jedno lub oba wejścia mają wartość 0, to wyjście będzie równe 0. Za każdym razem, gdy wyjście bramki ma wartość 0, tracimy informacje, ponieważ nie wiemy, które z trzema możliwymi stanami były linie wejściowe (0 i 1; 1 i 0 lub 0 i 0). W rzeczywistości każda bramka logiczna, która ma więcej wejść niż wyjść, nieuchronnie traci informacje, ponieważ nie możemy określić stanu wejść na podstawie stanu wyjść. Dlatego za każdym razem, gdy stosujemy taki „logicznie nieodwracalny” zawór, rozpraszamy energię w środowisko. Wykasowanie jednego bitu danych z pamięci komputera to kolejna operacja często stosowana w informatyce, która również ma charakter rozpraszający. Podczas kasowania jednego bitu danych tracimy wszystkie informacje o poprzednim stanie tego bitu.

Można jednak zadać pytanie, czy użycie nieodwracalnych bramek logicznych i wymazywanie operacji jest nieuniknione w informatyce? Jeśli tak, to wszelkie obliczenia, które wykonujemy, muszą rozproszyć pewną minimalną ilość energii.

Jak Benne (jeden z autorów tego artykułu) wykazał w 1973 roku, można obejść się bez nieodwracalnych elementów logicznych i bez wymazywania informacji w obliczeniach. Od tego czasu ważność tego przepisu została wykazana w kilku modelach. Najłatwiejszy sposób opisu modeli opiera się na tak zwanych „odwracalnych bramkach logicznych”, takich jak bramka Fredkina, nazwana na cześć Edwarda Fredkina z MIT. Zawór posiada trzy linie wejściowe i trzy linie wyjściowe. Sygnał na jednej linii wejściowej, zwanej „kanałem sterującym”, nie zmienia się podczas przechodzenia przez bramkę. Jeżeli sygnał w kanale sterującym jest ustawiony na 0, to sygnały wejściowe na pozostałych dwóch liniach również przechodzą bez zmian. Ale jeśli linia kontrolna ma wartość 1, to pozostałe dwie linie wyjściowe przełączają się: sygnał wejściowy jednej linii staje się wyjściem drugiej i odwrotnie. Bramka Fredkina nie traci informacji, ponieważ stan wejść można zawsze określić na podstawie stanu wyjść.

Fredkin pokazał, że każde urządzenie logiczne niezbędne do działania komputera można zbudować w postaci odpowiedniej kombinacji bramek Fredkina. Aby wykonać obliczenia, niektóre linie wejściowe niektórych bramek muszą być wstępnie ustawione na określone wartości (patrz dolny rysunek po lewej stronie).

Odwracalna bramka logiczna Fredkina może nie rozpraszać energii - stan na jej wejściach można określić ze stanu wyjść. Zawór posiada linię „sterującą”, której stan nie jest zmieniany przez zawór. Jeśli linia kontrolna ma wartość 0, to wartości sygnałów na pozostałych dwóch liniach również się nie zmieniają, ale jeśli linia kontrolna ma wartość 1, to wejście linii A staje się wyjściem linii S i odwrotnie. Przy prawidłowo podłączonych zaworach odwracalnych można zrealizować dowolną funkcję wykonywaną przez konwencjonalne urządzenie nieodwracalne. Aby zaimplementować operację AND (po prawej), jedno wejście jest ustawione na 0, a dwa bity wyjściowe, zwane „śmieciami”, są tymczasowo ignorowane. Po zakończeniu obliczeń bity te są używane do obsługi bramki w przeciwnym kierunku, aby przywrócić komputer do pierwotnego stanu.

Bramki Fredkina mają więcej linii wyjściowych niż te, które modelują. Dlatego w trakcie obliczeń wydawałoby się, że powstają „śmieci”, tj. bity informacji, które nie są wymagane do uzyskania wyniku. Zanim zaczniesz kolejne obliczenia, musisz jakoś wyczyścić komputer z tych bitów. Ale jeśli je usuniemy, nastąpi rozproszenie energii, którego chcieliśmy uniknąć.

W rzeczywistości te bity odgrywają bardzo ważną rolę. Po otrzymaniu wyniku obliczeń i skopiowaniu go z maszyny ze zwykłych linii wyjściowych, proces powinien przebiegać w odwrotnym kierunku. Innymi słowy, używamy „bitów śmieci” i bitów wyjściowych, które komputer otrzymuje podczas obliczeń jako „wejście” z „tylnej strony” maszyny. Jest to możliwe, ponieważ każda bramka logiczna komputera jest odwracalna. Nie ma utraty informacji w procesie obliczania w odwrotnym kierunku, a zatem nie ma potrzeby rozpraszania energii. Ostatecznie komputer powróci do stanu, w którym znajdował się przed rozpoczęciem obliczeń. Dzięki temu możliwe jest dokończenie „cyklu obliczeniowego” – popychanie komputera do przodu, a następnie powrót do stanu pierwotnego, bez rozpraszania energii.

Do tej pory mówiliśmy o abstrakcyjnych operacjach logicznych bez dotykania urządzeń fizycznych, które wykonują te operacje. Nietrudno jednak wyobrazić sobie fizyczne urządzenie działające zgodnie z zasadą Fredkina. W takim urządzeniu kanały do ​​przesyłania informacji prezentowane są w postaci lamp. Z kolei trochę informacji jest reprezentowana przez obecność lub brak kulki w określonym odcinku tuby. Obecność kuli jest interpretowana jako 1, a nieobecność jest interpretowana jako 0.

Linia kontrolna jest reprezentowana przez wąski odcinek rury, podzielony pośrodku w kierunku wzdłużnym. Gdy kulka wchodzi do podzielonej sekcji rury, rozpycha boczne ścianki rury, uruchamiając w ten sposób urządzenie przełączające. To urządzenie przełączające prowadzi koraliki wejściowe, które mogą znajdować się w dwóch innych lampach. Gdy w rurce kontrolnej znajduje się kulka, każda kulka przechodząca przez linię wejściową jest automatycznie przenoszona do innej rurki. Aby zapewnić wyłączenie urządzenia przełączającego w przypadku braku kuli w rurze sterującej, dzielone połówki tej ostatniej są dociskane do siebie sprężynami. Kiedy kulka wchodzi do rurki sterującej i ściska sprężyny, musi poświęcić na to trochę energii. Jednak ta energia nie jest tracona: jest oddawana, gdy kula sterująca opuszcza dzieloną rurę i sprężyny są zwolnione.

Wszystkie kule są niejako połączone ze sobą i są popychane do przodu przez jeden mechanizm, dzięki czemu poruszają się synchronicznie; w przeciwnym razie nie moglibyśmy zapewnić, że różne kule wejściowe i sterujące dotrą do bramki logicznej w tym samym czasie. W pewnym sensie proces obliczeniowy przypomina ruch z jednym stopniem swobody, na przykład ruch dwóch kół sztywno osadzonych na tej samej osi. Gdy obliczenia są zakończone, przesuwamy wszystkie kulki w przeciwnym kierunku, eliminując wszystkie operacje wykonane na drodze do przodu i przywracając komputer do pierwotnego stanu.

Jeżeli urządzenie jest całkowicie zanurzone w idealnie lepkim płynie, wówczas siły tarcia działające na kulki będą proporcjonalne do ich prędkości, natomiast nie będzie tarcia statycznego. Dlatego jeśli jesteśmy zadowoleni z powolnego ruchu kulek, siła tarcia będzie bardzo mała. W każdym układzie mechanicznym praca nad pokonaniem siły tarcia jest równa iloczynowi siły tarcia i odległości przebytej przez ciało. (Dlatego im szybciej pływak przepłynie określoną odległość, tym więcej energii zużywa, mimo że odległość pozostaje taka sama niezależnie od prędkości pływaka.) Jeśli kulki przechodzą przez zawory Fredkina z małą prędkością, wtedy praca wykonana podczas ruchu (iloczyn odległości siły) będzie bardzo mała, ponieważ siła tarcia jest wprost proporcjonalna do prędkości piłki. W rzeczywistości możemy wydać dowolnie mało energii, po prostu z powodu odpowiedniego spowolnienia procesu obliczeniowego. Dochodzimy więc do wniosku, że nie ma minimalnej wymaganej ilości energii, którą trzeba wydać, aby wykonać dane obliczenia.

Wyidealizowany model fizyczny zaworu Fredkina: rurki pełnią rolę przewodników, a obecność lub brak kuli interpretuje się jako 1 lub 0. Wąska podzielona sekcja lampy jest kanałem sterującym. Kiedy piłka w nią uderza, ścianki rurki rozchodzą się na boki, uruchamiając mechanizm przełączający. Ten z kolei przenosi każdą nadchodzącą piłkę z linii A do linii B i odwrotnie. Dwie sprężyny odcinają kanał sterujący, gdy nie ma w nim kulki. Taki zawór nie wymaga tarcia statycznego do wykonywania operacji. Można go zanurzyć w lepkiej cieczy, a wtedy siły tarcia będą zależeć tylko od prędkości kulek. W tym przypadku rozproszona energia może być dowolnie mała: aby zmniejszyć ilość rozpraszanej energii, konieczne jest jedynie zmniejszenie prędkości kulek przechodzących przez zawór.

W rozważanym modelu urządzenia obliczeniowego energia tracona na tarcie będzie bardzo mała, jeśli urządzenie to działa wystarczająco wolno. Czy można zbudować model jeszcze bardziej wyidealizowanej maszyny, która mogłaby wykonywać obliczenia bez żadnego tarcia? A może tarcie jest koniecznym atrybutem procesu obliczeniowego? Fredkin wraz z T. Toffoli i innymi specjalistami z MIT wykazali, że tarcie nie jest konieczne.

Zademonstrowali to na modelu urządzenia obliczeniowego, w którym obliczenia są przeprowadzane przez wystrzeliwanie do siebie idealnych kul bilardowych przy braku sił tarcia. W modelu bilardowym idealnie odbijające „lustra” - powierzchnie zmieniające kierunek ruchu kulek, są usytuowane w taki sposób, aby ruch kulek na stole symulował przechodzenie bitów informacji przez bramki logiczne (patrz rysunek). Tak jak poprzednio, obecność kuli w pewnej części „komputera” interpretowana jest jako 1, a jej brak jako 0. Jeśli dwie kule dotrą do bramki logicznej w tym samym czasie, zderzają się i zmieniają ich trajektorie; nowe ścieżki reprezentują wyjście bramki. Fredkin, Toffoli i inni opracowali układy lustrzane odpowiadające różnym typom bramek logicznych i udowodnili, że możliwe jest zbudowanie modelu bilardowego dowolnego element logiczny wymagane do obliczeń.

Model komputera bilardowego: Ruch kul bilardowych po powierzchni stołu symuluje przepływ bitów informacji przez bramkę logiczną. W bilardowych bramkach logicznych (po lewej) trajektorie kulek zmieniają się, gdy zderzają się ze sobą lub z „lusterkami”. Oprócz swoich funkcji w zaworach, lustra mogą zmieniać kąt trajektorii kuli (a), przesuwać ją w bok (b), opóźniać kulę bez zmiany jej ostatecznego kierunku lub prędkości (c) lub powodować przecinanie się trajektorii (d). Lustra można ułożyć w taki sposób, aby powstały „komputer” pełnił funkcje dowolnego urządzenia logicznego. Na przykład możesz zbudować komputer bilardowy do rozpoznawania liczb pierwszych. Taki komputer (po prawej) akceptuje dowolną pięciocyfrową Liczba binarna(w tym przypadku 01101 lub 13) i ustaloną sekwencję wejściową 01. Podobnie jak bramka Fredkina, komputer bilardowy zwraca więcej bitów wyjściowych, niż potrzebuje użytkownik. W tym przypadku zwraca samą oryginalną liczbę (reprezentującą „dodatkowe” wyjście) i „odpowiedź”: sekwencję 10, jeśli wejście jest pierwsze, i 01, jeśli jest złożone.

Aby rozpocząć proces obliczania, strzelamy kulą bilardową na wejściu komputera, jeśli musimy wprowadzić jednostkę. Kulki muszą jednocześnie wejść do maszyny. Ponieważ kulki są idealnie elastyczne, nie tracą energii, gdy się ze sobą zderzają. Wyjdą z samochodu z taką samą energią kinetyczną, z jaką do niego weszli.

W trakcie działania komputer bilardowy generuje „śmieciowe bity”, podobnie jak komputer zbudowany na bramkach Fredkina. Gdy komputer zakończy wykonywanie zadania, odbijamy kule bilardowe w przeciwnym kierunku, odwracając proces obliczeniowy. Kulki wyjdą z samochodu dokładnie tam, gdzie je wysłaliśmy do samochodu, a jednocześnie będą poruszać się z tą samą prędkością. W ten sposób mechanizm, który wrzucił kulki do samochodu, może teraz odzyskać ich energię kinetyczną. I w tym przypadku, wykonując obliczenia, możemy przywrócić komputer do pierwotnego stanu bez rozpraszania energii.

Komputer bilardowy ma jedną istotną wadę: jest niezwykle wrażliwy na najmniejsze niedokładności. Jeśli piłka zostanie wysłana z niewielkim odchyleniem od prawidłowego kierunku lub lustro zostanie obrócone pod kątem nieco innym niż wyliczony, kulki zejdą z pożądanych trajektorii. Jedna lub więcej piłek będzie odchylać się od obliczonej ścieżki, a po pewnym czasie łączny efekt tych błędów zakłóci cały proces obliczeniowy. Nawet gdyby można było wytworzyć idealnie elastyczne, pozbawione tarcia kulki, losowy ruch termiczny cząsteczek tworzących kulki mógłby spowodować błędy po kilkudziesięciu zderzeniach.

Oczywiście możliwe byłoby zainstalowanie sprzętu korekcyjnego, który sprowadziłby nieprawidłowo poruszającą się piłkę na pożądaną trajektorię, ale w tym przypadku informacje o poprzednich stanach piłki musiałyby zostać zniszczone. Na przykład konieczne byłoby zniszczenie informacji o wielkości odchylenia lustra od prawidłowej pozycji. Jednak pozbycie się informacji nawet w celu skorygowania błędu jest możliwe tylko w układzie, w którym występują siły tarcia i możliwa jest strata energii. Dlatego sprzęt korekcyjny musi rozpraszać pewną ilość energii.

Wiele trudności napotykanych podczas korzystania z komputerowego modelu bilardowego można by uniknąć lub przynajmniej zmniejszyć, gdyby zamiast kul bilardowych zastosować submikroskopowe cząstki, takie jak elektrony. Jak zauważył W. Żurek z Los Alamos National Laboratory, dzięki prawom mechaniki kwantowej, które nakładają ograniczenia na stan cząstek elementarnych, można wyeliminować możliwość wystąpienia małych odchyleń w ruchu cząstek.

Chociaż dotychczas nasze rozumowanie opierało się głównie na dynamice klasycznej, kilku badaczy zaproponowało inne modele komputerów odwracalnych oparte na zasadach mechaniki kwantowej. Takie maszyny, po raz pierwszy zaproponowane przez P. Benioffa z National Laboratory w Argonne (Francja) i ulepszone przez innych, w szczególności R. Feynmana z California Institute of Technology, były dotychczas opisywane tylko w sposób najbardziej ogólny. W istocie cząstki w tych modelach komputerowych muszą być ułożone w taki sposób, aby reguły mechaniki kwantowej rządzące ich oddziaływaniem były dokładnie takie same, jak reguły przewidujące wartości sygnałów na wyjściach odwracalnych bramek logicznych. Załóżmy na przykład, że spin cząstki może mieć tylko dwa możliwa wartość: kierunek w górę (odpowiadający binarnemu 1) i w dół (odpowiadający binarnemu 0). Oddziaływanie pomiędzy wartościami spinów cząstek musi odbywać się w taki sposób, aby wartość spinu danej cząstki zmieniała się w zależności od spinu cząstek znajdujących się w pobliżu. W tym przypadku spin cząstki będzie odpowiadał jednemu z wyjść bramki logicznej.

Powyżej rozmawialiśmy głównie o przetwarzaniu informacji. Ale komputer musi nie tylko przetwarzać dane, ale także je przechowywać. Wzajemne oddziaływanie między przechowywaniem i przetwarzaniem informacji chyba najlepiej opisuje urządzenie zwane „maszyną Turinga” (od Alana M. Turinga, który jako pierwszy zaproponował taką maszynę w 1936 r.). Maszyna Turinga może wykonać dowolne obliczenia wykonywane przez nowoczesny komputer. S. Benne (jeden z autorów tego artykułu) udowodnił możliwość zbudowania maszyny Turinga, tj. taki, który nie traci informacji, a zatem w trakcie pracy może wydać dowolną z góry określoną niewielką ilość energii.

Maszyna Turinga jest w stanie wykonać dowolne obliczenia, które może wykonać komputer. Nieskończenie długa taśma jest podzielona na dyskretne segmenty, z których każdy zawiera 0 lub 1. „Głowica do odczytu i zapisu”, która może znajdować się w jednym z kilku stany wewnętrzne(tu są tylko dwa stany: A i B), porusza się po taśmie. Każdy cykl rozpoczyna się od odczytu przez głowicę jednego bitu z segmentu taśmy. Następnie, zgodnie z ustalonym zestawem reguł przejścia, zapisuje trochę danych do segmentu taśmy, zmienia jego stan wewnętrzny i przesuwa się o jedną pozycję w lewo lub w prawo. Ponieważ ta maszyna Turing ma tylko dwa stany wewnętrzne, jego możliwości ograniczają się do trywialnych obliczeń. Bardziej złożone maszyny z dużą liczbą stanów są w stanie symulować zachowanie dowolnego komputera, także tych znacznie bardziej złożonych niż one same. Jest to możliwe, ponieważ przechowują one pełną reprezentację stanu logicznego większej maszyny na nieskończonej taśmie i dzielą każdy cykl obliczeniowy na dużą liczbę proste kroki. Pokazana tutaj maszyna jest logicznie odwracalna: zawsze możemy określić poprzednie stany maszyny. Maszyny Turinga z różnymi regułami przejścia mogą nie być logicznie odwracalne.

Maszyna Turinga składa się z kilku elementów. Jednym z nich jest taśma podzielona na osobne sekcje lub segmenty, z których każdy zawiera 0 lub 1, czyli dane wejściowe. Głowica „odczyt i zapis” porusza się po taśmie. Głowica może pełnić kilka funkcji - odczytać jeden bit danych z taśmy, zapisać jeden bit na taśmie i przesunąć jeden segment w lewo lub w prawo. Aby kolejny cykl zachował informację o tym, co zostało zrobione na poprzednim, mechanizm głowicy posiada szereg tak zwanych „stanów”. Każdy stan reprezentuje swoją własną, nieco inną konfigurację wewnętrznych części głowy.

W każdym cyklu głowica odczytuje trochę z odcinka taśmy, naprzeciwko którego jest w ten moment usytuowany. Następnie zapisuje nową wartość bitową na taśmie, zmienia jej stan wewnętrzny i przesuwa o jeden segment w lewo lub w prawo. Wartość bitu, który zapisuje, stan, do którego przechodzi, oraz kierunek, w którym się porusza, są określone przez ustalony zestaw reguł przejścia. Każda reguła opisuje określone działania. To, którą regułę aktualnie stosuje maszyna, zależy od stanu głowicy i wartości właśnie odczytanego z taśmy bitu. Przykładowo regułą może być: „Jeżeli głowica jest w stanie A i znajduje się naprzeciw segmentu, w którym jest zapisane 0, to należy zmienić wartość tego bitu na 1, przejść do stanu B i przenieść jeden segment do prawo." Zgodnie z inną zasadą maszyna nie może zmieniać swojego stanu ani zapisywać nowego bitu na taśmie, w przeciwnym razie musi się zatrzymać. Nie wszystkie maszyny Turinga są odwracalne, ale możliwe jest zbudowanie odwracalnej maszyny Turinga, która może wykonywać dowolne obliczenia.

Modele oparte na odwracalnej maszynie Turinga mają przewagę nad maszynami takimi jak komputer bilardowy, który nie ma tarcia. W komputerze bilardowym przypadkowy ruch termiczny cząsteczek prowadzi do nieuniknionych błędów. Odwracalne maszyny Turinga w rzeczywistości wykorzystują losowy ruch termiczny: są zaprojektowane w taki sposób, że to ruch termiczny, wspomagany słabą siłą napędową, przenosi maszynę z jednego stanu do drugiego. Rozwój procesu obliczeniowego przypomina ruch jonu (naładowanej cząstki) w roztworze w słabym polu elektrycznym. Jeśli obserwujesz zachowanie jonu przez krótki czas, wydaje się ono przypadkowe: prawdopodobieństwo ruchu w jednym kierunku jest prawie takie samo jak w drugim. Jednak siła napędowa spowodowana działaniem pola elektrycznego nadaje ruchowi preferowany kierunek. Prawdopodobieństwo, że jon poruszy się w tym kierunku, jest nieco większe. Na pierwszy rzut oka może wydawać się nieprawdopodobne, że celowa sekwencja operacji nieodłącznie związana z procesem liczenia może być realizowana przez aparat, którego kierunek ruchu w dowolnym momencie można uznać za niemal przypadkowy. Jednak tego typu działania są bardzo powszechne. W szczególności można to zaobserwować w mikroskopijnym świecie reakcji chemicznych. Metoda prób i błędów Ruchy Browna lub losowe ruchy termiczne są wystarczająco wydajne, aby reagujące molekuły weszły w kontakt, odpowiednio ułożyły się względem siebie, zgodnie z wymaganiami tej reakcji, i utworzyły nowe molekuły, które są produktami reakcji. W zasadzie wszystkie reakcje chemiczne są odwracalne: ten sam ruch Browna, który powoduje, że reakcja przebiega w kierunku do przodu, czasami powoduje, że produkty reakcji przechodzą przez przejście odwrotne. W stanie równowagi odwrotny kierunek reakcji jest tak samo prawdopodobny jak kierunek bezpośredni. Aby reakcja poszła naprzód, musisz stale dodawać cząsteczki, które wchodzą w reakcję i usuwać cząsteczki, które są produktami reakcji. Innymi słowy, musimy zastosować niewielką siłę napędową. Kiedy ta siła jest bardzo mała, reakcja będzie przebiegać zarówno do przodu, jak i do tyłu, ale średnio będzie iść do przodu. Aby zapewnić siłę napędową, musimy wydatkować energię, jednak tak jak w modelu rurek i kulek z zaworem Fredkina, ilość energii może być dowolnie mała. Jeśli jesteśmy zadowoleni z bardzo powolnego wykonywania operacji, to nie ma minimalnej wymaganej ilości energii, którą trzeba na te operacje wydać. Wyjaśnienie jest takie, że całkowita ilość rozproszonej energii zależy od liczby kroków w kierunku do przodu podzielonej przez liczbę kroków w kierunku przeciwnym. (W rzeczywistości jest on proporcjonalny do logarytmu tego stosunku; gdy sam stosunek rośnie lub maleje, jego logarytm zmienia się w tym samym kierunku.) Im wolniejsza reakcja przebiega do przodu, tym stosunek będzie mniejszy. (Analogia z szybkimi i wolnymi pływakami jest tutaj ponownie istotna: jeśli reakcja przebiega wolniej, całkowita ilość zużytej energii będzie mniejsza, pomimo faktu, że liczba pośrednich rozpadów i połączeń pozostaje taka sama.)

Polimeraza RNA to enzym, który działa jak odwracalna maszyna kopiująca taśmę. Jest katalizatorem syntezy RNA, będącego kopią DNA. Poruszając się wzdłuż łańcucha DNA, enzym wybiera z otaczającego roztworu cząsteczkę trifosforanu nukleozydu (każdy trifosforan nukleozydu składa się z pewnej zasady RNA, cząsteczki cukru i trzech grup fosforanowych), której zasada jest komplementarna do zasady DNA, która jest obecnie być kopiowane. Dołącza nową bazę do końca budowanego łańcucha RNA i uwalnia jon pirofosforanowy. Reakcja jest odwracalna: czasami enzym przyłącza pirofosforan do ostatniego ogniwa RNA (powstały trifosforan nukleozydu powraca do roztworu) i przesuwa się o jedną pozycję w tył w łańcuchu DNA. Gdy reakcja zbliża się do równowagi chemicznej, enzym cofa się o prawie tyle samo, co do przodu, a całkowita energia potrzebna do skopiowania jednego segmentu DNA jest bardzo mała. Rozpraszanie energii jest tym mniejsze, im wolniej przebiega reakcja. Dlatego nie ma minimalnej energii wymaganej do skopiowania segmentu DNA.

ZOBACZMY, jak działa maszyna Browna Turinga na przykładzie maszyny Browna do kopiowania taśmy. Taka maszyna już istnieje w naturze. To polimeraza RNA – enzym biorący udział w syntezie RNA, będącego kopią DNA tworzącego geny. Jednoniciowy DNA jest bardzo podobny do taśmy maszyny Turinga. W każdym z jego elementów, tj. w każdej pozycji łańcucha znajduje się jeden z czterech nukleotydów lub zasad: adenina, guanina, cytozyna lub tymina (w skrócie A, G, C, T). Struktura RNA jest bardzo podobna do DNA. Jest to również długołańcuchowa cząsteczka składająca się z czterech rodzajów zasad – adeniny, guaniny, cytozyny i uracylu (odpowiednio A, G, C i U). Zasady RNA są zdolne do wiązania się z ich komplementarnymi zasadami DNA.

Polimeraza RNA katalizuje tworzenie komplementarnej kopii, RNA, na DNA. Zwykle podwójna nić DNA skręcona w helisę jest otoczona roztworem zawierającym dużą liczbę cząsteczek trifosforanu rybonukleozydu, z których każda składa się z rybonukleotydu (zasady RNA), cukru i ogona trzech grup fosforanowych połączonych w seria. Polimeraza RNA wybiera z roztworu jedną z zasad RNA, która jest komplementarna do zasady, która ma być aktualnie kopiowana z nici DNA i przyłącza ją do końca rosnącej nici RNA, uwalniając do otaczającego roztworu dwa fosforany w postaci jon pirofosforanowy. Enzym przesuwa się następnie do przodu o jedną pozycję wzdłuż nici DNA, przygotowując się do dodania kolejnej zasady do nici RNA. W rezultacie powstaje łańcuch RNA, który jest komplementarny do matrycy - łańcuch DNA. Bez polimerazy RNA reakcje te byłyby bardzo powolne i nie byłoby gwarancji, że powstały RNA jest dokładnie komplementarny do DNA.

Opisane reakcje są odwracalne: czasami enzym przyłącza wolny jon pirofosforanowy do ostatniej zasady rosnącego łańcucha RNA i cząsteczka trifosforanu rybonukleozydu jest uwalniana do środowiska, a sam enzym powraca o jedną pozycję z powrotem w łańcuchu DNA. W stanie równowagi kroki do przodu i do tyłu zachodzą z tą samą częstotliwością, ale w żywej komórce inne procesy metaboliczne przesuwają równowagę w kierunku reakcji bezpośredniej na skutek usunięcia pirofosforanu i powstania nadmiaru trifosforanów rybonukleozydów. W warunkach laboratoryjnych możliwe jest kontrolowanie szybkości reakcji polimerazy RNA poprzez zmianę stężeń początkowych odczynników (udowodnili to J. Levin i M. Chamberlain z University of California w Berkeley). Gdy stężenia zbliżają się do równowagi, enzym działa wolniej i mniej energii jest rozpraszane podczas kopiowania danego fragmentu DNA, ponieważ stosunek liczby kroków do przodu i do tyłu zmniejsza się.

Polimeraza RNA po prostu kopiuje informacje bez ich przetwarzania, nietrudno sobie wyobrazić, jak mogłaby działać hipotetyczna maszyna chemiczna Turinga. Taśma to jedna długa cząsteczka szkieletu, do której w regularnych odstępach są przyłączone dwa rodzaje zasad, interpretowane jako bity 0 i 1. Kolejna mała cząsteczka jest przyłączona do jednej z pozycji w łańcuchu zer i jedynek. Pozycja, do której przyczepiona jest ta cząsteczka, to nic innego jak odcinek taśmy, na którym znajduje się głowica maszyny Turinga. Istnieje kilka różnych rodzajów „cząsteczek głowy”. Każdy typ reprezentuje jeden z możliwych stanów wewnętrznych maszyny.

Reguły przejścia maszyny są reprezentowane przez enzymy. Każdy enzym jest katalizatorem określonej reakcji. Aby lepiej zrozumieć, jak działają te enzymy, rozważ przykład.

Załóżmy, że cząsteczka głowy jest typu ALE (co oznacza, że ​​maszyna jest w stanie) ALE ) i dołączony do zerowej podstawy. Załóżmy również, że obowiązuje następująca zasada przejścia: „Gdy głowa jest w stanie” ALE i odczytuje 0, zamień 0 na 1, przejdź do stanu W i przejdź w prawo. Cząsteczka enzymu reprezentująca tę regułę ma miejsce odpowiednie do przyłączenia cząsteczki czołowej typu ALE połączony z podstawą 1. Posiada również miejsce odpowiednie do zamocowania podstawy 0 oraz miejsce odpowiednie dla typu głowy W (widzieć zdjęcie).

Aby dokonać wymaganego przejścia, cząsteczka enzymu najpierw zbliża się do pozycji na taśmie bezpośrednio po prawej stronie podstawy, do której aktualnie przymocowana jest głowica typu. ALE . Następnie oddziela od taśmy zarówno cząsteczkę głowy, jak i podstawę 0, do której przymocowana jest głowa, i na ich miejscu umieszcza podstawę 1. Następnie przyczepia głowę, jak W do podstawy po prawej stronie pojedynczej podstawy właśnie przymocowanej do taśmy. To kończy przejście. Na oryginalnym segmencie taśmy 0 zostało zastąpione przez 1, cząsteczka głowicy jest teraz typu W i przymocowany do podstawy, umieszczony w jednym miejscu na prawo od oryginału.

Hipotetyczna maszyna enzymatyczna Turinga może wykonać obliczenia z dowolnie małą ilością energii. Cząsteczki reprezentujące bity 0 i 1 są przyłączone do cząsteczki szkieletowej. Cząsteczka reprezentująca głowę maszyny Turinga jest przyłączona do jednej z pozycji w łańcuchu (7). różne rodzaje cząsteczki głowy reprezentują różne stany maszyny. Reguły przejścia są reprezentowane przez enzymy. W każdym cyklu enzym łączy się z głową i cząsteczką bitu powiązaną z głową (2), oddziela je od łańcucha i umieszcza w ich miejscu pożądaną cząsteczkę bitu (3). W ten sposób obraca się, dołączając odpowiednią cząsteczkę głowicy do następnego bitu po prawej lub lewej stronie właśnie zmienionego. Pętla jest teraz kompletna (4): zmieniła się wartość bitu, głowica zmieniła stan i przesunęła się. Reakcje takie jak synteza RNA mogą rozproszyć dowolnie małą ilość energii.

Maszyna Browna Turinga to mechanizm zegarowy składający się ze sztywnych gładkich części, które nie przylegają do siebie ciasno i są podtrzymywane w pożądanej pozycji nie przez tarcie, ale przez system rowków i zębów. Pomimo swobodnego łączenia części, mogą wykonywać tylko tak duży ruch, który odpowiada krokowi obliczeń w kierunku do przodu lub do tyłu, czyli mogą podążać tylko jedną „ścieżką obliczeniową”. Mechanizm jest lekko popychany przez bardzo słabą siłę zewnętrzną, dzięki czemu prawdopodobieństwo ruchu do przodu jest prawie takie samo, jak ruchu do tyłu. Jednak średnio maszyna posunie się do przodu i obliczenia zostaną ostatecznie zakończone. Można sprawić, by maszyna zużywała dowolnie małą ilość energii przez odpowiednie zmniejszenie siły napędowej.

Segmenty taśmy są reprezentowane przez ryflowane dyski, a bity reprezentowane są przez bloki w kształcie litery E, które są przymocowane do dysku albo w górnym (7) lub dolnym (0) położeniu. Głowica składa się ze sztywnych części połączonych w złożony mechanizm (z których większość nie jest tutaj pokazana). Na nim zawieszony jest element czytający, manipulator oraz pręt w kształcie śrubokręta. Maszyna sterowana jest za pomocą wałka z nałożonymi na jego powierzchni rowkami, podobnie jak wałek do odtwarzania płyt na gramofonie (górny lewy, głęboki prawy). Różne rowki odpowiadają różnym stanom głowy.

Na początku cyklu głowica znajduje się nad jednym z dysków, a „igła” znajduje się w odcinku „odczyt” rowka rolki sterującej odpowiadającym aktualnemu stanowi głowicy maszyny. Podczas fazy „odczytu” pętli (7), czytnik określa, czy blok reprezentujący bit jest obracany w górę czy w dół, wykonując procedurę „odczytu przeszkody” (w środku po prawej). Czytnik przechodzi wzdłuż bloku wzdłuż górnej lub dolnej ścieżki. Na jednej z tych ścieżek musi napotkać przeszkodę w postaci półki na końcu bloku, więc tylko jedna ścieżka pozostaje możliwa. W punkcie rolki sterującej odpowiadającym tej „decyzji” rowki rozgałęziają się i igła jest wprowadzana do rowka odpowiadającego wartości bitu (2). Następnie rolka sterująca obraca się, aż igła dotrze do segmentu „zapisu” (3). Tutaj każdy rowek zawiera swój własny zestaw „instrukcji”, które są przekazywane do maszyny za pomocą skomplikowanego połączenia między igłą a resztą mechanizmu.

Jeżeli instrukcja wymaga zmiany wartości bitu, manipulator jest uruchamiany i zaczepia się o ucho klocka, następnie śrubokręt obraca tarczę do momentu zwolnienia klocka, manipulator obraca klocek w górę lub w dół, a śrubokręt ponownie się obraca dysk tak, aby blok był na swoim miejscu. Po przejściu segmentu „zapisu” rolki sterującej igła wchodzi w segment „przesuwu” (4). Każdy rowek w tym segmencie zawiera instrukcję przesunięcia głowy o jedną pozycję w lewo lub w prawo. Następnie igła wchodzi w segment „zmiany stanu” (5), w którym rowki łączą się tak, że igła wchodzi w rowek reprezentujący następny stan głowy. Pętla jest teraz kompletna (6). Dyski sąsiadujące z aktualnie czytanym są przytrzymywane przez głowicę. Dyski znajdujące się dalej są blokowane specjalnym „zamkiem”. Blokada każdego dysku jest powiązana ze specjalnym bitem, zwanym bitem Q, sąsiedniego dysku. Układ tego połączenia jest taki, że aktualnie odczytywany dysk jest zwalniany i może być przesuwany, podczas gdy dyski znajdujące się dalej od niego, zarówno w lewo, jak i w prawo, są utrzymywane w stanie stacjonarnym.

Aby maszyna Browna Turinga działała, taśma musi być zanurzona w roztworze zawierającym wiele cząsteczek enzymu, a także wystarczającą ilość „zer”, „jedynek” i „głów” takich jak ALE oraz W . Aby reakcja przebiegała w przód, potrzebna jest inna reakcja, która oczyści cząsteczki enzymu z głowic i zasad oddzielonych od taśmy. Stężenia substancji oczyszczających cząsteczki enzymów są siłą napędową, która sprawia, że ​​maszyna Turinga działa w kierunku do przodu. Znowu możemy zużyć dowolnie małą ilość energii, jeśli maszyna wykonuje operacje wystarczająco wolno.

Maszyna Turinga oparta na enzymach nie będzie wolna od błędów. Od czasu do czasu mogą wystąpić reakcje, które zachodzą bez katalizy przez enzymy. Na przykład zasada 0 może spontanicznie oddzielić się od cząsteczki szkieletowej, a zasada 1 może zająć jej miejsce. W rzeczywistości takie błędy występują podczas syntezy RNA.

W zasadzie można by się pozbyć tych błędów budując maszynę Browna Turinga na bazie sztywnego, absolutnie płynnego mechanizmu zegarowego. Taka maszyna Turinga jest mniej idealizowana niż komputer bilardowy, ale bardziej idealizowana niż maszyna enzymatyczna. Z jednej strony jego części nie wymagają absolutnie precyzyjnej obróbki, jak to jest konieczne w przypadku kul bilardowych, części mechanizmu zegarowego mogą mieć pewne tolerancje i maszyna może pracować nawet w obecności znacznych szumów termicznych. A jednak maszyna musi być absolutnie sztywna i wolna od tarcia statycznego, a żadne makroskopowe ciało nie posiada takich właściwości.

Ponieważ części maszyny nie pasują do siebie ciasno, są utrzymywane w pozycji nie przez tarcie, ale przez system rowków - rowków i zębów (patrz rysunek). Chociaż każda część maszyny ma niewielką ilość luzu, jak kawałki drewnianej układanki, ogólnie mechanizm może podążać tylko jedną „ścieżką obliczeniową”. Innymi słowy, części są ze sobą sprzężone w taki sposób, że w danym momencie maszyna może wykonywać tylko dwa rodzaje ruchu na dużą skalę: ruch odpowiadający krokowi obliczeniowemu w kierunku do przodu oraz ruch w kierunku do przodu. przeciwny kierunek.

Komputer wykonuje przejścia między tymi dwoma rodzajami ruchu tylko w wyniku losowego ruchu termicznego jego części, pod wpływem słabej siły zewnętrznej. Prawdopodobieństwo poruszania się w przeciwnym kierunku, eliminując wyniki ostatniej operacji, jest prawie takie samo jak prawdopodobieństwo poruszania się w kierunku do przodu. Niewielka siła przyłożona z zewnątrz popycha obliczenia do przodu. I znowu siła ta może być dowolnie mała; a zatem nie ma minimalnej energii wymaganej do utrzymania maszyny Turinga działającej w oparciu o mechanizm zegarowy.

Tak więc, ze względu na termodynamikę klasyczną, do obliczeń nie ma niezbędnej energii minimalnej. Czy analiza termodynamiczna nie wchodzi zatem w konflikt z mechaniką kwantową? W końcu, zgodnie z zasadą mechaniki kwantowej, powinna istnieć odwrotna zależność między stopniem niepewności co do czasu trwania procesu a stopniem niepewności co do ilości energii zużywanej w tym procesie. Niektórzy badacze uważają zatem, że w każdym procesie przełączania, który odbywa się w bardzo krótkim czasie, należy zużyć pewną minimalną ilość energii.

W rzeczywistości zasada nieoznaczoności nie wymaga żadnego skończonego minimum energii dla zdarzenia szybkiego przełączania. Zasada nieoznaczoności miałaby zastosowanie tylko wtedy, gdybyśmy próbowali zmierzyć dokładny moment w czasie, w którym nastąpiło zdarzenie. Nawet zgodnie z prawami mechaniki kwantowej niezwykle szybkie zdarzenia mogą zachodzić bez utraty energii. Nasze przekonanie, że mechanika kwantowa pozwala na obliczenia z dowolnie małą ilością energii, potwierdzają modele odwracalnych komputerów mechaniki kwantowej opracowane przez Benioffa i in. Modele te nie rozpraszają energii i są zgodne z prawami mechaniki kwantowej.

Zatem zasada nieoznaczoności nie wydaje się nakładać fundamentalnych ograniczeń na proces obliczeniowy. Klasyczna termodynamika też ich nie narzuca. Czy to oznacza, że ​​komputery nie mają żadnych fizycznych ograniczeń? Nie, to jest dalekie od prawdy. Prawdziwe ograniczenia są związane z pytaniami, na które odpowiedź jest znacznie trudniejsza niż te, które postawiliśmy i rozważyliśmy w tym artykule. Na przykład zrób elementarne operacje logiczne jakiś minimalny czas zakończenia? Jakie są minimalne wymiary urządzenia zdolnego do wykonywania takich operacji? Ponieważ skale wielkości i czasu są powiązane ze skończoną prędkością światła, wydaje się, że odpowiedzi na te pytania są w jakiś sposób ze sobą powiązane. Jednak w każdym razie nie będziemy w stanie znaleźć tych odpowiedzi, dopóki nie zostanie rozwiązane pytanie, czy istnieje jakaś elementarna dyskrecja w uniwersalnej skali długości i czasu.

Na drugim krańcu problemu jest pytanie o to, jak dużą możemy zrobić pamięć komputera. Ile cząstek we wszechświecie możemy zebrać i połączyć w tych celach? Faktem jest, że maksymalny możliwy rozmiar pamięci komputera ogranicza dokładność, z jaką można wykonywać obliczenia. Na przykład liczba miejsc po przecinku w obliczonej wartości p będzie ograniczona. Kolejne, prawdopodobnie związane z tym ostatnim, pytanie dotyczy nieuchronnych procesów degradacji zachodzących w prawdziwych komputerach wraz z ich starzeniem się. Czy możliwe jest zredukowanie tempa niszczenia i kumulacji błędów do dowolnie małych wartości, czy też tempo to ogranicza maksymalny czas trwania obliczeń? Innymi słowy, czy są jakieś zadania obliczeniowe, których nie można ukończyć, zanim materialna część komputera stanie się bezużyteczna?

W rzeczywistości takie pytania dotyczą ograniczeń fizycznej realizacji. operacje matematyczne. Prawa fizyczne, na których ostatecznie muszą opierać się odpowiedzi, są wyrażane za pomocą takich matematycznych operacji. Zadajemy więc sobie pytanie, w jakiej postaci prawa fizyczne mogą obowiązywać w warunkach ograniczeń nałożonych przez własności wszechświata, które z kolei są przez te prawa opisane.