Wielkość pamięci w zależności od magistrali

0

Witam wszystkich. Ostatnio dowiedziałem się że znając szerokość magistrali (np. 32 bity, co oznacza że przesyła jednocześnie 32 bity) można ustalić wielkość pamięci z jaką procesor może poprawnie współpracować. Trochę mnie to zaintrygowało. Czy mógłby mi ktoś powiedzieć skąd mogę się dowiedzieć szerokość mojej magistrali i jakim algorytmem można obliczyć wielkość kompatybilnej pamięci? Z góry dziękuje. Myślę że to bardziej pytanie dla Assembler'owiczów :P

0

Jeżeli używasz procesora 32-bitowego to wiesz, że w trybie protected możesz używać 32-bitowych adresów. W trybie real będziesz mógł używać 16-bitowych adresów, lub po aktywacji A20, 20-bitowych (zwiększając przestrzeń adresową). PAE pozwoli ci na użycie 36-bitowych adresów (również zwiększając przestrzeń adresową). 64-bitowy procesor używa adresów 64-bitowych w trybie long.
Ogólnie jeżeli piszesz w asemblerze, to piszesz dla określonej architektury. Jeżeli piszesz kod 16-bitowy to używasz operandów 16-bitowych (i/lub operatorów), jeżeli piszesz kod 32-bitowy to używasz operandów 32-bitowych (i/lub operatorów) itd. Rozszerzenia wprowadzają kilka dodatkowych elementów do zwykłego kodu, ale tego dowiesz się od Google.

0

np. 32 bity pozwolą zaadresować 2^32=4294967296 (2 do potęgi 32) czyli 4 gigabajty
2^64=18446744073709551616

0

venomxxl z powodu chaotycznie podanych informacji to co napisałeś jest właściwie nieprawdą.

Procesor w trybie rzeczywistym może adresować pamięć fizyczną 20 bitową co daje max około 1MB.
Od procesorów 80286 można za pomocą trybu chronionego adresować 24 bitową szynę co daje max około 16MB.
Od procesorów 80386 tryb chroniony 32 bitowy daje możliwość adresowania pamięci przez 32 bitową magistralę co daje około 4GB pamięci.
Jeżeli twój procesor obsługuje rozszerzenie PSE-36 (Page Size Extensions) to możesz w 32 bitowym trybie chronionym adresować do 40 bitów fizycznej pamięci, ale w jednym momencie może być widoczne jedynie 4GB.
Jeżeli twój procesor obsługuje rozszerzenie PAE (Physical Address Extension) to możesz w 32 bitowym trybie chronionym adresować do 52 bitów fizycznej pamięci, ale pamięć wirtualna nadal jest adresowana przez 32 bity.
Jeżeli masz procesor zgodny z architekturą x86-64 to możesz w trybie Long Mode adresować pamięć fizyczną za pomocą 52 bitów. W tym trybie przestrzeń wirtualna została zwiększona do 47 bitów.

Zgodnie z dokumentacją procesorów Intela maksymalną ilość bitów pamięci fizycznej możesz odczytać za pomocą instrukcji CPUID wpisując wcześniej do rejestru EAX wartość 80000008H. Za pomocą CPUID możesz się też dowiedzieć czy masz dostępne rozszerzenia PSE, PAE.

0

Jeżeli masz procesor zgodny z architekturą x86-64 to możesz w trybie Long Mode adresować pamięć fizyczną za pomocą 52 bitów. W tym trybie przestrzeń wirtualna została zwiększona do 47 bitów.
Adresy oczywiście wszystkie są 64-bitowe. Tylko że aktywne są tylko te 52 linie adresowe.

Jeżeli piszesz kod 16-bitowy to używasz operandów 16-bitowych (i/lub operatorów), jeżeli piszesz kod 32-bitowy to używasz operandów 32-bitowych (i/lub operatorów) itd.

Nie ma problemu,by w trybie 16-bitowym używać 32-bitowych operandów, lub w 32-bitowym używać 16-. Podobnie w trybie 64-bitowym można używać 16- i 32-bitowych.
Jednak w trybach 16- i 32-bitowym nie można używać rejestrów 64-bitowych, ani żadnych nawet mniejszych które doszły w 64-bitach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1