Устойчивость функции printk()

Устойчивость функции printk()

Одно из проверенных и часто используемых свойств функции printk() — это ее устойчивость. Функцию printk() можно вызывать практически в любое время и в любом месте ядра. Её можно вызывать из контекста прерывания и из контекста процесса. Её можно вызывать во время удержания блокировки. Её можно вызывать одновременно на нескольких процессорах и она не требует при этом удерживать какие-нибудь блокировки.

Эта функция очень устойчива, и это очень важно, потому что полезность функции printk() базируется на том факте, что она всегда доступна и всегда работает.

Неустойчивость функции printk()

Слабое место у функции printk() в плане устойчивости все же существует. Её нельзя использовать до некоторого момента при загрузки ядра, пока консоль еще не инициализирована. Действительно, если нет консоли, то куда будут выводится сообщения?

Обычно это не проблема, если не нужно выполнять отладку кода, который выполняется на очень ранних стадиях процесса загрузки (например, функции setup_arch(), которая выполняет инициализацию специфичную для аппаратной платформы). Отладка такого рода — настоящая задача: отсутствие каких-либо способов вывода сообщений, а только проблема в полном составе.

В таких ситуациях тоже есть некоторые обнадеживающие моменты, но их не много. Настоящие хакеры, которые работают с аппаратурой на таком низком уровне, для связи с внешним миром используют аппаратное обеспечение соответствующей платформы, которое всегда работает (например, последовательный порт). Поверьте, что у большинства людей такая работа не вызовет радости. Для одних аппаратных платформ такое решение работает, для других платформ (включая платформу i386) существуют заплаты кода, которые тоже позволяют сэкономить время.

Одно из решений проблемы — вариант функции printk(), который может выводить информацию на консоль на очень ранних стадиях процесса загрузки — early_printk(). Поведение этой функции аналогично функции printk(), за исключением имени и возможности работать на очень ранних стадиях загрузки. Однако, такое решение не переносимо, потому что не для всех поддерживаемых аппаратных платформ этот метод работы реализован. Если же он есть, то может сослужить хорошую службу.

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

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

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

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

А.2.2.2 Устойчивость к ошибке (Fault tolerance)

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ ОЦЕНКА ПРОГРАММНОЙ ПРОДУКЦИИ ХАРАКТЕРИСТИКИ КАЧЕСТВА И РУКОВОДСТВА ПО ИХ ПРИМЕНЕНИЮ автора Автор неизвестен

А.2.2.2 Устойчивость к ошибке (Fault tolerance) Атрибуты программного обеспечения, относящиеся к его способности поддерживать определенный уровень качества функционирования в случаях программных ошибок или нарушения определенного интерфейса.Примечание - Определенный уровень


А.2.5.3 Устойчивость (Stability)

Из книги Энциклопедия разработчика модулей ядра Linux автора Померанц Ори

А.2.5.3 Устойчивость (Stability) Атрибуты программного обеспечения, относящиеся к риску от непредвиденных эффектов


Замена для printk

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен


1.6.8. Правило устойчивости: устойчивость-следствие прозрачности и простоты

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

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


1.6.8. Правило устойчивости: устойчивость — следствие прозрачности и простоты

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

1.6.8. Правило устойчивости: устойчивость — следствие прозрачности и простоты Программное обеспечение называют устойчивым, когда оно выполняет свои функции в неожиданных условиях, которые выходят за рамки предположений разработчика, столь же хорошо, как и в нормальных


Устойчивость (Robustness)

Из книги MySQL: руководство профессионала автора Паутов Алексей В

Устойчивость (Robustness) Определение: устойчивостьУстойчивость - это способность ПО соответствующим образом реагировать на аварийные ситуации.Устойчивость дополняет корректность. Корректность относится к поведению системы в случаях, определенных спецификацией;


4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации

Из книги Цифровой журнал «Компьютерра» № 93 [31.10.2011 — 06.11.2011] автора Журнал «Компьютерра»

4.5.3. Функции, которые создают новые конфигурации из существующих 4.5.3.1. Функции геометрии, которые производят новые конфигурации Раздел "4.5.2. Функции Geometry" обсуждает несколько функций, которые создают новые конфигурации из


Кафедра Ваннаха: География и устойчивость Ваннах Михаил

Из книги OrCAD PSpice. Анализ электрических цепей автора Кеоун Дж.

Кафедра Ваннаха: География и устойчивость Ваннах Михаил Опубликовано 31 октября 2011 года Самым дешёвым устройством хранения информации, предоставленным нам технологической цивилизацией, остается жёсткий диск. Именно на нём живёт библиотека в


8. Устойчивость и автоколебания

Из книги Цифровой журнал «Компьютерра» № 127 [25.06.2012 — 01.07.2012] автора Журнал «Компьютерра»

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


Кафедра Ваннаха: География и устойчивость

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Кафедра Ваннаха: География и устойчивость Автор: Ваннах МихаилОпубликовано 31 октября 2011 годаСамым дешёвым устройством хранения информации, предоставленным нам технологической цивилизацией, остается жёсткий диск. Именно на нём живёт библиотека в "тяжёлых" графических


Устойчивость

Из книги C++ для начинающих автора Липпман Стенли

Устойчивость Когда транзакция завершается, ее изменения должны быть устойчивыми - т. е. новое состояние всех объектов, видимых другим транзакциям после подтверждения, будет сохранено и будет постоянным, независимо от наличия ошибок в оборудовании или краха программного


Функция printk()

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

Функция printk() Функция форматированного вывода сообщений printk() работает аналогично библиотечной функции printf() языка С. Действительно в этой книге до этого момента мы не видели никаких существенных отличий в ее использовании. Для большинства задач это именно так: функция


Замечание относительно функции printk() и разработки ядра

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

Замечание относительно функции printk() и разработки ядра Когда впервые начинают разрабатывать код ядра, то скорее всего очень часто приходится заменять функцию printf() на функцию printk(). Это нормально, потому что нельзя не принимать во внимание многолетний опыт по написанию