Книгата е предназначена за програмисти, които искат да научат как се правят промени в кода на Linux ядрото. Особено ще е полезна и на онези, които искат да разберат как работи ядрото и по този начин да пишат по-ефективен код.
В книгата ще намерите практическа информация за:
• Избор на подходяща версия на ядрото. Получаване на изходния код, конфигуриране, компилиране и инсталирате на ядрото на произволна Linux система.
• Управление на физическата и виртуалната памет.
• Описание на начина по който ядрото управлява процесите и обработва прекъсванията.
• Принцип на работа на таймерите и проследяване на времето.
• Механизми за кеширане и запис на данни.
• Настройка на зареждащите механизми и системата за инициализация.
• Структура и работа с файлови системи, псевдофайлови системи.
И не на последно място – ще научите как да пишете и добавяте собствени модули и драйвери към ядрото.
27.95лв.
Модифициране и управление на Linux ядрото
Година | 2024 |
---|---|
Формат | 162х235 |
Страници | 286 |
Корици | Меки |
Преводач | Надежда Борисова |
Редактор | Ивелин Михайлов |
Съдържание
Глава 1. Кратка история на операционната система и ядро Linux…7
1.1. Началото. 1950-1990 г….7
1.2. От Minix до Linux. Етап на ядрото…10
1.3. Етап на дистрибуция…12
Глава 2. Основи на ядрото…15
2.1. Какво представлява ядрото…15
2.2. Характеристики на Linux ядрото…18
2.3. Версия на Linux ядрото …21
2.4. Избор на ядро при зареждане…22
2.5. Съобщения при зареждане на ядрото…23
2.6. Предаване на параметри на ядрото…25
Глава 3. Продължаваме запознанството си с ядрото. Компилиране на ядрото…29
3.1. Получаване на изходния код на ядрото…29
3.2. Разопаковане на архива с изходния код…31
3.3. Използване на пачове…32
3.4. Съдържание на директорията с изходен код…32
3.5. Изграждане на ядрото…33
3.6. Компилиране на модули…37
3.7. Инсталиране на ядрото…38
3.8. Практически пример: инсталиране на ядро 6.0 на Ubuntu 22.04…39
Глава 4. Стартиране на системата…43
4.1. Зареждащи механизми на Linux…43
4.2. Настройка на зареждащия механизъм…43
4.2.1. GRUB2 конфигурационни файлове…43
4.2.2. Избор на етикет по подразбиране…51
4.2.3. Стартиране на Windows…51
4.2.4. Парола за зареждане на GRUB2…52
4.2.5. Инсталиране на зареждащия механизъм…54
4.3. Система за инициализация…54
4.3.1. Задача на системата за инициализация…54
4.3.2. Принцип на действие…55
4.3.3. Конфигурационни файлове systemd…58
4.3.4. Цели…60
4.3.5. Управление на сървиси при използване на systemd…61
Глава 5. Как ядрото управлява процесите…63
5.1. Какво е процес…63
5.2. Структури, свързани с процеса…64
5.2.1. Списък със задачи и структура на процеса…64
5.2.2. Състояния на процеса…68
5.2.3. Дескриптор на процеса…71
5.3. Контекст на процеса…74
5.4. Създаване на нов процес и прекратяването му…75
5.5. Нишки…79
5.6. Планировчик…84
5.7. Управление на процеса от конзолата…85
5.7.1. Команди ps, nice и kill…85
5.7.2. Команда top…92
5.7.3. Информация за използването на паметта и дисковото пространство…95
5.7.4. Команда fuser…97
Глава 6. Обработка на прекъсвания…98
6.1. Какво представляват прекъсванията…98
6.2. Манипулатори на прекъсвания…99
6.2.1. Какво е манипулатор на прекъсвания?…99
6.2.2. Регистриране на манипулатор на прекъсвания…100
6.3. Писане на собствен манипулатор на прекъсвания…104
6.4. API на драйвери от високо ниво…106
6.5. Контекст на прекъсване…107
6.6. Функция do_IRQ()…109
6.7. Интерфейс /proc/interrupts…112
Глава 7. Таймери и проследяване на времето…116
7.1. Проследяване на времето в ядрото…116
7.2. Таймери на ядрото…118
7.3. API за таймер…120
7.4. Внедряване на таймери на ядрото…123
Глава 8. Управление на паметта…126
8.1. Какво представлява паметта?…126
8.1.1. Физическа и виртуална памет…126
8.1.2. Файлова и анонимна памет…129
8.1.3. Изместваща и неизместваща памет…130
8.1.4. Различни типове адреси…132
8.2. Методи за управление на подсистемата на паметта…135
8.2.1. Размяна и неизместваща памет…135
8.2.2. Системно извикване mlock() …136
8.2.3. OOM killer…136
8.2.4. cgroups…137
8.2.5. NUMA…138
8.3. Механизъм за разпределение на LRU…138
8.4. Допълнителна информация за управлението на паметта в Linux…140
8.4.1. Повече за виртуалната памет…141
8.4.2. Големи страници…142
8.4.3. Зони…143
8.4.4. Възли…143
8.4.5. Кеш на страницата…144
8.4.6. Анонимна памет…144
8.4.7. Освобождаване…144
8.4.8. Уплътнение (компресия)…146
8.5. Големи страници. В детайли…146
8.5.1. Обща информация…146
8.5.2. Взаимодействие на политиката за памет на задачите с разпределение/освобождаване на големи страници…153
8.5.3. Атрибути на големи страници за всеки възел…154
8.5.4. Използване на големи страници…155
8.6. Практическа информация за администратори…157
8.6.1. Полезни shell команди …157
8.6.2. Интерфейс CMA…161
8.6.3. Добавяне на суап файл…162
Глава 9. Файлова система…164
9.1. Виртуална файлова система на Linux…164
9.2. Регистриране и монтиране на файлова система…166
9.3. Суперблок-обект…169
9.3.1. Структура на struct super_operations…169
9.3.2. Структура struct xattr_handlers…171
9.3. Обект на инод…172
9.4. Обект на адресното пространство…176
9.4.1. Обща информация…176
9.4.2. Обработка на грешки по време на обратно записване…178
9.4.3. Структура sutruct address_space_operations…179
9.5. Обект File …184
9.6. Кеш за запис на директория (dcache)…188
9.6.1. Структура dentry_operations…188
9.6.2. API на кеша за запис на директория…190
Глава 10. Псевдофайлови системи…192
10.1. Предназначение…192
10.2. Псевдофайлова система sysfs…192
10.3. Псевдофайлова система proc…194
10.4. Специални настройки на ядрото за предотвратяване на DDoS атаки…200
Глава 11. Блоков вход/изход…203
11.1. Блокови устройства…203
11.2. Структура на блоковото устройство…204
11.3. Буфери…205
11.4. Вход/изход планировчици …208
11.4.1. Алгоритъм deadline…209
11.4.2. Алгоритъм CFQ…210
11.4.3. Алгоритъм NOOP…210
11.4.4. Конфигуриране на планировчици…211
11.5. Конфигуриране на общи параметри на блоков вход/изход…214
11.6. Управление на хранилища…215
11.6.1. Свързване на нов твърд диск и разделянето му…215
11.6.2. Мениджър на логически обеми…223
Глава 12. Механизми за кеширане на четене и запис на Linux ядрото …232
12.1. Дисков кеш и обратен запис…232
12.2. Методи за кеширане…233
12.3. Кеширането на практика…237
Глава 13. Устройства и модули…242
13.1. Типове устройства…242
13.2. Модули на ядрото…243
13.2.1. Писане на прост модул…243
13.2.2. Сглобяване на модула в дървото на изходния код на ядрото…246
13.2.3. Инсталиране на модули…248
13.2.4. Зареждане на модули…248
13.3. Разработка на сложни модули…249
13.3.1. Компилиране на модули от няколко файла с изходен код…249
13.3.2. Зависимости между модулите…249
13.3.3. Зареждане на модули със зависимости…250
Глава 14. Разработване на драйвер на устройство…252
14.1. Типове устройства scull…252
14.2. Номера на устройствата…254
14.3. Използвани структури данни…261
14.3.1. Структура file_operations…261
14.3.2. Структура file…268
14.3.3. Структура inode…270
14.4. Регистриране на символни устройства…271
14.5. Методи open() и release()…274
14.6. Методи read() и write()…277
14.7. Проверка на нашето устройство…285