Главная » Ядро Linux

Нижние половины

Добавлено Дата: 7 April, 2012 категория: Ядро Linux

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

Читать »

Выравнивание данных

Добавлено Дата: 7 April, 2012 категория: Ядро Linux

Выравнивание  (alignment) соответствует размещению порции данных в  памяти. Говорят, что переменная имеет естественное выравнивание (naturally aligned), если она находится в памяти по  адресу, значение которого кратно размеру этой переменной. Например,  переменная 32-разрядного типа данных имеет естественное выравнивание, если она  находится в памяти по  адресу, кратному 4 байт (т.е.  два  младших бита адреса равны нулю). Таким образом, структура данные размером 2n    байт должна храниться в памяти по  адресу, младшие n битов которого равны нулю.

Читать »

Анатомия блочного устройства

Добавлено Дата: 6 April, 2012 категория: Ядро Linux

Наименьший   адресуемый  элемент  блочного устройства называется  сектором. Размеры секторов — это  числа, которые являются целыми степенями двойки, однако  наиболее часто  встречающийся размер  — 512 байт.  Размер сектора—  это  физическая характеристика устройства, а  сектор  — фундаментальный элемент блочного устройства.  Устройства не  могут  адресовать или  другим  образом  работать  с  элементами  данных, размер  которых меньше,  чем  один  сектор, тем  не  менее  многие блочные  устройства могут  передавать несколько секторов за один  раз.  Хотя  большинство блочных устройств  и  имеет  размер   сектора,  равный  512  байт,  все  же  существуют и  другие  стандартные размеры сектора (например,  большинство компакт-дисков CD-ROM имеют  размер  сектора, равный 2 Кбайт).

Читать »

Магическая клавиша SysRq

Добавлено Дата: 6 April, 2012 категория: Ядро Linux

Использование магической клавиши SysRq, которую можно активизировать с помощью конфигурационного параметра CONFIG_MAGIC_SYSRQ на этапе компиляции, часто позволяет значительно  облегчить жизнь.  Клавиша  SysRq является  стандартной на многих клавиатурах. Для аппаратных платформ i386   и РРС ей соответствует комбинация клавиш ALT-PrintScreen . Если указанный конфигурационный параметр активизирован, то  специальные комбинации клавиш позволяют взаимодейство-

Читать »

API, POSIX и библиотека С

Добавлено Дата: 5 April, 2012 категория: Ядро Linux

Обычно  прикладные  программы  не  разрабатываются  с  непосредственным  использованием  системных  вызовов,  при  этом  используются  программные  интерфейсы  приложений  (Application  Programing Interface,  API).  Это  является важным,  так как  в таком  случае нет необходимости  в корреляции  между интерфейсами, которые используют  приложения, и интерфейсами, которые  предоставляет  ядро.  Различные API  определяют набор  программных интерфейсов,  которые используются приложениями. Эти  интерфейсы могут  быть  реализованы с помощью одного  системного вызова,  нескольких  системных  вызовов,  а также  вообще  без использования системных вызовов.  В действительности,  может  существовать один  и  тот  же  программный интерфейс приложений для  различных операционных систем, в то  время  как  реализация  этих API может для разных  ОС   существенно  отличаться.

Читать »

Обработчики прерываний

Добавлено Дата: 5 April, 2012 категория: Ядро Linux

Функция,  которую выполняет  ядро в ответ на определенное  прерывание,  называется   обработчиком   прерывания   (interrupt   handler)   ил и  подпрограммой  обслуживания прерывания (interrupt service routine). Каждому  устройству, которое  генерирует прерывания, соответствует свой обработчик  прерывания.  Например,  одна функция  обрабатывает прерывание  от системного таймера,  а другая — прерывания, сгенерированные  клавиатурой.  Обработчик  прерывания  для какого-либо устройства является  частью драйвера этого устройства — кода ядра,  который управляет устройством.

Читать »

Уровень событий ядра

Добавлено Дата: 4 April, 2012 категория: Ядро Linux

Уровень  событий ядра  (kernel  event  layer) — это подсистема, которая позволяет передавать информацию о различных событиях из ядра в пространство пользователя  и реализована, как  вы уже, наверное, догадываетесь, на базе объектов kobject . После  выпуска  ядра  версии  2.6.0 стало  ясно, что необходим механизм для отправления  сообщений из ядра в пространство пользователя, в частности для настольных рабочих  компьютеров, что позволит сделать  такие  системы более  функциональными, а также  лучше  использовать асинхронную обработку. Идея  состояла в том, что ядро  будет помещать возникающие события в стек.  Например, "Жесткий диск  переполнен!", "Процессор перегрелся!", "Раздел диска  смонтирован!", "На горизонте появился пиратский корабль!"  (последнее, конечно, шутка).

Читать »

Когда лучше использовать данные, связанные с процессорами

Добавлено Дата: 4 April, 2012 категория: Ядро Linux

Использование данных,  связанных с процессорами, позволяет получить  ряд преимуществ.   Во-первых, это  ослабление требований по  использованию блокировок. В зависимости от семантики доступа  к данным, которые  связаны с процессорами, может  оказаться, что блокировки вообще  не  нужны.  Следует  помнить, что правило "только один процессор может обращаться к этим данным" является всего лишь рекомендацией  для программиста. Необходимо специально гарантировать, что каждый  процессор  работает  только  со своими  данными. Ничто  не может  помешать нарушению этого  правила.

Читать »

Прерывания и обработка прерываний

Добавлено Дата: 4 April, 2012 категория: Ядро Linux

правление аппаратными устройствами, которые подключены к вычислительной  машине, — это одна из самых ответственных функций ядра.  Частью  этой работы является необходимость взаимодействия с отдельными устройствами машины. Поскольку процессоры обычно  работают  во много  раз быстрее, чем аппаратура, с которой они должны  взаимодействовать, то для ядра  получается неэффективным отправлять запросы и тратить  время, ожидая  ответы  от потенциально более  медленного оборудования. Учитывая небольшую скорость отклика оборудования, ядро должно  иметь  возможность оставлять на  время  работу  с оборудованием и выполнять  другие  действия, пока  аппаратное устройство не закончит обработку  запроса. Одно  из возможных решений этой  проблемы — периодический опрос оборудования (polling).  Ядро  периодически может  проверять состояние аппаратного устройства системы и соответственным образом реагировать. Однако такой  подход  вносит  дополнительные накладные расходы, потому  что, независимо от того, готов  ответ  от аппаратного устройства или  оно  еще выполняет запрос, все равно  осуществляется постоянный систематический опрос  состояния устройства через постоянные интервалы времени. Лучшим  решением является обеспечение механизма, который позволяет  подавать  ядру сигнал  о необходимости уделить  внимание оборудованию. Такой

Читать »

Завершение процесса

Добавлено Дата: 4 April, 2012 категория: Ядро Linux

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

Читать »

Какие обработчики нижних половин необходимо  использовать

Добавлено Дата: 3 April, 2012 категория: Ядро Linux

Решение о том, какой  из механизмов обработки нижних половин следует использовать, является важным. В современных ядрах серии  2.6 есть три варианта выбора: отложенные прерывания (softirq), тасклеты (tasklet)  и очереди  отложенных действий (work queue).  Тасклеты построены на основе  отложенных прерываний, и поэтому

Читать »

Перемещение по связанным спискам

Добавлено Дата: 3 April, 2012 категория: Ядро Linux

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

Читать »

Статическое выделение памяти в стеке

Добавлено Дата: 3 April, 2012 категория: Ядро Linux

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

Читать »

Секвентные блокировки

Добавлено Дата: 3 April, 2012 категория: Ядро Linux

Секвентная блокировка (seq  lock) — это  новый тип  блокировки, который появился  в ядрах  серии   2.6.  Эти  блокировки предоставляют очень  простой механизм чтения  и  записи  совместно  используемых данных.  Работа  таких  блокировок основана на  счетчике последовательности событий.  Перед  записью рассматриваемых данных захватывается спин-блокировка,  и  значение  счетчика увеличивается на  единицу. После  записи данных  значение счетчика снова  увеличивается на  единицу, и  спинблокировка освобождается, давая  возможность записи другим  потокам. Перед  чтением  и  после  чтения данных  проверяется значение счетчика. Если  два  полученных значения одинаковы, то  во время  чтения данных  новый акт  записи не  начинался, Если  к  тому  же  оба  эти  значения четные, то  к  моменту начала  чтения акт  записи был  закончен (при  захвате  блокировки на  запись значение счетчика становится нечетным, а перед  освобождением — снова  четным, так как  изначальное значение счетчика  равно  нулю).

Читать »

Использование отладчика gdb

Добавлено Дата: 3 April, 2012 категория: Ядро Linux

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

gdb vmlinux /proc/kcore

Файл vmlinu x — это декомпрессированный исполняемый образ ядра, который хранится в  корне каталога исходных кодов, где  выполнялась сборка выполняющегося ядра. Сжатые файлы zlmage, или bzlmage использовать нельзя.

Читать »