Z sekcji 5.1.4 Bezpośredni dostęp do pamięci we współczesnych systemach operacyjnych Andrew S. Tanenbaum, Herbert Bos, 2014 ,
Aby uprościć wyjaśnienie, zakładamy, że procesor uzyskuje dostęp do wszystkich urządzeń i pamięci za pośrednictwem jednej magistrali systemowej, która łączy procesor, pamięć i urządzenia we / wy, jak pokazano na ryc. 5-4.
Aby wyjaśnić, jak działa DMA, przyjrzyjmy się najpierw, jak odczytywane są dyski, gdy DMA nie jest używane.
- Najpierw kontroler dysku odczytuje blok (jeden lub więcej sektorów) z dysku szeregowo, krok po kroku, aż cały blok znajdzie się w wewnętrznym buforze kontrolera.
- Następnie oblicza sumę kontrolną, aby sprawdzić, czy nie wystąpiły błędy odczytu. Następnie sterownik powoduje przerwanie. Kiedy system operacyjny zaczyna działać, może odczytywać blok dysku z bufora kontrolera bajt lub słowo na raz, wykonując pętlę, przy czym każda iteracja odczytuje jeden bajt lub słowo z rejestru urządzenia kontrolującego i zapisuje je w pamięci głównej.
P: w drugim kroku
czy dane nie są przesyłane „ z bufora kontrolera ” do pamięci głównej? Dlaczego mówi zarówno „ z bufora kontrolera ”, jak i „ z rejestru urządzenia kontrolera ”?
w drugim etapie, czy kontroler może przesyłać dane ze swojego bufora do pamięci głównej bez przerywania procesora i bez ponownego angażowania systemu operacyjnego?
Gdy używany jest DMA, procedura jest inna.
- Najpierw CPU programuje kontroler DMA, ustawiając swoje rejestry, aby wiedział, gdzie przesłać (krok 1 na ryc. 5-4).
Wysyła także polecenie do kontrolera dysku, nakazując mu odczyt danych z dysku do bufora wewnętrznego i sprawdzenie sumy kontrolnej. - Gdy prawidłowe dane znajdują się w buforze kontrolera dysku, można rozpocząć DMA. Kontroler DMA inicjuje transfer, wysyłając żądanie odczytu przez magistralę do kontrolera dysku (krok 2). To żądanie odczytu wygląda jak każde inne żądanie odczytu, a kontroler dysku nie wie (lub obchodzi), czy pochodzi z procesora, czy z kontrolera DMA. Zazwyczaj adres pamięci do zapisu znajduje się w liniach adresowych magistrali, więc gdy kontroler dysku pobierze następne słowo z bufora wewnętrznego, wie, gdzie je zapisać. Zapis do pamięci to kolejny standardowy cykl magistrali (krok 3).
- Po zakończeniu zapisu kontroler dysku wysyła sygnał potwierdzenia do kontrolera DMA, również przez magistralę (krok 4). Następnie kontroler DMA zwiększa adres pamięci, aby go użyć, i zmniejsza liczbę bajtów. Jeśli liczba bajtów jest nadal większa niż 0, kroki od 2 do 4 są powtarzane, aż liczba osiągnie 0.
- W tym czasie kontroler DMA przerywa procesor, aby poinformować go o zakończeniu przesyłania. Podczas uruchamiania systemu operacyjnego nie musi kopiować bloku dysku do pamięci; już tam jest.
P: w drugim kroku kontroler DMA żąda od kontrolera dysku przesłania danych z bufora kontrolera dysku do pamięci głównej. W pierwszym kroku CPU wydaje polecenie kontrolerowi dysku, nakazując mu odczyt danych z dysku do bufora wewnętrznego. W tym samym czasie, czy CPU może również nakazać kontrolerowi dysku, aby przesłał dane z bufora kontrolera dysku do pamięci głównej, gdy kontroler dysku zakończy przesyłanie danych z dysku do bufora kontrolera dysku, aby nie było potrzeby Kontroler DMA mówi kontrolerowi dysku, aby przesłał dane z bufora kontrolera dysku do pamięci głównej? (Nie rozumiem, dlaczego potrzebujemy kontrolera DMA do przesyłania danych między dyskiem a pamięcią główną, więc zgadnij, że brakuje mi czegoś ważnego, aby zrozumieć cytat).
- Najpierw CPU programuje kontroler DMA, ustawiając swoje rejestry, aby wiedział, gdzie przesłać (krok 1 na ryc. 5-4).
Kontroler urządzenia steruje urządzeniem i wykonuje operacje na urządzeniu. Na jakim urządzeniu kontroluje kontroler DMA i wykonuje operacje?
Dzięki!