З розділу 5.1.4 Прямий доступ до пам'яті в сучасних операційних системах Ендрю С. Таненбаума, Герберт Бос, 2014 р. ,
Для спрощення пояснення ми припускаємо, що процесор здійснює доступ до всіх пристроїв та пам'яті за допомогою єдиної системної шини, яка з'єднує процесор, пам'ять та пристрої вводу / виводу, як показано на рис. 5-4.
Щоб пояснити, як працює DMA, давайте спочатку розглянемо, як відбувається зчитування диска, коли DMA не використовується.
- Спочатку дисковий контролер читає блок (один або більше секторів) з накопичувача послідовно, побітно, поки весь блок не знаходиться у внутрішньому буфері контролера.
- Далі він обчислює контрольну суму, щоб перевірити, чи не було помилок читання. Тоді контролер викликає перерву. Коли операційна система починає працювати, вона може читати диск диска з буфера контролера байт або слово за один раз, виконуючи цикл, при цьому кожна ітерація читає один байт або слово з реєстру пристрою контролера і зберігає його в основній пам'яті.
Q: на другому кроці,
чи не передані дані " з буфера контролера " в основну пам'ять? Чому це говорить як " з буфера контролера ", так і " з регістра пристрою контролера "?
на другому кроці чи може контролер передавати дані зі свого буфера в основну пам'ять, не перебиваючи на процесор і не залучаючи знову ОС?
Якщо використовується DMA, процедура відрізняється.
- Спочатку процесор програмує контролер DMA, встановлюючи його регістри, щоб він знав, куди передавати (крок 1 на рис. 5-4).
Він також видає команду дисковому контролеру, вказуючи йому зчитувати дані з диска у його внутрішній буфер і перевіряти контрольну суму. - Коли дійсні дані знаходяться в буфері дискового контролера, DMA може починатися. Контролер DMA ініціює передачу, видаючи запит читання по шині на контролер диска (крок 2). Цей запит на читання виглядає як будь-який інший запит на читання, і дисковий контролер не знає (чи не цікаво), чи надходив він з процесора чи з DMA-контролера. Зазвичай адреса пам'яті, в яку потрібно записати, знаходиться в адресних рядках шини, тому коли дисковий контролер виводить наступне слово з внутрішнього буфера, він знає, куди його записати. Запис у пам'ять - це ще один стандартний цикл шини (крок 3).
- Коли запис завершений, контролер диска посилає сигнал підтвердження на DMA-контролер, також через шину (крок 4). Потім контролер DMA збільшує адресу пам'яті для використання та зменшує кількість байтів. Якщо кількість байтів все ж перевищує 0, кроки 2 - 4 повторюються, поки кількість не досягне 0.
- У той час контролер DMA перериває процесор, щоб повідомити, що передача зараз завершена. Коли операційна система запускається, вона не повинна копіювати диск диска в пам'ять; воно вже є.
З: на другому кроці контролер DMA просить контролер диска передати дані з буфера дискового контролера в основну пам'ять. На першому кроці ЦП видає команду дисковому контролеру, яка повідомляє йому читати дані з диска у його внутрішній буфер. У той же час, чи може процесор також сказати дисковому контролеру переносити дані з буфера дискового контролера в основну пам'ять, коли дисковий контролер закінчує передачу даних з диска в буфер дискового контролера, щоб не було потреби в Контролер DMA, щоб сказати контролеру диска для передачі даних з буфера дискового контролера в основну пам'ять? (Я не можу зрозуміти, для чого нам потрібен контролер DMA для передачі даних між диском та основною пам'яттю, тому здогадайтесь, що я пропускаю щось важливе для розуміння цитати).
- Спочатку процесор програмує контролер DMA, встановлюючи його регістри, щоб він знав, куди передавати (крок 1 на рис. 5-4).
Контролер пристрою керує пристроєм та виконує операції над пристроєм. На якому пристрої контролер DMA керує та виконує операції?
Спасибі!