Кудиц-пресс

Кудиц-пресс


НазваниеКудиц-пресс
страница1/76
ТипКнига
rykovodstvo.ru > Руководство эксплуатация > Книга
  1   2   3   4   5   6   7   8   9   ...   76
Родригес К. 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

  1. История UNIX 2

  2. Стандартные и общие интерфейсы 4

  3. Свободное программное обеспечение

и открытые исходники , 4

1.4 Краткий обзор дистрибутивов Linux 5

  1. Debian 6

  2. Red Hat/Fedora 6

  3. Mandriva 6

  4. SUSE 6

  5. Gentoo 7

  6. Yellow Dog 7

  7. Другие дистрибутивы 7




  1. Информация о версии ядра 7

  2. Linux на PowerPC 8

  3. Что такое операционная система 8

  4. Организация ядра 10

  5. Обзор ядра Linux 10




  1. Пользовательский интерфейс 11

  2. Идентификация пользователя 11

  3. Файлы и файловые системы 12

  4. Процессы 18

  5. Системные вызовы 22

  6. Планировщик Linux 22

  7. Драйверы устройств Linux 23

1.10 Переносимость и архитектурные зависимости 23

Резюме 24

Упражнения 24

vi Содержание

Глава 2. Исследовательский инструментарий 27

2.1 Типы данных ядра 28

  1. Связанные списки 28

  2. Поиск 32

  3. Деревья 33

2.2 Ассемблер 36

  1. PowerPC 36

  2. х86 39

2.3 Пример языка ассемблера 43

  1. Пример х86-ассемблера 44

  2. Пример ассемблера PowerPC 46

2.4 Ассемблерные вставки 50

  1. Операнды вывода 50

  2. Операнд ввода 51

  3. Очищаемые регистры (или список очистки) 51

  4. Нумерация параметров 51

  5. Ограничения 51

  6. asm 52

2.4.7 volatile 52

2.5 Необычное использование языка С 56

  1. asmlinkage 57

  2. UL 57

  3. inline 58

  4. const и volatile 58

2.6 Короткий обзор инструментария для исследования ядра 59

  1. objdump/readelf 59

  2. hexdump 60

  3. nm 61

  4. objcopy 61

  5. аг 61

2.7 Говорит ядро: прослушивание сообщений ядра 61

  1. printk() 62

  2. dmesg 62

  3. /val/log/messages 62

2.8 Другие особенности 62

2.8.1 init 63

  1. likely() и unlikely() 63

  2. ISJERRhPTRJERR 65

  3. Последовательности уведомлений 65

Резюме 66

Содержание

vii

Проект Hellomod 66

Шаг 1: написание каркаса модуля Linux 66

Шаг 2: компиляция модуля 68

Шаг 3: запуск кода 69

Упражнения 70

Глава 3. Процессы: принципиальная модель выполнения 71

  1. Представление нашей программы 74

  2. Описатель процесса 75




  1. Поля, связанные с атрибутами процесса 78

  2. Поля, связанные с планировщиком 80

  3. Поля, связанные с отношениями между процессами 83

  4. Поля, связанные с удостоверением процесса 85

  5. Поля, связанные с доступными возможностями 87

  6. Поля, связанные с ограничениями процесса 89

  7. Поля, связанные с файловой системой и адресным пространством 92

3.3 Создание процессов: системные вызовы

fork(), vfork() и clone() 93

  1. Функция fork() 95

  2. Функция vfork() 95

  3. Функция clone() 96

  4. Функция do_fork() 97

3.4 Жизненный цикл процесса 100

  1. Состояния процесса 101

  2. Переход между состояниями процесса 102

3.5 Завершение процесса 107

  1. Функция sys_exit() 108

  2. Функция do_exit() 108

  3. Уведомление родителя и sys_wait4() Ill

3.6 Слежение за процессом:

базовые конструкции планировщика 115

  1. Базовая структура 115

  2. Пробуждение после ожидания или активация 116

3.7 Очередь ожидания 124

  1. Добавление в очередь ожидания 127

  2. Ожидание события 128

  3. Пробуждение 130

3.8 Асинхронный поток выполнения 133

  1. Исключения 133

  2. Прерывания 137

viii Содержание

Резюме 163

Проект: текущая системная переменная 164

Исходный код процесса 165

Запуск кода 166

Упражнения 167

Глава 4. Управление памятью 169

4.1 Страницы 173

4.1.1 flags 174

4.2 Зоны памяти 176

  1. Описатель зоны памяти 176

  2. Вспомогательные функции для работы с зонами памяти 178

4.3 Фреймы страниц 180

  1. Функции для затребования страниц фреймов 180

  2. Функции для освобождения фреймов страниц 182

  3. Система близнецов (buddy system) 183

4.4 Выделение секций 188

4.4.1 Описатель кеша 191

  1. Описатель кеша общего назначения 195

  2. Описатель секции 196

4.5 Жизненный цикл выделителя секции 199

  1. Глобальные переменные выделителя секции 199

  2. Создание кеша 200

  3. Создание секции и cache_grow() 207

  4. Уничтожение секции: возвращение памяти и kmem_cache_destroy() 209

4.6 Путь запроса памяти 211

  1. kmalloc() 211

  2. kmem_cache_alloc() 212

4.7 Структуры памяти процесса в Linux 213

  1. mm_struct 214

  2. vm_area_struct 217




  1. Размещение образа процесса и линейное адресное пространство 219

  2. Таблицы страниц 223

4.10 Ошибка страницы 224

  1. Исключение ошибки страницы на х86 224

  2. Обработчик ошибки страницы 225

  3. Исключение ошибки памяти на PowerPC 234

Резюме 235

Проект: отображение памяти процесса 235

Упражнения 237

Содержание ix

Глава 5. Ввод-Вывод 239

  1. Как работает оборудование: шины, мосты, порты и интерфейсы 241

  2. Устройства 245




  1. Обзор блочных устройств 246

  2. Очереди запросов и планировщик ввода-вывода 247

  3. Пример: «обобщенное» блочное устройство 259

  4. Операции с устройством 262

  5. Обзор символьных устройств 264

  6. Замечание о сетевых устройствах 264

  7. Устройства таймера 265

  8. Терминальные устройства 265

  9. Прямой доступ к памяти (DMA) 265

Резюме 265

Проект: сборка драйвера параллельного порта 266

Программное обеспечение параллельного порта 269

Упражнения 276

Глава 6. Файловые системы 277

6.1 Общая концепция файловой системы 278

  1. Файл и имена файлов 278

  2. Типы файлов 279

  3. Дополнительные атрибуты файла 280

  4. Директории и пути к файлам 280

  5. Файловые операции 281

  6. Файловые описатели 282

  7. Блоки диска, разделы и реализация 282

  8. Производительность 283

6.2 Виртуальная файловая система Linux 284

  1. Структуры данных VFS 287

  2. Глобальные и локальные списки связей .". 302

6.3 Структуры, связанные с VFS 303

  1. Структура fs_struct 304

  2. Структура files_struct 305

6.4 Кеш страниц 309

  1. Структура address__space 311

  2. Структура buffer_head 313

6.5 Системные вызовы VFS и слой файловой системы 316

6.5.1 ореп() 316

  1. close() 324

  2. readQ 327

X

Содержание

6.5.4 write() 346

Резюме 350

Упражнения 350

Глава 7. Планировщик и синхронизация ядра 351

7.1 Планировщик Linux 353

  1. Выбор следующей задачи 353

  2. Переключение контекста 361

  3. Занятие процессора 372

7.2 Приоритетное прерывание обслуживания 383

  1. Явное приоритетное прерывание обслуживания в ядре 383

  2. Неявное пользовательское приоритетное

прерывание обслуживания 383

7.2.2 Неявное приоритетное прерывание обслуживания ядра 384

  1. Циклическая блокировка и семафоры 387

  2. Системные часы: прошедшее время и таймеры 389




  1. Часы реального времени: что это такое 390

  2. Чтение из часов реального времени на РРС 392

  3. Чтение из часов реального времени на х86 395

Резюме 396

Упражнения 397

Глава 8. Загрузка ядра 399

  1. BIOS и Open Firmware 400

  2. Загрузчики 401




  1. GRUB 403

  2. LILO 406

  3. PowerPC и Yaboot 407

8.3 Архитектурно-зависимая инициализация памяти 408

  1. Аппаратное управление памятью на PowerPC 408

  2. Управление памятью на х86-аппаратуре 420

  3. Похожесть кода PowerPC и х86 431




  1. Диск начальной загрузки 432

  2. Начало: start_kernel() 433




  1. Вызов lock_kernel() 435

  2. Вызов page__address_init() 437

  3. Вызов printk(linux_banner) 440

  4. Вызов setup_arch 441

  5. Вызов setup_per_cpu_areas() 445

  6. Вызов smp_prepare_boot_cpu() 447

Содержание xi

  1. Вызов sched_init() 448

  2. Вызов build_all_zonelists() 451

  3. Вызов page_alloc_init 452




  1. Вызов parse_args() 453

  2. Вызов trap_init() 456

  3. Вызов rcu_init() 456

  4. Вызов init_IRQ() 457

  5. Вызов softirq_init() 458

  6. Вызов time_init() 459

  7. Вызов console_init() 460

  8. Вызов profile_init() 461

  9. Вызов local_jrq_enable() 462

  10. Настройка initrd 462

  11. Вызов mem_init() 463

  12. Вызов late_time_init() 470

  13. Вызов calibrate_delay() 470

  14. Вызов pgtable_cache_init() 471

  15. Вызов buffer_init() 473

  16. Вызов security_scafolding_startup() 473

  17. Вызов vfs_caches_init() 474

  18. Вызов radix_tree_init() 484

  19. Вызов signals_init() 485

  20. Вызов page_writeback_init() 485

  21. Вызов proc_root_init() 488

  22. Вызов init_idle() 490

  23. Вызов rest Jnit() 491

8.6 Поток init (или процесс 1) 492

Резюме 498

Упражнения 498

Глава 9. Сборка ядра Linux 499

9.1 Цепочка инструментов 500

  1. Компиляторы 500

  2. Кросскомпиляторы 501

  3. Компоновщик 502

  4. Объектные ELF-файлы 503

9.2 Сборка исходников ядра 509

  1. Разъяснение исходников 509

  2. Сборка образа ядра 514

Резюме 522

xii Содержание

Упражнения 522

Глава 10. Добавление вашего кода в ядро 523

10.1 Обход исходников 524

  1. Познакомимся с файловой системой 524

  2. FilpsHFops 526

  3. Пользовательская память и память ядра 528

  4. Очереди ожидания 529

  5. Очереди выполнения прерывания 534

  6. Системные вызовы 536

  7. Другие типы драйверов 537

  8. Модель устройства и sysfs 541

10.2 Написание кода 544

  1. Основы устройств 544

  2. Символьное экспортирование 547

  3. IOCTL 548

  4. Организация пула и прерывания _ 552

  5. Очереди выполнения и тасклеты 557

  6. Дополнение кода для системного вызова 558

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/ran­dom, которое можно увидеть в любой Linux-системе. Работа с устройствами уже была описана ранее с более практической точки зрения. Здесь же описано то, как можно доба­вить в ядро поддержку собственного устройства.

Наш подход

Эта книга предлагает вниманию читателя концепции, необходимые для понимания ядра. Мы используем подход сверху вниз следующими двумя способами.

Во-первых, мы ассоциируем работу ядра с исполнением операций в пользователь­ском пространстве, с которыми читатель, скорее всего, более знаком, и постараемся объ­яснить работу ядра на этих примерах. Если это возможно, мы будем начинать с примеров в пользовательском пространстве, а затем будем прослеживать их выполнение в коде до уровня ядра. Углубиться напрямую возможно не всегда, так как перед этим для понима­ния работы нужно рассказать о типах данных подсистем и подструктурах. В этом случае мы постараемся объяснить подсистему ядра на специальном примере и укажем связь с пространством пользовательских программ. Это дает двойной эффект: демонстрирует слои работы ядра и их взаимодействие с пользовательским пространством, с одной сторо­ны, и с аппаратной частью, с другой, а также позволяет объяснить работу подсистем, про­следив прохождение событий по мере их поступления. Мы считаем, что это позволит чи­тателю получить представление о том, как ядро работает, как это сочетается с тем, что мы уже знаем, и как оно соотносится с работой остальной операционной системы.

Во-вторых, мы используем подход сверху вниз для обзора структур данных, общих для операций подсистем, и увидим, как они связаны с управлением работой системы. Мы постараемся наметить основные структуры для подсистемных операций и будем акцен­тировать на них свое внимание во время рассмотрения операций подсистем.

XX

Соглашения

Ha протяжении этой книги вы увидите листинги исходного кода. Верхний правый угол будет содержать расположение исходного файла относительно корня дерева исходных кодов. Листинг будет напечатан таким шрифтом. Номера строк приведены для удобст­ва комментирования кода. При описании подсистем ядра и того, как они работают, мы будем часто обращаться к исходному коду и пояснять его.

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

Жирный шрифт используется при введении нового понятия.

  1   2   3   4   5   6   7   8   9   ...   76

Похожие:

Кудиц-пресс iconО бразовательная программа медиагруппы «журналист» для сотрудников...
Современные медиа-технологии в работе пресс-службы. Как сделать блогеров союзниками пресс-службы

Кудиц-пресс iconббк 84(7 сша) р 12 р 12
Анализ характера: Пер с англ. Е. Поле. — М: Апрель Пресс, Изд-во эксмо-пресс, 2000. — 528 с. (Серия «Психологическая коллекция»)

Кудиц-пресс iconВита-Пресс
Оригинал-макет выполнен издательством «Вита-Пресс» Изд лицензия ид №02033 от 13. 06. 00

Кудиц-пресс iconГидравлический пресс пгр-100, пгр-100М
...

Кудиц-пресс iconИнформационный бюллетень Администрации Санкт-Петербурга №45 (945) от 23 ноября 2015 г
Пресс-конференция, посвященная открытию Международного конкурса барабанщиков и перкуссионистов «Ударная волна 2015» (пресс-центр...

Кудиц-пресс iconИнформационный бюллетень Администрации Санкт-Петербурга №44 (745) от 21 ноября 2011 г
Пресс-конференция, посвященная открытию XVI международного фестиваля экологических фильмов «Зеленый взгляд» (ул. Жуковского, 63,...

Кудиц-пресс iconУчебное пособие, Пер с англ. М.: Апрель Пресс, Изд-во эксмо-пресс,...
Учебное пособие, Пер с англ. — М.: Апрель Пресс, Изд-во эксмо-пресс, 2001. — 752 с. (Серия «Кафедра психологии»)

Кудиц-пресс iconДолжностная инструкция пресс-секретаря администрации мо «Момский...
Настоящая должностная инструкция определяет должностные обязанности, права и ответственности пресс-секретаря

Кудиц-пресс iconРуководство по эксплуатации к изделию не отражает незначительных...
Пресс гидравлический пг 125-250, далее пресс, предназначен для обработки металлов статическим давлением

Кудиц-пресс iconПресс вулканизатор 193А, 193 М
Пресс-вулканизатор предназначен для изготовления изделий из различных видов сырых каучуковых и силиконовых резин. Может использоваться...

Кудиц-пресс iconТехническое задание на поставку пресс-форм для склеивания поручня эскалаторов
Пресс-форма используется для вулканизации армированных поручней шириной 88мм., предназначена для соединения поручней эскалаторов...

Кудиц-пресс iconТехническое задание вулканизационный пресс al20ne 1200x1200
В то же время наиболее слабым местом продолжают оставаться стыковые соединения ленты. Вулканизационный пресс al20ne с нагревательным...

Кудиц-пресс iconГидравлический пресс ручной пгр-10 и пгр-20
...

Кудиц-пресс iconПособие для студентов гуманитарных вузов и учащихся лицеев аспент пресс
Социальная лингвистика: Пособие для студентов гуманит вузов и учащихся лицеев. — 2-е изд., испр. — М.: Аспект Пресс, 2000. — 207...

Кудиц-пресс iconПособие для студентов гуманитарных вузов и учащихся лицеев аспент пресс
Социальная лингвистика: Пособие для студентов гуманит вузов и учащихся лицеев. — 2-е изд., испр. — М.: Аспект Пресс, 2000. — 207...

Кудиц-пресс iconНаименование: Пресс вырубной электромеханический. Стоимость
Назначение, описание: Пресс электромеханический со сменными штампами предназначен для вырубки угла квадратных или треугольных дорожных...


Руководство, инструкция по применению




При копировании материала укажите ссылку © 2018
контакты
rykovodstvo.ru
Поиск