Чому введення / виведення безперебійне?


11

Яке обґрунтування робить безперебійним введення / виведення? Які можуть бути негативні наслідки, якби в процесі обробки вводу-виводу було дозволено обробляти сигнал?


write(2)дозволено повертатися достроково, повертаючи фактично записане число байтів, яке може бути меншим за довжину буфера, передану як 3-й аргумент.
Пітер Кордес

Відповіді:


9

Будь-який ввід / вивід обробляється системним викликом, на який викликається процес. Врешті-решт такий системний виклик спуститься до деякої відповідної функції драйвера пристрою низького рівня для виконання фактичної операції вводу / виводу.

Введення / виведення може бути складним - щоб фактично отримувати дані на пристрій і виходити з нього, можливо, потрібно буде дотримуватися різних кроків у порядку та, можливо, з вимогами до часу. Якщо ці кроки не виконані атомно, наступного разу, коли їх спробують, пристрій може не реагувати, не поводитися чи навіть спричиняти блокування системи. Ці кроки можуть бути різними та унікальними для кожного пристрою, отже, чому так багато драйверів пристроїв.

Добре написаний драйвер пристрою повинен знати, як боротися з пристроєм, який він намагається обслуговувати, тому зазвичай він не повинен мати проблем, якщо немає помилки драйверів, ви використовуєте неправильний драйвер для пристрою або фізичний пристрій виходить з ладу.


5

Тепер, коли я прочитав книгу "Конструкція операційних систем Unix" Моріса Баха, дозвольте собі відповісти на це питання.

Коротше кажучи, зробити введення / виведення безперебійним - це завдання, щоб завдання вводу / виводу закінчити якнайшвидше, не заважаючи сигналам.

Деякі пов'язані знання, які я отримав із книги:

  1. Слово "безперебійний" має означати "безперебійний сон". Коли процес перебуває у режимі безперебійного сну, його НЕ МОЖНА прокидатися сигналами, а також не обробляти сигнали.
  2. Процес обробляє сигнали, коли: a. він працює в режимі ядра і ось-ось повернеться в режим користувача. б. вона збирається перейти у стан сну і вийти з нього, коли сон перерваний.
  3. Що відбувається, коли процес сну прокидається сигналом? Він би обробляв сигнал, при цьому дія за замовчуванням виходила з процесу. Коли процес очікує завершення вводу / виводу, ви, звичайно, не хочете, щоб він закінчувався передчасно.

2

Деякі кодові шляхи в ядрі позначені безперебійними, в основному тому, що код повинен дотримуватися суворого часу (щоб відповісти на пристрій) або тому, що він робить щось, що не допускає втручання. У випадку з Linux, більшість перших були витіснені в незалежні протектори в ядрі, а другі були здебільшого помилковими (я підозрюю, що вони знаходяться в основному під тиском нинішніх багатопроцесорних машин). Тобто, вже деякий час я не бачив процесу в режимі безперебійного сну.


3
Спробуйте прочитати подряпаний компакт-диск.
Джошуа

1
Або встановити за допомогою sshfs, а потім потягнути за мережевий шнур. Безперервний сон трапляється навіть у наш час, коли основні засоби масової інформації / сховища активізуються. І зазвичай це кривавий біль у попі.
Нубарке
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.