69291

Завдання підсистеми введення-виведення ядра

Лекция

Информатика, кибернетика и программирование

Планування введення-виведення звичайно реалізоване як середньотермінове планування. Як відомо, з кожним пристроєм пов’язують чергу очікування, під час виконання блокувального виклику (такого як read() або fcntl()) потік поміщають у чергу для відповідного пристрою...

Украинкский

2014-10-02

77 KB

1 чел.

Лекція № 18

Тема: Завдання підсистеми введення-виведення ядра

План

  1.  Планування операцій введення-виведення
  2.  Буферизація
  3.  Введення-виведення із розподілом та об'єднанням
  4.  Спулінг
  5.  Обробка помилок

У цьому розділі йтиметься про деякі можливості, які надає підсистема введення-виведення ядра, та їхнє місце в загальній інфраструктурі введення-виведення.

Планування операцій введення-виведення

Планування введення-виведення звичайно реалізоване як середньотермінове планування. Як відомо, з кожним пристроєм пов'язують чергу очікування, під час виконання блокувального виклику (такого як read() або fcntl()) потік поміщають у чергу для відповідного пристрою, з якої його звичайно вивільняє оброблювач переривання, як це було описано в розділі 15.3.2. Різним пристроям можуть присвоювати різні пріоритети. Ще одним прикладом планування введення-виведення є дискове планування, розглянуте в розділі 12.

Буферизація

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

Необхідність реалізації буферизації

Перелічимо причини, які викликають необхідність буферизації.

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

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

Необхідність підтримки для застосування семантики копіювання (copy semantics). Вона полягає в тому, що інформація, записана на диск процесом, має зберігатися в тому вигляді, у якому вона перебувала у пам'яті в момент записування, незалежно від змін, зроблених після цього.

Способи реалізації буферизації

Розглянемо різні способи реалізації буферизації (рис. 15.2).

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

Першим підходом, який реально використовують на практиці, є одинарна буферизація в ядрі. У цьому разі у ядрі створюють буфер, куди копіюють дані в міру їхнього надходження від пристрою. Коли цей буфер заповнюється, весь його вміст за одну операцію копіюють у буфер, що перебуває у просторі користувача. Аналогічно під час виведення даних їх спочатку копіюють у буфер ядра, після чого вже ядро відповідатиме за їхнє виведення на пристрій. Це дає змогу реалізувати семантику копіювання, оскільки після копіювання даних у буфер ядра інформація із буфера користувача у підсистему введення-виведення гарантовано більше не потрапить — процес може продовжувати свою роботу і використовувати цей буфер для своїх потреб.

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

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

Подвійна буферизація дає змогу відокремити виробника даних від їхнього споживача подібно до того, як це робилося для розв'язання задачі виробників-споживачів у розділах 5 і 6.

Буферизація і кешування

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

З іншого боку, ділянку пам'яті в деяких випадках можна використати і як буфер, і як кеш. Наприклад, якщо після виконання операції введення із використанням буфера надійде запит на таку саму операцію, дані можуть бути отримані із буфера, який при цьому буде частиною кеша. Сукупність таких буферів називають буферним кешем (buffer cache).

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

Введення-виведення із розподілом та об'єднанням

Цікавим підходом до оптимізації операцій введення-виведення, пов'язаним із записуванням великих обсягів даних протягом однієї операції, є введення-виведення з розподілом та об'єднанням (scatter-gather I/O). У даному випадку в системі дозволяється використовувати під час введення-виведення набір непов'язаних ділянок пам'яті. При цьому можливі дві дії:

♦  дані із пристрою відсилають у набір ділянок пам'яті за одну операцію введення (операція розподілу під час введення, scatter);

♦  усі дані набору ділянок пам'яті відсилають пристрою для виведення за одну операцію (операція об'єднання під час виведення, gather).

Виконання цих дій дає змогу обійтися без додаткових операцій доступу до пристрою, які потрібно було б виконувати, коли всі ділянки пам'яті були використані для введення-виведення по одній.

В UNIX-системах (відповідно до стандарту POSIX) введення із розподілом реалізують системним викликом readv(), виведення з об'єднанням — writev().

#include <sys/uio.h>

ssize_t readvCint fdl. const struct iovec *iov. int count);

ssize_t writevfint fdl, const struct iovec *iov. int count);

де: fdl — дескриптор відкритого файла;

і ov - масив структур, які задають набір ділянок пам'яті для введення і виведення;

count — кількість структур у масиві і о v.

Кожний елемент масиву містить два поля: iovjbase, що задає адресу ділянки пам'яті, та і ov_l en, що задає її довжину. Елемент масиву має бути повністю оброблений (наприклад, заповнений до довжини iovjen за виконання readv()) перед тим як система перейде до обробки наступного.

Виклик readv() повертає загальну кількість зчитаних байтів, а виклик wri tev() — записаних.

int bytes_read;

char buf0[1024]. bufl[512];

struct iovec iov[2];

iov[0].iov_base = bufO;

iov[l].iov_base = bufl;

і ov[0J. iovjen = sizeof(bufl):

iov[l].iovjen = sizeof(buf2);

// infile. outfile - дескриптори відкритих файлів

do {

// читання у два буфери

bytes_read - readv(infile, iov, 2);

// записування із двох буферів

if (bytes_read > 0) wn'tev(outfile, iov, 2); } while (bytes_read > 0);

Win32 API надає для введення із розподілом функцію ReadFi 1 eScatter(), а для виведення з об'єднанням - WriteFileGatherO.

Спулінг

Спулінг (spooling) — технологія виведення даних із використанням буфера, що працює за принципом FIFO. Такий буфер називають агулом (spool) або ділянкою спула (spool area).

Спулінг використовують тоді, коли виведення даних має виконуватися неподільними порціями (роботами, jobs). Неподільність робіт полягає в тому, що їхній вміст під час виведення не перемішується (тільки після виведення всіх даних однієї роботи має починатися виведення наступної). Прикладом такого виведення є робота із розподілюваним принтером, коли запити на друкування документів приходять від багатьох процесів у довільному порядку, але друкуватися документи можуть тільки по одному (тут роботою є документ). Іншим прикладом є відсилання електронної пошти (роботами є повідомлення).

Роботи надходять у спул і в ньому вишиковуються у FIFO-чергу (нові роботи додаються у її хвіст). Як тільки пристрій вивільняється, роботу із голови черги передають пристрою для виведення. Звичайно спулінг пов'язаний із повільними пристроями, тому найчастіше ділянку спула організовують на жорсткому диску, а роботи відображають файлами. Для керування спулом (підтримки черги, пересилання робіт на пристрій) зазвичай використовують фоновий процес або потік ядра. Має бути доступний інтерфейс керування спулом, за допомогою якого можна переглядати вміст черги, вилучати роботи з неї, міняти їхній порядок, тимчасово призупиняти виведення (наприклад, на час обслуговування пристрою).

Зазначимо, що загалом спулінг не можна назвати технологією керування введенням-виведенням режиму ядра — його часто реалізують процеси користувача (такі як демон друкування Ірг для UNIX).

Менш гнучкою альтернативою спулінгу є надання можливості монопольного захоплення пристрою потоками. Такий монопольний режим може, наприклад, задаватися під час відкриття пристрою, після чого інші потоки не зможуть отримати доступу до нього, поки цей режим не буде знято. Такий підхід вимагає реалізації синхронізації доступу до пристрою. У більшості випадків спулінг є гнучкішим і надійнішим вирішенням, але для таких пристроїв, як записувальний CD-дисковід або сканер, монопольне захоплення є прийнятним варіантом організації доступу.

Обробка помилок

У підсистемі введення-виведення під час роботи виникають різні помилки, які можна віднести до кількох категорій.

1) Помилки в програмному коді введення-виведення (доступ до відсутнього пристрою, недопустимі дії із пристроєм тощо). Реакцією на такі помилки звичайно є повернення коду помилки в застосування. Введення-виведення при цьому зазвичай не виконують (найнебезпечнішим видом помилки в цьому разі буде виконання операції із невірним пристроєм, оскільки така операція може відповідати коректній, але зовсім іншій операції для цього пристрою).

2)  Помилки, викликані апаратними проблемами. Серед них розрізняють:

викликані тимчасовими причинами (високе навантаження на мережу, сигнал «зайнято» для модему); для цих помилок звичайною реакцією є повторна спроба виконання введення-виведення;

що вимагають втручання користувача (відсутність дискети в дисководі, відсутність паперу у принтері); за такої помилки зазвичай потрібно попросити користувача виконати певні дії;

+  викликані некоректною роботою апаратного забезпечення (збій контролера, дефектні сектори на диску); у цьому разі важливим є надання користувачу (який може виявитися представником служби технічної підтримки фірми-розробника пристрою) якомога більше повної інформації про помилку (зазначимо, що після деяких таких помилок продовження роботи системи може стати неможливим). У програмному забезпеченні передача докладних відомостей про помилку є головним завданням підсистеми введення-виведення у разі виникнення проблеми. Справді, для більшості системних викликів інтерфейс повідомлень про помилки доволі скромний (цілочисловий код повернення, глобальна змінна errno), тому  розробникам драйверів необхідно передбачати додаткові способи отримання інформації про помилку.

Питання для самоконтролю:

  1.  Планування операцій введення-виведення
  2.  Буферизація
  3.  Причини, які викликають необхідність буферизації
  4.  Буферизація і кешування
  5.  Введення-виведення із розподілом та об'єднанням
  6.  Спулінг
  7.  Обробка помилок, їх категорії


 

А также другие работы, которые могут Вас заинтересовать

73778. Проблема «модели специалиста» и индивидуального стиля деятельности психолога 22.45 KB
  Обычно приводится примерно такое обоснование: невозможно втиснуть в модель все характеристики профессиональной деятельности вместе с необходимостью импровизировать в труде а также невозможно выделить общепризнанный стандартно–образцовый профиль личностных и профессиональных качеств специалиста под который можно было бы подгонять будущих психологов. Маркова выделяет следующие основные составляющие модели специалиста: 1 профессиограмму то есть описание самой деятельности психолога; 2 профессионально–должностные требования...
73779. Профессиональные деструкции в развитии психолога 22.97 KB
  Работа может способствовать личностному развитию но может иметь и отрицательные для личности последствия. Проблема в балансе соотношении позитивных и негативных изменений личности работника. Профессиональные деструкции проявляются в снижении эффективности труда в ухудшении взаимоотношений с окружающими в ухудшении здоровья и главное в формировании отрицательных личностных качеств и даже в распаде целостной личности работника. Специалисты обычно выделяют и анализируют негативные качества формирующиеся в работе школьных учителей: ...
73780. Эффективность труда психолога 20.5 KB
  Сложность оценки эффективности труда психолога связана с тем что основной результат его работы существует сокрыт во внутреннем мире других людей. Центральные вопросы связанные с оценкой эффективности деятельности профессионального психолога состоят в следующем: кто и по каким критериям может и должен производить эту оценку По всей видимости официально оценивать эффективность работы психолога должны четыре типа лиц или общественных групп: администрация организации где психолог работает профессиональное сообщество клиенты сам...
73781. Работа психолога в образовании: цели и направления работы 20.26 KB
  В рамках актуального направления обсуждаются и решаются злободневные проблемы и вопросы связанные с конкретными трудностями в обучении и воспитании детей с нарушениями в их поведении с трудностями в обшении в той или иной системе отношений и т. Разработано и используется много программ комплексного обследования детей. Психологическое просвещение направлено на приобщение взрослых и детей к психологическим знаниям. Психо-профилактическая работа формирование педагогов детей родителей или лиц их заменяющих общей психологической культуры...
73782. Работа психолога в производственных организациях 21.12 KB
  Эта цель достигается посредством решения следующих задач: Планирование и маркетинг персонала: Разработка кадровой политики и стратегии управления персоналом; анализ кадрового потенциала предприятия; анализ рынка труда; планирование и прогнозирование потребности в персонале; организация рекламы предприятия как работодателя поддержание его благоприятного имиджа; поддержка взаимосвязи с внешними источниками персонала...
73783. Работа психолога в здравоохранении 19.33 KB
  Важная роль медицинского психолога в лечебном процессе заключается в том что он способствует лучшему пониманию психологических причин и проявлений болезни человека. Многие психические болезни имеют психологические причины: конфликты психические травмы внушения самовнушения закрепившиеся патогенные реакции и состояния. Таким образом психолог оказывается очень полезен при составлении истории болезни больного. Психокоррекция направлена на исправление относительно стойких аномальных черт психики обусловливающих повышенный риск...
73784. Организация рабочего места психолога 24.72 KB
  Рабочего кабинета психолога с сейфом для хранения материалов. Рабочее место психолога должно быть автоматизировано: персональный компьютер с программным обеспечением; фонд психологических методик; закрытые шкафы для хранения психологической информации и документов конфиденциального характера; учебно-методические материалы психологический календарь почтовый ящик психолога психологические советы дня рекомендации для педагогов родителей и учащихся разного возраста; тематический стенд по актуальным проблемам социальной возрастной и...
73785. Специфика подготовки практических психологов 56.21 KB
  Психологическая структура учебной деятельности. Для того чтобы студенты могли более эффективно организовывать свою учебу им полезно уже с первых дней обучения познакомиться с основными положениями психологической теории учебной деятельности. Оно является процессом и результатом активной познавательной прежде всего мыслительной деятельности самого учащегося по поиску добыванию и умственной переработке научных знаний а также по применению этих знаний в жизни. При преобладании деловой мотивации мотивы учебной деятельности совершенно не...
73786. Отечественные и зарубежные профессиональные психологические сообщества 18.71 KB
  Помимо национальных ассоциаций в Союз входят различные международные объединения специализированной направленности например Международная ассоциация прикладной психологии Европейская ассоциация экспериментальных социальных психологов Европейская ассоциация психологии личности Международное общество изучения развития поведения и ряд других. В России таким обществом является – Российское Психологическое Общество в США – Американская Психологическая Ассоциация в Великобритании – Британское Психологическое Общество и т. В ряде стран...