Дефекти ядра

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

Часто, між тим моментом, коли в ядрі виникла помилка і тим моментом, коли користувач її помітив відбувається велика ланцюг подій Наприклад, Колективна структура даних, у якої немає лічильника використання може призвести до виникнення стану конкуренції за ресурс (race condition) Якщо не вжити необхідних заходів, то один процес може звільнити память, в якій зберігається структура, в той час, як інший процес може цю структуру все ще використовувати Через деякий час другий процес може звернутися до цих даних, що в свою чергу може привести до спроби разименованія покажчика зі значенням NULL, якщо будуть лічені випадкові дані (сміття), або взагалі не привести ні до чого поганого (якщо дані у відповідній області памяті ще не були перезаписані) Розіменування покажчика зі значенням NULL приводить до висновку повідомлення oops, в той час, як випадковий сміття може привести до втрати даних (і відповідно до неправильного функціонування, або знову ж висновку повідомлення oops , Але вже по іншому приводу) Користувач ж помітить тільки неправильне функціонування або повідомлення oops. Розробник ядра при цьому повинен піти але зворотного шляху: виходячи з помилки визначити, що до даних було звернення після того, як память з цими даними була звільнена, що це сталося в результаті виникнення конкуренції за ресурс і виправити помилку шляхом правильного обліку кількості посилань на спільно використовувану структуру даних Для цього також ймовірно буде потрібно застосування блокувань

Налагодження ядра може здатися складною справою, тим не менш, ядро ​​не особливо відрізняється від інших великих програмних проектів У ядра є свої унікальні особливості, такі як обмеження повязані з часом виконання ділянок коду, можливості виникнення станів конкуренції (race) – як результат паралельного виконання безлічі потоків в ядрі Можна дати стовідсоткову гарантію, що якщо прикласти деякі зусилля і розуміння, то проблеми ядра можна з успіхом знаходити і вирішувати (і навіть, можливо, отримувати задоволення від успішного подолання труднощів)

Джерело: Лав, Роберт Розробка ядра 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>

*

*