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

Стиль написания исходного кода

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

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

Читать »

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

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

Функция effective_pri o ()   возвращает значение динамического приоритета задачи. Эта функция исходит из значения параметра пicе для данной  задачи  и вычисляет для этого значения надбавку  или  штраф  в диапазоне от -5 до 5, в зависимости от интерактивности задачи.  Например, задание  с высокой интерактивностью, которое имеет  значение параметра nice, равное  10, может  иметь  динамический приоритет, равный  5. И наоборот, программа со значением параметра nice, равным  10, которая достаточно  активно использует процессор,  может  иметь  динамический приоритет, равный   12. Задачи,  которые  обладают  умеренной интерактивностью,  не  получают ни надбавки, ни  штрафа, и их динамический приоритет совпадает  со значением параметраnice.

Читать »

Барьеры и порядок выполнения

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

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

Читать »

Вытеснение и переключение контекста

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

Переключение контекста — это  переключение от одной, готовой  к выполнению задачи  к другой.  Это  переключение производится с помощью функции context_switch() , определенной в файле  kernel/sched.с . Данная функция вызывается функцией schedule  (), когда новый  процесс выбирается для выполнения. При  этом  выполняются следующие шаги.

Читать »

Не нужно прерывать, мы почти закончили!

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

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

Читать »

Очереди  отложенных действий

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

Очереди  отложенных действий (work queue)  — это еще  один  способ  реализации отложенных операций, который отличается от рассмотренных ранее.  Очереди  действий  позволяют откладывать некоторые операции для  последующего выполнения потоком пространства ядра — отложенные действия всегда выполняются в контексте процесса. Поэтому код, выполнение которого отложено с помощью постановки в  очередь  отложенных действий, получает  все  преимущества, которыми обладает код, выполняющийся в контексте процесса. Наиболее важное свойство — это то, что выполнение очередей действий управляется планировщиком процессов и, соответственно, выполняющийся код может переходить в состояние ожидания (sleep).

Читать »

Дескриптор процесса и структура task structure

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

Ядро хранит  информацию о всех процессах в двухсвязном списке, который называется task list3  (список задач). Каждый элемент этого списка является дескриптором процесса и имеет тип структуры  struc t  task_struct , которая описана в файле include/linux/sched.h . Дескриптор процесса содержит всю  информацию об определенном процессе.

Читать »

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

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

Подсистема VFS— это связующее звено, которое позволяет таким системным  вызовам,  как open () , rea d ()  и writ e () , работать независимо  от файловой  системы и физической  среды носителя  информации. Сегодня это может не впечатлять,  поскольку такая возможность принимается  как должное. Тем не менее сделать так, чтобы общие системные вызовы работали для всех поддерживаемых файловых систем и физических сред хранения данных, — задача не тривиальная.  Более того, эти системные вызовы позволяют выполнять операции между различными файловыми системами и различными  физическими носителями — мы можем копировать  и перемещать данные с одной  файловой  системы на другую с помощью  стандартных системных вызовов. В старых операционных системах (например,  DOS) таких возможностей не было. Любые операции доступа к "неродным" файловым системам требовали использования  специальных утилит. Сейчас такие возможности  существуют, потому что все современные  операционные системы,  включая Linux, абстрагируют доступ к файловым системам с помощью виртуального интерфейса,  который дает возможность совместной работы с данными и обобщенного  доступа к данным.  В операционной системе Linux может появиться  поддержка новых типов файловых  систем или новых физических  средств хранения  данных,  при этом нет необходимости переписывать или перекомпилировать существующие программы.

Читать »

Управление прерываниями

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

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

Читать »

Многопроцессорность, преемптивность и верхняя память

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

Может   показаться  неправильным  включать поддержку симметричной  многопроцессорности,  возможность вытеснения процессов в  режиме  ядра  и работу  с верхней памятью в вопросы переносимости. В конце  концов, это  не  особенности аппаратной  платформы,  которые влияют  на  операционную  систему,  а  функции ядра  Linux, которые по  многом не  зависят от  аппаратной платформы.  Тем  не  менее  для  этих функций  существуют важные   конфигурационные  параметры,  которые необходимо учитывать  при  разработке  кода.   Программировать  всегда  необходимо  под  SMP,  с поддержкой преемптивности  и  с  использованием верхней  памяти,  чтобы  код  был безопасным  всегда,  при  любых  конфигурациях.  Необходимо  всегда  соблюдать  следующие  правила.

Читать »

Создание нового процесса

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

В операционной системе Unix  создание процессов происходит уникальным образом.   В  большинстве операционных систем  для  создания процессов используется метод  порождения  процессов  (spawn).  При  этом   создается новый  процесс в  новом адресном пространстве,  в которое считывается исполняемый файл,  и  после  этого начинается исполнение процесса. В ОС  Unix  используется другой  подход, а именно разбиение указанных выше  операций на две  функции:  for k ()  и exe c () 8 .

Читать »

Новый интерфейс percp u

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

В ядрах  серии  2.6  предложен новый интерфейс,  именуемый percpu,  который служит для  создания данных  и работы  с данными, связанными с определенным процессором.   Этот  интерфейс  обобщает предыдущий пример. При  использовании нового подхода  работа  с per-CPU-данными упрощается.

Читать »

Управление конфигурационными параметрами

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

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

Читать »

Сборка ядра

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

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

Читать »

Объект inode

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

Объект  inode  содержит  всю информацию, которая  необходима ядру для манипуляций  с файлами и каталогами. В файловых системах  в стиле  Unix  вся информация просто  считывается из дисковых  индексов и помещается в объект  inode  подсистемы VFS. Если  файловые системы  не имеют  индексов, то эту информацию необходимо получить из других дисковых структур4.

Читать »