скорость записи через int 13h

Тема в разделе "WASM.OS.DEVEL", создана пользователем Snuk, 4 сен 2010.

  1. Snuk

    Snuk New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    4
    Код (Text):
    1. wrt:
    2.         MOV AH, 43h      
    3.         MOV DL, 80h      
    4.         MOV SI, dap      
    5.         INT 13h
    6.         inc [X_SEC]
    7.         jmp wrt
    8.  
    9. dap:
    10. packet_size    db 1        
    11. reserved       db 00h      
    12. N_SEC          dw 1      
    13. buf_seg        dw 00h      
    14. buf_off        dw 7c00h      
    15. X_SEC          dd 0        
    16.                dd 0
    данный кусок программы работает из под загрузочного сектора дискеты(или HDD), и пишет на диск со скоростью примерно 8,5 МБ/с, хотя на тот же самый диск винда пишет как минимум в 2-3 раза быстрее(>20 МБ/с).
    Объясните, почему так?
     
  2. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    потому, что это BIOS. и в нем все процедуры универсальные и примитивные.
    А в Винде под каждое устройство свой драйвер и много памяти.
     
  3. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Под каждый ЖД драйвер не нужен. В отличии от других устройств тут всё стандартно. Просто винда или любая другая полноценная ОС:
    1) Сначала буферизует в память
    2) Может писать по несколько секторов за раз. Кстати, BIOS тоже может (N_SEC).
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    pio vs dma, может быть.
     
  5. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Расширенный дисковый сервис биос вполне возможно тоже dma юзает. Просто автор читает по одному сектору за раз, а надо побольше, тогда и скорость повыше будет.
     
  6. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Для дисков, а точнее для контроллеров, есть понятие универсального драйвера и родного (фирменного) драйвера. Если бы последние не давали каких-либо преимуществ, они не были бы так распространены. Думаю, они способны установить и использовать как более эффективные стандартные режимы, так и расширенные режимы. Кэширование и блочные (многосекторные) операции тоже играют существенную роль.
     
  7. Snuk

    Snuk New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    4
    я пробовал менять все значения из блока dap:dntknw:в том числе и число записываемых секторов) - разницы никакой.
    Скажите, стоит ли попробовать вместо биоса через порты и насколько это раельно?
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Можешь сравнить PIO и DMA. В целом же пока не выставишь более производительный режим, существенных улучшений не получишь, а просто будешь делать работу вместо BIOS.
     
  9. Snuk

    Snuk New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    4
    а как это сделать(т.е. переключаться между PIO и DMA)?
     
  10. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    http://www.wasm.ru/article.php?article=atazen01
    http://www.wasm.ru/article.php?article=atazen02
     
  11. Snuk

    Snuk New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2010
    Сообщения:
    4
    1. в этих статьях описывается в чистом виде работа с портами. правильно ли я понимаю, что не получится переключить контроллер в дма, а потом тупо использовать int 13h?
    2. все это про IDE диски, c sata диском работать явно не будет. Будел ли с ним работать int 13h?(саташного диска, который можно насиловать вышеприведенной программой не имею, потому и спрашиваю)
     
  12. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Переключаться особо не нужно. Ты просто осуществляешь обмен данными либо через порт, либо сразу указываешь области памяти для обмена данными (поищи по ключевым словам PCI IDE, Bus Mastering).
     
  13. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    1. В общем да.

    2. Кто тебе сказал? Просто не надейся только на режим совместимости и не используй SATA-регистры.
     
  14. Chizh

    Chizh New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    23
    Потому что Windows сама настраивает скоростной режим, а BIOS использует тот, который задан в настройках контроллера SATA/IDE и в настройках конкретных каналов (кури доки по настройке BIOS). Советую проверить настройки BIOS, и для контроллера поменять режим Legacy/Compatible на Enhanced. А в настройке канала самого винчестера установить максимальный режим DMA, включить использование 32-битного режима, установить максимальное количество секторов на блок, установить размер буфера. Ещё возможно, что режим DMA отдельной настройкой вообще выключен, надо проверять.
    При правльной настройке BIOS, скорость может быть до 32МБ/с. Читать/писать лучше блоками по 64 сектора (32КБ). Вообще, скорость передачи не должна быть ниже 16МБ/с при любых настройках, стоит поискать ошибку в алгоритме измерения.