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

Нахождение исполняемых образов с изменениями приводящими к ошибкам

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

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

Читать »

Размер страницы памяти

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

При  работе  со страницами памяти  никогда  нельзя  привязываться к конкретному размеру  страницы.  Программисты,  которые   разрабатывают для  аппаратной платформы  х86, часто делают ошибку, считая,  что размер  страницы всегда равен  4 Кбайта. Хотя  это  справедливо для платформы х86, для других аппаратных платформ размер станицы может  быть другим.  Некоторые аппаратные платформы поддерживают несколько размеров страниц! В табл. 19.-1  приведен список  размеров страниц памяти для  всех  поддерживаемых аппаратных платформ.

Читать »

Обзор операционных систем и ядер

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

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

Читать »

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

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

Ветки  кода, которые получают  доступ  к совместно используемыми данным и манипулируют ими, называются критическими участками  (critical  region).  Обычно небезопасно нескольким потокам выполнения одновременно обращаться к одному  и тому же ресурсу.  Для  предотвращения конкурентного доступа  во время  выполнения критических участков  программист, т.е.  Вы, должен  гарантировать, что код выполняется атомарно без перерывов, так если бы весь критический участок  был одной неделимой машинной инструкцией. Если  два потока  выполнения одновременно находятся в критическом участке, то это— ошибка в программе. Если  такое  вдруг случается, то такая ситуация называется состоянием, конкуренции за ресурс (состояние "гонок", race condition). Название связано с тем, что потоки  как  бы соревнуются друг с другом за доступ к ресурсу.  Следует обратить  внимание на то, насколько редко такая  ситуация может возникать, — поэтому  обнаружение состояний конкуренции за ресурсы  при  отладке  программ часто  очень  сложная задача, потому  что  подобную ситуацию очень  трудно  воспроизвести. Обеспечение гарантии того, что конкуренции  не будет и, следовательно, что состояний конкуренции за ресурсы  возникнуть не может, называется синхронизацией.

Читать »

В завершение о планировщике

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

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

Читать »

Переменная jiffie s

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

Глобальная  переменная  jiffi e s   содержит  количество  импульсов  системного таймера, которые были получены со  времени загрузки системы. При загрузке ядро устанавливает значение этого параметра в  нуль  и  он  увеличивается на  единицу при каждом прерывании системного таймера. Так  как  в секунду возникает HZ прерываний системного таймера, то  за  секунду значение переменной  jiffie s увеличивается на  HZ.  Время работы системы (uptime) поэтому равно jiffies/H Z  секунд.

Читать »

Потом пришел Линус:  введение в Linux

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

Операционная  система Linux   была  разработана Линусом Торвальдсом  (Linus Torvalds)   в  1991  году  как  операционная система для  компьютеров,  работающих на новом в то  время  микропроцессоре Intel  80386.  Тогда  Линус  Торвальдс был  студентом  университета в Хельсинки и  был  крайне возмущен отсутствием мощной  и  в то же время  свободно доступной Unix-подобной операционной системы. Операционная система DOS,  продукт  корпорации  Microsoft, была  для  Торвальдса полезна только лишь, чтобы  поиграть в игрушку "Принц Персии", и не для  чего больше. Линус  пользовался операционной системой Minix, недорогой Unix-подобной операционной системой, которая была  создана в  качестве учебного пособия.  В этой  операционной системе ему не  нравилось отсутствие возможности легко  вносить и  распространять изменения исходного кода  (это  запрещалось лицензией ОС Minix), а также  технические  решения,  которые использовал автор  ОС  Minix.

Читать »

Управление процессами

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

роцесс   одно  из  самых  важных  абстрактных понятий в Unix-подобных операционных системах1. По  сути, процесс—  это  программа, т.е.  объектный код, хранящийся на  каком-либо  носителе информации и  находящийся в  состоянии исполнения. Однако процесс — это  не  только  исполняемый программный код, который  для  операционной  системы Unix  часто  называется text section (сегмент  текста или  сегмент кода).  Процессы также  включают в себя  сегмент данных (data  section),  содержащий глобальные переменные;  набор   ресурсов,  таких  как  открытые файлы и ожидающие на  обработку сигналы; адресное пространство и один  или  более  потоков

Читать »

Семафоры чтения-записи

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

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

Семафоры  чтения-записи  представляются с   помощью   структуры  struc t    rw_ semaphore, которая определена в  файле <asm/rwsem.h>. Статически определенный семафор чтения-записи  может быть создан с  помощью функции

Читать »

Механизм отложенных прерываний (softirq) – ЧАСТЬ 1

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

Обсуждение существующих методов  обработки нижних половин начнем с механизма  softirq.  Обработчики на основе  механизма отложенных прерываний используются  редко.  Тасклеты — это более часто используемая форма  обработчика нижних половин. Поскольку тасклеты построены на основе  механизма softirq, с механизма softirq  и стоит  начать.  Код, который касается обработчиков отложенных прерываний, описан в файле  kernel/softirq.с .

Читать »

Реализациясистемыобработкипрерываний

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

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

Читать »

Инсталляция модулей

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

Скомпилированные модули должны быть инсталлированы в каталог /lib/modules/ version/kernel. Например,  для ядра  2.6.10 скомпилированный  модуль управления удочкой  будет находиться  в  файле  /lib/modules/2.6.10/kernel/drivers/char / fishing.ко ,  если исходный код находился непосредственно в  каталоге drivers / char/.

Читать »

Исследование и тестирование системы

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

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

Читать »

Кольцевые связанные списки

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

Последний  элемент  связанного  списка  не  имеет  следующего за ним  элемента,  и значение  указателя  nex t  последнего  элемента  обычно  устанавливается  равным  специальному  значению,  обычно  NULL,  чтобы показать,  что этот элемент  списка  является последним.  в  определенных  случаях последний  элемент  списка  не указывает на специальное  значение,  а указывает на первый  элемент этого же списка.  Такой  список называется  кольцевым связанным списком (circular linked list),  поскольку  связи  образуют топологию  кольца.  Кольцевые  связанные  списки  могут быть как  односвязными, так и двухсвязными.  В двухсвязных кольцевых  списках  указатель  pre v первого  элемента указывает на последний  элемент  списка.  На  рис. А.З и А.4 показаны  соответственно односвязные  и двухсвязные  кольцевые  списки.

Читать »

Интерфейсы  для вывода энтропии

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

Для получения случайных чисел  внутри  ядра экспортируется один  интерфейс.

void get_random_bytes(void *buf, int nbytes)

Эта функция сохраняет nbyte s случайных байтов  в буфере  памяти, на который указывает параметр buf. Функция возвращает данные, даже  если  оценка энтропии равна  нулю.  Для ядра это не так критично, как для пользовательских криптографических  программ. Случайные данные  мало  используются в ядре, в основном они нужны  сетевой  подсистеме для  генерации стартового номера  последовательности сегментов при соединении по протоколу TCP.

Читать »