Дефекты ядра
Дефекты ядра
Дефекты в ядре могут быть такими же разнообразными, как и дефекты в пользовательских программах. Они возникают по различным причинам и проявляются в разнообразных формах. Дефекты занимают диапазон от явно неправильного кода (например, запись правильного значения в неправильное место) до ошибок синхронизации (например, если не правильно блокируется совместно используемая переменная). Эти дефекты проявляются в любой форме; от плохой производительности до неправильного функционирования и даже до потери данных.
Часто, между тем моментом, когда в ядре возникла ошибка и тем моментом, когда пользователь ее заметил происходит большая цепь событий. Например, разделяемая структура данных, у которой нет счетчика использования может привести к возникновению состояния конкуренции за ресурс (race condition). Если не принять необходимых мер, то один процесс может освободить память, в которой хранится структура, в то время, как другой процесс может эту структуру все еще использовать. Спустя некоторое время второй процесс может обратиться к этим данным, что в свою очередь может привести к попытке разыменования указателя со значением NULL, если будут считаны случайные данные ("мусор"), или вообще не привести ни к чему плохому (если данные в соответствующей области памяти еще не были перезаписаны). Разыменование указателя со значением NULL приводит к выводу сообщения "oops", в то время, как случайный "мусор" может привести к потере данных (и соответственно к неправильному функционированию, или опять же к выводу сообщения "oops", но уже по другом поводу). Пользователь же заметит только неправильное функционирование или сообщение "oops". Разработчик ядра при этом должен пойти но обратному пути: исходя из ошибки определить, что к данным было обращение после того, как память с этими данными была освобождена, что это произошло в результате возникновения конкуренции за ресурс и исправить ошибку путем правильного учета количества ссылок на совместно используемую структуру данных. Для этого также вероятно потребуется применение блокировок.
Отладка ядра может показаться сложным делом, тем не менее, ядро не особо отличается от других больших программных проектов. У ядра есть свои уникальные особенности, такие как ограничения связанные со временем выполнения участков кода, возможности возникновения состояний конкуренции (race) — как результат параллельного выполнения множества потоков в ядре. Можно дать стопроцентную гарантию, что если приложить некоторые усилия и понимание, то проблемы ядра можно с успехом находить и решать (и даже, возможно, получать удовольствие от успешного преодоления трудностей).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
10.4.7. Дамп ядра
10.4.7. Дамп ядра Хотя мы уже упоминали, что передача SIGTERM и SIGKILL функции kill() прерывает процесс, вы также можете использовать несколько других значений (все они описаны в главе 12). Некоторые из них, такие как SIGABRT, заставляют программу перед уничтожением сбрасывать дамп ядра
Контроль качества не должен находить дефекты
Контроль качества не должен находить дефекты Я уже говорил это прежде и скажу снова. Несмотря на то что в вашей компании может существовать отдельная группа контроля качества, занимающаяся тестированием программных продуктов, группа разработки должна стремиться к тому,
6.2.3 Размещение ядра
6.2.3 Размещение ядра Несмотря на то, что ядро работает в контексте процесса, отображение виртуальных адресов, связанных с ядром, осуществляется независимо от всех процессов. Программы и структуры данных ядра резидентны в системе и совместно используются всеми процессами.
3.8. Обновление ядра
3.8. Обновление ядра Обновление программ позволяет получать новые возможности и исправлять ошибки, сделанные программистами в предыдущих версиях. Основа Linux — это ядро, и оно обновляется очень часто за счет динамичного развития этой ОС. Не пугайтесь ошибок, они есть
17.5.7. Установка ядра
17.5.7. Установка ядра После этого остается сделать последний шаг - установить ядро и перезагрузиться. Для установки ядра вы должны иметь права суперпользователя. (Хотя в начале главы и было сказано, что для компиляции ядра надо иметь права суперпользователя, однако все
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 Компилирование ядра
18 Компилирование ядра В этой главе будет рассмотрены все этапы компилирования ядра, а также приведены рекомендации по повышению производительности системы.В показательных целях мною в примерах использовано ядро 2.2.17, но ниже написанное верно также и для более поздних
18.1. Параметры ядра
18.1. Параметры ядра Во время загрузки ядру ОС Linux могут быть переданы различные параметры. В этой главе будут рассмотрены не все параметры ядра (полное их описание занимает достаточно много места). За более подробным их описанием вам следует обратиться к BootPrompt-HOWTO. Передача
18.2. Конфигурирование ядра
18.2. Конфигурирование ядра Итак, немного разобравшись в параметрах ядра, приступим к его конфигурированию. Однако перед тем как приступить, убедитесь, что у вас установлены исходники ядра и пакет заголовков:kernel-2.2.17-21mdk.i586.rpmkernel-headers-2.2.17-21mdk.i586.rpmЗатем перейдите в каталог,
18.3. Компилирование ядра
18.3. Компилирование ядра Теперь, когда все устройства сконфигурированы, нужно сохранить файл конфигурации ядра и перейти непосредственно к этапу компилирования ядра. Введите команду:# make depПосле завершения ее работы необходимо ввести команду:# make bzImageЕсли исходники ядра и
3.8. Ограничения ядра
3.8. Ограничения ядра Большинству реализаций System V IPC свойственно наличие внутренних ограничений, налагаемых ядром. Это, например, максимальное количество очередей сообщений или ограничение на максимальное количество семафоров в наборе. Характерные значения этих
7.4.1. Версия ядра
7.4.1. Версия ядра В файле /proc/version находится строка, описывающая номер версии и модификации ядра. В нее также включены сведения о создании ядра: имя пользователя, скомпилировавшего ядро, адрес компьютера, на котором это было сделано, дата компиляции и версия компилятора.
Дефекты OLE
Дефекты OLE Что является неправильным в OLEРассказ посвященного лицаПеревод А. И. ЛегаловаАнглоязычный оригинал находится на сервере компании Reliable SoftwareВы могли слышать или читать критические мнения относительно OLE. Программисты обычно жалуются на сложность системы
Наиболее распространенные дефекты изображения видео
Наиболее распространенные дефекты изображения видео Прежде всего разберем, какими характерными дефектами страдает кадр, полученный путем видеозахвата. Чаще всего это:• недостаточная резкость;• слишком затемненный кадр;• искажения цвета изображения.Конечно, это не
Ошибки, дефекты и другие насекомые
Ошибки, дефекты и другие насекомые Появление слова "жучок" в предыдущем анализе нарушений утверждений - хороший повод прояснить терминологию. Э. Дейкстра полагал, что появление термина "жучок" связано с жалкой попыткой программистов обвинить кого-то в том, что ошибка