Co to są rejestry procesora?

27

To pytanie niepokoiło mnie od jakiegoś czasu i dzisiaj pomyślałem, że zrobię to Google. Przeczytałem o tym trochę i wyglądało to bardzo podobnie do tego, co zawsze znałem jako pamięć podręczna procesora .

Czy istnieje różnica między nimi, czy mam rację, gdy myślę, że są takie same? Czy rejestr rzeczywiście musi znajdować się w procesorze, aby działał?

Według Wikipedii rejestr to miejsce w CPU, do którego można szybko uzyskać dostęp i zmodyfikować pamięć przed odesłaniem do pamięci RAM. Czy zrozumiałem to źle, czy pamięć podręczna i rejestracja są faktycznie takie same?

Jeroen
źródło
13
Rejestr procesora to organizacja, która śledzi procesor za Ciebie. NSA jest przykładem rejestru procesora.
Jimmy Hoffa
3
Pamięć podręczna poziomu 1 procesora jest często wykonana z tego samego rodzaju silikonu co rejestry. Nie jest tak szybki, ponieważ wymaga dodatkowych wyszukiwań, aby powiązać adresy buforowane z lokalizacjami pamięci podręcznej. Ale rejestry i pamięć podręczna to zdecydowanie inne miejsca na chipach.
Zan Lynx
3
@JimmyHoffa: Obawiam się, że twój komentarz będzie bardzo mylący dla OP, ze szkodą dla wiedzy informatycznej.
rwong
3
@ rwong Nah Mam to, myślałem, że to całkiem zabawne. : P
Jeroen
1
Kolejną różnicą jest rozmiar: plik rejestru rzadko jest większy niż kilkaset słów, podczas gdy pamięć podręczna L1 może z łatwością mieć rozmiar nawet 64k.
SK-logic

Odpowiedzi:

61

Nie są do końca takie same. Rejestry to miejsca, w których znajdują się wartości, nad którymi procesor faktycznie pracuje. Konstrukcja procesora jest taka, że ​​jest w stanie modyfikować lub w inny sposób oddziaływać na wartość, gdy jest ona w rejestrze. Rejestry mogą więc działać logicznie, podczas gdy pamięć (w tym pamięć podręczna) może przechowywać tylko wartości, z których procesor odczytuje i zapisuje dane.

Wyobraź sobie stolarza w pracy. Ma w rękach kilka przedmiotów (rejestrów), a następnie bardzo blisko na swoim stole warsztatowym (pamięci podręcznej) rzeczy, nad którymi często pracuje, ale nie wykorzystuje w tym momencie, a następnie w warsztacie (pamięć główna) rzeczy, które dotyczą projekt, który nie jest od razu wystarczająco ważny, aby znaleźć się na stole warsztatowym.

EDYCJA: Oto proste wyjaśnienie działania logiki rejestru.

Wyobraźmy sobie, że mamy cztery rejestry o nazwie R1..R4. Jeśli skompilujesz instrukcję, która wygląda następująco:

x = y + z * 3;

kompilator wyświetli kod maszynowy, który (po zdemontowaniu) wygląda mniej więcej tak:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Ponieważ większość współczesnych procesorów ma rejestry o szerokości 32 lub 64 bitów, mogą wykonywać obliczenia matematyczne na dowolnej wartości do wielkości, którą mogą pomieścić. Nie potrzebują specjalnych rejestrów dla mniejszych wartości; po prostu używają specjalnych instrukcji ASM, które nakazują korzystanie tylko z części rejestru. I podobnie jak stolarz posiadający dwie ręce, rejestry mogą jednocześnie przechowywać niewielką ilość danych, ale można je ponownie wykorzystać, przekazując i usuwając z nich aktywne dane, co oznacza, że ​​„wiele rejestrów” nie w końcu są potrzebne. (Dużo dostępnych zasobów pozwala oczywiście kompilatorom na generowanie szybszego kodu, ale nie jest to absolutnie konieczne).

Mason Wheeler
źródło
26
I jeszcze więcej rzeczy w magazynie w całym mieście (dysk) i inne rzeczy, które może mieć w Fedex (sieć) :-)
Dan Pichelman
2
Zależy bardzo mocno od architektury systemu, o której mowa.
Inżynier świata
5
@ Binero w 16-bitowym procesorze x86 masz rejestry o nazwach Axe, Bx i tak dalej. Kiedy przenieśli się do 32-bitowych procesorów, rozszerzyli rejestry do 32-bitowego EAx, EBx, jeśli uzyskasz dostęp do Axa, otrzymasz niskie 16 bitów EAx. W trybie 64-bitowym nazwali oni rejestry RAx, przy czym dolne 32 bity to EAx, a dolne 16 bitów to Ax. sprawdź te diagramy, aby zobaczyć, jak dostać się do innych części bajtów, takich jak AH, aby uzyskać wysoki bajt 16-bitowego rejestru Ax: en.wikipedia.org/wiki/X86#Structure
stonemetal 28.08.13
2
A we współczesnych procesorach ten rodzaj również się psuje, ponieważ rejestry są jedynie tymczasowymi mapowaniami do wewnętrznego banku Really Fast Memory, zmieniając się w zależności od strumienia instrukcji i tego, jak ściśle podąża za przewidywanym strumieniem instrukcji.
Vatine
2
@MasonWheeler Dobry wybór z twojej strony.
Vatine
3

W rzeczywistości A Rejestr w terminologii procesora jest mały Nazwany fragment pamięci Dostępny w mikroprocesorze (CPU), Rejestry mają określone nazwy, rozmiary i funkcje różnią się w zależności od procesora, na przykład, jeśli weźmy mikroprocesor 8085 to 8-bitowy procesor, który ma 8 -bitowe rejestry (A: akumulatory, B, C, D, E, H i L, wszystkie rejestry flag są 8-bitowe). Dwa 16-bitowe rejestry PC i SP mają specjalną funkcję, a funkcje pojawiają się na obrazie podczas programowania montażu. Niewielka kontrola rejestrów jest poza programistą.

Jeśli weźmiesz inny procesor, rejestry będą się różnić, powiedzmy, że 8086 to procesor 16-bitowy i ma AX, BX, CX i DX, wszystkie są 16-bitowe, rejestry PC, SP i Flag.

jak zacytowałeś w pytaniu, mają przyspieszyć wykonywanie programu i działają jako pamięć podręczna procesora, ale teraz zmieniła się architektura procesora i dodały one dużo pamięci podręcznej procesora

ale istnieje niewielka różnica między pamięcią podręczną procesora (CPU) a rejestrami procesora (CPU), rejestry faktycznie potrzebne do niektórych specjalnych czynności, takich jak wskaźnik pamięci, status programu itp. Np .: PC: Licznik programów, który działa jako wskaźnik pamięci w pamięci programu, SP: Wskaźnik stosu, który działa jako wskaźnik pamięci w pamięci stosu. a Akumulator jest buforem i głównym rejestrem, aby uzyskać dostęp do ALU dla operacji arytmetycznych ...

Możesz zobaczyć wyjaśnienia Mason Wheeler dla przykładów

Mohan PAKALAPATI
źródło
1

Myślę, że to pomaga myśleć, że rejestry nie są pamięcią i nie powinny być traktowane jako takie.

Myśl bardziej jak OO - Register to klasa niepochodząca z pamięci, a Memory to klasa niepochodząca z rejestru, ale klasa Register ma metody (kody maszynowe) do konwersji danych do iz pamięci. Z drugiej strony pamięć nie wie nic o rejestrach i nie może wywoływać na nich działań. W rezultacie wszystkie operacje procesora są wykonywane przez rejestry, które często uzyskują dostęp do pamięci.

Często zdarza się, że rejestry tylko do zapisu - rzadko atrybut pamięci. Możliwe jest również, że wartość rejestru może się zmienić bez zapisu do niego - znowu nie zachowanie, którego oczekujesz od pamięci.

mattnz
źródło
W mapowanych we / wy pamięciach obszary „pamięci” tylko do zapisu nie są rzadkie.
SK-logic
@ SK-logic - Prawidłowo - jednak kontekst pytania zadanego wyraźnie PO uważa pamięć za coś, z czego czytasz i piszesz. Nie trzeba go więcej mylić :)
Mattnz
0

Odpowiedź udzielona przez @Mason Wheeler była dokładna, ale myślę, że można postawić pytanie w innej perspektywie. Sądząc po twoim pytaniu, wydaje mi się, że ideą, aby doskonale zrozumieć różnicę między pamięcią podręczną a rejestrem, jest ścieżka danych . Jak słusznie zauważył Mason, logika procesora (tj. Jego ścieżka danych) jest zaprojektowana w taki sposób, że informacja o pamięci nie może być przetwarzana bezpośrednio przez procesor i dlatego istnieją rejestry. W rzeczywistości procesor nie jest nawet w stanie dekodować bieżącej instrukcji uruchomionego programu, jeśli instrukcja ta nie została najpierw załadowana do odpowiedniego rejestru (zwykle o nazwie IR, „Instruction Register”).

Jest to związane ze sposobem okablowania procesora. Nie ma fizycznej ścieżki między pamięcią a jednostką ALU; wszystkie dane dostarczone do ALU muszą być jakoś buforowane w jakimś rejestrze. Może być inaczej, ale zespół obwodów wymagany do bezpośredniego podłączenia pamięci do jednostki ALU byłby zbyt skomplikowany: łatwiej i wydajniej jest pośredniczyć w całej komunikacji między pamięcią a jednostką ALU za pośrednictwem pliku rejestru , jak określono na podstawie wspomnianej ścieżki danych . W rzeczywistości, nawet jeśli dana instrukcja określa pozycję pamięci jako operand (tryb adresowania znany jako adresowanie bezpośrednie ), odpowiednia jednostka danych jest ładowana do rejestru znanego jako MBR (Rejestr bufora pamięci, czasami nazywany MDR, bufor danych pamięci ).

Zauważ, że z punktu widzenia procesora tak naprawdę nie ma znaczenia, czy informacje (dane lub kod) pochodzą z pamięci głównej, czy z pamięci podręcznej, ale ta ostatnia jest znacznie szybsza. Bufory istnieją ze względu na wydajność, rejestry istnieją z powodu konstrukcji procesora (tj. Z powodu ścieżki danych). Sprytni programiści (właściwie sprytne kompilatory) próbują zmaksymalizować wykorzystanie rejestrów, aby zminimalizować dostęp do pamięci (rejestry są szybsze niż pamięć podręczna lub pamięć). Jest to uzasadnione, ponieważ informacje przechowywane w rejestrach są często wykorzystywane wielokrotnie i jest to jedna z zasad filozofii RISC.

Humberto Fioravante Ferro
źródło