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

Объект dentry

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

Как уже  рассказывалось,  подсистема VFS  представляет  каталоги  так  же,  как   и файлы. В  имени пути   /bin/vi ,  и  элемент bin , и  элемент vi — это  файлы, только bi n  — это   специальный  файл,  который является  каталогом,  a  vi  — это   обычный файл.  Объекты файловых индексов  служат для  представления обоих этих  компонентов.   Несмотря на  такую полезную унификацию,  подсистеме VFS  также необходимо

Читать »

Объекты VFS и их структуры данных

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

Виртуальная  файловая  система  (VFS)  объектно-ориентированна3 . Общая  файловая  модель  представлена  набором  структур  данных.  Эти  структуры  данных  очень похожи  на объекты.  Так  как ядро  программируется строго  на языке  С,  то,  при  отсутствии  возможностей  прямой  поддержки  парадигм  ООП  в языке  программирования,  структуры данных  представляются  структурами  языка  С.  Структуры  содержат как указатели  на элементы  данных,  так и указатели  на функции, которые  работают с этими данными.

Читать »

Объекты kobjec t

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

Сердцем модели представления устройств являются объекты kobject, которые представляются  с  помощью  структуры struc t   kobject , определенной в  файле

<linux/kobject.h> . Тип  kobjec t  аналогичен классу Objec t таких объектно-ориентированных языков программирования, как С# и Java. Этот тип определяет общую функциональность, такую как счетчик ссылок, имя, указатель на родительский объект, что позволяет создавать объектную иерархию.

Читать »

Критические участки и состояние конкуренции за ресурсы – ЧАСТЬ 2

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

Вначале кажется, что описанная ситуация не имеет  простого решения. Как  можно предотвратить чтение очереди на  одном  процессоре в тот  момент, когда  другой  процессор обновляет ее?  Вполне логично аппаратно реализовать простые инструкции, такие  как  атомарные арифметические операции  или  операции сравнения, тем  не менее  было  бы  смешно аппаратно реализовывать критические участки  неопределенного  размера, как  в приведенном примере. Все что нужно  — это  предоставить метод, который позволяет отметить начало  и конец; критического участка, и предотвратить или  заблокировать  (lock)  доступ  к этому  участку, пока  другой  поток  выполняет его.

Читать »

Дефекты ядра

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

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

Читать »

Экспортируемые символы

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

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

Читать »

Получение исходного кода ядра

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

Исходный программный код последней версии  ядра  всегда доступен  как  в виде полного архива  в формате tar (tarball), так и виде  инкрементной заплаты  по адресу http://www.kernel.org.

Если  нет  необходимости по  той  или  другой  причине работать  со  старыми версиями ядра, то  всегда  нужно  использовать самую  последнюю версию.  Архив kernel.or g — это то место, где можно  найти  как само ядро, так и заплаты  к нему от ведущих  разработчиков.

Читать »

Сообщество разработчиков ядра Linux

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

Когда  вы  начинаете разрабатывать код  ядра  Linux, вы  становитесь частью  глобального сообщества разработчиков ядра  Linux.  Главный форум  этого  сообщества — список рассылки разработчиков ядра Linux (linux-kernel mailing list). Информация по поводу  подписки на  этот  форум  доступна по  адресу  http://vger.kernel.org .  Следует заметить, что  это  достаточно перегруженный сообщения список рассылки (количество  сообщений порядка 300 в день)  и что другие  читатели этого  списка (разработчики  ядра, включая Линуса) не очень  склонны заниматься ерундой. Однако этот  список  рассылки может  оказать неоценимую помощь в процессе разработки;  здесь  вы сможете найти тестологов, получить экспертную оценку и  задать  вопросы.

Читать »

Блокировки между обработчиками нижних половин

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

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

Читать »

Параметры модулей

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

Ядро  Linux  предоставляет возможность драйверам  определять параметры,  которые  пользователь будет  указывать при  загрузке  ядра  или  модуля.   Эти  параметры будут доступны коду  модуля  в  качестве глобальных переменных.  Указанные  параметры модулей также будут  отображаться в файловой системе sysfs (см.  главу  17, "Объекты kobject   и  файловая  система sysf ").  Определять параметры  модуля  и управлять ими просто.

Читать »

Принцип работы и реализация

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

Компьютеры— это  предсказуемые устройства. Действительно, трудно  найти  случайное  поведение в системе, поведение которой можно  практически полностью программировать. Однако окружающая среда, где находится машина, полна  различных шумов, которые недетерминированы и которые можно  измерить. Источники таких шумов включают моменты времени, в которые возникают события, связанные с аппаратными устройствами, а также  события, связанные с взаимодействием пользователей и компьютера. Например,  интервалы времени между нажатиями клавиш, перемещения мыши, интервалы времени между некоторыми типами прерываний и время  выполнения запроса блочного ввода-вывода являются недетерминированными, и, кроме  того, их не может  измерить внешний злоумышленник. Случайная информация, которая получается из этих событий, записывается в пул энтропии. Пул растет и заполняется случайными и непредсказуемыми шумовыми данными. По мере добавления данных  в пул вычисляется оценка энтропии, и итоговое  значение запоминается. Это позволяет всегда иметь информацию о значении энтропии в пуле. На рис. Б.1  показана диаграмма прохождения потока  энтропии в пул и из пула.

Читать »

Спин-блокировки чтения-записи

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

Иногда в  соответствии с  целью   использовани я  блокировок их  можпо   разделить  два типа — блокировки чтения (reader  lock)  и  блокировки записи  (writer  lock). Рассмотрим некоторый список,  который может  обновляться и  в котором может  выполняться поиск. Когда  список обновляется (в него  осуществляется запись),  никакой  другой  код  не  может  параллельно осуществлять запись  или чтение  этого  списка. Запись означает исключительный доступ.  С другой  стороны, если  в списке выполняется  поиск (чтение информации), важно  только, чтобы  никто другой  не  выполнял записи в  список.  Работа  со  списком заданий в  системе (как  обсуждалось в  главе  3, "Управление процессами")  аналогична  только   что  описанной  ситуации. Не  удивительно, что список заданий в системе защищен с помощью спин-блокировки чтениязаписи  (reader-writer spin  lock).

Читать »

Уровень обобщенной файловой системы

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

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

Читать »

Дескриптор памяти

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

Ядро представляет адресное пространство процесса в виде структуры данных, которая называется  дескриптором памяти. Эта  структура содержит всю  информацию, которая относится к  адресному пространству процесса. представляется с  помощью  структуры  struc t   mm_struct,  которая определена в  файле

Читать »

Буферный кэш

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

В операционной  системе  Linux больше  нет  отдельного  буферного  кэша.  В ядрах серии   2.2  существовало два отдельных кэша:   страничный и  буферный. В первом кэшировалисы страницы памяти, а в другом — буферы.  Эти  два кэша  не  были  объединены  между собой.  Дисковый  блок мог находиться  в обоих кэшах  одновременно.   Это требовало больших  усилий  по  синхронизации двух кэшированных копий,  не  говоря уже о  напрасной трате  памяти.

Читать »