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

Работа со связанными списками

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

Для работы со  связанными списками ядро предоставляет семейство функций. Все они принимают указатели на одну или более структур lis t  head. Все функции выполнены как функции с подстановкой тела (inline) на языке С, и их все можно найти в  файле <linux/list.h> .

Читать »

Алгоритм планирования – ЧАСТЬ 1

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

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

Читать »

Функцииmmap() и do_mmap(): создание интервала адресов

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

Функция do_mmap() используется ядром  для создания нового  линейного интервала адресов.  Говорить, что эта функция создает  новую  область  VMA, — технически не корректно, поскольку если  создаваемый интервал адресов  является смежным с существующим интервалом адресов  и у этих интервалов одинаковые права  доступа, то два интервала объединяются в один.  Если это невозможно, то создается новая  область VMA. В любом  случае  функция do_mmap() — это функция, которая добавляет интервал адресов  к адресному пространству процесса, независимо от того, создается ли при  этом  новая  область  VMA или  расширяется существующая.

Читать »

Путаница со структурами

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

Те  несколько  структур, которые только   что  были  описаны,  приводят к  путанице  не  потому,  что  их  много   (только четыре)   или  они  сложные (все  они  достаточно просты), а потому  что  они  сильно друг с другом  переплетаются. При  использовании объектов  kobjec t  достаточно сложно  рассказать  об  одной   структуре,  не  упоминая другие.   Тем  не  менее,  на  основании  рассмотренных особенностей  этих  структур можно построить прочное понимание их взаимоотношений.

Читать »

Сборка модулей

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

Благодаря новой  системе сборки  "kbuild", в  ядрах  серии   2.6  сборка модулей   выполняется значительно проще, чем  в старых  сериях.  Первое, что  нужно  сделать  при сборке модулей, — это  решить, где будет находиться исходный код  модуля.  Исходный код  модуля  необходимо правильно объединить с  деревом   исходных кодов  ядра.  Это можно сделать  в виде  заплаты или  путем  добавления в официальное дерево  исходного кода  ядра.  Кроме этого, можно компилировать исходный код  модуля  отдельно от исходных кодов  ядра.

Читать »

Генерация ошибок и выдача информации

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

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

Читать »

Сложность алгоритмов

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

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

Читать »

Сага об отладчике ядра

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

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

Читать »

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

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

Если же для запроса, который находится в голове FIFO-очереди записи или FIFOочереди  чтения, истекает период  ожидания (т.е. текущий момент  времени становится большим, чем  момент  времени, когда  истекает период  ожидания, связанный с запросом), то deadline-планировщик начинает обрабатывать запросы из соответствующей  очереди  FIFO. Таким  образом планировщик с лимитом по времени пытается гарантировать, что запросы не будут ожидать  дольше  максимального периода ожидания  (рис.  13.3).

Читать »

Счетчики ссылок

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

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

Читать »

Объект file

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

Последним  из основных объектов подсистемы VFS рассмотрим объект файла. Объект File используется для представления файлов, которые открыты процессом. Когда мы думаем о  подсистеме VFS с  точки зрения пространства пользователя, то объект файла — это то, что первое приходит в  голову. Процессы непосредственно работают с файлами, а не с суперблоками, индексами или элементами каталогов. Не удивительно, что информация,  которая содержится в объекте file, наиболее привычна (такие данные, как режим доступа или текущее смещение), а файловые операции очень похожи на знакомые системные вызовы, такие как rea d ()  и writ e ().

Читать »

Реализация системных вызовов

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

Реализация системного вызова  в ОС  Linux  не  связана с поведением обработчика системных вызовов. Добавление нового  системного вызова  в операционной системе Linux  является сравнительно простым делом.  Тяжелая работа  связана с разработкой и реализацией самого   системного вызова.  Регистрация  его  в ядре  проста. Давайте рассмотрим шаги, которые необходимо предпринять, чтобы  написать новый системный  вызов  в операционной системе Linux.

Читать »

Модуль "Hello,World!"

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

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

Читать »

Структуры данных, связанные с процессом

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

Каждый процесс в системе  имеет  свои  открытые файлы, корневую файловую систем);  текущий рабочий каталог, точки  монтирования и т.д. Следующие три структуры данных  связывают вместе  подсистему VFS и процессы,  которые выполняются в системе. Это  структуры   files_struct ,  fs_struc t   и  namespace.

Читать »

Таймеры и управление временем

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

тслеживание хода времени очень  важно  для ядра.  Большое количество функций, которые выполняет ядро, управляются временем (time  driven), в отличие

от тех функций, которые выполянются по событиям

Читать »