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

Файловые системы в операционной системе Linux

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

Операционная система Linux  поддерживает большой набор  файловых систем, от "родных"  ext2  и  ext3 до  сетевых  файловых систем,  таких  как  NFS  или  Coda.   Сейчас в  официальном ядре  ОС  Linux  поддерживается более  50 файловых систем. Уровень VFS обеспечивает все  эти  разнообразные файловые системы общей  базой  для  их реализации и общим интерфейсом для  работы  со стандартными системными вызовами. Следовательно, уровень виртуальной файловой  системы позволяет  четким образом реализовать поддержку новых  файловых систем   в  операционной  системе Linux,  a также  дает  возможность работать  с  этими файловыми системами с  помощью стандартных   системных вызовов Unix.

Читать »

Порядок выполнения операций процессором

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

Вспомните из  материала главы  9,  "Средства  синхронизации в ядре",  что  для  различных  аппаратных платформ  процессоры  в  разной степени изменяют порядок выполнения  программных инструкций. Для  некоторых процессоров порядок выполнения  операций строго  соблюдается,  запись  данных  в память  и считывание данных  из памяти выполняются в  строго  указанном в  программе порядке.  Другие  процессоры имеют  ослабленные требования  к  порядку выполнения  операций  считывания и  записи  данных  и  могут  изменять порядок выполнения  этих  операций с  целью  оптимизации.

Читать »

Конфликт при захвате блокировки имасштабируемость

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

Термин "конфликт при захвате блокировки" (lock contention, или просто contention) используется для описания  блокировки, которая  в данный момент захвачена и на освобождение которой ожидают другие потоки. Блокировки с высоким уровнем конфликтов (highly contended) — это те, на освобождение которых всегда ожидает много потоков. Так как задача блокировок — это сериализация доступа к ресурсу, то не вызовет большого удивления тот факт,  что блокировки  снижают производительность системы.  Блокировка  с высоким  уровнем конфликтов  может стать узким местом в системе,  быстро уменьшая производительность.  Конечно,  блокировки  необходимы для того, чтобы предотвратить "развал" системы,  поэтому решение  проблемы высокого уровня конфликтов  при блокировках  также должно обеспечивать необходимую защиту от состояний  конкуренции  за ресурсы.

Читать »

Написание обработчика прерывания

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

Следующее описание является типичным для обработчика прерывания.

static irqreturn_t intr_handler (int irq, void *dev_id, struct pt_regs *regs)

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

Читать »

Внизу обработки нижних половин

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

В этой  главе  были  рассмотрены  три  механизма,  которые  используются  для  реализации  отложенных  действий  в ядре  Linux, — отложенные  прерывания   (softirq), тасклеты  (tasklet)  и очереди отложенных действий  (work queue).  Было  показано,   как эти  механизмы  работают  и как  они  реализованы.  Также  обсуждались основные  моменты,  связанные  с использованием  этих механизмов  в собственном  программном коде,  и  было  показано,   какие  у них неподходящие  названия.  Для  того чтобы восстановить  историческую  справедливость,   мы  также  рассмотрели  те  механизмы  обработки  нижних  половин,  которые  существовали  в предыдущих версиях ядра Linux: механизмы  ВН и task queue.

Читать »

Условные переменные

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

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

Читать »

Лифтовой алгоритм Линуса – ЧАСТЬ 1

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

Рассмотрим некоторые планировщики ввода-вывода, применяемые в  реальной жизни.  Первый планировщик ввода-вывода, который мы  рассмотрим,  называется Linus  Elevator (лифтовой алгоритм  Линуса). Это  не опечатка, действительно существует лифтовой планировщик,  разработанный Лисусом Торвальдсом и названный в его честь!  Это  основной планировщик ввода-вывода в ядре  2.4.  В ядре  2.6  его  заменили другими  планировщиками,  которые мы  ниже  рассмотрим. Однако поскольку этот  алгоритм  значительно проще новых  и в то же время  позволяет выполнять почти  те же функции, то он  заслуживает внимания.

Читать »

Планирование выполнения процессов

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

предыдущей  главе  были  рассмотрены  процессы— абстракция  операционной системы, связанная с активным программным кодом.  В этой  главе  представлен

планировщик процессов — код, который позволяет процессам выполняться.

Читать »

Абсолютное  время

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

Текущее  значение абсолютного времени (time  of day, wall time, время  дня)  определено  в файле  kernel/timer. с следующим образом.

struct timespec xtime;

Структура данных  timespe c  определена в  файле <linux/time.h > в  следующем виде.

Читать »

BLK: Большая блокировка ядра

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

Добр о  пожаловать к  "рыжему   пасынку"  ядра.   Большая  блокировка ядра   (Big Kernel  Lock, BKL)  — это  глобальная спин-блокировка,  которая была  создана специально  для  того, чтобы  облегчить переход  от первоначальной реализации SMP  n операционной системе Linux  к мелкоструктурным блокировкам. Блокировка BKL  имеет следующие интересные свойства.

Читать »

Генератор  случайных чисел ядра

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

ядре  Linux реализован генератор случайных чисел, который теоретически может генерировать истинно случайные числа. Генератор случайных чисел собира-

ет в

пул энтропии

шумы внешней среды, которые поступают из драйверов устройств.

Читать »

Отображение верхней памяти

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

По определению, страницы верхней памяти не могут постоянно отображаться в адресное пространство ядра. Поэтому страницы памяти, которые были выделены с помощью функции alloc_page s () ,  пр и использовании флага    GFP    HIGHMEM могут не иметь логического адреса.

Читать »

Организация команды разработчиков

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

Разработчик и  — эт о  хакеры ,  которы е  занимаютс я  развитие м  ядр а  Linux . Некоторые делают  это  за деньги, для  некоторых это  хобби, но  практически все  делают  это  с удовольствием. Разработчики ядра,  которые внесли существенный вклад, перечислены в файле  CREDITS,  который находится в корневом  каталоге дерева  исходных  кодов   ядра.

Читать »

Структуры данных, связанные с файловыми системами

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

В дополнение к фундаментальным объектам подсистемы VFS, ядро использует и другие стандартные структуры данных для управления данными, связанными с файловыми системами. Первый объект используется для  описания конкретного типа файловой системы, как, например, ext.3 или  XFS.  Вторая структура данных используется для описания каждого экземпляра смонтированной файловой системы.

Читать »

Другие объекты подсистемы VFS

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

Структуры для VFS — это самая  "любимая"  вещь, и в этой  подсистеме существуют не только  рассмотренные структуры, но и еще некоторые. Каждая зарегистрированная  файловая система  представлена  структурой  file_system_type , Объекты этого типа  описывают файловую систему  и ее свойства. Более  того, каждая  точка  монтирования предстаплена в виде  структуры  vfsmount.  Эта  структура  содержит информацию  о точке монтирования, такую как ее положение и флаги, с которыми выполнена операция монтирования.

Читать »