Jaki jest rozmiar słowa pamięci RAM w maszynie 32/64-bitowej (procesor)

4

Jaki jest rozmiar słowa pamięci RAM w maszynie 32/64-bitowej (procesorze)?

To pytanie doprowadza mnie do szału. Jaki jest dokładnie rozmiar słowa, które zapisuje dane w pamięci RAM w 64-bitowych maszynach, takich jak mikroprocesory Intel Core i5?

Ponadto, czy rozmiar słowa, które przechowuje dane zmienia się z 32-bitowego na 64-bitowy?

MTA
źródło

Odpowiedzi:

3

Nie jestem zaznajomiony z krwawymi szczegółami, w jaki sposób pamięć RAM współpracuje z procesorami Intela, biorąc pod uwagę nowsze rzeczy, takie jak spójność pamięci podręcznej i NUMA, ale z punktu widzenia pamięci RAM uważam, że wciąż jest to 8-bitowe bajty, chociaż pamięć RAM jest teraz zwykle ułożona w kanały, do których można uzyskać dostęp do wielu gniazd jednocześnie. Zatem pobranie 4 bajtów (przy założeniu 4 miejsc) na raz zajmie tyle samo czasu, co pobranie 1 bajtu w takim systemie. Mimo to pamięć RAM przyjmuje adres z kontrolera pamięci jako dane wejściowe i zwraca mu 8 bitów jako dane wyjściowe AFAIK.

Rozmiar „Słowo” może oznaczać różne rzeczy. Pamiętam, jak po raz pierwszy spotkałem się z tym terminem podczas nauki języka asemblera 68000 - w tekście, który czytałem, „bajt” oznaczał 8 bitów, a „słowo” oznaczało 16 bitów, a „wyrównany do słowa” oznaczał adres mieszczący się na 16-bitowej granicy. Wiem, że termin „słowo” był używany wcześniej do wprowadzenia 68000 (1980?) I mógł być synonimem „bajtu” wcześniej.

„Natywne” dane, z którymi procesor „woli” sobie radzić, odpowiadają „bitom” jego architektury i trybowi, w którym działa. 32-bitowy procesor (lub 64-bitowy procesor nie w „długim trybie”) ma 32 -bit rejestry, kilka instrukcji ładowania wartości z pamięci RAM (4 bajty) do tych rejestrów i innych plików. Ale w przypadku Intela 32-bitowy rejestr, taki jak EAX, może być również adresowany jako dwa rejestry AH (górne 16 bitów EAX) i AL (dolne 16 bitów) i istnieją niezliczone instrukcje MOV, które ładują pliki z pamięci RAM do EAX, AH, AL, a stamtąd z powrotem do pamięci RAM. Jestem zbyt leniwy, aby w tej chwili spojrzeć na przewodnik programisty Intela, ale wydaje mi się, że istnieją instrukcje ładowania pojedynczych bajtów do górnych lub dolnych 8 bitów AH lub AL. (Wiem, że MIPS ma takie instrukcje). Ale myślę, że tam

Tak więc w procesorach Intel i większości innych procesorów ogólnego przeznaczenia produkowanych od 16-bitowej ery jesteś naprawdę elastyczny w sposobie adresowania pamięci. Jednak instrukcje są prawdopodobnie bardziej zoptymalizowane do pracy w „bitowości” architektury.

LawrenceC
źródło
3

Tradycyjnie „słowo” w architekturze komputerowej było zasadniczo najmniejszą adresowalną jednostką pamięci. Tradycyjnie było to takie samo, jak rozmiar rejestru ogólnego przeznaczenia maszyny.

Jednak od czasu, gdy adresowanie bajtów stało się popularne, koncepcja uległa osłabieniu. (Prawdopodobnie możemy to przypisać IBM System / 360 i PDP-11 po stronie minikomputera.)

Jeśli chodzi o adresowanie pamięci zdefiniowane w architekturze CPU - to znaczy, jak programiści postrzegają maszynę - koncepcja „słowa” nie istnieje na x86 / x64, chyba że uważasz ją za synonim bajtów. Każdy bajt pamięci ma swój własny adres, a adres bajtu jest także adresem dowolnego większego regionu, który zaczyna się na tym bajcie (rozciągając się na adresy o wyższych numerach). Możemy oczywiście przenieść jeden, dwa, cztery lub (na x64) osiem bajtów jednocześnie między rejestrem a pamięcią RAM - lub znacznie więcej, z pamięci do pamięci, zgodnie z instrukcjami REP - ale adres, który podajemy, jest nadal bajt. Możemy wykonywać arytmetykę na słowach wszystkich tych rozmiarów. (I inni.)

Jeśli myślisz o rejestrach, „rozmiar słowa” maszyny zwykle przyjmuje się, że jest taki sam jak w rejestrach ogólnego przeznaczenia. To byłoby 32 bity na x86, 64 bity na x64. W większości architektur rozmiar GPR jest wielkością największej liczby całkowitej, na której procesor może wykonać prostą arytmetykę za pomocą jednej instrukcji.

Teraz wprowadzimy więcej zamieszania ...!

Jeśli chodzi o platformę (płytę główną, moduły RAM i układy itp.), Na wszystkich komputerach z procesorami i mikroukładami „towarowymi” Intel i AMD RAM jest adresowany w 64-bitowych porcjach - przypuszczam, że można je nazwać słowami. Widać to bardzo wyraźnie na wcześniejszych procesorach, które miały osobne piny dla adresu i danych: Najmniej znaczący pin adresu nazywa się A3, a nie A0! Bity adresu fizycznego A0, A1 i A2 nigdy nie opuszczają procesora. Ale programiści nigdy nie widzą takich adresów.

I wreszcie, istnieje koncepcja „linii pamięci podręcznej”. Linia pamięci podręcznej jest fizycznie ciągłą częścią pamięci RAM, która zajmuje jeden wpis w pamięci podręcznej L1 / L2 / L3. Linie pamięci podręcznej w świecie Intel / AMD już od jakiegoś czasu mają szerokość 64 bajtów. Kiedy więc uzyskujesz dostęp do adresu pamięci, który nie znajduje się obecnie w twojej pamięci podręcznej, procesor pobiera osiem z tych 8-bajtowych porcji pamięci RAM. Innymi słowy, adresy przechowywane w pamięci podręcznej pomijają sześć bitów niskiego rzędu. Więc może słowo w pamięci podręcznejma naprawdę 64 bajty lub 512 bitów! (Ale dostęp do pamięci, który omija pamięć podręczną, może nadal odczytywać lub zapisywać tylko 8 bajtów jednocześnie; w zakresach adresów fizycznych dekodowanych przez urządzenia we / wy odwzorowane w pamięci poszczególne bajty mogą być adresowalne; zależy to od magistrali. oczywiście nie możemy wykonywać arytmetyki na 512-bitowych liczbach całkowitych.)

W środowiskach programistycznych pochodzących z języka C firmy Microsoft „słowo” ma 16 bitów - tak było od dawna, zanim Microsoft, a nazwa i definicja typu danych zostały przeniesione do środowisk 32- i 64-bitowych w celu zapewnienia zgodności. „Podwójne słowo” (lub DWORD lub LONG, dla „longword”, którego termin był powszechny w VAX) ma 32 bity. 64-bitowe liczby całkowite są w architekturze nazywane „quadwords”, ale zwykle mają bardziej szczegółowe nazwy w C, takie jak UINT64 (liczba całkowita 64-bitowa, bez znaku).

To zależy od tego, gdzie jesteś w systemie i od tego, na co patrzysz. Zazwyczaj przez cały czas nie myślimy o „rozmiarze słowa”, a raczej o „rozmiarze GPR”.

Jamie Hanrahan
źródło
1
„Środowiska programowania Microsoft C” mają to 16-bitowe słowo z oficjalnych nazw typów danych Intela, więc chociaż jest to prawdą, nie dotyczy wyłącznie łańcuchów narzędzi Microsoft ani języka C. I tak, „quadword” jest używany oficjalnie, rozpoczyna się sekcja 4-1 tomu 1 Intel SDM „Podstawowe typy danych to bajty, słowa, podwójne słowa, poczwórne słowa i podwójne poczwórne słowa”
Ben Voigt
Ach Dzięki! („quadword” był również oficjalny w DEC i „longword” lub po prostu „long” dla 4 bajtów)
Jamie Hanrahan