Скачать 8.38 Mb.
|
Родригес К. 3., Фишер Г., Смолски С. Linux: азбука ядра Последовательное рассмотрение на архитектурах х86 и PowerPC КУДИЦ-ПРЕСС 2007 ББК 32.973.26-018.2Родригес К. 3., Фишер Г., Смолски С. Linux: азбука ядра / Пер. с англ. - М.: КУДИЦ-ПРЕСС, 2007. - 584 с. Книга представляет собой справочное руководство по администрированию сетей i среде Linux. Она будет интересна как начинающим, так и опытным пользователям все сторонним анализом популярных служб в системах Linux, описанием важнейших сете вых программ и утилит. Подробная информация по конфигурации и администрирова нию компонентов сети позволит администратору организовать работу в сети Linux н; качественно ином уровне. Диапазон рассматриваемых тем широк. Обстоятельный подход авторов и продуман ная структура книги облегчит задачи, стоящие перед администратором. Клаудия Зальзберг Родригес, Гордон Фишер, Стивен Смолски Linux: азбука ядра Перевод с англ. Легостаев И. В. Научный редактор Мурашко И. В. ООО «КУДИЦ-ПРЕСС» 190068, С.-Петербург, Вознесенский пр-т, д. 55, литер А, пом. 44. Тел.: 333-82-11, ok@kudits.ru; http://books.kudits.m Подписано в печать 15.01.2007. Отпечатано в ОАО «Щербинская типография» Формат 70x90/16. Бум. офс. Печать офс. 117623, Москва, ул. Типографская, д. 10 Усл. печ. л. 42,7. Тираж 2000. Заказ 41 Теп.: 659-23-27 ISBN 978-5-91136-017-7 (рус.) © Перевод, макет ООО «КУДИЦ-ПРЕСС», 200' ISBN 0-596-00794-9 Authorized translation from the English language edition, entitled LINUX® KERNEL PRIMER, THE: A TOP DOWN APPROACH FOR X86 AND POWERPC ARCHITECTURES, 1st Edition, ISBN 0131181637, b RODRIGUEZ, CLAUDIA SALZBERG; FISCHER, GORDON; SMOLSKI, STEVEN, published by Pearson Educs tion, Inc., publishing as Prentice Hall, Copyright © 2006 Pearson Education, Inc. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic с mechanical, including photocopying, recording or by any information storage retrieval system, without permissio from Pearson Education Inc.RUSSIAN language edition published by KUDITS-PRESS, Copyright © 2007. Авторизованный перевод англоязычного издания LINUX® KERNEL PRIMER, THE: A TOP-DOW APPROACH FOR X86 AND POWERPC ARCHITECTURES, опубликованного Pearson Education, Inc. под изд; тельской маркой Prentice Hall. Все права защищены. Никакая часть данной книги не может быть воспроизведена в любой форме или любым средствами, электронными или механическими, включая фотографирование, видео- или аудиозапись, а тага любыми системами поиска информации без разрешения Pearson Education Inc. Русское издание опубликовано издательством КУДИЦ-ПРЕСС, О 2007. Содержание Введение xiii Благодарности xv Об авторах xvi Предисловие xvii Глава 1. Обзор 1
и открытые исходники , 4 1.4 Краткий обзор дистрибутивов Linux 5
1.10 Переносимость и архитектурные зависимости 23 Резюме 24 Упражнения 24 vi Содержание Глава 2. Исследовательский инструментарий 27 2.1 Типы данных ядра 28
2.2 Ассемблер 36
2.3 Пример языка ассемблера 43
2.4 Ассемблерные вставки 50
2.4.7 volatile 52 2.5 Необычное использование языка С 56
2.6 Короткий обзор инструментария для исследования ядра 59
2.7 Говорит ядро: прослушивание сообщений ядра 61
2.8 Другие особенности 62 2.8.1 init 63
Резюме 66 Содержание vii Проект Hellomod 66 Шаг 1: написание каркаса модуля Linux 66 Шаг 2: компиляция модуля 68 Шаг 3: запуск кода 69 Упражнения 70 Глава 3. Процессы: принципиальная модель выполнения 71
3.3 Создание процессов: системные вызовы fork(), vfork() и clone() 93
3.4 Жизненный цикл процесса 100
3.5 Завершение процесса 107
3.6 Слежение за процессом: базовые конструкции планировщика 115
3.7 Очередь ожидания 124
3.8 Асинхронный поток выполнения 133
viii Содержание Резюме 163 Проект: текущая системная переменная 164 Исходный код процесса 165 Запуск кода 166 Упражнения 167 Глава 4. Управление памятью 169 4.1 Страницы 173 4.1.1 flags 174 4.2 Зоны памяти 176
4.3 Фреймы страниц 180
4.4 Выделение секций 188 4.4.1 Описатель кеша 191
4.5 Жизненный цикл выделителя секции 199
4.6 Путь запроса памяти 211
4.7 Структуры памяти процесса в Linux 213
4.10 Ошибка страницы 224
Резюме 235 Проект: отображение памяти процесса 235 Упражнения 237 Содержание ix Глава 5. Ввод-Вывод 239
Резюме 265 Проект: сборка драйвера параллельного порта 266 Программное обеспечение параллельного порта 269 Упражнения 276 Глава 6. Файловые системы 277 6.1 Общая концепция файловой системы 278
6.2 Виртуальная файловая система Linux 284
6.3 Структуры, связанные с VFS 303
6.4 Кеш страниц 309
6.5 Системные вызовы VFS и слой файловой системы 316 6.5.1 ореп() 316
X Содержание 6.5.4 write() 346 Резюме 350 Упражнения 350 Глава 7. Планировщик и синхронизация ядра 351 7.1 Планировщик Linux 353
7.2 Приоритетное прерывание обслуживания 383
прерывание обслуживания 383 7.2.2 Неявное приоритетное прерывание обслуживания ядра 384
Резюме 396 Упражнения 397 Глава 8. Загрузка ядра 399
8.3 Архитектурно-зависимая инициализация памяти 408
Содержание xi
8.6 Поток init (или процесс 1) 492 Резюме 498 Упражнения 498 Глава 9. Сборка ядра Linux 499 9.1 Цепочка инструментов 500
9.2 Сборка исходников ядра 509
Резюме 522 xii Содержание Упражнения 522 Глава 10. Добавление вашего кода в ядро 523 10.1 Обход исходников 524
10.2 Написание кода 544
10.3 Сборка и отладка 561 10.3.1 Отладка драйвера устройства 561 Резюме 562 Упражнения 563 Введение Здесь должны быть драконы. Так писали средневековые картографы о неизвестных или опасных территориях, и подобное же чувство вы испытываете, когда впервые вводите строку cd /usr/src/linux ; Is «С чего начать?» - думаете вы. «Что именно я здесь ищу? Как все это связано между собой и как работает на самом деле?» Современные полнофункциональные операционные системы большие и сложные. Подсистем много, и зачастую они взаимодействуют друг с другом слишком тонко. И несмотря на то что иметь исходные коды ядра Linux (о котором немного позже) - это здорово, совершенно непонятно с чего начать, а также что и в какой последовательности искать. Для этого и написана данная книга. Шаг за шагом вы узнаете про различные компоненты ядра, о том, как они работают и как связаны друг с другом. Авторы отлично знакомы с ядром и хотят поделиться своими знаниями; к концу прочтения этой книги вы станете хорошими друзьями ядра Linux с углубленным пониманием связей. Ядро Linux - это «свободное» (от слова свобода) программное обеспечение. В Декларации свободного программного обеспечения {The Free Software Definition^ Ричард Столман определил свободы, которые делают программное обеспечение Свободным (с большой буквы). Свобода 0 - это свобода на запуск программного обеспечения. Это самая главная свобода. Сразу за ней следует Свобода 1, свобода изучения того, как программное обеспечение работает. Зачастую эта свобода упускается из виду. Тем не менее это очень важно, потому что лучший способ обучения - это наблюдение за тем, как это делают другие. В мире программного обеспечения это означает чтение программ других и выяснение того, что они сделали хорошо, а что плохо. Свободы GPL, по крайней мере на мой взгляд, одна из главных причин того, что GNU/Linux-системы стали такой важной силой среди современных информационных технологий. Эти свободы помогают вам каждый раз, когда вы используете вашу GNU/Linux-систему, и поэтому неплохой идеей будет остановиться и осмыслить каждую из них. В этой книге мы воспользуемся преимуществами Свободы 1, позволяющей нам изучать глубины исходных кодов ядра Linux. Вы увидите, что одни вещи сделаны хорошо, а другие, скажем так, менее хорошо. Тем не менее благодаря Свободе 1 вы имеете возможность все это увидеть и почерпнуть для себя много нового. 1. http://www.gnu.org/philosophy/free-sw.html. xiv Это возвращает меня к серии книг Prentice Hall Open Source Software Development, к которой принадлежит и данная книга. Идея создания этой серии основана на том, что чтение - один из лучших способов обучения. Сегодня, когда мир осчастливлен обилием свободного и открытого программного обеспечения, его исходный код только и ждет (даже жаждет!), чтобы его прочитали, поняли и оценили. Целью этой серии является облегчение кривой обучения разработке программного обеспечения, так сказать, помочь вам в обучении с помощью демонстрации как можно более реального кода. Я искренне надеюсь, что эта книга вам понравится и поможет в обучении. Также я надеюсь, что она вдохновит вас занять свое место в мире свободного программного обеспечения и открытых исходных кодов, что является наиболее интересным способом принять участие в этом процессе. Удачи! Арнольд Роббинс, редактор серии Благодарности Мы хотим поблагодарить множество людей, без которых эта книга не могла бы быть написана. Клаудия Зальзберг Родригес: Я хочу заметить, что зачастую сложно при недостатке места выделить главных помощников в достижении широкоизвестного успеха среди массы людей, которые неисчислимым и несчетным количеством способов помогали тебе достичь этого успеха. Поэтому я хочу поблагодарить всех помощников ядра Linux за их тяжелый труд, который они посвятили разработке той операционной системы, которой она стала сейчас, - за любовь к игре. Я испытываю глубочайшую признательность по отношению к ключевым учителям и наставникам на пути от пробуждения и поощрения ненасытной любознательности о том, как работают различные вещи, до обучения меня тому, как в них разбираться. Также я хочу поблагодарить свою семью за ее неизменную любовь, поддержку и оптимистический настрой в тех ситуациях, когда я уже готова была сдаться. Наконец, я хочу поблагодарить Йоза Рауля за бережное отношение к моему времени и за умение каждый раз находить способ подбодрить меня в сложной ситуации. Гордон Фишер: Я хочу поблагодарить всех программистов, которые терпеливо разъясняли мне сложности ядра Linux, когда я еще был новичком. Также я хочу поблагодарить Grady и Underworld за отличную кодерскую музыку. Также мы хотим поблагодарить нашего главного редактора Марка Л. Тауба за знание того, что нужно для того, чтобы сделать книгу лучше на каждом шаге, и за то, что он вел нас в правильном направлении. Спасибо за последовательность и одновременную разумность, понимание, требовательность и безмерную открытость на протяжении написания этой книги. Кроме этого, мы хотим поблагодарить Джима Маркхема и Эрику Джемисон. Джиму Маркхему мы благодарны за его ранние редакторские комментарии, которые сослужили нам хорошую службу в течение написания оставшейся части рукописи. Эрике Джемисон мы благодарны за редакторские отзывы во время написания последней версии рукописи. Нашу благодарность заслуживают и рецензенты, которые потратили множество часов на чтение и высказывание замечаний, которые помогли сделать книгу лучше. Спасибо вам за зоркий глаз и проницательные комментарии; ваши замечания и комментарии неоценимы. Рецензентами были Алессио Гаспар, Мел Горман, Бенджамин Хереншмидт, Рон Мак-Карти, Чет Рейми, Эрик Рейнольде, Арнольд Робинсоне и Питер Салус. Мы хотим поблагодарить Кайлу Даджер за то, что она помогла нам с литературной обработкой и корректурой, с неизменно хорошим настроением, и Джинни Бесс за ее орлиный корректорский глаз. Отдельное спасибо армии людей, отвечавших за корректуру, литературную обработку, верстку, маркетинг и печать и с которыми мы не встречались лично, за то, что создание этой книги стало возможным. Об авторах Клаудия Зальзберг Родригес работает в Центре Linux технологий ГВМ, где занимается разработкой ядра и связанных с ним утилит программирования. Является системным программистом Linux более 5 лет. Работала с Linux для Intel и РРС на различных платформах начиная со встраиваемых систем и заканчивая высокопроизводительными системами. Гордон Фишер писал драйверы под Linux и UNIX для многих низкоуровневых устройств и использовал множество специализированных ядер Linux для Intel- и РРС-платформ. Стрив Смолски 26 лет в полупроводниковом бизнесе. Он работал на производстве, тестировании, участвовал в разработке памяти, процессоров и ASICS; писал приложения и драйверы для Linux, ATX, Windows; работал со встроенными операционными системами. Предисловие Технология в целом и компьютеры в частности обладают магической привлекательностью, которая, кажется, поглощает тех, кто к ним приближается. Технологические разработки раздвигают установленные рамки и заставляют пересмотреть ненадежные идеи, бывшие ранее нежизнеспособными. Операционная система Linux стала главным помощником для потока значительных изменений в индустрии и способов ведения бизнеса. Принятие Публичной лицензии GNU (GNU Public License) и взаимодействие с GNU-npo-граммным обеспечением вызвало множество дебатов вокруг открытых исходных кодов, свободного программного обеспечения и концепции сообщества разработчиков. Linux -это чрезвычайно удачный пример того, насколько мощной может быть операционная система с открытым кодом и как эта основа позволяет своей привлекательностью удерживать программистов всего мира. В настоящее время расширяется доступность использования Linux для большинства пользователей компьютеров. Со множеством дистрибутивов, поддержкой сообщества и с помощью индустрии Linux нашел тихую гавань для своего применения в университетах, индустрии и домах миллионов пользователей. Рост использования приводит к увеличению необходимости в поддержке и новой функциональности. В свою очередь, все больше и больше программистов начинают интересоваться «внутренностями» ядра Linux по мере того, как новые архитектуры и устройства официально добавляются к уже обширному (и стремительно растущему) арсеналу. Портирование ядра Linux на Power-архитектуру способствовало расцвету операционной системы среди высокопроизводительных серверов и встроенных систем. Необходимость понимания того, как Linux работает на Power-архитектуре, растет, потому что растет число компаний, которые закупают основаные на PowerPC системы для работы под Linux. Предполагаемая аудитория Эта книга предназначена как начинающим, так и бывалым системным программистам, энтузиастам Linux и разработчикам прикладных программ, желающим лучше понимать, что заставляет их программы работать и благодаря чему это возможно. Каждый, кто знает С, знаком с основными принципами Linux и хочет разобраться в том, как устроен Linux, найдет в этой книге описание базовых концепций, необходимых для его сборки и понимания. Таким образом, книга представляет собой букварь для понимания работы ядра Linux. 2-41 xviii Неважно, ограничиваются ли ваши знания Linux умением зайти в систему и написать маленькую программу под Linux, или вы состоявшийся системный программист, пытающийся понять принципы работы одной из подсистем, - эта книга предоставит вам необходимую информацию. Организация материала Эту книгу можно условно разделить на три части, каждая из которых предоставляет читателю необходимые для изучения «внутренностей» Linux знания. Часть 1 включает необходимые инструменты и знания для обзора строения ядра. Гл. 1, «Обзор», содержит историю Linux и UNIX, список дистрибутивов и короткий обзор различных подсистем ядра с точки зрения пользователя. Гл. 2, «Исследовательский инструментарий», содержит описание структур данных и язык, используемый применительно к ядру Linux. Кроме того, в ней вы найдете введение в ассемблер для архитектур х68 и PowerPC, а также обзор инструментов и утилит, используемых для получения информации, необходимой для понимания работы ядра. Часть 2 предлагает читателю базовые концепции каждой подсистемы ядра и комментирует код, реализующий функциональность подсистем. Гл. 3, «Процессы: принципиальная модель выполнения», описывает реализацию модели процессов. Мы увидим, как процессы запускаются, и обсудим процесс контроля пользовательских процессов из ядра и наоборот. Кроме этого, мы обсудим, как процессы реализованы в ядре, и обсудим структуры данных, связанные с выполнением процесса. Также эта глава описывает прерывания и исключения, а также их реализацию на каждой из архитектур и то, как они взаимодействуют с ядром Linux. Гл. 4, «Управление памятью», описывает, как ядро Linux отслеживает и распределяет доступную память между пользовательскими процессами и ядром. Эта глава содержит описание способов классификации памяти и того, как принимаются решения о выделении и освобождении памяти. Также подробно описан механизм ошибок памяти и его аппаратная реализация. Гл. 5, «Ввод-вывод», описывает взаимодействие процессора с другими устройствами, соответствующие интерфейсы ядра и управление этим взаимодействием. Также эта глава описывает различные виды устройств и их реализацию в ядре. Гл. 6, «Файловые системы», содержит обзор реализации в ядре файлов и директорий. В этой главе представлена виртуальная файловая система и абстрактный слой для поддержки различных файловых систем. Также эта глава описывает реализацию связанных с файлами операций, таких, как операции открытия и закрытия файлов. Гл. 7, «Планировщик и синхронизация ядра», описывает операции планировщика, позволяющие нескольким процессам выполняться таким образом, как будто этот процесс в системе единственный. Глава подробно описывает, как ядро выбирает, какой процесс выполнять, и как оно взаимодействует с аппаратной частью для переключения с одного xix процесса на другой. Кроме этого, в главе описаны приоритеты и их реализация. И наконец, она описывает работу системного таймера и того, как его использует ядро для слежения за временем. Гл. 8, «Загрузка ядра», описывает то, что происходит с момента включения и до момента выключения системы Linux. Она содержит описание различных процессорных обработчиков для загрузки ядра, включая описание BIOS, Open Firmware и загрузчиков. Глава отслеживает линейный процесс запуска и инициализации ядра, включая все подсистемы, описанные в предыдущих главах. Часть 3 касается более ручного подхода к сборке ядра Linux и работе с ним. Гл. 9, «Построение ядра Linux», описывает перечень утилит, необходимых для сборки ядра, и формат исполнимых объектных файлов. Также подробно описана работа системы построения ядра из исходников (Kernel Source Build) и варианты ее настройки. Гл. 10, «Добавление вашего кода в ядро», описывает работу устройства /dev/random, которое можно увидеть в любой Linux-системе. Работа с устройствами уже была описана ранее с более практической точки зрения. Здесь же описано то, как можно добавить в ядро поддержку собственного устройства. Наш подход Эта книга предлагает вниманию читателя концепции, необходимые для понимания ядра. Мы используем подход сверху вниз следующими двумя способами. Во-первых, мы ассоциируем работу ядра с исполнением операций в пользовательском пространстве, с которыми читатель, скорее всего, более знаком, и постараемся объяснить работу ядра на этих примерах. Если это возможно, мы будем начинать с примеров в пользовательском пространстве, а затем будем прослеживать их выполнение в коде до уровня ядра. Углубиться напрямую возможно не всегда, так как перед этим для понимания работы нужно рассказать о типах данных подсистем и подструктурах. В этом случае мы постараемся объяснить подсистему ядра на специальном примере и укажем связь с пространством пользовательских программ. Это дает двойной эффект: демонстрирует слои работы ядра и их взаимодействие с пользовательским пространством, с одной стороны, и с аппаратной частью, с другой, а также позволяет объяснить работу подсистем, проследив прохождение событий по мере их поступления. Мы считаем, что это позволит читателю получить представление о том, как ядро работает, как это сочетается с тем, что мы уже знаем, и как оно соотносится с работой остальной операционной системы. Во-вторых, мы используем подход сверху вниз для обзора структур данных, общих для операций подсистем, и увидим, как они связаны с управлением работой системы. Мы постараемся наметить основные структуры для подсистемных операций и будем акцентировать на них свое внимание во время рассмотрения операций подсистем. XX Соглашения Ha протяжении этой книги вы увидите листинги исходного кода. Верхний правый угол будет содержать расположение исходного файла относительно корня дерева исходных кодов. Листинг будет напечатан таким шрифтом. Номера строк приведены для удобства комментирования кода. При описании подсистем ядра и того, как они работают, мы будем часто обращаться к исходному коду и пояснять его. Опции командной строки, имена функций, результат выполнения функций и имена переменных будут напечатаны таким шрифтом. Жирный шрифт используется при введении нового понятия. |
ббк 84(7 сша) р 12 р 12 Анализ характера: Пер с англ. Е. Поле. — М: Апрель Пресс, Изд-во эксмо-пресс, 2000. — 528 с. (Серия «Психологическая коллекция») |
Вита-Пресс Оригинал-макет выполнен издательством «Вита-Пресс» Изд лицензия ид №02033 от 13. 06. 00 |
||
Гидравлический пресс пгр-100, пгр-100М ... |
Информационный бюллетень Администрации Санкт-Петербурга №45 (945) от 23 ноября 2015 г Пресс-конференция, посвященная открытию Международного конкурса барабанщиков и перкуссионистов «Ударная волна 2015» (пресс-центр... |
||
Информационный бюллетень Администрации Санкт-Петербурга №44 (745) от 21 ноября 2011 г Пресс-конференция, посвященная открытию XVI международного фестиваля экологических фильмов «Зеленый взгляд» (ул. Жуковского, 63,... |
Учебное пособие, Пер с англ. М.: Апрель Пресс, Изд-во эксмо-пресс,... Учебное пособие, Пер с англ. — М.: Апрель Пресс, Изд-во эксмо-пресс, 2001. — 752 с. (Серия «Кафедра психологии») |
||
Должностная инструкция пресс-секретаря администрации мо «Момский... Настоящая должностная инструкция определяет должностные обязанности, права и ответственности пресс-секретаря |
Руководство по эксплуатации к изделию не отражает незначительных... Пресс гидравлический пг 125-250, далее пресс, предназначен для обработки металлов статическим давлением |
||
Пресс вулканизатор 193А, 193 М Пресс-вулканизатор предназначен для изготовления изделий из различных видов сырых каучуковых и силиконовых резин. Может использоваться... |
Техническое задание на поставку пресс-форм для склеивания поручня эскалаторов Пресс-форма используется для вулканизации армированных поручней шириной 88мм., предназначена для соединения поручней эскалаторов... |
||
Техническое задание вулканизационный пресс al20ne 1200x1200 В то же время наиболее слабым местом продолжают оставаться стыковые соединения ленты. Вулканизационный пресс al20ne с нагревательным... |
Гидравлический пресс ручной пгр-10 и пгр-20 ... |
||
Пособие для студентов гуманитарных вузов и учащихся лицеев аспент пресс Социальная лингвистика: Пособие для студентов гуманит вузов и учащихся лицеев. — 2-е изд., испр. — М.: Аспект Пресс, 2000. — 207... |
Пособие для студентов гуманитарных вузов и учащихся лицеев аспент пресс Социальная лингвистика: Пособие для студентов гуманит вузов и учащихся лицеев. — 2-е изд., испр. — М.: Аспект Пресс, 2000. — 207... |
||
Наименование: Пресс вырубной электромеханический. Стоимость Назначение, описание: Пресс электромеханический со сменными штампами предназначен для вырубки угла квадратных или треугольных дорожных... |
Сборник статей под ред. О. А. Голубковой, к ф. н,- спб.; Издательств «ом-пресс» Технологии коммуникации в транзактном анализе. //Сборник статей под ред. О. А. Голубковой, к ф н,– спб.; Издательств «ом-пресс»,... |
Поиск |