Головна

Буферизація дискового введення-виведення

  1. буферизація пакетів
  2. Два методу введення-виведення
  3. Канали вводу-виводу
  4. Оптичний мультиплексор ВВЕДЕННЯ-ВИВЕДЕННЯ
  5. Оптичні мультиплексори вводу-виводу
  6. Підсистема введення-виведення: паралельний і послідовний обмін. Підсистема переривань: Виявлення зміни стану зовнішнього середовища.

Дисковий введення-виведення в DOS виконується з буферизацією. Необхідність буферизації пояснюється перш за все такими міркуваннями. Оскільки одиницею інформації при обміні з дисками є сектор, то при надходженні запиту на читання даних з диска (нехай навіть одного байта), DOS читає весь сектор - 512 байт, а потім передає затребованное число байт в програму. При наступному запиті даних з того ж сектора у DOS вже немає необхідності звертатися до диска. Вона передає програмі дані з буфера. Аналогічним чином при запису дані накопичуються в буфері, поки весь буфер НЕ буде запомнен, і лише потім виводяться на диск. Крім того, при наявності великого числа буферів DOS використовує їх в основному для збереження вмісту FAT, а також каталогів, що може істотно підвищити швидкість пошуку файлів на диску.

Буферизація (число буферів) задається командою BUFFERS файлу CONFIG.SYS. В оперативній пам'яті можна розмістити від 2 до 99 буферів. При завданні занадто великого числа буферів крім того, що витрачається оперативна пам'ять проявляється також і зниження ефективності, пов'язане з витратами часу на обслуговування буферного пулу. Довідники рекомендують такі значення для числа буферів:

  • AT з 20- або 30-мегабайтним твердим диском: 32;
  • XT з 10-мегабайтним твердим диском: 16;
  • PC (тільки гнучкі диски): 4.

Для AT число буферів в основний пам'яті може бути істотно зменшена, якщо використовується утиліта FASTOPEN, за допомогою якої можна зберігати інформацію про файлах і каталогах в додатковій (expanded) пам'яті, або драйвер SMARTDRV.SYS, що створює додаткового або розширеної (extended) пам'яті кеш -память для дисків.
 Слід мати на увазі, що буферизация застосовується тільки при виконанні файлових операцій введення-виведення. Сектори читаються / записуються за прямими зверненнями з програми до переривань DOS 0x25 / 0x26 через систему буферизації не проходять.
 При закритті файлу все пов'язані з ним буфера скидаються на диск. Але в DOS (починаючи з 3.30) є функція 0x68, що дозволяє примусово записати на диск все буфера, пов'язані з заданим файлом - її доцільно застосовувати, якщо є ризик втрати накопиченої в буферах інформації при виключенні або збою в електропостачанні. Крім того, функція 0x6C (розширене відкриття файлів - починаючи з DOS 4.0) дозволяє відкрити файл без буферизації.

Буферизація забезпечується наступними внутрішніми структурами даних DOS. Кожен буфер в оперативній пам'яті передує Блоком Управління Буфера (BCB - Buffer Control Block).

Поля drive і sect включають логічний номер диска і номер сектора цього диска, вміст якого скопійовано в даний буфер (в жодного разу не використаних буферах drive = 0xff), поле dpb - посилання на DPB цього пристрою. Поле стану буфера - flag - буде нами розглянуто нижче. Поле copies містить число копій даного сектора на диску (воно відмінно від 1 тільки для секторів, що входять до складу FAT), а поле sect_off - зміщення на диску другий копії щодо першої (в секторах).
 Все BCB пов'язані в список, але організація списку різна для різних версій DOS. В DOS 3 початкову адресу цього списку знаходиться в CVT зі зміщенням 0x12 від адреси, що повертається функцією 0x52. Кожен елемент списку в поле next містить адресу (сегмент і зсув) наступного елементу. Ознакою кінця списку є значення 0xFFFF в зміщенні адреси наступного елементу.

В DOS 5 всі буфери розташовані в одному сегменті пам'яті. Поля next і prev в BCB пов'язують їх в двохзв'язной список. Ці поля містять тільки зміщення, так як сегментна адреса у всіх буферів один і той же. Для цієї версії поле CVT зі зміщенням 0x12 включає адресу області пам'яті, в якій зберігається адреса початку списку, для виходу на перший елемент списку необхідна подвійна адресація. Список - кільцевої, тобто поле next його останнього елемента вказує на перший елемент, а поле prev першого - на останній.

Тепер про інтерпретацію розрядів байта стану буфера. Його біти мають таке призначення:

 0 w r 0 a d f 0,

де



Попередня   46   47   48   49   50   51   52   53   54   55   56   57   58   59   60   61   Наступна

Функції вводу-виводу | Функції роботи з файлами і каталогами | Програмний сегмент і програмний ідентифікатор | COM- і EXE-файли | Запуск програми з програми | Блоки управління пам'яттю | Функції pаспpеделения пам'яті DOS | Системні керуючі блоки DOS | драйвери пристроїв | Блоки параметрів дисків і масив поточних каталогів |

© 2016-2022  um.co.ua - учбові матеріали та реферати