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?
terminology
memory
cpu
register
Jeroen
źródło
źródło
Odpowiedzi:
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:
kompilator wyświetli kod maszynowy, który (po zdemontowaniu) wygląda mniej więcej tak:
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).
źródło
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
źródło
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.
źródło
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.
źródło