2012-03-17 16 views
5

W C każdy bajt jest indywidualnie adresowalny. Załóżmy, że liczba całkowita (powiedzmy, który korzysta z 4 bajtów) ma adres 0xaddr (który ma długość 32 bitów, przy założeniu, że posiada procesor 32 bitów, z 32-bitowej magistrali adresowej i 32-bitowej magistrali danych) i załóżmy, że wartość liczby całkowitej 0x12345678. Teraz, jeśli pobierają tę wartość z pamięci, w jaki sposób procesor to zrobić? Czy procesor umieszcza 0xaddr (który jest adresem 32-bitowym) w liniach adresu, a następnie pobiera 8-bitowe dane, powiedz 0x12. I wtedy procesor będzie oszczędzał 0xaddr+1 na liniach adresowych, a następnie pobierać kolejne 8 bitów danych 0x34 i tak dalej dla 4 bajty liczby całkowitej? Czy procesor po prostu umieszcza 0xaddr i odczytuje 4 bajty naraz, wykorzystując w ten sposób swoją 32-bitową magistralę danych?W jaki sposób są pobierane dane z pamięci RAM?

+0

To zależy. O którym dokładnie procesorze mówisz? IIRC 8086 miał 16-bitową magistralę danych. Wiele nowszych modeli (Pentium i wyżej) miało 64-bitową magistralę FSB. – harold

+0

@harold: czy możesz dać mi znać, jak to jest inne dla różnych procesorów. pytam w ogólności i nie jest specyficzny dla żadnego procesora. jak to się stanie, powiedzmy na 8086, który ma 16-bitową magistralę danych, a jak na 32-bitową magistralę danych i przez 64? dzięki – mezda

+0

jest to o wiele bardziej skomplikowane niż zwykła magistrala danych, jest też bufor podręczny –

Odpowiedz

5

This is a well known article przez przewodnik biblioteki GNU C opisujący dostęp do pamięci (szczególnie w x86 - obecne systemy PC).To idzie o wiele więcej szczegółów, niż kiedykolwiek możesz potrzebować.

Cały artykuł jest rozłożona w wielu częściach:

  1. Introduction
  2. CPU Caches
  3. Virtual Memory
  4. NUMA Support
  5. Programmers
  6. More Programmers
  7. Performance Tools
  8. Future
  9. Appendices

jedno chciałbym dodać do odpowiedzi gbulmer jest to, że w wielu systemach coraz strumień danych jest szybszy niż można by oczekiwać od uzyskania jednego słowa. innymi słowy, wybór miejsca, w którym chcesz czytać, zajmuje trochę czasu, ale wybrano to, co zostało wybrane, odczyt z tego punktu, a następnie następne 32 lub 64 lub cokolwiek innego, a następne ... jest szybsze niż przejście do jakieś niepołączone miejsce i odczytanie innej wartości.

to, co dominuje w nowoczesnym programowaniu, to nie jest zachowanie pobierania z pamięci na płycie głównej, ale to, czy dane znajdują się w pamięci podręcznej cpu.

4

Jeśli szukać w internecie dla „Computer Architecture” jest prawdopodobne, aby uzyskać kilka odpowiedzi na pytania.

dla konkretnego pytania, komputera, z 32bit 32bit danych i adresu magistrali, na prostym przypadku, bez sprzętu kasował. Będzie czytać 32bit z 32-bitowej pamięci.

Jest to rodzaj sprzętu, która istniała od końca 1970 roku jak minicompters (np DEC VAX), i nadal istnieje jako mikroprocesory (x86, ARM, Cortex-A8, MIPS32) i wewnątrz niektórych mikrokontrolerów (np ARM Cortex- M3, PIC32 itd.).

Najprostszy przypadek: Magistrala adresowa to zestaw sygnałów (przewodów), które przenoszą sygnały adresowe do pamięci, oraz kilka dodatkowych sygnałów, informujących, czy pamięć ma być "odczytywana z", czy "zapisana do" (dane kierunek) i czy sygnały na przewodach adresowych i danych są prawidłowe. W przypadku twojego przykładu, może być 32 przewody do przenoszenia wzoru bitowego adresu.

Magistrala danych jest drugi zestaw przewodów, które łączą wartości do iz pamięci. Pamięć może sygnalizować, że dane są poprawne, ale może być wystarczająco szybka, aby wszystko "po prostu zadziałało".

Kiedy procesor umieszcza adres na sygnałach adresowych, mówi, że chce odczytać z pamięci (kierunek danych jest "odczytany"), pamięć odzyska wartość przechowywaną pod tym adresem i umieści ją na sygnałach magistrali danych. Procesor (po odpowiednich opóźnieniach i sygnałach) będzie pobierał próbki przewodów magistrali danych i to jest wartość, której używa.

Procesor może odczytać całe 32 bitów i wydobyć bajt (jeśli to wszystko wymaga instrukcji) wewnętrznie, lub zewnętrzna magistrala adresowa może dostarczyć dodatkowe sygnały, dzięki czemu można zbudować zewnętrzny system pamięci w celu zapewnienia odpowiedniego bajtu , dwubajtowe lub czterobajtowe. Przez wiele lat wersje architektury procesorów ARM mogły odczytać tylko 32-bitowe, a mniejsze fragmenty, e, g, bajt, zostały wyodrębnione wewnętrznie.

Możesz zobaczyć przykład tego zestawu sygnałów pod numerem http://www.cpu-world.com/info/Pinouts/68000.html Ten układ ma tylko 24-bitową magistralę adresową i 16-bitową magistralę danych. Ma dwa sygnały (UDS i LDS), które sygnalizują, czy używane są górne sygnały danych, niższe sygnały danych, czy oba.

znalazłem dość szczegółowe wyjaśnienie co research.cs.tamu.edu/prism/lectures/mbsd/mbsd_l15.pdf Okazało się, że szukając „cyklu magistrali 68000 pamięci”.

Można skutecznie szukać MIPS, ARM lub x86, aby zobaczyć swój cykl magistrali.

Powiązane problemy