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

Управление памятью в ядре Linux

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

Таблица 11.1 . Зоны памяти для аппаратной платформы х86

Зона

Описание

Читать »

Множества объектов kse t

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

Множества kse t представляют собой коллекции объектов kobject . Множество kse t работает как базовый контейнерный класс для объектов, например, "все блочные устройства". Множества kse t очень похожи на типы ktype, и возникает вопрос: "Для чего нужны два разных обобщения?" Множество  kse t объединяет несколько объектов kobject , а типы ktype определяют общие свойства, которые связаны с объектами  kobjec t  одного типа. Существует возможность объединить объекты одного типа ktype в различные множества kset .

Читать »

Конфигурационные параметры отладки ядра

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

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

Читать »

Представление заплат

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

Заплата должна быть сгенерирована так, как описано в  предыдущем разделе. Если заплата касается определенного драйвера или подсистемы,  то заплату нужно отправить соответствующему ответственному разработчику,  одному из тех, которые перечислены в файле MAINTAINERS. Другой вариант — это отправить сообщение в список рассылки разработчиков ядра по адресу  linux-kernel@vger.kernel.org .

Читать »

Загрузка модулей

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

Наиболее простой способ загрузки модуля  — это  воспользоваться утилитой insmod. Эта  утилита   выполняет самые   общие   действия.  Она  просто   загружает  тот  модуль, который ей указан   в качестве параметра. Утилита   insmod  не  отслеживает зависимости  и не  выполняет никакой интеллектуальной обработки ошибок. Использовать ее очень  просто. От  пользователя root  необходимо просто   выполнить команду

Читать »

Работа с областями памяти

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

Ядру часто необходимо  определять,  соответствует ли  та  или иная  область памяти в  адресном пространстве процесса заданному критерию, например,  существует  ли заданный адрес в  области памяти. Эти операции являются основой работы функции mmap () , которая будет рассмотрена в  следующем разделе, и выполнять их приходится часто. Несколько  полезных для этого функций  объявлены в  файле

Читать »

Объединяем все вместе

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

Вернемся снова  к  подсчету   количества людей  в  комнате.  Допустим,  что  можно считать  по  одному  человеку за  секунду.   Следовательно, если  в  комнате  находится  7 человек, то подсчет  займет  7 секунд.   Очевидно, что  если  будет n человек, то подсчет всех  займет   n  секунд.   Поэтому можно сказать, что  этот  алгоритм масштабируется, как  О(n) . Что  если  задача  будет  состоять в  том, чтобы  станцевать перед  всеми, кто находится в комнате? Поскольку, независимо от того, сколько человек будет в комнате, это  займет  одно  и то же время, значит, этот  алгоритм масштабируется,  как  O(1) . В табл.  В.1  показаны другие  часто  встречающиеся характеристики сложности.

Читать »

Сообщения Oops

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

Сообщения oops — обычный для  ядра  способ сообщить пользователю, что произошло  что-то  нехорошее. Так  как  ядро  управляет всей  системой, то  оно  не  может  само себя  исправить, или  завершить, как  это  возможно для  программ пространства пользователя,  когда  они  делают  что-то   не  так.  Вместо  этого,  ядро  выводит сообщение oops . Такое  сообщение включает вывод  информации об  ошибке на  консоль, вывод дампа  содержимого всех  регистров и вывод  обратной трассировки вызовов функций (back  trace).  Сбои  в работе  ядра  трудно  обработать, поэтому ядро  должно "пролезть” через  многие дыры,  чтобы  вывести сообщение oop s  и  выполнить за  собой   все  необходимые действия по  очистке.  Часто   после   выдачи   сообщения  oop s  ядро  находится  в несогласованном состоянии. Например, в момент возникновения  ситуации, в  которой  выдается сообщение  oops , ядро  может  находится в  процессе обработки важных  данных. В  этот  момент может  удерживаться блокировка,  или  выполняться сеанс   взаимодействия  с  оборудованием.  Ядро  должно аккуратно  отойти от текущего состояния и  попытаться восстановить контроль над  системой. Во  многих  случаях это  невозможно. Если  ситуация, в которой выдается сообщение oops , возникает в контексте прерывания,  то  ядро  не  может  продолжать работу  и  переходит в  состояние  паники. Состояние паники проявляется в полной остановке системы. Если oop s  возникает в  холостой задаче   (idle  task,  идентификатор pi d  равен   нулю),  или при  выполнении процесса ini t  (идентификатор pi d равен  единице), то ядро  также переходит в состояние паники,  потому  что  ядро  не  может  продолжать выполнение

Читать »

Получение страниц памяти

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

Теперь, имея  некоторое понятие  о  том, как  ядро  упрапляет памятью с помощью страниц, зон  и  так  далее, давайте  рассмотрим интерфейсы,  которые реализованы в  ядре  для  того,  чтобы  выделять  и  освобождать  память   внутри  ядра.  Ядро  предоставляет  один  низкоуровневый интерфейс для  выделения памяти и несколько интерфейсов для  доступа  к  ней.  Все  эти  интерфейсы выделяют память  в объеме, кратном размеру  страницы,  и  определены в файле   <linux/gfp.h> .  Основная функция выделения памяти  следующая.

Читать »

Системные вызовы

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

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

Читать »

Объекты kobject и файловая система sysfs

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

нифицированнаямодельпредставленияустройств—этосущественноноваяособенность, которая появилась в ядрах серии  2.6.  Модель  устройств—  это  еди-

ный  механизм для  представления устройств  и описания их топологии в системе. Использование единого  представления устройств  позволяет получить  следующие преимущества.

Читать »

Размер машинного слова и типы данных

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

Машинное слово   (word)  — это  количество данных,  которые процессор  может обработать за  одну  операцию. Здесь  можно  применить  аналогию документа, состоящего  из  символов   (character,  8 бит)  и  страниц  (много слов).   Слово—  это  некоторое количество битов, как  правило 16, 32 или  64.  Когда  говорят о  "n-битовой" машине, то чаще  всего  имеют  в виду  размер  машинного слова.  Например, когда  говорят, что процессор Intel  Pentium — это  32-разрядный процессор, то обычно имеют  в виду размер  машинного слова, равный 32 бит, или  4 байт.

Читать »

Средства синхронизации в ядре – ЧАСТЬ 2

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

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

Читать »

Синхронизация и параллелизм

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

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

Читать »

Введение в ядро Linux

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

Д аже  после  трех десятилетий использования  операционная система   (ОС) Unix   все  еще  считается одной  из  самых  мощных и элегантных среди  всех существующих операционных систем.  Со  времени создания операционной системы Unix  в 1969 году, это детище  Денниса Ритчи  (Dennis Ritchie) и Кена Томпсона (Ken Thompson) стало легендарным творением, системой, принцип работы  которой

Читать »