Mam dość proste pytanie, ale nigdzie nie mogłem znaleźć na nie odpowiedzi.
W systemie Von-Neumann, w którym kod i dane znajdują się w tej samej pamięci RAM, procesor musi pobrać wszystkie instrukcje z pamięci. Teraz, aby przenosić duże ilości danych między komponentami komputera, istnieje kontroler bezpośredniego dostępu do pamięci, który pozwala urządzeniom peryferyjnym na dostęp do głównej pamięci RAM systemu.
Moje pytanie brzmi: jeśli DMA pozwala na (być może bardzo długi) transfer danych między, powiedzmy, dyskiem twardym a pamięcią RAM, czy nie oznacza to, że procesor nie może użyć pamięci RAM, a zatem nie może pobrać kolejnej instrukcji?
W skrócie, DMA ma zastąpić procesor arbitrażujący wszystkie operacje odczytu i zapisu we / wy, aby zwolnić procesor do wykonywania innych czynności. Jeśli jednak nie może pobrać instrukcji z pamięci RAM, i tak nie został zwolniony.
Czy brakuje mi jakiegoś szczegółu?
Dzięki
źródło
Odpowiedzi:
Masz rację, że procesor nie może uzyskać dostępu do pamięci podczas transferu DMA. Istnieją jednak dwa czynniki, które łącznie pozwalają na pozorny równoległy dostęp do pamięci przez CPU i urządzenie wykonujące transfer DMA:
mov
instrukcja z operandem pośrednim).W połączeniu te dwa czynniki oznaczają, że urządzenie wykonujące transfer DMA będzie miało niewielki wpływ na szybkość procesora.
EDYCJA: Zapomniałem wspomnieć, że istnieje również czynnik pamięci podręcznej procesora, który dopóki kod wykonywany przez procesor znajduje się w pamięci podręcznej, nie będzie musiał uzyskiwać dostępu do prawdziwej pamięci w celu pobrania instrukcji, więc transfer DMA nie będzie przeszkadzać (chociaż jeśli instrukcja wymaga dostępu do pamięci, to oczywiście nastąpi prawdziwy dostęp do pamięci - potencjalnie konieczne będzie poczekanie na przerwę w korzystaniu z pamięci przez urządzenie DMA).
źródło
Jeśli istnieje pojedynczy interfejs pamięci, istnieje sprzęt do arbitrażu między żądaniami. Zazwyczaj procesor miałby pierwszeństwo przed I / O bez głodzenia I / O, ale nawet przy I / O zawsze mającym priorytet, procesor miałby pewne możliwości dostępu do pamięci, ponieważ I / O ma zwykle mniejsze zapotrzebowanie na przepustowość i jest przerywany.
Ponadto zazwyczaj istnieje więcej niż jeden interfejs do pamięci. Procesory o wyższej wydajności zwykle mają pamięci podręczne (jeśli DMA nie jest spójne, pamięci podręczne nawet nie muszą być szpiegowane; nawet przy szpiegowaniu narzut byłby ogólnie niewielki z powodu różnicy przepustowości między pamięcią podręczną a pamięcią główną lub (gdy DMA przenosi się do L3 pamięć podręczna) między pamięcią podręczną L3 a pamięcią podręczną L1), zapewniając oddzielny interfejs dostępu do pamięci. Mikrokontrolery często uzyskują dostęp do instrukcji z oddzielnej pamięci flash, umożliwiając kontynuowanie pobierania podczas DMA do pamięci na chipie, i często mają ściśle sprzężoną pamięć z niezależnym interfejsem (umożliwiając dostęp do wielu danych w celu uniknięcia konfliktów DMA).
Nawet w przypadku pojedynczego interfejsu pamięci szczytowa przepustowość będzie na ogół wyższa niż zwykle używana przepustowość. (W przypadku pobierania instrukcji nawet mały bufor z ładowaniem większym niż średnia pobierania z pamięci pozwala na pobieranie instrukcji z bufora, gdy inny agent korzysta z interfejsu pamięci, wykorzystując tendencję kodu do nie rozgałęziania się.)
Należy również zauważyć, że ponieważ procesor uzyskuje dostęp do danych, jeśli istnieje pojedynczy interfejs pamięci, musi istnieć mechanizm arbitrażu między dostępem do danych a dostępem do instrukcji.
Gdyby procesor (z pojedynczym interfejsem pamięci) był zmuszony zaimplementować kopię z bufora urządzenia I / O do pamięci głównej, musiałby również pobrać instrukcje, aby wykonać kopię. Może to oznaczać dwa dostępy do pamięci na słowo przesyłane nawet w programie ISA z operacjami pamięci-pamięci (program ISA przechowujący obciążenia może wymagać trzech dostępów do pamięci lub więcej, jeśli nie zapewniono adresowania pamięci po inkrementacji); jest to dodatek do dostępu we / wy, który w starych systemach może współdzielić ten sam interfejs co pamięć główna. Silnik DMA nie ma dostępu do instrukcji w pamięci, dzięki czemu unika się tego narzutu.
źródło
Ponieważ istnieje tylko jeden system magistrali, który jest blokowany przez dostęp do pamięci DMA, procesor nie może działać, nawet gdy DMA przenosi dane i dlatego zostaje zatrzymany.
Idea tego jest następująca:
Jeśli chcesz skopiować kolejne dane z pamięci, procesor musiałby zrobić coś takiego:
Oblicz adres-> odczyt danych-> oblicz nowy adres (+ 1 słowo) -> odczyt danych ...
Podczas gdy DMA oblicza nowy adres równolegle (w zależności od trybu) i dlatego jest szybszy. Tak więc DMA może pracować z pełną przepustowością magistrali (teoretycznie).
źródło
Ogólnie rzecz biorąc, nie.
W większości architektur systemowych wszystkie żądania dostępu do pamięci mają przypisany priorytet . Gdy jest więcej jednoczesnych żądań pamięci, niż system może obsłużyć jednocześnie, żądania o wyższym priorytecie są obsługiwane w pierwszej kolejności. Żądania pamięci inicjowane przez CPU mają zwykle najwyższy możliwy priorytet.
źródło
Ogólnie nie.
Niektóre systemy na pewno, tylko jeden master na raz. W tym przypadku jest to nieco starszy projekt (nawet stare projekty często miały równoległe rozwiązania). Nowoczesny typ magistrali przez każdą magistralę (adres, zapis danych, odczyt danych) działa niezależnie i ma znacznik lub identyfikator na cykl zegara, aby pokazać, z jaką transakcją jest powiązany jeden cykl zegara. Dzięki temu możesz mieć wiele / wiele transakcji w locie jednocześnie w obu kierunkach, a różne transakcje są przetasowane razem w szynach danych do odczytu lub zapisu. Kto będzie następny, będzie zależał od priorytetu, nie ma zasady, że transakcje w autobusie musiałyby wychodzić w kolejności, w jakiej są ułożone instrukcje oprogramowania, procesor może ustalić, że niektóre mogą rozpocząć się wcześniej niż inne, i naturalnie odpowiedzi będą wracać w różnych kolejności, w zależności od tego, jak blisko i jak szybko jest cel. Podobnie pobieranie nie jest w porządku, przewidywanie gałęzi odpala losowo wyglądające pobrania, gdy tylko ma na to ochotę.
Duża transakcja dma wymagałaby oczywiście znacznie większej przepustowości magistrali, ale stwierdzenie, że procesor się zatrzymuje, niekoniecznie tak, zależy również od architektury i kodu. Kod może zawierać instrukcję, która mówi, że utknięcie do końca tego sygnału / zdarzenia transferu, a następnie upewnienie się, że procesor dokończy to, co może zrobić w potoku, a następnie utknie. Ale to lub niektóre architektury mogą nie wymagać przeciągnięcia, i tak naprawdę nie jest to rozsądne, aby stracić przepustowość. Jaki byłby sens DMA, gdyby nie działał równolegle, wystarczy zakodować transfer w pętli, pobiera dodać kilka cykli, być może w zależności od architektury, nie są one tak kosztowne, jak obciążenie logiczne dma, moc itp. Zrozum, w jaki sposób dma działa dla konkretnej architektury i systemu, na którym się znajdujesz, i decydujesz, czy warto go użyć,
Nie ma ogólnej odpowiedzi na pytanie, jak działa dma, jest on w dużym stopniu zależny od projektu systemu i wszystkich komponentów w systemie.
źródło