2013-11-29 5 views
1

У меня возникли трудности со следующим вопросом:Время прерывания работы DMA

Рассмотрите дисковод со следующими характеристиками.

16 поверхностей, 512 дорожек/поверхности, 512 секторов/дорожек, 1 КБ/сектор, скорость вращения 3000 об/мин. Диск работает в режиме кражи циклов, при котором каждый раз, когда 1 байтовое слово готово, оно отправляется в память; аналогично для записи, интерфейс диска считывает 4-байтное слово из памяти в каждом цикле DMA. Время цикла памяти составляет 40 нс. Максимальный процент времени, в течение которого процессор блокируется во время операции DMA?

решение этого вопроса, представленной на единственном сайте:

Revolutions Per Min = 3000 RPM 
    or 3000/60 = 50 RPS 
    In 1 Round it can read = 512 KB 
    No. of tracks read per second = (2^19/2^2)*50 
           = 6553600 ............. (1) 
      Interrupt = 6553600 takes 0.2621 sec 
      Percentage Gain = (0.2621/1)*100 
          = 26 % 

я понял до (1).

Может ли кто-нибудь объяснить мне, как наступил 0,2621? Как рассчитывается время прерывания? Пожалуйста помоги .

ответ

1

Реверсировать цифры, которые вы указали, это 6553600 * 40ns, что дает 0.2621 сек.

Одна довольно очевидная проблема заключается в том, что комментарии в расчетах несколько неправильны. Это не

Revolutions Per Min = 3000 RPM ~ or 3000/60 = 50 RPS 
In 1 Round it can read = 512 KB 
No. of tracks read per second = (2^19/2^2)*50 <- WRONG 

Номера 512K/4 * 50. Значит, это в байтах. Как это можно назвать «количеством дорожек»? Чтение полной дорожки - 1 полный оборот, поэтому количество дорожек, читаемых за 1 секунду, равно 50, так как есть 50 RPS.

Однако, общее количество байтов, читаемых в 1s, равно всего 512K * 50, так как 512K - это количество данных на дорожке.

Но тогда дополнительно делится на 4 ..

Итак, я думаю, фактические замечания должны быть:

Revolutions Per Min = 3000 RPM ~ or 3000/60 = 50 RPS 
In 1 Round it can read = 512 KB 
Interrupts per second = (2^19/2^2) * 50 = 6553600 (*) 

Прерывание запускает одну цит памяти, так то:

total wasted: 6553600 * 40ns = 0.2621 sec. 

Однако мне не очень нравится, как рассчитывается «количество прерываний в секунду». Я в настоящее время не вижу/падаю/угадываю, как/почему это просто Bytes/4.

только смутное объяснение, что «разделить его на 4» я могу думать:

На каждый байт записывается в память контроллера, событие срабатывает. Однако контроллер DMA может читать только ПАКЕТЫ размером 4 байта. Таким образом, аппаратный контроллер DMA должен WAIT, пока не будет прочитано как минимум 4 байта для чтения. Только тогда DMA запускает и останавливает шину (или часть) в течение одного цикла памяти, необходимого для копирования данных. Когда шина замораживается, процессор МОЖЕТ ждать. Ему НЕ НУЖНО, он может делать свои собственные операционные системы и работать с кешем, но если он пытается прикоснуться к памяти, ему нужно будет подождать, пока закончится DMA.

Тем не менее, мне не нравятся некоторые вещи в этом «объяснении». Я не могу гарантировать, что это действительно так. Это зависит от того, какую архитектуру вы анализируете и как организованы DMA/CPU/BUS.

+0

спасибо ... Я тоже согласен с вами в том, почему общие байты были разделены на 4, но затем я принял его так, как если бы решение было предоставлено, рассматривая только часть чтения. но расплывчатое дело в том, почему это только учитывая эту часть, потому что время цикла основной памяти будет одинаковым для чтения и письма, я думаю? –

+0

и это 40 нс. еще одна вещь, которую вы получили память контроллера, как память, упомянутая в вопросе. Зачем? –

+0

ОК, забудьте, что последний комментарий я только что удалил. Наконец я понял ваш вопрос. Под «памятью контроллера» я имел в виду туманную вещь, которая служит входным буфером DMA. Говорят, что DMA может передавать только в кусках 4 байта. Поэтому, если диск/все равно выделяет байты данных за байтом, тогда где-то должен быть небольшой «кеш», который накапливает их в 4B-пакеты, доступные для передачи DMA. Я назвал его «память контроллера», потому что, вероятно, это был бы некоторый буфер ввода-вывода контроллера накопителя, связанный DMA с некоторым основным местом памяти. Но я понятия не имею, где будет этот буфер. – quetzalcoatl

0

Единственная ошибка, это его не

нет. треков читать

На самом деле нет. прерываний произошло (нет. раз DMA пришел с его данными, они много раз CPU будет заблокирован)

Но опять-таки я не знаю, почему 50 умножается, вероятно, из-за 1 секунду, но я хотел бы решить эту проблему без умножения на 50

0

Моего решения: -

Здесь, в 1 интерфейсе вращения может читать 512 Кб данных. 1 время вращения = 0,02 сек. Итак, однобайтное время подготовки данных = 39,1 nsec ----> для 4B занимает 156,4 нсек. Время цикла памяти = 40 нс. Таким образом,% времени CPU блокируется = 40/(40 + 156,4) = 0,2036 ~ = 20%. Но в вариантах буклета с ответами даются как A) 10 B) 25 C) 40 D) 50. Скажи мне, если я ошибаюсь?