Из раздела 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 прерывает процессор, чтобы сообщить ему, что передача теперь завершена. Когда операционная система запускается, ей не нужно копировать блок диска в память; это уже там.
Q: на втором этапе контроллер DMA запрашивает контроллер диска для передачи данных из буфера контроллера диска в основную память. На первом шаге ЦП выдает команду контроллеру диска, в которой говорится, что он должен прочитать данные с диска во внутренний буфер. В то же время, может ли ЦП также сообщать контроллеру диска о передаче данных из буфера контроллера диска в основную память, когда контроллер диска заканчивает передачу данных с диска в буфер контроллера диска, так что нет необходимости в Контроллер DMA, чтобы сказать контроллеру диска для передачи данных из буфера контроллера диска в основную память? (Я не могу понять, зачем нам нужен контроллер DMA для передачи данных между диском и основной памятью, поэтому думаю, что я упустил что-то важное, чтобы понять цитату).
- Сначала ЦПУ программирует контроллер DMA, устанавливая его регистры, чтобы он знал, что куда передавать (шаг 1 на рис. 5-4).
Контроллер устройства управляет устройством и выполняет операции на устройстве. На каком устройстве контроллер DMA контролирует и выполняет операции?
Благодарность!