Дефекты ядра

Дефекты ядра

Дефекты в ядре могут быть такими же разнообразными, как и дефекты в пользовательских программах. Они возникают по различным причинам и проявляются в разнообразных формах. Дефекты занимают диапазон от явно неправильного кода (например, запись правильного значения в неправильное место) до ошибок синхронизации (например, если не правильно блокируется совместно используемая переменная). Эти дефекты проявляются в любой форме; от плохой производительности до неправильного функционирования и даже до потери данных.

Часто, между тем моментом, когда в ядре возникла ошибка и тем моментом, когда пользователь ее заметил происходит большая цепь событий. Например, разделяемая структура данных, у которой нет счетчика использования может привести к возникновению состояния конкуренции за ресурс (race condition). Если не принять необходимых мер, то один процесс может освободить память, в которой хранится структура, в то время, как другой процесс может эту структуру все еще использовать. Спустя некоторое время второй процесс может обратиться к этим данным, что в свою очередь может привести к попытке разыменования указателя со значением NULL, если будут считаны случайные данные ("мусор"), или вообще не привести ни к чему плохому (если данные в соответствующей области памяти еще не были перезаписаны). Разыменование указателя со значением NULL приводит к выводу сообщения "oops", в то время, как случайный "мусор" может привести к потере данных (и соответственно к неправильному функционированию, или опять же к выводу сообщения "oops", но уже по другом поводу). Пользователь же заметит только неправильное функционирование или сообщение "oops". Разработчик ядра при этом должен пойти но обратному пути: исходя из ошибки определить, что к данным было обращение после того, как память с этими данными была освобождена, что это произошло в результате возникновения конкуренции за ресурс и исправить ошибку путем правильного учета количества ссылок на совместно используемую структуру данных. Для этого также вероятно потребуется применение блокировок.

Отладка ядра может показаться сложным делом, тем не менее, ядро не особо отличается от других больших программных проектов. У ядра есть свои уникальные особенности, такие как ограничения связанные со временем выполнения участков кода, возможности возникновения состояний конкуренции (race) — как результат параллельного выполнения множества потоков в ядре. Можно дать стопроцентную гарантию, что если приложить некоторые усилия и понимание, то проблемы ядра можно с успехом находить и решать (и даже, возможно, получать удовольствие от успешного преодоления трудностей).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

6.2.3 Размещение ядра

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

6.2.3 Размещение ядра Несмотря на то, что ядро работает в контексте процесса, отображение виртуальных адресов, связанных с ядром, осуществляется независимо от всех процессов. Программы и структуры данных ядра резидентны в системе и совместно используются всеми процессами.


17.5.7. Установка ядра

Из книги Применение Windows API автора Легалов А И

17.5.7. Установка ядра После этого остается сделать последний шаг - установить ядро и перезагрузиться. Для установки ядра вы должны иметь права суперпользователя. (Хотя в начале главы и было сказано, что для компиляции ядра надо иметь права суперпользователя, однако все


Дефекты OLE

Из книги Linux-сервер своими руками автора Колисниченко Денис Николаевич

Дефекты OLE Что является неправильным в OLEРассказ посвященного лицаПеревод А. И. ЛегаловаАнглоязычный оригинал находится на сервере компании Reliable SoftwareВы могли слышать или читать критические мнения относительно OLE. Программисты обычно жалуются на сложность системы


17.1.1. Настройка ядра

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

17.1.1. Настройка ядра Скорее всего, вам придется перекомпилировать ядро. При этом должны быть активизированы следующие опции: Networking support (CONFIG_NET) [у] TCP/IP networking (CONFIG_INET) [у] IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y]IP multicasting (CONFIG_IP_MULTICAST) [у]IP firewalling (CONFIG_IP_FIREWALL) [у]IP accounting (CONFIG_IP_ACCT) [y]Можно также


18 Компилирование ядра

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

18 Компилирование ядра В этой главе будет рассмотрены все этапы компилирования ядра, а также приведены рекомендации по повышению производительности системы.В показательных целях мною в примерах использовано ядро 2.2.17, но ниже написанное верно также и для более поздних


18.1. Параметры ядра

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

18.1. Параметры ядра Во время загрузки ядру ОС Linux могут быть переданы различные параметры. В этой главе будут рассмотрены не все параметры ядра (полное их описание занимает достаточно много места). За более подробным их описанием вам следует обратиться к BootPrompt-HOWTO. Передача


18.2. Конфигурирование ядра

Из книги Видео на вашем компьютере: ТВ тюнеры, захват кадра, видеомонтаж, DVD автора Буковецкая Оксана Александровна

18.2. Конфигурирование ядра Итак, немного разобравшись в параметрах ядра, приступим к его конфигурированию. Однако перед тем как приступить, убедитесь, что у вас установлены исходники ядра и пакет заголовков:kernel-2.2.17-21mdk.i586.rpmkernel-headers-2.2.17-21mdk.i586.rpmЗатем перейдите в каталог,


18.3. Компилирование ядра

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

18.3. Компилирование ядра Теперь, когда все устройства сконфигурированы, нужно сохранить файл конфигурации ядра и перейти непосредственно к этапу компилирования ядра. Введите команду:# make depПосле завершения ее работы необходимо ввести команду:# make bzImageЕсли исходники ядра и


Ошибки, дефекты и другие насекомые

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Ошибки, дефекты и другие насекомые Появление слова "жучок" в предыдущем анализе нарушений утверждений - хороший повод прояснить терминологию. Э. Дейкстра полагал, что появление термина "жучок" связано с жалкой попыткой программистов обвинить кого-то в том, что ошибка


3.8. Ограничения ядра

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

3.8. Ограничения ядра Большинству реализаций System V IPC свойственно наличие внутренних ограничений, налагаемых ядром. Это, например, максимальное количество очередей сообщений или ограничение на максимальное количество семафоров в наборе. Характерные значения этих


10.4.7. Дамп ядра

Из книги автора

10.4.7. Дамп ядра Хотя мы уже упоминали, что передача SIGTERM и SIGKILL функции kill() прерывает процесс, вы также можете использовать несколько других значений (все они описаны в главе 12). Некоторые из них, такие как SIGABRT, заставляют программу перед уничтожением сбрасывать дамп ядра


Наиболее распространенные дефекты изображения видео

Из книги автора

Наиболее распространенные дефекты изображения видео Прежде всего разберем, какими характерными дефектами страдает кадр, полученный путем видеозахвата. Чаще всего это:• недостаточная резкость;• слишком затемненный кадр;• искажения цвета изображения.Конечно, это не


3.8. Обновление ядра

Из книги автора

3.8. Обновление ядра Обновление программ позволяет получать новые возможности и исправлять ошибки, сделанные программистами в предыдущих версиях. Основа Linux — это ядро, и оно обновляется очень часто за счет динамичного развития этой ОС. Не пугайтесь ошибок, они есть


7.4.1. Версия ядра

Из книги автора

7.4.1. Версия ядра В файле /proc/version находится строка, описывающая номер версии и модификации ядра. В нее также включены сведения о создании ядра: имя пользователя, скомпилировавшего ядро, адрес компьютера, на котором это было сделано, дата компиляции и версия компилятора.


Контроль качества не должен находить дефекты

Из книги автора

Контроль качества не должен находить дефекты Я уже говорил это прежде и скажу снова. Несмотря на то что в вашей компании может существовать отдельная группа контроля качества, занимающаяся тестированием программных продуктов, группа разработки должна стремиться к тому,