Рівень блочного введення-виведення

стройства блочного вводу-виводу (блокові пристрої, пристрої введення-виведення блоками, block devices) – це апаратні пристрої, які дозволяють випадковим чином (тобто не обовязково послідовно) здійснювати доступ до фрагментів даних фіксованого розміру, званих блоками Найбільш часто зустрічається пристрій блочного впода-виводу – це жорсткий диск, але існують і інші блокові пристрою, наприклад пристрої роботи з гнучкими дисками, оптичними дисками (CD-ROM) і флеш-памяттю Слід звернути увагу, що файлові системи монтуються з таких пристроїв Саме таким чином

зазвичай і здійснюється доступ до пристроїв блокового вводу-виводу

Інший фундаментальний тип пристрою – це пристрій посимвольного вводу-виводу (символьне пристрій, character device, char device) Це-пристрій, до якого можна звертатися, тільки як до послідовного потоку даних, тобто байт за байтом Приклад символьних пристроїв – це послідовний порт і клавіатура Якщо ж устройстпо дозволяє звертатися до даних випадковим чином (НЕ послідовно), то це блоковий пристрій

Істотна відмінність між цими типами пристроїв виявляється, в основному, в можливості випадкового доступу до даних, тобто в можливості вироблятипошук (seek)по пристрою, переміщаючись з однієї позиції в іншу Як приклад, розглянемо клавіатуру Драйвер пристрою клавіатури на виході видає потік даних Коли друкують слово fox, то драйвер клавіатури повертає потік даних, в якому три символи йдуть строго в зазначеному порядку Зчитування символів в іншому порядку або зчитування якого-небудь іншого символу, крім наступного символу в потоці, має небагато сенсу Тому драйвер клавіатури – це пристрій посимвольного введення-виведення, він дозволяє на виході отримати потік символів, які користувач вводить на клавіатурі Операція читання даних з пристрою повертає спочатку символ f, потім символ о і врешті символ х. Коли натискань клавіш немає, то потік-порожній Жорсткий диск же працює по-іншому Драйвер жорсткого диска може зажадати читання вмісту певного блоку, а потім прочитати вміст іншого блоку, і ці блоки не обовязково повинні слідувати один за одним Тому доступ до даних жорсткого диска може виконуватися випадковим чином, а не як до потоку даних, і тому жорсткий диск-блоковий пристрій

Управління блоковими пристроями в ядрі вимагає більшої уваги, підготовки та роботи, ніж управління пристроями посимвольного введення-виведення Все це тому, що символьні пристрої мають всього одну позицію – поточну, в той час як блокові пристрої повинні мати можливість переміщатися туди і назад між будь-якими позиціями на фізичному носії інформації Виявляється, що немає необхідності створювати в ядрі цілу підсистему для обслуговування символьних пристроїв, а для блокових пристроїв це необхідно Така підсистема необхідна почасти через складності блокових пристроїв Однак основна причина такої потужної підтримки в тому, що блокові пристрої досить чутливі до продуктивності Вичавити максимум продуктивності з жорсткого диска значно важливіше, ніж отримати деякий приріст швидкості при роботі з клавіатурою Більш того, як буде видно далі, складність блокових пристроїв забезпечує великий простір для таких оптимізацій Предмет даної глави – як ядро ​​керує роботою блокових пристроїв і запитами до цих пристроїв Розглянута частина ядра називається рівнем, блочного вводу-виводу (block I / O layer)Цікаво, що удосконалення підсистеми блочного введення-виведення було однією з цілей розробляється серії ядра 25 У цій главі розглядаються всі нові особливості рівня блочного введення-виведення, які зявилися в ядрах серії 26

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*