496.74K
Categories: informaticsinformatics electronicselectronics

Функції базової підсистеми вводу-виводу. Тема 5.2

1.

ТЕМА 5.2
ФУНКЦІЇ БАЗОВОЇ ПІДСИСТЕМИ ВВОДУ-ВИВОДУ
ПЛАН
1 СИСТЕМНІ ВИКЛИКИ ОПЕРАЦІЙ ВВОДУ-ВИВОДУ
2 БУФЕРИЗАЦІЯ І КЕШУВАННЯ ДАНИХ
3 SPOOLING І ЗАХОПЛЕННЯ ПРИСТРОЇВ
4 ОБРОБКА ПЕРЕРИВАНЬ І ПОМИЛОК

2.

1 СИСТЕМНІ ВИКЛИКИ ОПЕРАЦІЙ ВВОДУ-ВИВОДУ
Базова підсистема вводу-виводу служить посередником між процесами
обчислювальної системи і набором драйверів. Системні виклики для виконання операцій
вводу-виводу трансформуються нею у виклики функцій необхідного драйвера пристрою.
Проте обов’язки базової підсистеми не зводяться до виконання тільки дій трансляції
загального системного виклику в звернення до приватної функції драйвера.
Розглянемо деякі можливості, які надає підсистема введення-виведення ядра, та їхнє
місце в загальній інфраструктурі введення-виведення.
Усі системні виклики, пов’язані із здійсненням операцій вводу-виводу, можна
розбити на три групи по способах реалізації взаємодії процесу і пристрою вводувиводу.
1 Системні виклики, що блокуються. Як випливає з самої назви, застосування такого
виклику призводить до блокування процесу, що ініціював його, тобто процес
переводиться операційною системою із стану виконання в стан очікування. Завершивши
виконання усіх операцій вводу-виводу, наказаних системним викликом, операційна
система переводить процес із стану очікування в стан готовність. Після того, як процес
буде знову вибраний для виконання, в нім станеться остаточне повернення з системного
виклику. Типовим для застосування такого системного виклику є випадок, коли процесу
необхідно отримати від пристрою строго певну кількість даних, без яких він не може
виконувати роботу далі.

3.

1 СИСТЕМНІ ВИКЛИКИ ОПЕРАЦІЙ ВВОДУ-ВИВОДУ
2 Системні виклики, що не блокуються. У простому випадку процес, що застосував
виклик, що не блокується, не переводиться в стан очікування взагалі. Системний виклик
повертається негайно, виконавши наказані йому операції вводу-виводу повністю,
частково або не виконавши зовсім, залежно від поточної ситуації (стану пристрою,
наявності даних і т.д.). У складніших ситуаціях процес може блокуватися, але умовою
його розблокування є завершення усіх необхідних операцій або закінчення деякого
проміжку часу. Типовим випадком застосування системного виклику, що не блокується,
може бути періодична перевірка на поступання інформації з клавіатури при виконанні
трудомістких розрахунків.
3 Асинхронні системні виклики. Процес, що використав асинхронний системний
виклик, ніколи в нім не блокується. Системний виклик ініціює виконання необхідних
операцій вводу-виводу і негайно повертається, після чого процес продовжує свою
регулярну діяльність. Про закінчення завершення операції вводу-виводу операційна
система згодом інформує процес зміною значень деяких змінних, передачею йому
сигналу або повідомлення або яким-небудь іншим способом. Необхідно чітко розуміти
різницю між викликами, що не блокуються і асинхронними. Системний виклик, що не
блокується, для виконання операції read повернеться негайно, але може зчитати
запитану кількість байтів, меншу кількість або взагалі нічого. Асинхронний системний
виклик для цієї операції також повернеться негайно, але необхідна кількість байтів рано
чи пізно буде зчитана в повному об’ємі.

4.

2 БУФЕРИЗАЦІЯ І КЕШУВАННЯ ДАНИХ
Найважливішою технологією підвищення ефективності обміну даними між
пристроєм і додатком або між двома пристроями є буферизація. Під буфером
зазвичай розуміється деяка область пам’яті для запам’ятовування інформації при
обміні даних між двома пристроями, двома процесами або процесом і
пристроєм. Залежно від того, скільки буферів використовують і де вони
перебувають, розрізняють кілька підходів до організації буферизації.
Розглянемо причини, які викликають необхідність буферизації:
Різниця у пропускній здатності різних пристроїв. Наприклад, якщо дані
зчитують із модему, а потім зберігають на жорсткому диску, без буферизації
процес переходитиме у стан очікування перед кожною операцією отримання
даних від модему. Власне кажучи, буферизація потрібна у будь-якій ситуації, коли
для читання даних потік має у циклі виконати блокувальну операцію введеннявиведення для кожного отримуваного символу; без неї така робота буде вкрай
неефективною.

5.

2 БУФЕРИЗАЦІЯ І КЕШУВАННЯ ДАНИХ
Різниця в обсязі даних, переданих пристроями або рівнями підсистеми
введення-виведення за одну операцію. Типовим прикладом у цьому разі є
мережний обмін даними, коли відправник розбиває велике повідомлення на
фрагменти, а одержувач у міру отримання поміщає ці фрагменти в буфер (його
ще називають буфером повторного збирання — reassembly buffer) для того щоб
зібрати з них первісне повідомлення. Такий буфер ще більш необхідний, оскільки
фрагменти можуть приходити не в порядку відсилання.
Необхідність підтримки для застосування семантики копіювання (copy
semantics). Вона полягає в тому, що інформація, записана на диск процесом, має
зберігатися в тому вигляді, у якому вона перебувала у пам’яті в момент
записування, незалежно від змін, зроблених після цього.

6.

2 БУФЕРИЗАЦІЯ І КЕШУВАННЯ ДАНИХ
Розглянемо різні способи реалізації буферизації (рисунок 5.2.1).
Рисунок 5.2.1 - Різні способи буферизацій: а
- введення-виведення без буферизаций; б буферизація в просторі користувача; в одинарна буферизація в ядрі; г - подвійна
буферизація

7.

2 БУФЕРИЗАЦІЯ І КЕШУВАННЯ ДАНИХ
Першим підходом, який реально використовують на практиці, є одинарна
буферизація в ядрі. У цьому разі у ядрі створюють буфер, куди копіюють дані в міру
їхнього надходження від пристрою. Коли цей буфер заповнюється, весь його вміст за
одну операцію копіюють у буфер, що перебуває у просторі користувача. Аналогічно під
час виведення даних їх спочатку копіюють у буфер ядра, після чого вже ядро
відповідатиме за їхнє виведення на пристрій. Це дає змогу реалізувати семантику
копіювання, оскільки після копіювання даних у буфер ядра інформація із буфера
користувача у підсистему введення-виведення гарантовано більше не потрапить —
процес може продовжувати свою роботу і використовувати цей буфер для своїх потреб.
Використання одинарного буфера не позбавлене недоліків, головний з яких
пов’язаний з тим, що в момент, коли буфер переповнений, нові дані нікуди помістити (а
буфер може бути переповнений деякий час, наприклад, поки його зберігають на диску
або поки йде завантаження з диска сторінки з буфером користувача). Для вирішення цієї
проблеми запропонована технологія подвійної буферизації, за якої у пам’яті ядра
створюють два буфери. Коли перший з них заповнений, дані починають надходити в
другий, і до моменту, коли заповниться другий, перший уже буде готовий прийняти нові
дані і т. д.

8.

2 БУФЕРИЗАЦІЯ І КЕШУВАННЯ ДАНИХ
Узагальнення цієї схеми на n буферів називають циклічною буферизацією, її
можна використовувати тоді, коли час збереження буфера перевищує час його
заповнення.
Буферизація і кешування. Буферизацію варто відрізняти від кешування.
Основна відмінність між ними полягає в тому, що буфер може містити єдину
наявну копію даних, тоді як кеш за визначенням зберігає у більш швидкій пам’яті
копію даних з іншого місця.
З іншого боку, ділянку пам’яті в деяких випадках можна використати і як
буфер, і як кеш. Наприклад, якщо після виконання операції введення із
використанням буфера надійде запит на таку саму операцію, дані можуть бути
отримані із буфера, який при цьому буде частиною кеша. Сукупність таких
буферів називають буферним кешем (buffer cache).
Функції буферизації і кешування не обов’язково мають бути локалізовані в
базовій підсистемі вводу-виводу. Вони можуть бути частково реалізовані в
драйверах і навіть в контролерах пристроїв, потайно по відношенню до базової
підсистеми.

9.

3 SPOOLING І ЗАХОПЛЕННЯ ПРИСТРОЇВ
Використання буферного кеша дає можливість накопичувати дані для
збереження їх на диску великими обсягами за одну операцію, що сприяє
підвищенню ефективності роботи підсистеми введення-виведення (не слід
забувати при цьому про небезпеку втрати даних у разі вимкнення живлення).
Спулінг (spooling) — технологія виведення даних із використанням буфера,
що працює за принципом FIFO. Такий буфер називають спулом (spool) або
ділянкою спула (spool area).
Спулінг використовують тоді, коли виведення даних має виконуватися
неподільними порціями (роботами, jobs). Неподільність робіт полягає в тому, що
їхній вміст під час виведення не перемішується (тільки після виведення всіх даних
однієї роботи має починатися виведення наступної). Прикладом такого виведення
є робота із розподілюваним принтером, коли запити на друкування документів
приходять від багатьох процесів у довільному порядку, але друкуватися
документи можуть тільки по одному (тут роботою є документ). Іншим прикладом
є відсилання електронної пошти (роботами є повідомлення).

10.

3 SPOOLING І ЗАХОПЛЕННЯ ПРИСТРОЇВ
Роботи надходять у спул і в ньому вишиковуються у FIFO-чергу (нові роботи додаються
у її кінець). Як тільки пристрій звільняється, роботу із початку черги передають пристрою
для виведення. Звичайно спулінг пов’язаний із повільними пристроями, тому найчастіше
ділянку спула організовують на жорсткому диску, а роботи відображають файлами. Для
керування спулом (підтримки черги, пересилання робіт на пристрій) зазвичай
використовують фоновий процес або потік ядра. Має бути доступний інтерфейс
керування спулом, за допомогою якого можна переглядати вміст черги, вилучати роботи
з неї, міняти їхній порядок, тимчасово призупиняти виведення (наприклад, на час
обслуговування пристрою).
Зазначимо, що загалом спулінг не можна назвати технологією керування введеннямвиведенням режиму ядра — його часто реалізують процеси користувача.
Менш гнучкою альтернативою спулінгу є надання можливості монопольного
захоплення пристрою потоками. Такий монопольний режим може, наприклад,
задаватися під час відкриття пристрою, після чого інші потоки не зможуть отримати
доступу до нього, поки цей режим не буде знято. Такий підхід вимагає реалізації
синхронізації доступу до пристрою. У більшості випадків спулінг є гнучкішим і надійнішим
вирішенням, але для таких пристроїв, як записувальний CD-дисковід або сканер,
монопольне захоплення є прийнятним варіантом організації доступу.

11.

4 ОБРОБКА ПЕРЕРИВАНЬ І ПОМИЛОК
Якщо при роботі із зовнішнім пристроєм обчислювальна система не користується
методом опитування його стану, а задіює механізм переривань, то при виникненні
переривання, як ми вже говорили раніше, процесор, частково зберігши свій стан, передає
управління спеціальній програмі обробки переривання.
У підсистемі введення-виведення під час роботи виникають різні помилки, які
можна віднести до кількох категорій.
а) Помилки в програмному коді введення-виведення (доступ до відсутнього
пристрою, недопустимі дії із пристроєм тощо). Реакцією на такі помилки звичайно є
повернення коду помилки в додаток. Введення-виведення при цьому зазвичай не
виконують (найнебезпечнішим видом помилки в цьому разі буде виконання операції із
невірним пристроєм, оскільки така операція може відповідати коректній, але зовсім іншій
операції для цього пристрою).
б) Помилки, викликані апаратними проблемами. Серед них розрізняють;
викликані тимчасовими причинами (високе навантаження на мережу, сигнал
«зайнято» для модему); для цих помилок звичайною реакцією є повторна спроба
виконання введення-виведення;

12.

4 ОБРОБКА ПЕРЕРИВАНЬ І ПОМИЛОК
що вимагають втручання користувача (відсутність диска в дисководі, відсутність
паперу у принтері); за такої помилки зазвичай потрібно попросити користувача виконати
певні дії;
викликані некоректною роботою апаратного забезпечення (збій контролера,
дефектні сектори на диску); у цьому разі важливим є надання користувачу якомога
більше повної інформації про помилку (зазначимо, що після деяких таких помилок
продовження роботи системи може стати неможливим).
У програмному забезпеченні передача докладних відомостей про помилку є
головним завданням підсистеми введення-виведення у разі виникнення проблеми.
Справді, для більшості системних викликів інтерфейс повідомлень про помилки доволі
скромний (цілочисловий код повернення, глобальна змінна errno), тому розробникам
драйверів необхідно передбачати додаткові способи отримання інформації про помилку.
Дії з обробки переривання і компенсації виникаючих помилок можуть бути частково
перекладені на плечі відповідного драйвера. Для цього до складу інтерфейсу між
драйвером і базовою підсистемою вводу-виводу додають ще одну функцію - функцію
обробки переривання intr.

13.

УЗАГАЛЬНЕННЯ ВИВЧЕНОГО МАТЕРІАЛУ:
Усно дайте відповіді на питання.
1 Поясніть роботу системних викликів, що блокуються.
2 Поясніть роботу системних викликів, що не блокуються.
3 Поясніть роботу асинхронних системних викликів.
4 Існує три причини, що призводять до використання буферів в базовій
підсистемі вводу-виводу. Назвіть їх.
5 Яку назву має технологія підвищення ефективності обміну даними між
пристроєм і додатком або між двома пристроями?
6 Яку назву має область пам’яті для запам’ятовування інформації при обміні
даних між двома пристроями, двома процесами або процесом і пристроєм?
7 Яку назву має спосіб організації буферизації, коли буфер створюють у ядрі, куди
копіюють дані в міру їхнього надходження від пристрою? Коли цей буфер
заповнюється, весь його вміст за одну операцію копіюють у буфер, що перебуває у
просторі користувача.

14.

УЗАГАЛЬНЕННЯ ВИВЧЕНОГО МАТЕРІАЛУ:
Усно дайте відповіді на питання.
8 У випадку коли час збереження буфера перевищує час його заповнення
створюється для передачі інформації n буферів. Яку назву має такий спосіб
організації буферизації?
9 Яку назву має технологія виведення даних із використанням буфера, що
працює за принципом FIFO?
10 Яку назву має буфер для здійснення операцій введення-виведення, що працює
за принципом FIFO?

15.

ДОМАШНЄ ЗАВДАННЯ
В Moodle пройти Тест до теми 5.2.
English     Русский Rules