8 (905) 200-03-37 Владивосток
с 09:00 до 19:00
CHN - 1.14 руб. Сайт - 21.13 руб.

SPOT Antuine: Run, Linux ядра (2 -е издание) Том 1: Инфраструктура 9787115549990

Цена: 1 352руб.    (¥63.94)
Артикул: 712011078006

Вес товара: ~0.7 кг. Указан усредненный вес, который может отличаться от фактического. Не включен в цену, оплачивается при получении.

Этот товар на Таобао Описание товара
Продавец:北京万泽惠远图书公司
Рейтинг:
Всего отзывов:0
Положительных:0
Добавить в корзину
Другие товары этого продавца
¥32.11679руб.
¥27.51582руб.
¥29.64627руб.
¥39.7839руб.

Запуск ядра Linux (2 -е издание) Том 1: Инфраструктура

 автор : Дядя

 Измененная цена : 139 Юань

 ISBNНет. : 9787115549990

 из  Версия  Общество : Люди после прессы

 Дата публикации : 2021-01-01

 Версия : 2

 Тюлень : 1

 Количество страниц : 598

 Рамка : Мягкая обложка

 Начинать : 16

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

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

Дядя Бен, энтузиаст ядра Linux, опубликовал «Запуск ядра Linux» и «Запуск ядра Linux».Создал сообщество Run Bar Linux, чтобы проповедовать большинству энтузиастов Linux.

  • Оглавление
  • Глава 1 Архитектура процессора 1
  • 1.1 Введение в архитектуру процессора 3
  • 1.1.1 Сокращенный набор команд и сложный набор команд 3
  • 1.1.2 Порядок байтов с обратным порядком байтов 3
  • 1.1.3 Инструкции по чтению и записи хранилища
  • Весь процесс исполнения 4
  • 1.1.4 Причины барьеров памяти 8
  • 1.1.5 Как работает кэш 10
  • 1.1.6 Метод отображения кэша 11
  • 1.1.7 Набор-ассоциативный кэш 13
  • 1.1.8 Разница между PIPT и VIVT 14
  • 1.1.9 Создание таблицы страниц и процесс запроса 17
  • 1.1.10 TLB 21
  • 1.1.11 Протокол МЭСИ 21
  • 1.1.12 Псевдосовместное использование кэша 26
  • 1.1.13 Кэш в ядре Linux
  • Приложение 27
  • 1.1.14 Архитектура большого/малого ядра ARM 28
  • 1.1.15 Согласованность и согласованность кэша
  • Модель памяти 30
  • 1.1.16 Стратегия обратной записи в кэш и
  • Стратегия замены 30
  • 1.1.17NUMA 31
  • 1.1.18 Конструкция процессора ARM 32
  • 1.1.19 Последние разработки 33
  • 1.2 Архитектура ARM64 34
  • 1.2.1 Архитектура ARMv8-A 34
  • 1.2.2 Распространенные процессоры с архитектурой ARMv8
  • Ядро 35
  • 1.2.3 Основные понятия архитектуры ARMv8 35
  • 1.2.4 Статус выполнения процессора ARMv8 36
  • 1.2.5 Ширина данных, поддерживаемая ARMv8 36
  • 1.2.6 Несогласованный доступ 37
  • 1.3 Регистры ARMv8 37
  • 1.3.1 Реестр общего назначения 37
  • 1.3.2 Статус процессора 38
  • 1.3.3 Специальные регистры 39
  • 1.3.4 Системный регистр 41
  • 1.4 Набор команд A64 42
  • 1.4.1 Часто используемые арифметические операции и инструкции перемещения 42
  • 1.4.2 Инструкции умножения и деления 43
  • 1.4.3 Инструкции по работе с переключением 45
  • 1.4.4 Инструкции по работе с битами 45
  • 1.4.5 Условные операции 47
  • 1.4.6 Инструкции по загрузке памяти 48
  • 1.4.7 Инструкции загрузки и сохранения многобайтовой памяти 50
  • 1.4.8 Загрузка и сохранение на непривилегированных уровнях доступа
  • Инструкции 50
  • 1.4.9 Введение в инструкции барьера памяти 51
  • 1.4.10 Инструкции эксклюзивного доступа к памяти 51
  • 1.4.11 Инструкции перехода и сравнения 52
  • 1.4.12 Инструкции по обработке исключений 53
  • 1.4.13 Инструкции доступа к системному реестру 54
  • 1.5 Линейная сборка GCC 55
  • 1.6 Стандарты вызова функций и структура стека 57
  • 1.7 Обработка исключений ARM64 59
  • 1.7.1 Типы исключений 59
  • 1.7.2 Синхронные и асинхронные исключения 60
  • 1.7.3 Обработка после возникновения исключения 60
  • Глава 2 Реализация ARM64 в ядре Linux 62
  • 2.1 Управление памятью ARM64 63
  • 2.1.1 Таблица страниц 63
  • 2.1.2 Сопоставление таблицы страниц 64
  • 2.1.3 Дескриптор записи таблицы страниц 65
  • 2.1.4 Таблицы страниц в ядре Linux 68
  • 2.1.5 Распределение памяти ядра ARM64 74
  • 2.1.6 Анализ случая: сопоставление таблицы страниц ARM64
  • Процесс 78
  • 2.2 Управление кэшем 84
  • 2.3 Управление TLB 87
  • 2.4 Атрибуты памяти 90
  • 2.4.1 Атрибуты памяти 91
  • 2.4.2 Атрибуты совместного использования кэша 94
  • 2.5 Барьер памяти 95
  • 2.5.1 Инструкции по барьеру памяти 95
  • 2.5.2 Примитивы барьера загрузки-получения и сохранения
  • Выпустите барьер примитив 96
  • 2.6 Анализ ассемблерного кода ядра Linux 97
  • 2.6.1 Базовые знания о связанных файлах 97
  • 2.6.2 vmlinux.лдс. Анализ S-файла 99
  • 2.6.3 Запуск кода сборки 102
  • 2.6.4 Создание сопоставления идентификаторов и образа ядра
  • Картирование 106
  • 2.6.5 Анализ функции __cpu_setup 114
  • 2.6.6 Анализ функции __primary_switch 117
  • 2.7 Часто задаваемые вопросы о таблицах страниц 120
  • 2.7.1 О базовом адресе таблицы страниц следующего уровня 121
  • 2.7.2 Программное обеспечение проходит по таблицам страниц 121
  • Глава 3 Подготовительные знания по управлению памятью 124
  • 3.1 Управление памятью с аппаратной точки зрения 126
  • 3.1.1 «Древняя эра» управления памятью 126
  • 3.1.2 Механизм сегментации 127
  • 3.1.3 Механизм пейджинга 128
  • 3.1.4 Виртуальный адрес на физический адрес
  • Преобразование 128
  • 3.2 Управление памятью с точки зрения программного обеспечения 129
  • 3.2.1 С точки зрения пользователей системы Linux
  • Управление памятью 129
  • 3.2.2 От разработчиков приложений Linux
  • Управление памятью с точки зрения распределения памяти 130 3.2.3 Управление памятью с точки зрения распределения памяти 131 3.2.4 Управление памятью с точки зрения процесса 131 3.2.5 Управление памятью с точки зрения ядра Linux 135 3.3 Предварительные знания об управлении физической памятью 136 3.3.1 Архитектура памяти UMA и NUMA 136 3.3.2 Структура данных управления памятью 138 3.3.3 Размер памяти 140 3.3.4 Отображение физической памяти 141 3.3.5 Инициализация зоны 143 3.3.6 Разделение пространства 145 3.3.7 Инициализация физической памяти 146 Глава 4 Физическая память и виртуальная память 152 4.1 Быстрый путь выделения страниц 153 4.1.1 Функция интерфейса для выделения физических страниц 154 4.1.2 Маска распределения 155 4.1.3 Функция alloc_pages() 158 4.1.4 Функция get_page_from_freelist() 162 4.1.5 Функция Zone_watermark_fast() 164 4.1.6 Функция rmqueue() 165 4.1.7 Страница выпуска 167 4.1.8 Резюме 170 4.2 Распределитель плит 170 4.2.1 Общие сведения распределителя слябов 170 4.2.2 Создание дескриптора сляба 173 4.2.3 Структура памяти распределителя слябов 176 4.2.4 Настройка дескриптора сляба 178 4.2.5 Выделение объектов сляба 180 4.2.6 Освобождение объектов кэша слябов 183 4.2.7 Функции интерфейса между распределителем слябов и партнерской системой 185 4.2.8 Область управления 185 4.2.9 kmalloc() 188 4.2.10 Резюме 189 4.3 vmalloc() 190 4.4 Адресное пространство процесса управления виртуальной памятью 194 4.4.1 Адресное пространство процесса 194 4.4.2 Структура данных mm_struct 195 4.4.3 Структура данных VMA 197 4.4.4 Атрибуты VMA 199 4.4.5 Найти VMA 201 4.4.6 Вставить VMA 203 4.4.7 Объединить VMA 206 4.4.8 Пример красно-черного дерева 207 4.4.9 Сводка 209 4.5 malloc() 210 4.5.1 Системный вызов brk 210 4.5.2 Разделение адресного пространства пользовательского режима 212 4.5.3 Функция __do_sys_brk() 213 4.5.4 Функция do_brk_flags() 213 4.5.5 Функция _mm_populate() 215 4.5.6 Функция get_user_pages() 216 4.5.7 Сводка 220 4.6 mmap 223 4.6.1 Обзор mmap 223 4.6.2 Сводка 225 4.7 Обработка исключений при отсутствии страницы 227 4.7.1 Базовый поток обработки исключения ошибки страницы ARM64 228 4.7.2 Функция do_page_fault() 234 4.7.3 Функция handle_mm_fault() 237 4.7.4 Прерывание по ошибке анонимной страницы 240 4.7.5 Системная нулевая страница 241 4.7.6 Прерывание ошибки страницы сопоставления файлов 242 4.7.7 Копирование при записи 245 4.7.8 Проблемы конкуренции, вызванные аппаратным механизмом DBM ARM64 248 4.7.9 Проблемы, касающиеся безопасного использования pte_offset_map() 251 4.7.10 Проблемы конкуренции, связанные с копированием при записи 253 4.7.11 Почему TLB должен обновляться перед переключением записей таблицы страниц 256 4.7.12 Тупик, вызванный исключение отсутствия страницы 257 4.7.13 Резюме 257 Глава 5 Расширенные темы управления памятью 259 5.1 Page 260 5.1.1 Структура данных страницы 260 5.1.2 Применение _refcount 265 5.1.3 Применение _mapcount 268 5.1.4 PG_Locked 269 5.1.5 Замечательное использование элементов сопоставления 270 5.1.6 Несколько функций интерфейса, связанных со страницей 271 5.1.7 Краткое описание 272 5.2 RMAP 272 5.2.1 Основная структура данных RMAP 273 5.2.2 Родительский процесс генерирует анонимные страницы 274 5.2.3 Создание дочернего процесса на основе родительского процесса 277 5.2.4 Копирование при записи происходит в дочернем процессе 280 5.2.5 Приложение RMAP 281 5.2.6 Сводка 283 5.3 Переработка страниц 285 5.3.1 Связанный список LRU 285 5.3.2 Метод второго шанса 288 5.3.3 Запуск повторного использования страницы 293 5.3.4 Поток ядра kswapd 293 5.3.5 Функция Balance_pgdat() 296 5.3.6 Функция Shrink_node() 298 5.3.7 Функция Shrink_active_list() 302 5.3.8 Функция Shrink_inactive_list() 304 5.3.9 Отслеживание активности LRU 308 5.3.10 Механизм повторного использования страниц 309 5.3.11 Алгоритм расстояния до ошибки 312 5.3.12 Сводка 317 5.4 Жизненный цикл анонимной страницы 318 5.4.1 Генерация анонимные страницы 319 5.4.2 Использование анонимных страниц 319 5.4.3 Замена анонимных страниц 319 5.4.4 Замена анонимных страниц 321 5.4.5 Уничтожение анонимных страниц 321 5.5 Миграция страниц 321 5.5.1 Какие страницы можно перенести 322 5.5.2 Основная функция миграции страниц 322 5.5.3 Функция Move_to_new_page() 324 5.5.4 Таблица страниц миграции 325 5.5.5 Миграция страниц, отличных от LRU 326 5.5.6 Итоги 328 5.6 Ограничение памяти 329 5.6.1 Основные принципы сокращения памяти 329 5.6.2 Запуск сокращения памяти 330 5.6.3 Прямое сокращение памяти 330 5.6.4 Функция Compact_zone() 333 5.6.5 Какие страницы подходят для сокращения памяти 338 5.7 KSM 339 5.7.1 Включение KSM 339 5.7.2 Базовая реализация KSM 343 5.7.3 Структура данных KSM 345 5.7.4 Новые возможности новой версии KSM 345 5.7.5 Can страницы, выделенные с помощью malloc(), сканируются KSM 353 5.7.6 Объединение страниц 355 5.7.7 Интересная формула расчета 358 5.7.8 page->Значение индекса 359 5.7.9 Сводка 360 5.8 Медленный путь выделения страниц 362 5.8.1 Функция Alloc_pages_slowpath() 362 5.8.2 Управление уровнем воды и приоритетом выделения 367 5.9 Управление фрагментацией памяти 368 5.9.1 Как алгоритм партнерской системы уменьшает фрагментацию памяти 368 5.9.2 Тип миграции страниц и регуляризация памяти 370 5.9.3 Новая оптимизация антифрагментации в ядре Linux 5.0 371 Глава 6 Анализ практического случая управления памятью 375 6.1 Информация журнала управления памятью и информация об отладке 375 6.1.1 Значение счетчика vm_stat 375 6.1.2 Анализ Meminfo 377 6.1.3 Информация о партнерской системе 383 6.1.4 Проверка информации области управления памятью 383 6.1.5 Проверка информации о памяти, связанной с процессом 385 6.1.6 Почему S_swap и P_swap не равны 387 6.1.7 Интерпретация информации журнала, выдаваемой механизмом OOM Killer 388 6.1.8 Интерпретация вывода сбоя после исключения ошибки страницы 394 6.2 Параметры настройки управления памятью 400 6.2.1 Параметры настройки, влияющие на уровень воды в области управления памятью min_free_kbytes 401 6.2.2 Параметры, влияющие на распределение страниц lowmem_reserve_ratio 402 6.2.3 Параметры, влияющие на переработку страниц 404 6.2.4 Параметры, влияющие на обратную запись грязных страниц 406 6.3 Практический анализ управления памятью 407 6.3.1 Случай 1: Время простоя, вызванное исключением отсутствия страницы и файловой системой 407 6.3.2 Случай 2: Простой виртуальной машины, вызванный KSM и NUMA 410 6.3.3 Случай 3: Почему не удается выделить страницу 415 6.3.4 Случай 4: Секретная задача — динамическая модификация 4 Сбои, вызванные таблицей системных вызовов 420 Глава 7 Основные понятия управления процессами 430 7.1 Основные понятия о процессах 431 7.1.1 Происхождение процесса 431 7.1.2 Дескриптор процесса 432 7.1.3 Жизненный цикл процесса 434 7.1.4 Идентификация процесса 436 7.1.5 Семейные отношения между процессами 436 7.1.6 Получение текущего процесса 438 7.1.7 Процесс 0 и процесс 1 440 7.2 Примитивы операционной системы, связанные с созданием и завершением процесса 441 7.2.1 Технология копирования при записи 442 7.2.2 Функция fork() 443 7.2.3 Функция vfork() 444 7.2.4 Функция clone() 445 7.2.5 Потоки ядра 445 7.2.6 Завершение процессов 446 7.2.7 Процессы-зомби и процессы-сироты 446 7.3 Анализ кода: создание и завершение процессов 447 7.3.1 _do_fork() анализ функции 447 7.3.2 анализ функции copy_process() 449 7.3.3 анализ функции dup_task_struct() 453 7.3.4 анализ функции sched_fork() 453 7.3.5 анализ функции copy_mm() 454 7.3.6 Возврат после создания процесса 458 7.4 Примитивы планирования процессов 461 7.4.1 Классификация процессов 461 7.4.2 Приоритет и вес процесса 461 7.4.3 Стратегия планирования 463 7.4.4 Временной интервал 465 7.4.5 Классический алгоритм планирования 465 7.4.6 Алгоритм планирования O (n) ядра Linux 467 7.4.7 Алгоритм планирования ядра Linux 467 7.4.8 CFS Linux ядро 468 Глава 8 Планирование и балансировка нагрузки управления процессами 469 8.1 CFS 470 8.1.1 Расчет времени выполнения vruntime 471 8.1.2 Структура данных планировщика 474 8.1.3 Анализ кода создания процесса 479 8.1.4 Анализ кода для добавления процесса в планировщик 483 8.1.5 Планирование процессов 485 8.1.6 Переключение процессов 488 8.1.7 Планирование такта 497 8.1.8 Механизм группового планирования 498 8.1.9 Резюме 502 8.2 Расчет нагрузки 503 8.2.1 Как измерить загрузку ЦП 503 8.2.2 Рабочая нагрузка и количественная оценка нагрузки 504 8.2.3 Расчет исторического совокупного затухания 503 505 8.2.4 Расчет количественной нагрузки 506 8.2.5 Расчет фактической вычислительной мощности 507 8.2.6 Структура данных sched_avg 508 8.2.7 Анализ кода PELT 510 8.2.8 Функция интерфейса PELT 516 8.3 Балансировка нагрузки SMP 517 8.3.1 Битовая карта управления ЦП 517 8.3.2 Домен планирования ЦП 519 8.3.3 Установление взаимосвязи топологии домена планирования ЦП 522 8.3.4 Балансировка нагрузки 529 8.3.5 Процесс пробуждения 536 8.3.6 Функция аффинного пробуждения 538 8.3.7 Отладка 541 8.3.8 Сводка 542 8.4 Зеленый энергосберегающий планировщик 542 8.4.1 Количественная оценка вычислительной мощности 545 8.4.2 Модель энергоэффективности 548 8.4.3 Подсистема OPP 551 8.4.4 Инициализация драйвера CPUfreq-dt 556 8.4.5 Регистрация подсистемы модели энергоэффективности 557 8.4.6 Какой ЦП следует выбрать для пробуждения Где находится процесс p? 561 8.4.7 Оценка состояния перегрузки 569 8.4.8 Динамическая частотная модуляция ЦП 570 8.4.9 Резюме 573 8.5 Планирование в реальном времени 574 8.5.1 Анализ задержек в реальном времени 574 8.5.2 Улучшение ядра Linux в реальном времени 576 Глава 9 Отладка управления процессами и анализ случаев 580 9.1 Отладка управления процессами 580 9.1.1 Просмотр информации о планировании, связанной с процессом 580 9.1.2 Просмотр информации CFS 582 9.1.3 Просмотр информации о домене планирования 585 9.1.4 Отладка узлов, связанных с планированием 586 9.2 Комплексный анализ случая - планирование системы 587 9.3 Управление процессами 589 9.3.1 характер процесса 589 9.3.2 Неизбежный приоритет процесса 590 9.3.3 Выбор планировщика 591 9.3.4 Использование четырехмерного пространства для понимания нагрузки 591 9.3.5 Анализ случая – почему нельзя запланировать 592
  • ......