Опубликовано

Вышла книга”Astra Linux. 30 уроков для начинающих”

Astra Linux. 30 уроков для начинающих

В книге  30 уроков для пользователей, начинающих осваивать популярный отечественный дистрибутив Astra Linux. С позиции пользователя описано решение типичных задач – от установки дистрибутива и настройки  графического интерфейса Fly до простейшего администрирования системы.  Рассмотрены настольные приложения, такие как офисный пакет LibreOffice, графический редактор GIMP, мультимедиа-программы для просмотра видео и воспроизведения музыки. Приведены инструкции по запуску Windows-приложений и установке популярных мессенджеров (Skype, Telegram, Viber) на компьютер. Также затронуты  вопросы, установки ОС на физический и виртуальный компьютер, подключения двух мониторов и других дополнительных устройств. Для закрепления материала даны контрольные вопросы и самостоятельные упражнения.

Для широкого круга пользователей

Осваиваем отечественный дистрибутив Astra Linux

В книге  30 уроков для пользователей, начинающих осваивать популярный отечественный дистрибутив Astra Linux, который широко внедряется в последнее время с целью замены Microsoft Windows. С позиции пользователя описано решение типичных задач – от установки дистрибутива до простейшего администрирования системы. Рассмотрены настольные приложения, такие как офисный пакет LibreOffice, мультимедиа-программы для просмотра видео и воспроизведения музыки. Приведены инструкции по запуску Windows-приложений и установке популярных мессенджеров.  Дополнительно затронуты  вопросы, установки операционной системы на физический и виртуальный компьютер, подключения двух мониторов и других дополнительных устройств. Для закрепления материала даны контрольные вопросы и самостоятельные упражнения.

  • Установка системы
  • Кастомизация графического интерфейса Fly
  • Настройка и защита сети
  • Установка мессенджеров Viber, Telegram, Skype
  • Мультимедиа-программы
  • Офисный пакет LibreOffice
  • Графический редактор GIMP
  • Подключение смартфона к компьютеру (iPhone, Android)
  • Начальные навыки администрирования
  • Работа с устройствами: подключение принтера, жесткого диска и дополнительного монитора

Книгу “Astra Linux. 30 уроков для начинающих” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………… 11

Часть I. Начало работы………………………………………………………………… 13

Урок 1. Установка дистрибутива……………………………………………………………. 15

1.1. Получение дистрибутива…………………………………………………………………………………………………… 15

1.2. Подготовка к установке……………………………………………………………………………………………………… 16

1.2.1. Подготовка к установке на физический компьютер………………………………………………. 16

Создание загрузочной флешки……………………………………………………………………………….. 16

Загрузка дистрибутива с USB-накопителя…………………………………………………………….. 18

1.2.2. Подготовка к установке на виртуальный компьютер……………………………………………. 18

Установка гостевой операционной системы…………………………………………………………. 23

1.3. Выбор типа установки……………………………………………………………………………………………………….. 23

1.4. Выбор способа переключения раскладки клавиатуры…………………………………………………… 25

1.5. Установка имени компьютера……………………………………………………………………………………………. 25

1.6. Создание локального пользователя………………………………………………………………………………….. 26

1.7. Установка часового пояса…………………………………………………………………………………………………. 28

1.8. Разметка жесткого диска……………………………………………………………………………………………………. 29

1.9. Выбор компонентов системы…………………………………………………………………………………………….. 37

1.10. Дополнительные настройки ОС………………………………………………………………………………………. 39

1.11. Установка загрузчика GRUB и завершение установки…………………………………………………. 40

1.12. Выбор уровня защищенности………………………………………………………………………………………….. 42

1.13. Самостоятельные упражнения………………………………………………………………………………………… 46

Урок 2. Интерфейс пользователя, вход в систему и завершение работы…. 47

2.1. Меню загрузчика………………………………………………………………………………………………………………… 47

2.2. Вход в систему…………………………………………………………………………………………………………………….. 49

2.3. Рабочий стол Fly…………………………………………………………………………………………………………………. 50

2.4. Настройка автоматического входа в систему………………………………………………………………….. 52

2.5. Завершение работы…………………………………………………………………………………………………………….. 52

2.6. Контрольные вопросы и самостоятельные упражнения…………………………………………………. 55

Урок 3. Кастомизация интерфейса пользователя……………………………………. 56

3.1. Настройка панели быстрого запуска……………………………………………………………………………….. 56

3.2. Настройка панели задач……………………………………………………………………………………………………. 57

3.2.1. Смена расположения панели задач………………………………………………………………………… 57

3.2.2. Изменение размера панели задач……………………………………………………………………………. 57

3.2.3. Делаем панель задач компактнее……………………………………………………………………………. 59

3.2.4. Автоматическое сокрытие панели задач……………………………………………………………….. 60

3.3. Переключатель рабочих столов………………………………………………………………………………………… 60

3.4. Изменение разрешения рабочего стола……………………………………………………………………………. 62

3.5. Смена обоев…………………………………………………………………………………………………………………………. 63

3.6. Изменение темы оформления……………………………………………………………………………………………… 65

3.7. Изменение параметров блокировки…………………………………………………………………………………… 67

3.8. Панель управления……………………………………………………………………………………………………………… 67

3.8.1. Редактирование главного меню………………………………………………………………………………. 70

3.8.2. Изменение раскладки клавиатуры………………………………………………………………………….. 71

3.8.3. Менеджер устройств………………………………………………………………………………………………… 72

3.8.4. Изменение параметров электропитания…………………………………………………………………. 72

3.9. Контрольные вопросы и самостоятельные упражнения…………………………………………………. 74

Урок 4. Командная строка……………………………………………………………………… 75

4.1. Способы доступа к командной строке……………………………………………………………………………… 75

4.2. Автодополнение командной строки………………………………………………………………………………….. 76

4.3. Получение справки по команде…………………………………………………………………………………………. 77

4.4. Некоторые базовые команды Linux………………………………………………………………………………….. 77

4.4.1. Перенаправление ввода/вывода……………………………………………………………………………… 77

4.4.2. Команда clear — очистка экрана……………………………………………………………………………. 79

4.4.3. Команды free и df — информация о системных ресурсах…………………………………….. 79

4.4.4. Команды w, who и whoami — информация о пользователях………………………………… 80

4.4.5. Команды top и htop — вывод информации о запущенных процессах………………… 80

4.4.6. Команды more и less — постраничный вывод……………………………………………………….. 83

4.5. Самостоятельные упражнения………………………………………………………………………………………….. 83

Часть II. Сеть и Интернет……………………………………………………………… 85

Урок 5. Настройка соединения с Интернетом………………………………………… 87

5.1. Настройка подключения по локальной сети……………………………………………………………………. 87

5.2. Подключаемся по Wi-Fi………………………………………………………………………………………………………. 89

5.3. Используем сторонние DNS……………………………………………………………………………………………….. 91

5.4. Файлы конфигурации сети в Linux……………………………………………………………………………………. 92

5.5. Самостоятельные упражнения………………………………………………………………………………………….. 94

Урок 6. Защита соединения с помощью VPN…………………………………………. 95

6.1. Вкратце о VPN…………………………………………………………………………………………………………………….. 95

6.2. Настройка VPN в Astra Linux…………………………………………………………………………………………….. 96

6.3. Самостоятельные упражнения………………………………………………………………………………………… 102

Урок 7. Конфигурация сети………………………………………………………………….. 103

7.1. Имена сетевых интерфейсов…………………………………………………………………………………………….. 103

7.2. Сервис network-manager: перезапуск сети……………………………………………………………………… 104

7.3. Утилита nm-connection-editor………………………………………………………………………………………….. 105

7.4. Маршрутизация………………………………………………………………………………………………………………… 107

7.4.1. Просмотр таблицы маршрутизации……………………………………………………………………… 108

7.4.2. Изменение таблицы маршрутизации……………………………………………………………………. 109

7.4.3. Сохранение маршрутов после перезапуска системы…………………………………………. 111

7.5. Команды диагностики сети……………………………………………………………………………………………… 112

7.6. Самостоятельные упражнения………………………………………………………………………………………… 114

Урок 8. Настройка брандмауэра…………………………………………………………… 115

8.1. Немного теории: что такое брандмауэр?……………………………………………………………………….. 115

8.2. Базовая настройка UFW…………………………………………………………………………………………………… 117

8.3. Создание правил для сервисов………………………………………………………………………………………… 119

8.4. Разрешаем IP-адреса………………………………………………………………………………………………………… 120

8.5. Запрещаем IP-адреса и службы………………………………………………………………………………………. 120

8.6. Удаление/сброс правил……………………………………………………………………………………………………. 120

8.7. Графический конфигуратор брандмауэра……………………………………………………………………… 121

8.8. Самостоятельные упражнения………………………………………………………………………………………… 123

Часть III. Программы и приложения…………………………………….. 125

Урок 9. Установка программ и приложений…………………………………………. 127

9.1. Способы установки программ в Linux……………………………………………………………………………. 127

9.2. Репозитории пакетов………………………………………………………………………………………………………… 129

9.3. Программы для управления пакетами……………………………………………………………………………. 130

9.3.1. Программа apt………………………………………………………………………………………………………… 130

9.3.2. Графический менеджер пакетов Synaptic…………………………………………………………….. 133

9.4. Снапы…………………………………………………………………………………………………………………………………. 137

9.4.1. Теория……………………………………………………………………………………………………………………… 137

9.4.2. Практика………………………………………………………………………………………………………………….. 138

9.5. Самостоятельные упражнения………………………………………………………………………………………… 142

Урок 10. Приложения для работы с Интернетом…………………………………… 143

10.1. Установка мессенджеров Skype, Viber, Telegram…………………………………………………………. 143

10.1.1. Установка Skype…………………………………………………………………………………………………. 143

10.1.2. Установка мессенджера Viber (альтернативный способ установки пакетов). 147

10.1.3. Установка Telegram……………………………………………………………………………………………. 150

10.2. Веб-браузер Chromium…………………………………………………………………………………………………… 153

10.3. Торрент-клиент……………………………………………………………………………………………………………….. 153

10.4. Нужен ли вам почтовый клиент?…………………………………………………………………………………… 158

10.5. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 158

Урок 11. Офисные приложения……………………………………………………………. 159

11.1. Текстовый процессор……………………………………………………………………………………………………… 159

11.1.1. Создание нового документа………………………………………………………………………………. 159

11.1.2. Открытие и сохранение документов…………………………………………………………………. 161

11.1.3. Ввод, выделение и форматирование текста……………………………………………………… 163

Ввод текста…………………………………………………………………………………………………………. 163

Выделение текста……………………………………………………………………………………………….. 166

Форматирование текста…………………………………………………………………………………….. 166

11.1.4. Дополнительные панели инструментов……………………………………………………………. 167

11.1.5. Работа с буфером обмена………………………………………………………………………………….. 168

11.1.6. Вставка картинок……………………………………………………………………………………………….. 168

11.1.7. Параметры абзаца……………………………………………………………………………………………… 170

11.1.8. Нумерованные и маркированные списки…………………………………………………………. 172

11.1.9. Таблицы………………………………………………………………………………………………………………. 174

11.1.10. Проверка правописания…………………………………………………………………………………… 176

11.1.11. Несколько колонок…………………………………………………………………………………………… 177

11.2. Электронная таблица…………………………………………………………………………………………………….. 178

11.2.1. Ввод данных в ячейки………………………………………………………………………………………… 179

11.2.2. Выделение ячеек…………………………………………………………………………………………………. 181

11.2.3. Адреса ячеек и диапазоны данных…………………………………………………………………… 182

11.2.4. Функции LibreOffice Calc……………………………………………………………………………………. 182

11.2.5. Диаграммы………………………………………………………………………………………………………….. 186

11.3. Создание PDF-документа……………………………………………………………………………………………….. 190

11.4. Самостоятельные упражнения………………………………………………………………………………………. 191

Урок 12. Мультимедиаприложения. Кодеки…………………………………………. 192

12.1. Установленные мультимедиаприложения……………………………………………………………………. 192

12.2. Воспроизведение музыки……………………………………………………………………………………………….. 193

12.2.1. В аудиоплеере Clementine…………………………………………………………………………………. 193

12.2.2. В плеере Qmmp…………………………………………………………………………………………………… 194

12.3. Воспроизведение видео………………………………………………………………………………………………….. 195

12.4. Решение проблем…………………………………………………………………………………………………………….. 196

12.5. Самостоятельные упражнения………………………………………………………………………………………. 197

Урок 13. Просмотр и редактирование фотографий……………………………….. 198

13.1. Утилита Gwenview………………………………………………………………………………………………………….. 198

13.1.1. Изменение размера фото……………………………………………………………………………………. 199

13.1.2. Поворот и отражение фотографии……………………………………………………………………. 201

13.1.3. Кадрирование……………………………………………………………………………………………………… 202

13.1.4. Устранение эффекта красных глаз……………………………………………………………………. 203

13.2. Графический редактор GIMP………………………………………………………………………………………… 204

13.2.1. Загрузка и сохранение изображений………………………………………………………………… 205

13.2.2. Основные инструменты GIMP…………………………………………………………………………… 206

Инструменты выделения……………………………………………………………………………………. 208

Инструменты рисования……………………………………………………………………………………. 216

Инструменты цвета…………………………………………………………………………………………….. 218

Цветовой баланс…………………………………………………………………………………………………. 218

Инструменты преобразования………………………………………………………………………….. 222

Прочие инструменты………………………………………………………………………………………….. 225

13.3. Самостоятельные упражнения………………………………………………………………………………………. 225

Урок 14. Интеграция компьютера со смартфоном………………………………… 226

14.1. Необходимость интеграции…………………………………………………………………………………………… 226

14.2. Интеграция с Android-смартфоном……………………………………………………………………………….. 226

14.2.1. Беспроводной способ…………………………………………………………………………………………. 226

14.2.2. Используем кабель для передачи файлов………………………………………………………… 231

14.3. Интеграция с iPhone………………………………………………………………………………………………………… 232

14.4. Самостоятельные упражнения………………………………………………………………………………………. 236

Урок 15. Проект Wine: запуск Windows-приложений……………………………. 237

15.1. Установка Wine……………………………………………………………………………………………………………….. 238

15.2. Настройка Wine после установки…………………………………………………………………………………. 239

15.3. Установка и запуск Windows-программы…………………………………………………………………….. 240

15.4. Самостоятельные упражнения………………………………………………………………………………………. 243

Часть IV. Файловая система……………………………………………………. 245

Урок 16. Работа с файлами и каталогами…………………………………………….. 247

16.1. Особенности файловой системы Linux…………………………………………………………………………. 247

16.1.1. Имена файлов в Linux…………………………………………………………………………………………. 247

16.1.2. Файлы и устройства…………………………………………………………………………………………… 248

16.1.3. Стандартные каталоги Linux…………………………………………………………………………….. 249

16.2. Команды для работы с файлами и каталогами……………………………………………………………. 249

16.2.1. Работа с файлами……………………………………………………………………………………………….. 249

16.2.2. Работа с каталогами…………………………………………………………………………………………… 251

16.3. Использование ссылок. Команда ln………………………………………………………………………………. 253

16.3.1. Жесткие и мягкие ссылки……………………………………………………………………………………. 253

16.3.2. Создание ссылок…………………………………………………………………………………………………. 254

16.3.3. Определение ссылок…………………………………………………………………………………………… 254

16.3.4. Удаление файлов и жесткие ссылки………………………………………………………………….. 255

16.3.5. Разница между копированием и созданием жесткой ссылки………………………….. 256

16.4. Команды поиска файлов: find, which и locate………………………………………………………………. 256

16.5. Графический файловый менеджер………………………………………………………………………………… 258

16.5.1. Знакомство с программой………………………………………………………………………………….. 258

16.5.2. Копирование файлов и каталогов…………………………………………………………………….. 259

16.5.3. Перемещение файлов и каталогов…………………………………………………………………….. 260

16.5.4. Переименование файлов и каталогов……………………………………………………………….. 261

16.5.5. Создание файлов и каталогов……………………………………………………………………………. 261

16.5.6. Изменение прав доступа к файлам и каталогам………………………………………………. 261

16.5.7. Удаление файлов и каталогов…………………………………………………………………………… 263

16.6. Сжатие и распаковка……………………………………………………………………………………………………… 263

16.7. Самостоятельные упражнения………………………………………………………………………………………. 263

Урок 17. Работа со сменными носителями. Монтирование…………………… 265

17.1. Корневая файловая система………………………………………………………………………………………….. 265

17.2. Монтирование и размонтирование……………………………………………………………………………….. 266

17.3. Файлы устройств и монтирование………………………………………………………………………………… 267

17.3.1. Жесткие диски…………………………………………………………………………………………………….. 267

17.3.2. Приводы оптических дисков……………………………………………………………………………… 268

17.3.3. Флешки и внешние жесткие диски…………………………………………………………………….. 269

17.4. Параметры монтирования файловых систем……………………………………………………………….. 270

17.5. Монтирование разделов при загрузке………………………………………………………………………….. 271

17.6. Идентификаторы UUID…………………………………………………………………………………………………… 273

17.7. Самостоятельные упражнения………………………………………………………………………………………. 275

Урок 18. Особые операции с файловой системой…………………………………. 276

18.1. Монтирование ISO-образа…………………………………………………………………………………………….. 276

18.2. Создание файловой системы…………………………………………………………………………………………. 277

18.3. Проверка и восстановление файловой системы…………………………………………………………… 277

18.4. Смена корневой файловой системы………………………………………………………………………………. 278

18.5. Ограничение скорости CD/DVD…………………………………………………………………………………….. 278

18.6. Монтирование каталога к каталогу……………………………………………………………………………… 278

18.7. Примеры использования команды dd……………………………………………………………………………. 279

18.7.1. Копирование файлов с помощью dd…………………………………………………………………. 279

18.7.2. Разделение файла на несколько частей……………………………………………………………. 280

18.7.3. Создание резервной копии жесткого диска……………………………………………………… 281

18.7.4. Создание архива с резервной копией всего жесткого диска…………………………… 281

18.7.5. Уничтожение всех данных раздела жесткого диска……………………………………….. 281

18.8. Самостоятельные упражнения………………………………………………………………………………………. 282

Урок 19. Права доступа………………………………………………………………………… 283

19.1. Концепция прав доступа………………………………………………………………………………………………… 283

19.2. Смена владельца файла…………………………………………………………………………………………………. 288

19.3. Групповое изменение прав доступа……………………………………………………………………………… 288

19.4. Специальные права доступа: SUID и SGID………………………………………………………………….. 288

19.5. Атрибуты файла. Запрет изменения файла………………………………………………………………….. 289

19.6. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 290

Урок 20. Управление учетными записями пользователей…………………….. 291

20.1. Пользователь root……………………………………………………………………………………………………………. 291

20.2. Команда sudo………………………………………………………………………………………………………………….. 294

20.3. Команда su………………………………………………………………………………………………………………………. 296

20.4. Создание и удаление пользователей…………………………………………………………………………….. 296

20.5. Группы пользователей…………………………………………………………………………………………………… 298

20.6. Конфигуратор Политика безопасности………………………………………………………………………. 299

20.6.1. Включение ввода пароля для sudo……………………………………………………………………. 305

20.6.2. Блокировка перезагрузки и выключения для пользователей…………………………. 305

20.6.3. Задание глобального счетчика неудачных попыток входа…………………………… 305

20.6.4. Задание сложности пароля……………………………………………………………………………….. 305

20.7. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 306

Урок 21. Шифрование файловой системы……………………………………………. 307

21.1. Шифрование с помощью ECryptfs…………………………………………………………………………………. 307

21.2. Флешка для хранения пароля………………………………………………………………………………………… 310

21.3. Самостоятельные упражнения………………………………………………………………………………………. 311

Часть V. Аппаратные средства………………………………………………… 313

Урок 22. Получение информации о ПК. Псевдофайловые системы………. 315

22.1. Виртуальная файловая система sysfs…………………………………………………………………………… 315

22.2 Виртуальная файловая система proc…………………………………………………………………………….. 319

22.2.1. Информационные файлы……………………………………………………………………………………. 319

22.2.2. Файлы, позволяющие изменять параметры ядра…………………………………………….. 321

22.2.3. Файлы, изменяющие параметры сети……………………………………………………………….. 321

22.2.4. Файлы, изменяющие параметры виртуальной памяти……………………………………. 322

22.2.5. Файлы, позволяющие изменить параметры файловых систем………………………. 322

22.2.6. Сохранение произведенных изменений……………………………………………………………. 323

22.3. Самостоятельные упражнения………………………………………………………………………………………. 323

Урок 23. Подключение принтера………………………………………………………….. 324

23.1. Подключение принтера………………………………………………………………………………………………….. 324

23.2. Печать проверочной страницы……………………………………………………………………………………… 329

23.3. Печать первого документа…………………………………………………………………………………………….. 329

23.4. Установка опций печати………………………………………………………………………………………………… 329

23.5. Самостоятельные упражнения………………………………………………………………………………………. 331

Урок 24. Настройка жесткого диска…………………………………………………….. 332

24.1. Физическое подключение жесткого диска……………………………………………………………………. 332

24.2. Разметка жесткого диска………………………………………………………………………………………………… 333

24.3. Монтирование новых разделов…………………………………………………………………………………….. 337

24.4. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 338

Урок 25. Подключение двух мониторов……………………………………………….. 339

25.1. Физическое подключение двух мониторов к компьютеру………………………………………….. 339

25.2. Настройка системы………………………………………………………………………………………………………… 341

25.3. Контрольные вопросы……………………………………………………………………………………………………. 347

Часть VI. Cистемное администрирование…………………………. 349

Урок 26. Нештатные ситуации…………………………………………………………….. 351

26.1. Разбор нештатной ситуации………………………………………………………………………………………….. 351

26.2. Восстановление пароля root………………………………………………………………………………………….. 354

26.3. Чтение логов……………………………………………………………………………………………………………………. 355

26.3.1. Установка времени……………………………………………………………………………………………… 356

26.3.2. Просмотр и фильтрация логов…………………………………………………………………………… 356

26.3.3. Фильтр по дате……………………………………………………………………………………………………. 356

26.3.4. Фильтр по сервису………………………………………………………………………………………………. 357

26.3.5. Фильтр по пути……………………………………………………………………………………………………. 358

26.3.6. Фильтр по процессу или пользователю……………………………………………………………. 358

26.3.7. Просмотр сообщений ядра………………………………………………………………………………… 358

26.3.8. Фильтр по уровню ошибки………………………………………………………………………………… 358

26.3.9. Журналы в реальном времени…………………………………………………………………………… 359

26.4. Самостоятельные упражнения………………………………………………………………………………………. 359

Урок 27. Процесс загрузки системы……………………………………………………… 360

27.1. Назначение загрузчика………………………………………………………………………………………………….. 360

27.2. Конфигурационный файл GRUB2…………………………………………………………………………………. 361

27.3. Установка пароля загрузчика……………………………………………………………………………………….. 364

27.4. Загрузка с ISO-образов…………………………………………………………………………………………………… 366

27.5. Загрузка Windows……………………………………………………………………………………………………………. 367

27.6. Восстановление загрузчика GRUB/GRUB2…………………………………………………………………. 367

27.7. Запрет загрузки в режиме восстановления. Задание тайм-аута………………………………… 368

27.8. Самостоятельные упражнения………………………………………………………………………………………. 369

Урок 28. Системные службы………………………………………………………………… 370

28.1. Сервисы, службы, демоны……………………………………………………………………………………………… 370

28.2. Терминология systemd……………………………………………………………………………………………………. 372

28.3. Управление службами в Astra Linux……………………………………………………………………………… 373

28.4. Самостоятельные упражнения………………………………………………………………………………………. 375

Урок 29. Выполнение команд по расписанию………………………………………. 376

29.1. Редактирование основной таблицы расписания планировщика……………………………….. 376

29.2. Редактирование пользовательской таблицы расписания…………………………………………… 378

29.3. Добавление собственной записи в таблицу расписания…………………………………………….. 379

29.4. Использование панели управления для редактирования таблицы расписания……….. 381

29.5. Самостоятельные упражнения………………………………………………………………………………………. 383

Урок 30. Автоматизация задач……………………………………………………………… 384

30.1. Настройка оболочки………………………………………………………………………………………………………. 384

30.2. Пример простейшей автоматизации……………………………………………………………………………… 386

30.3. Привет, мир!…………………………………………………………………………………………………………………….. 387

30.4. Использование переменных в собственных сценариях………………………………………………. 388

30.5. Передача параметров сценарию…………………………………………………………………………………… 389

30.6. Массивы и bash……………………………………………………………………………………………………………….. 390

30.7. Циклы……………………………………………………………………………………………………………………………….. 390

30.8. Условные операторы……………………………………………………………………………………………………… 391

30.9. Функции…………………………………………………………………………………………………………………………… 392

30.10. Примеры сценариев………………………………………………………………………………………………………. 393

30.10.1. Сценарий мониторинга журнала………………………………………………………………….. 393

30.10.2. Переименование файлов………………………………………………………………………………… 393

30.10.3. Преобразование систем счисления……………………………………………………………….. 394

30.10.4. Проверка прав пользователя…………………………………………………………………………. 394

30.10.5. Генератор имени временного файла…………………………………………………………….. 395

30.10.6. Проверка свободного дискового пространства с уведомлением по электронной почте            395

30.11. Самостоятельные упражнения……………………………………………………………………………………. 396

Заключение………………………………………………………………………………………….. 397

Предметный указатель…………………………………………………………………………. 398

Евгений Андреев, инженер-программист и системный администратор. Имеет более чем двадцатилетний опыт работы с операционной системой Linux в самых различных вариантах – от встраиваемых систем до серверов

Опубликовано

3-е издание: “Внутреннее устройство Linux”

Внутреннее устройство Linux, 3 изд.

Эта книга — введение во внутреннее устройство ОС Linux. Рассмотрены основные подсистемы ядра и их сущности, механизмы контроля доступа и привилегии, принципы и механизмы контейнеризации. Уделено внимание компонентам, подсистемам Linux и их функционированию как единой системы. Подробно описано пользовательское окружение, интерфейс командной строки CLI, язык командного интерпретатора и его использование для автоматизации актуальных задач. Все положения наглядно проиллюстрированы  примерами,  разработанными автором и проверенными им на практике.

В 3-м издании описаны механизмы принудительного разграничения доступа и контроля целостности, уникальные для российского защищенного дистрибутива Astra Linux и операционных систем в целом.  Учтены последние изменения в компонентах ОС и обновлены листинги примеров. Расширена глава про сетевую подсистему, добавлена глава по современным средствам трассировки, измерения нагрузки и мониторинга производительности.

 Для студентов, пользователей, программистов и системных администраторов Linux

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

Совет для начинающих

И напоследок, самый важный совет для начинающих — начните!
Цитата из книги

  • Импортозамещение и российский Linux: все, что вы хотели знать
  • Пользовательское окружение и интерфейс командной строки CLI
  • Файлы, каталоги и файловые системы
  • Процессы и нити, каналы, сокеты и разделяемая память
  • Дискреционное и мандатное разграничение доступа, мандатный контроль целостности и привилегии процессов
  • Сетевая подсистема и службы
  • Графический интерфейс GUI: оконные системы X Window и Wayland
  • Программирование на языке командного интерпретатора
  • Контейнеры и виртуализация
  • От отдельных компонент — к системе: Linux своими руками
  • Нагрузка, производительность, мониторинг и трассировка

Книгу “Внутреннее устройство Linux, 3 изд.” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие. 9

Импортозамещение и российский Linux: все, что вы хотели знать,
но боялись спросить. 9

Сертифицированные операционные системы.. 10

Другие операционные системы.. 11

Введение. 12

О чем эта книга?. 12

Кому адресована книга. 13

Принятые соглашения и обозначения. 14

Методические рекомендации.. 15

Что должен знать читатель. 16

Совет для начинающих. 19

Глава 1. Архитектура ОС Linux. 20

1.1. Обзор внутреннего устройства. 20

1.2. Внеядерные компоненты: программы и библиотеки.. 22

1.3. Ядерные компоненты: подсистемы управления процессами, памятью, вводом-выводом, файлами   22

1.4. Трассировка системных и библиотечных вызовов. 23

1.5. Интерфейсы прикладного программирования. 25

1.6. В заключение. 26

Глава 2. Пользовательское окружение ОС Linux. 27

2.1. Командный интерфейс. 27

2.2. Виртуальные терминалы.. 29

2.2.1. Псевдотерминалы.. 31

2.3. Управляющие символы.. 33

2.4. Управляющие последовательности.. 40

2.5. Основной синтаксис командной строки.. 43

2.5.1. Опции командной строки.. 45

2.6. Справочные системы.. 46

2.6.1. Система страниц руководства. 46

2.6.2. Справочная система GNU.. 50

2.6.3. Встроенная справка командного интерпретатора. 50

2.7. Пользователи и группы.. 51

2.7.1. Передача полномочий.. 53

2.7.2. Хранилища учетных записей.. 54

2.8. Переменные окружения и конфигурационные dot-файлы.. 55

2.9. В заключение. 62

Глава 3. Подсистема управления файлами и вводом-выводом.. 63

3.1. Файлы и дерево каталогов. 63

3.1.1. Путевые имена файлов. 64

3.2. Типы файлов. 65

3.2.1. Обычные файлы.. 66

3.2.2. Каталоги.. 67

3.2.3. Имена, данные, метаданные и индексные дескрипторы.. 68

3.2.4. Ссылки.. 69

3.2.5. Специальные файлы устройств. 73

3.2.6. Именованные каналы и файловые сокеты.. 76

3.3. Файловые дескрипторы.. 77

3.4. Файловые системы.. 80

3.4.1. Файловые системы и процедура монтирования. 80

3.4.2. Дисковые файловые системы.. 82

3.4.3. Сетевые файловые системы.. 83

3.4.4. Специальные файловые системы.. 85

3.4.5. Внеядерные файловые системы.. 86

3.5. Дискреционное разграничение доступа. 90

3.5.1. Владельцы и режим доступа к файлам.. 91

3.5.2. Базовые права доступа и дополнительные атрибуты.. 92

Режим доступа новых файлов. 94

Семантика режима доступа разных типов файлов. 95

Дополнительные атрибуты.. 97

3.5.3. Списки контроля доступа POSIX. 101

Групповая маска. 103

Права по умолчанию.. 104

3.6. Мандатное (принудительное) разграничение доступа. 105

3.6.1. Модуль принудительного разграничения доступа AppArmor. 107

3.6.2. Модуль принудительного разграничения доступа SELinux. 109

3.6.3. Модуль принудительного разграничения доступа Astra Linux. 114

3.7. Дополнительные свойства файлов. 125

3.7.1. Расширенные атрибуты файлов. 125

3.7.2. Флаги файлов. 127

3.8. В заключение. 128

Глава 4. Управление процессами и памятью.. 129

4.1. Программы и библиотеки.. 129

4.1.1. Ядро Linux. 132

4.2. Процессы и нити.. 135

4.3. Порождение процессов и нитей, запуск программ.. 139

4.3.1. Параллельные многопроцессные программы.. 143

4.3.2. Параллельные многонитевые программы.. 144

4.3.3. Двойственность процессов и нитей Linux. 148

4.4. Дерево процессов. 150

4.5. Атрибуты процесса. 152

4.5.1. Маркеры доступа. 153

4.5.2. Привилегии.. 156

4.5.3. Другие атрибуты.. 160

4.6. Классы и приоритеты процессов. 160

4.6.1. Распределение процессора между процессами.. 160

4.6.2. Распределение устройств ввода-вывода между процессами.. 167

4.7. Память процесса. 176

4.7.1. Виртуальная память. 177

4.7.2. Отображение файлов в память. 179

4.7.3. Потребление памяти.. 183

4.8. Механизм сигналов. 187

4.8.1. Сеансы и группы процессов: управление заданиями.. 192

4.9. Межпроцессное взаимодействие. 195

4.9.1. Неименованные каналы.. 196

4.9.2. Именованные каналы.. 197

4.9.3. Неименованные локальные сокеты.. 198

4.9.4. Именованные локальные сокеты.. 200

4.9.5. Разделяемая память, семафоры и очереди сообщений.. 202

Разделяемая память. 202

Семафоры и очереди сообщений.. 206

4.10. В заключение. 207

Глава 5. Программирование на языке командного интерпретатора. 209

5.1. Интерпретаторы и их сценарии.. 209

5.2. Встроенные и внешние команды.. 211

5.3. Перенаправление потоков ввода-вывода. 212

5.4. Подстановки командного интерпретатора. 218

5.4.1. Подстановки имен файлов. 218

5.4.2. Подстановки параметров. 220

Переменные — именованные параметры.. 220

Позиционные параметры.. 223

Специальные параметры.. 224

5.4.3. Подстановки вывода команд. 225

5.4.4. Подстановки арифметических выражений.. 227

5.5. Экранирование. 230

5.6. Списки команд. 233

5.6.1. Условные списки.. 234

5.6.2. Составные списки: ветвление. 236

5.6.3. Составные списки: циклы.. 241

5.6.4. Функции.. 246

5.7. Сценарии на языке командного интерпретатора. 249

5.8. Инструментальные средства обработки текста. 252

5.8.1. Фильтр строк grep. 253

5.8.2. Фильтр символов и полей cut 255

5.8.3. Процессор текстовых таблиц awk. 256

5.8.4. Потоковый редактор текста sed. 257

5.9. В заключение. 261

Глава 6. Сетевая подсистема. 262

6.1. Сетевые интерфейсы, протоколы и сетевые сокеты.. 262

6.2. Конфигурирование сетевых интерфейсов и протоколов. 266

6.2.1. Ручное конфигурирование. 266

6.2.2. Автоматическое конфигурирование. 268

6.3. Служба имен и DNS/mDNS-резолверы.. 276

6.4. Сетевые службы.. 281

6.4.1. Служба SSH.. 281

6.4.2. Почтовые службы SMTP, POP/IMAP. 289

6.4.3. Служба WWW… 292

6.4.4. Служба FTP. 294

6.4.5. Служба NFS. 296

NFS-клиент. 296

NFS-сервер. 297

6.4.6. Служба SMB/CIFS. 298

Имена NetBIOS. 299

CIFS-клиенты.. 300

6.4.7. Служба каталогов LDAP. 302

Служба имен и пользовательские учетные записи.. 306

6.5. Средства сетевой диагностики.. 307

6.5.1. Анализаторы пакетов tcpdump и tshark. 307

6.5.2. Сетевой сканер nmap. 310

6.5.3. Мониторинг сетевых соединений процессов. 311

6.6. В заключение. 313

Глава 7. Графическая система X Window System… 315

7.1. X-сервер. 315

7.2. X-клиенты и X-протокол. 317

7.3. Оконные менеджеры.. 322

7.3.1. Декорирование на клиентской стороне. 325

7.4. Настольные пользовательские окружения. 327

7.5. Библиотеки интерфейсных элементов. 329

7.6. Расширения Х-протокола. 332

7.6.1. Расширение Composite и композитный менеджер. 334

7.6.2. GLX, DRI и 3D-графика. 336

7.7. Запуск X Window System… 338

7.7.1. Локальный запуск X-клиентов. 338

7.7.2. Дистанционный запуск X-клиентов. 338

7.7.3. Управление X-дисплеями: XDMCP-менеджер и протокол. 341

7.8. Программный интерфейс X Window System… 342

7.8.1. Трассировка X-библиотек и X-протокола. 342

7.8.2. 3D-графика и инфраструктура прямого рендеринга DRI 348

7.9. В заключение. 354

Глава 8. Графическая система Wayland. 356

8.1. Wayland-композитор. 358

8.2. Wayland-клиенты и Wayland-протокол. 359

8.3. Запуск графической среды на основе Wayland. 365

8.4. В заключение. 366

Глава 9. Контейнеры и виртуальные машины.. 367

9.1. Чрутизация. 368

9.2. Пространства имен.. 372

9.3. Контейнеризация: runc и docker. 377

9.4. Группы управления (cgroups). 381

9.5. В заключение. 385

Глава 10. От отдельных компонент — к системе. 386

10.1. Как Linux загружается. 386

10.2. Как обнаруживаются драйверы устройств. 390

10.3. Как запускаются системные службы.. 393

10.4. Linux своими руками.. 402

10.5. В заключение. 411

Глава 11. Нагрузка, производительность, мониторинг и трассировка. 412

11.1. Метрики и инструменты измерения нагрузки и производительности.. 412

11.1.1. Центральный процессор и память. 412

11.1.2. Устройства ввода-вывода. 420

11.2. Мониторинг и трассировка. 424

11.2.1. Трассировка и отладка программ.. 426

11.3. В заключение. 439

Заключение. 440

Список литературы.. 442

Для удовольствия. 442

Начинающим.. 442

Программистам.. 442

Бесстрашным.. 443

Предметный указатель. 444

Кетов Дмитрий Владимирович, ведущий преподаватель в области операционных систем и сетевых технологий Санкт-Петербургского политехнического университета (СПбПУ) с многолетним стажем, начальник отдела разработки программного обеспечения Санкт-Петербургского филиала АО “Концерн радиостроения «Вега»”. Профессионально занимается теорией построения и практикой разработки операционных систем и системного программного обеспечения.

Опубликовано

Новинка: “Сети Linux. Модели и приложения”

Сети Linux. Модели и приложения

Последовательно разобраны различные стороны сетевой инфраструктуры в Linux: базовые понятия сетей и TCP/IP, программные инструменты управления сетевым трафиком, программирование пользовательских сетевых приложений и драйверов сетевых протоколов для ядра Linux. Также исследованы  сети TOR, Yggdrasil, I2P, адресация IPv6, службы DNS, DHCP, SSH, DNS-системы разрешения имён EmerDNS и Alfis, что позволяет оценить тенденции развития современного Интернета.

Для специалистов по безопасности, сетевых администраторов, программистов

Новейшие сетевые разработки.

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

В первой части книги подробно рассказано о протоколе IPv6, который в настоящее время постепенно приходит на смену протоколу IPv4, доминировавшему на протяжении последних 30 лет.

Следующая часть подробно иллюстрирует, как устанавливать, настраивать и использовать все основные протокольные механизмы и инструменты, обеспечивающие работу Интернета и локальных сетей: DNS, DHCP, SSH.

Последняя часть, самая свежая с хронологической точки зрения, содержит выборочный обзор альтернативных проектов «Интернет завтрашнего дня»: сети TOR, Yggdrasil, I2P, альтернативные DNS-системы разрешения имён EmerDNS и Alfis. Хотя рассмотренные технологии выбраны на вкус автора, но в целом дают весьма полное впечатление о том, как эволюционирует современный Интернет.

Автор этой книги на протяжении свыше 40 лет являлся непосредственным участником разработки проектов из области системотехники и программного обеспечения разного масштаба и разной целевой ориентации. При этом практически все из них в большей или меньшей мере были связаны с сетевыми обменами. Предлагаемый в этой книге материал является обобщением практического опыта автора.

Это книга о том как выживать в эпоху обрушения сети Интернет.
автор книги

Книгу “Сети Linux. Модели и приложения” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие………………………………………………………………………………………………………………………………… 6

Что есть и чего нет в книге?……………………………………………………………………………………………………………… 7

Соглашения и выделения, принятые в тексте…………………………………………………………………………………….. 8

Код примеров и замеченные опечатки……………………………………………………………………………………………….. 8

Источники использованной информации…………………………………………………………………………………………… 8

Об авторе………………………………………………………………………………………………………………………………………… 9

Часть I. Сетевой стек: архитектура………………………………………………………………………………………. 10

RFC……………………………………………………………………………………………………………………………………………….. 10

Принципы сетевого стека………………………………………………………………………………………………………………… 12

Инкапсуляция данных…………………………………………………………………………………………………………….. 13

Cетевой порядок байтов………………………………………………………………………………………………………….. 14

Адреса MAC………………………………………………………………………………………………………………………………….. 15

Разрешение аппаратных адресов………………………………………………………………………………………………. 18

Адреса IP……………………………………………………………………………………………………………………………………….. 19

IPv4……………………………………………………………………………………………………………………………………….. 20

Маски и подсети……………………………………………………………………………………………………………. 20

Широковещательный и групповой обмен……………………………………………………………………….. 22

Частные адреса………………………………………………………………………………………………………………. 23

Частные IPv4 и NAT……………………………………………………………………………………………………… 24

IPv6……………………………………………………………………………………………………………………………………….. 24

Префикс адреса……………………………………………………………………………………………………………… 25

Сокращения записи IPv6………………………………………………………………………………………………… 26

Локальные адреса………………………………………………………………………………………………………….. 28

Синтаксис записи IPv6…………………………………………………………………………………………………… 29

Прогноз………………………………………………………………………………………………………………………… 31

Адресные переменные в программном коде…………………………………………………………………………….. 32

Разрешение адресов и имен……………………………………………………………………………………………………… 34

Разрешение имен в программном коде…………………………………………………………………………… 35

Сетевые интерфейсы………………………………………………………………………………………………………………………. 37

Таблица маршрутизации………………………………………………………………………………………………………….. 44

Управление роутингом………………………………………………………………………………………………….. 46

Алиасные IP-адреса………………………………………………………………………………………………………………… 49

Петлевой интерфейс……………………………………………………………………………………………………………….. 53

Переименование сетевого интерфейса……………………………………………………………………………………… 54

Альтернативные имена………………………………………………………………………………………………….. 56

Порты транспортного уровня………………………………………………………………………………………………………….. 58

Источники использованной информации…………………………………………………………………………………………. 59

Часть II. Протоколы и инструменты прикладного уровня………………………………………………. 61

Инструменты диагностики………………………………………………………………………………………………………………. 61

Инструменты наблюдения………………………………………………………………………………………………………. 63

Инструменты тестирования…………………………………………………………………………………………………….. 67

Сервисы сети и systemd…………………………………………………………………………………………………………………… 69

Протокол SSH……………………………………………………………………………………………………………………………….. 70

Передача файлов по SSH………………………………………………………………………………………………………… 74

SSH и Midnight Commander…………………………………………………………………………………………………….. 75

Графическая сессия в SSH………………………………………………………………………………………………………. 79

SSH в скриптах………………………………………………………………………………………………………………………. 80

Протокол DHCP…………………………………………………………………………………………………………………………….. 81

Разрешение имен: служба DNS……………………………………………………………………………………………………….. 85

Локальный DNS-резолвер bind……………………………………………………………………………………………….. 86

Кеширующий DHCP/DNS-сервер Dnsmasq……………………………………………………………………………… 87

Кеширующий DNS-сервер средствами systemd………………………………………………………………………… 93

Оптимизация используемых серверов DNS…………………………………………………………………………….. 96

Защищенность сети: брандмауэр……………………………………………………………………………………………………. 100

Брандмауэр ufw…………………………………………………………………………………………………………………….. 102

Суперсервер inetd…………………………………………………………………………………………………………………………. 107

Сервер telnet…………………………………………………………………………………………………………………………. 109

Сокетная активация в systemd……………………………………………………………………………………………….. 112

Прокси-серверы……………………………………………………………………………………………………………………………. 118

Прокси сквозь SSH………………………………………………………………………………………………………………. 125

Клиенты прокси……………………………………………………………………………………………………………………. 125

Кто и как использует прокси?………………………………………………………………………………………………… 128

Источники использованной информации……………………………………………………………………………………….. 130

Часть III. Программирование сетевых приложений……………………………………………………….. 131

Общие принципы………………………………………………………………………………………………………………………….. 131

Клиент и сервер…………………………………………………………………………………………………………………….. 132

Сети датаграммные и потоковые……………………………………………………………………………………………. 132

Фазы соединения TCP………………………………………………………………………………………………….. 134

Адаптивные механизмы TCP……………………………………………………………………………………….. 135

Сообщения прикладного уровня в TCP………………………………………………………………………… 136

Присоединенный UDP…………………………………………………………………………………………………. 138

Сетевые сокеты и операции…………………………………………………………………………………………………………… 138

Обменные операции………………………………………………………………………………………………………………. 144

Параметры сокета…………………………………………………………………………………………………………………. 147

Использование сокетного API……………………………………………………………………………………………….. 149

UDP клиент-сервер……………………………………………………………………………………………………… 150

TCP клиент-сервер………………………………………………………………………………………………………. 152

Клиент-сервер в UNIX-домене…………………………………………………………………………………….. 157

Управляющие операции………………………………………………………………………………………………………………… 157

Классы обслуживания сервером……………………………………………………………………………………………………. 158

Последовательный сервер……………………………………………………………………………………………………… 162

Параллельный сервер……………………………………………………………………………………………………………. 162

Предварительное клонирование процесса………………………………………………………………………………. 163

Создание потока по запросу…………………………………………………………………………………………………… 164

Пул потоков…………………………………………………………………………………………………………………………. 165

Последовательный сервер с очередью обслуживания……………………………………………………………… 167

Суперсервер и сокетная активация…………………………………………………………………………………………. 168

Расширенные операции ввода/вывода……………………………………………………………………………………………. 175

Примеры реализации…………………………………………………………………………………………………………….. 176

Неблокируемый ввод/вывод…………………………………………………………………………………………………. 176

Замечания к примерам…………………………………………………………………………………………………. 177

Мультиплексирование ввода/вывода……………………………………………………………………………………… 179

Замечания к примерам…………………………………………………………………………………………………. 182

Ввод/вывод, управляемый сигналом……………………………………………………………………………………… 183

Асинхронный ввод/вывод……………………………………………………………………………………………………… 184

Символьный сокет……………………………………………………………………………………………………………………….. 185

Канальный уровень………………………………………………………………………………………………………………………. 186

Источники использованной информации……………………………………………………………………………………….. 187

Часть IV. Драйверы сетевых устройств в ядре Linux……………………………………………………….. 188

Введение в модули ядра……………………………………………………………………………………………………………….. 189

Сборка модуля……………………………………………………………………………………………………………………… 189

Точки входа и завершения…………………………………………………………………………………………………….. 190

Вывод диагностики модуля…………………………………………………………………………………………………… 191

Загрузка модулей………………………………………………………………………………………………………………….. 192

Параметры загрузки модуля………………………………………………………………………………………… 194

Подсчет ссылок использования……………………………………………………………………………………………… 198

Структуры данных сетевого стека…………………………………………………………………………………………………. 199

Путь пакета сквозь стек протоколов……………………………………………………………………………………………… 200

Прием: традиционный подход……………………………………………………………………………………………….. 200

Прием: высокоскоростной интерфейс…………………………………………………………………………………….. 201

Передача пакетов………………………………………………………………………………………………………………….. 204

Драйверы: сетевой интерфейс………………………………………………………………………………………………………… 205

Статистика интерфейса………………………………………………………………………………………………………….. 211

Виртуальный сетевой интерфейс……………………………………………………………………………………………. 213

Протокол сетевого уровня……………………………………………………………………………………………………………. 218

Еще раз о виртуальном интерфейсе……………………………………………………………………………………….. 224

Протокол транспортного уровня…………………………………………………………………………………………………… 230

Источники использованной информации……………………………………………………………………………………….. 233

Часть V. За границами традиций Интернета……………………………………………………………………. 234

Обсуждение………………………………………………………………………………………………………………………………….. 234

Стек Tor……………………………………………………………………………………………………………………………………….. 236

Tor как прокси для любых служб…………………………………………………………………………………………… 237

Ресурсы onion……………………………………………………………………………………………………………………….. 239

Mesh-сети…………………………………………………………………………………………………………………………………….. 242

Сеть Yggdrasil………………………………………………………………………………………………………………………. 243

Выбор пиров для хоста………………………………………………………………………………………………… 247

Майнинг IPv6-адресов…………………………………………………………………………………………………. 252

Yggdrasil в локальной сети…………………………………………………………………………………………… 259

Короткие адреса…………………………………………………………………………………………………………… 261

Работа в Yggdrasil без установки клиента……………………………………………………………………… 263

Скоростные показатели………………………………………………………………………………………………… 265

Еще одна сеть: I2P………………………………………………………………………………………………………………… 269

Запуск сети………………………………………………………………………………………………………………….. 270

Использование сети……………………………………………………………………………………………………… 272

Доступ к ресурсам извне………………………………………………………………………………………………. 274

Альтернативные DNS…………………………………………………………………………………………………………………… 277

Регистрация домена………………………………………………………………………………………………………………. 277

Блокчейн как регистратор домена………………………………………………………………………………………….. 278

EmerСoin………………………………………………………………………………………………………………………………. 279

OpenNIC……………………………………………………………………………………………………………………… 287

Alfis……………………………………………………………………………………………………………………………………… 289

Доступ к локальным хостам………………………………………………………………………………………………………….. 296

Источники использованной информации……………………………………………………………………………………….. 300

Некоторые краткие итоги…………………………………………………………………………………………………….. 302

Предметный указатель………………………………………………………………………………………………………….. 303

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор книг по Linux и Unix , в том числе «Расширения ядра Linux. Драйверы и модули» и «Linux и Go. Эффективное низкоуровневое программирование», высоко оцененных профессионалами и широкой читательской аудиторией.

Опубликовано

Представляем книгу “Расширения ядра Linux: драйверы и модули”

Расширения ядра Linux: драйверы и модули

Представляем книгу Олега Цилюрика “Расширения ядра Linux: драйверы и модули”. В книге подробно рассмотрено программирование драйверов ядра Linux, исследованы возможности расширяемости ядра при помощи модулей. Основная версия ядра – 5.15. Код примеров отработан и проверен на десятках различных инсталляций Linux, установленных из различных дистрибутивов и разных семейств дистрибутивов: Fedora, CentOS, Debian, Ubuntu, Mint. Уделено внимание архитектурам x_64, x_86, ARM, а также одноплатному компьютеру Raspberry Pi и драйверам устройств, подключаемых по USB. Затронут стандарт POSIX, разобраны API ядра, работа с Raspberry Pi, системные вызовы и подключение разнообразных периферийных устройств.

 

Ядро Linux — шедевр низкоуровневого кода на языке C. Разработка ядра не прекращается уже почти 30 лет, и занимается этим глобальное сообщество энтузиастов и профессионалов. Системные вызовы ядра Linux, тонкости управления памятью или параллельная обработка запросов – все эти темы важны сами по себе и в совокупности, но есть и ещё одна важная тема, до сих пор освещённая на русском языке фрагментарно и неравномерно: программирование драйверов и модулей ядра.

Именно этой теме посвящён фундаментальный труд, впервые публикуемый в качестве отдельной книги. Он зародился в начале 2000-х как материал для корпоративного курса и постоянно обновлялся вплоть до ноября 2022 года – и в данной версии выходит на бумаге. Новейшая версия ядра, учтённая в книге, – 5.15.

В книге подробно разобраны API ядра, системные вызовы, обработка сигналов, взаимодействия с периферийными устройствами и, в частности, с протоколом USB. Уделено внимание процессорным архитектурам x_64, x_86, ARM, а также одноплатному компьютеру Raspberry Pi и драйверам внешних устройств. Рассмотрена конфигурация и загрузка модулей и всевозможные варианты кастомизации ядра, рассмотрен стандарт POSIX.

Книга ориентирована на опытных программистов и системных администраторов, работающих с Linux. Призвана послужить достойным аналогом и дополнением классической работы «Драйверы устройств Linux. 3-е издание» Джонатана Корбетта и соавторов (Corbet J., Rubini A., Kroah-Hartman G. Linux Device Drivers, 3rd Edition).

Хорошая книга не дарит тебе откровение, хорошая книга укрепляет тебя в твоих самостоятельных догадках.
Андрей Рубанов, «Хлорофилия»

Книгу “Расширения ядра Linux: драйверы и модули” можно купить со скидкой в интернет-магазине издательства “БХВ“.

От автора……………………………………………………………………………………………….. 11

Предыстория………………………………………………………………………………………………………………………………. 11

Кому адресована книга?…………………………………………………………………………………………………………… 13

Структура книги………………………………………………………………………………………………………………………… 15

Соглашения, принятые в тексте………………………………………………………………………………………………… 18

Код примеров и замеченные опечатки…………………………………………………………………………………….. 19

Замечания о версиях ядра…………………………………………………………………………………………………………. 22

Обновляемость ядра………………………………………………………………………………………………………………….. 23

Использованные источники информации………………………………………………………………………………… 25

Обновления текущей редакции текста…………………………………………………………………………………….. 25

Глава 1. Модули с высоты птичьего полёта…………………………………………… 27

Linux и GNU………………………………………………………………………………………………………………………………… 27

FAQ                                                                                                                                                                   28

Модуль в иерархии программных систем……………………………………………………………………………….. 29

Наш первый модуль ядра………………………………………………………………………………………………………….. 31

Сборка модуля……………………………………………………………………………………………………………………. 31

Загрузка и исполнение………………………………………………………………………………………………………. 33

Точки входа и завершения………………………………………………………………………………………………… 34

Внутренний формат модуля……………………………………………………………………………………………………… 36

Диагностика модуля………………………………………………………………………………………………………………….. 38

Уровни диагностики в /proc………………………………………………………………………………………………. 42

Представление адресов в Linux………………………………………………………………………………………… 43

Форматы вывода………………………………………………………………………………………………………………… 45

Основные ошибки модуля…………………………………………………………………………………………………………. 48

Обсуждение………………………………………………………………………………………………………………………………… 50

Глава 2. Архитектура и вокруг………………………………………………………………. 53

Ядро: монолитное и микроядро……………………………………………………………………………………………….. 53

Траектория системного вызова………………………………………………………………………………………………… 55

Библиотечный и системный вызов из процесса………………………………………………………………. 56

Под капотом системного вызова………………………………………………………………………………………. 63

Отслеживание системного вызова в процессе…………………………………………………………………. 66

Различия программ пространств ядра и пользователя………………………………………………………….. 67

Интерфейсы модуля…………………………………………………………………………………………………………………… 70

Взаимодействие модуля с уровнем пользователя…………………………………………………………… 70

Взаимодействие модуля с ядром………………………………………………………………………………………. 75

Коды ошибок………………………………………………………………………………………………………………………. 77

Загрузка модулей………………………………………………………………………………………………………………………. 77

Автоматическая загрузка модулей…………………………………………………………………………………… 78

Запрет загрузки (черный список модулей)………………………………………………………………………. 79

Параметры загрузки модуля…………………………………………………………………………………………………….. 80

Конфигурационные параметры ядра………………………………………………………………………………………. 85

Параметры в ядре………………………………………………………………………………………………………………. 85

Параметры в модуле………………………………………………………………………………………………………….. 88

Подсчет ссылок использования………………………………………………………………………………………………… 91

Обсуждение………………………………………………………………………………………………………………………………… 93

Глава 3. Инструментальное окружение………………………………………………….. 95

Основные команды…………………………………………………………………………………………………………………….. 95

Системные файлы………………………………………………………………………………………………………………………. 96

Графика, терминал и текстовая консоль…………………………………………………………………………………. 99

Управление текстовыми консолями……………………………………………………………………………………….. 100

Коротко о компиляторе GCC………………………………………………………………………………………………….. 102

Ассемблер в Linux……………………………………………………………………………………………………………………. 105

Нотация AT&T…………………………………………………………………………………………………………………. 107

Инлайновый ассемблер GCC………………………………………………………………………………………….. 108

Создание среды сборки модулей ядра…………………………………………………………………………………… 110

Работа над кодом…………………………………………………………………………………………………………………….. 114

В деталях о сборке…………………………………………………………………………………………………………………… 117

Переменные периода компиляции………………………………………………………………………………….. 117

Дополнительные параметры периода компиляции………………………………………………………. 118

Версионность ядра в коде модуля………………………………………………………………………………….. 118

Как собрать одновременно несколько модулей?………………………………………………………….. 120

Как собрать модуль и используемые программы к нему?……………………………………………. 120

Пользовательские библиотеки………………………………………………………………………………………… 121

Как собрать модуль из нескольких объектных файлов?………………………………………………. 123

Рекурсивная сборка…………………………………………………………………………………………………………. 125

Подписывание модулей…………………………………………………………………………………………………………… 127

Инсталляция модуля……………………………………………………………………………………………………………….. 130

Нужна ли новая сборка ядра?………………………………………………………………………………………………… 131

Динамическая сборка модулей (DKMS)………………………………………………………………………………… 133

Обсуждение………………………………………………………………………………………………………………………………. 138

Глава 4. Внешние интерфейсы модуля…………………………………………………. 139

Драйверы: интерфейс устройства………………………………………………………………………………………….. 139

Символьные устройства………………………………………………………………………………………………….. 143

Варианты реализации……………………………………………………………………………………………. 145

Ручное создание имени………………………………………………………………………………….. 146

Использование udev……………………………………………………………………………………….. 151

Динамические имена………………………………………………………………………………………. 155

Разнородные (смешанные) устройства………………………………………………………… 159

Управляющие операции устройства…………………………………………………………………….. 162

Множественное открытие устройства………………………………………………………………….. 169

Счетчик ссылок использования модуля……………………………………………………………….. 177

Режимы выполнения операций ввода/вывода……………………………………………………… 180

Неблокирующий ввод/вывод и мультиплексирование……………………………………….. 181

Блочные устройства………………………………………………………………………………………………………… 190

Особенности драйвера блочного устройства………………………………………………………. 193

Обзор примеров реализации………………………………………………………………………………….. 194

Регистрация устройства…………………………………………………………………………………………. 195

Подготовка к регистрации……………………………………………………………………………… 195

Диски с разметкой MBR и GPT……………………………………………………………………… 197

Заполнение структуры…………………………………………………………………………………… 199

Завершение регистрации……………………………………………………………………………….. 201

Таблица операций устройства………………………………………………………………………………. 201

Обмен данными……………………………………………………………………………………………………….. 205

Классика: очередь и обслуживание ядром………………………………………………….. 210

Очередь и обработка запроса в драйвере……………………………………………………. 212

Отказ от очереди…………………………………………………………………………………………….. 214

Пример перманентных данных……………………………………………………………………… 215

Некоторые важные API………………………………………………………………………………….. 215

Результаты тестирования………………………………………………………………………………………. 216

Файловая система FUSE…………………………………………………………………………………………. 221

Интерфейс /proc……………………………………………………………………………………………………………………….. 228

Терминальные значения в /proc и /sys……………………………………………………………………………. 230

Использование /proc………………………………………………………………………………………………………… 231

Специфический механизм procfs……………………………………………………………………………. 232

Варианты реализации чтения……………………………………………………………………….. 240

Запись данных………………………………………………………………………………………………… 244

Общий механизм файловых операций………………………………………………………………….. 245

Интерфейс /sys………………………………………………………………………………………………………………………….. 251

Создание и использование имен в /sys……………………………………………………………………………. 253

Ошибки обменных операций…………………………………………………………………………………………… 261

Сетевые интерфейсы и протоколы…………………………………………………………………………………………. 263

Сетевые инструменты……………………………………………………………………………………………………… 265

Сетевые интерфейсы………………………………………………………………………………………………. 265

Инструменты наблюдения……………………………………………………………………………………… 269

Инструменты интегрального тестирования…………………………………………………………. 276

Структуры данных сетевого стека…………………………………………………………………………………. 278

Драйверы: сетевой интерфейс………………………………………………………………………………………… 279

Создание сетевых интерфейсов…………………………………………………………………………….. 279

Новая схема, и детальнее о ее создании………………………………………………………………. 281

Операции сетевого интерфейса……………………………………………………………………………… 286

Переименование сетевого интерфейса………………………………………………………………….. 291

Путь пакета сквозь стек протоколов………………………………………………………………………………. 293

Прием: традиционный подход………………………………………………………………………………. 293

Прием: высокоскоростной интерфейс…………………………………………………………………… 294

Передача пакетов……………………………………………………………………………………………………. 297

Статистика интерфейса…………………………………………………………………………………………………… 298

Виртуальный сетевой интерфейс……………………………………………………………………………………. 301

Протокол сетевого уровня………………………………………………………………………………………………. 307

Еще раз о виртуальном интерфейсе……………………………………………………………………………….. 314

Протокол транспортного уровня……………………………………………………………………………………. 321

Использование драйверов Windows……………………………………………………………………………….. 323

Обсуждение………………………………………………………………………………………………………………………. 324

Глава 5. Внутренние API ядра………………………………………………………………. 326

Механизмы управления памятью…………………………………………………………………………………………… 326

Карта памяти……………………………………………………………………………………………………………………. 326

Динамическое выделение памяти…………………………………………………………………………………… 330

Распределители памяти…………………………………………………………………………………………………… 334

Слябовый распределитель………………………………………………………………………………………………. 336

Страничное выделение……………………………………………………………………………………………………. 344

Выделение больших буферов…………………………………………………………………………………………. 344

Динамические структуры и управление памятью………………………………………………………… 345

Циклический двусвязный список…………………………………………………………………………… 345

Модуль, использующий динамические структуры……………………………………………… 349

Сложноструктурированные данные…………………………………………………………………….. 351

Еще об инициализации объектов ядра………………………………………………………………….. 351

Служба времени………………………………………………………………………………………………………………………. 352

Информация о времени в ядре…………………………………………………………………………………………. 352

Источник прерываний системного таймера…………………………………………………………. 355

Дополнительные источники информации о времени…………………………………………… 356

Три класса задач во временной области……………………………………………………………………….. 357

Измерения временных интервалов…………………………………………………………………………………. 358

Временные задержки……………………………………………………………………………………………………….. 365

Таймеры ядра…………………………………………………………………………………………………………………… 371

Таймеры высокого разрешения………………………………………………………………………………………. 372

Абсолютное время……………………………………………………………………………………………………………. 375

Часы реального времени (RTC)………………………………………………………………………………………. 376

Время и диспетчеризация в ядре…………………………………………………………………………………….. 381

Параллелизм и синхронизация………………………………………………………………………………………………. 382

Потоки ядра………………………………………………………………………………………………………………………. 385

Создание потока ядра…………………………………………………………………………………………….. 385

Свойства потока……………………………………………………………………………………………………… 387

Новый интерфейс потоков……………………………………………………………………………………… 389

Синхронизация завершения…………………………………………………………………………………… 394

Синхронизация в коде……………………………………………………………………………………………………… 401

Критические секции кода и защищаемые области данных………………………………… 401

Механизмы синхронизации…………………………………………………………………………………… 402

Условные переменные и ожидание завершения…………………………………………………… 402

Атомарные переменные и операции……………………………………………………………………… 405

Битовые атомарные операции………………………………………………………………………. 405

Арифметические атомарные операции………………………………………………………… 406

Локальные переменные процессора……………………………………………………………………… 407

Предыдущая модель………………………………………………………………………………………. 407

Новая модель………………………………………………………………………………………………….. 408

Блокировки………………………………………………………………………………………………………………. 409

Семафоры и мьютексы…………………………………………………………………………………… 410

Спин-блокировки……………………………………………………………………………………………. 415

Блокировки чтения/записи…………………………………………………………………………….. 417

Сериальные (последовательные) блокировки……………………………………………… 420

Мьютексы реального времени………………………………………………………………………. 422

Инверсия и наследование приоритетов………………………………………………………… 422

Множественное блокирование………………………………………………………………………………. 423

Уровень блокирования…………………………………………………………………………………………… 424

Предписание порядка выполнения……………………………………………………………………….. 430

Аннотация ветвлений……………………………………………………………………………………… 430

Барьеры…………………………………………………………………………………………………………… 431

Обработка прерываний…………………………………………………………………………………………………………… 432

Общая модель обработки прерывания…………………………………………………………………………… 433

Наблюдение прерываний в /proc……………………………………………………………………………………. 436

Регистрация обработчика прерывания………………………………………………………………………….. 439

Обработчик прерываний: верхняя половина………………………………………………………………… 442

Управление линиями прерывания…………………………………………………………………………. 444

Пример обработчика прерываний………………………………………………………………………… 444

Отложенная обработка: нижняя половина……………………………………………………………………. 446

Отложенные прерывания: softirq…………………………………………………………………………… 446

Тасклеты………………………………………………………………………………………………………………….. 450

Демон ksoftirqd………………………………………………………………………………………………………… 452

Очереди отложенных действий: workqueue…………………………………………………………. 452

Сравнение и примеры…………………………………………………………………………………………….. 455

Обсуждение………………………………………………………………………………………………………………………. 460

Глава 6. Периферийные устройства в модулях ядра…………………………….. 466

Поддержка шинных устройств в модуле……………………………………………………………………………….. 466

Анализ оборудования……………………………………………………………………………………………………………… 468

Подсистема udev………………………………………………………………………………………………………………. 473

Идентификация модуля……………………………………………………………………………………………………. 477

Ошибки идентификации модуля……………………………………………………………………………………… 479

Устройства на шине PCI…………………………………………………………………………………………………………. 480

Подключение к линии прерывания…………………………………………………………………………………. 491

Отображение памяти……………………………………………………………………………………………………….. 492

DMA…………………………………………………………………………………………………………………………………… 493

Устройства USB……………………………………………………………………………………………………………………….. 499

Некоторые технические детали……………………………………………………………………………………… 499

Поддержка в Linux…………………………………………………………………………………………………………… 501

Пара слов о USB-модемах………………………………………………………………………………………………. 503

Устройства USB в коде модуля………………………………………………………………………………………. 506

Многофункциональные USB-устройства………………………………………………………………………. 514

Устройства в пространстве пользователя…………………………………………………………………………….. 520

Аппаратные порты…………………………………………………………………………………………………………… 521

Особенности доступа………………………………………………………………………………………………………. 526

Проект libusb…………………………………………………………………………………………………………………….. 527

GPIO…………………………………………………………………………………………………………………………………… 536

Глава 7. Расширенные возможности программирования……………………… 543

Операции с файлами данных………………………………………………………………………………………………….. 544

Запуск новых процессов из ядра……………………………………………………………………………………………. 552

Сигналы UNIX………………………………………………………………………………………………………………………….. 554

Вокруг экспорта символов ядра…………………………………………………………………………………………….. 561

Неэкспортируемые символы ядра………………………………………………………………………………….. 564

Использование неэкспортируемых символов……………………………………………………………….. 572

Подмена системных вызовов…………………………………………………………………………………………… 576

Добавление новых системных вызовов………………………………………………………………………….. 584

Скрытый обработчик системного вызова……………………………………………………………………… 591

Динамическая загрузка модулей……………………………………………………………………………………………. 600

…из процесса пользователя…………………………………………………………………………………………….. 601

…из модуля ядра……………………………………………………………………………………………………………….. 609

Подключаемые плагины………………………………………………………………………………………………….. 613

Обсуждение………………………………………………………………………………………………………………………………. 623

Глава 8. Отладка в ядре……………………………………………………………………….. 628

Отладочная печать………………………………………………………………………………………………………………….. 629

Интерактивные отладчики……………………………………………………………………………………………………… 629

Отладка в виртуальной машине…………………………………………………………………………………………….. 632

Отдельные отладочные приемы и трюки………………………………………………………………………………. 635

Модуль, исполняемый как разовая задача……………………………………………………………………. 635

Тестирующий модуль………………………………………………………………………………………………………. 637

Интерфейсы пространства пользователя к модулю……………………………………………………… 640

Комплементарный отладочный модуль………………………………………………………………………… 642

Пишите в файлы протоколов…………………………………………………………………………………………… 645

Некоторые мелкие советы в завершение……………………………………………………………………….. 645

Чаще перезагружайте систему!……………………………………………………………………………… 645

Используйте естественные POSIX-тестеры………………………………………………………….. 646

Тестируйте чтение сериями……………………………………………………………………………………. 646

Заключение………………………………………………………………………………………….. 647

Приложение 1. Краткая справка по утилите make………………………………… 649

Приложение 2. Тесты распределителя памяти………………………………………. 652

Приложение 3. Четыре способа записи в защищенную страницу…………. 666

Описание проблемы………………………………………………………………………………………………………………… 666

Отключение страничной защиты: ассемблер……………………………………………………………………….. 667

Отключение страничной защиты: API ядра………………………………………………………………………….. 668

Снятие защиты со страницы памяти……………………………………………………………………………………… 670

Наложение отображения участка памяти…………………………………………………………………………….. 671

Тест выполнения………………………………………………………………………………………………………………………. 672

Обсуждение………………………………………………………………………………………………………………………………. 674

Позднее дополнение………………………………………………………………………………………………………………… 675

Источники информации……………………………………………………………………….. 677

Предметный указатель…………………………………………………………………………. 681

Об авторе……………………………………………………………………………………………… 685

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор нескольких книг по Linux и Unix, высоко оцененных профессионалами и широкой читательской аудиторией.

Опубликовано

Вышла книга “Linux и Go. Эффективное низкоуровневое программирование”

Linux и Go. Эффективное низкоуровневое программирование

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

Книга ориентирована на программистов и системных администраторов, работающих с Linux, будет интересна разработчикам ядра Linux и драйверов устройств.

 

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

Перед вами – первая фундаментальная книга об использовании Go в Linux. Здесь вы познакомитесь с основами системного программирования, изучите детали взаимодействия между ядром и пользовательским пространством Linux, а также узнаете об интероперабельности между С и Go, о том, в каких аспектах и нюансах Linux язык Go может заменить и уже заменяет язык C. Особое внимание уделено конкурентности, параллелизму и стандарту POSIX. В конце книги для закрепления материала приведены реализации нескольких популярных алгоритмов.

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор нескольких книг по Linux и Unix, высоко оцененных профессионалами и широкой читательской аудиторией.

Книгу “Linux и Go. Эффективное низкоуровневое программирование” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие. 7

Предназначение и целевая аудитория. 7

Код примеров и замеченные опечатки. 9

Соглашения и выделения, принятые в тексте. 10

Напоминание. 11

Источники информации. 11

Часть I. Инструментарий языка Go. 13

Глава 1. Предыстория Go. 15

«Отцы-основатели» о целях и мотивации…… 15

Применимость: беглый взгляд. 16

Go, C, C++ и другие…… 17

Источники информации. 22

Глава 2. Разворачиваем экосистему Go. 23

Создание среды. 23

Стандартная инсталляция. 23

Версии среды. 25

Альтернативы. 26

«Самая последняя» версия. 27

Смена версий. 30

Проверяем: простейшая программа. 30

Проверяем на простейшем приложении. 32

Библиотеки статические и динамические. 34

Компиляция или интерпретация. 34

Выбор: GoLang или GCC?. 35

Инфраструктура GoLang. 36

Команды go. 36

Переменные окружения. 39

Платформы, переносимость и кросс-компиляция. 47

Стиль кодирования (автоформатирование — fmt) 49

Сборка приложений (build) 51

Сценарии на языке Go (run) 51

Загрузка проектов из сети (get) 52

Утилиты GoLang (tool) 57

Связь с кодом C (Cgo) 60

Сторонний и дополнительный инструментарий. 63

Источники информации. 65

Глава 3. Неформально о синтаксисе Go. 66

Типы данных. 71

Переменные. 73

Выполнение такого приложения. 74

Повторные декларации и переприсваивания. 76

Константы. 77

Агрегаты данных. 79

Массивы и срезы. 79

Двухмерные массивы и срезы. 84

Структуры. 85

Таблицы (хэши) 87

Динамическое создание переменных. 89

Конструкторы и составные литералы. 90

Операции. 91

Функции. 94

Вариативные функции. 98

Стек процедур завершения. 100

Обобщенные функции. 101

Функции высших порядков. 102

Встроенные функции. 104

Объектно-ориентированное программирование. 106

Методы. 107

Интерфейсы. 113

Обработка ошибочных ситуаций. 117

Структура пакетов (библиотек) Go. 121

Функция init 125

Импорт для использования побочных эффектов. 126

Некоторые полезные и интересные стандартные пакеты. 126

Пакет runtime. 127

Форматированный ввод-вывод. 128

Строки и пакет strings 129

Большие числа. 134

Автоматизированное тестирование. 135

Источники информации. 135

Часть II. Конкурентность и многопроцессорность. 137

Глава 4. Процессоры в Linux. 139

Процессоры, ядра и гипертрэдинг. 142

Загадочная нумерация процессоров. 144

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

Привязка к процессору. 147

Как происходит диспетчирование в Linux. 150

Источники информации. 156

Глава 5. Параллелизм и многопроцессорность. 157

Эволюция модели параллелизма. 157

Параллельные процессы и fork. 157

Потоки ядра и pthread_t POSIX.. 160

Сопрограммы — модель параллелизма Go. 166

Параллелизм в Go. 167

Сопрограммы — как это выглядит. 168

Возврат значений функцией. 171

Ретроспектива: сопрограммы в C++. 172

Каналы. 172

Функциональные замыкания в сопрограммах. 177

Примитивы синхронизации. 179

Конкурентность и параллельность. 185

Источники информации. 190

Глава 6. Масштабирование. 191

Планирование активности сопрограмм. 191

Испытательный стенд. 193

Микрокомпьютеры (Single-Board Computers) 193

Рабочие десктопы. 196

Серверы промышленного класса. 197

Масштабирование в реале. 198

1-я попытка …… 199

2-й подход к снаряду…… 205

О числе потоков исполнения. 213

Источники информации. 217

Часть III. Некоторые примеры и сравнения. 219

Глава 7. Осваиваемся в синтаксисе Go. 221

Утилита echo. 221

Итерационное вычисление вещественного корня. 223

Вычисление числа π. 225

Случайная последовательность и ее моменты. 227

Обсчет параметров 2D выпуклых многоугольников. 230

Тривиальный web-сервер. 235

Источники информации. 236

Глава 8. Структуры данных, типы и их методы.. 237

Массивы и срезы. 237

Многомерные срезы и массивы. 242

Функции с множественным возвратом. 243

Глава 9. Элементы функционального программирования. 246

Функциональные замыкания. 246

Карринг. 253

Рекурсия. 255

Рекурсия с кэшированием. 255

Чистые функции. 257

Источники информации. 257

Глава 10. Скоростные и другие сравнения языков. 258

Алгоритмические задачи для сравнения. 258

Некоторые известные алгоритмы. 259

Числа Фибоначчи. 260

Пузырьковая сортировка. 263

Ханойская башня. 268

Решето Эратосфена. 272

Глава 11. Многопроцессорные параллельные вычисления. 276

Скорость активации параллельных ветвей. 276

Гонки. 281

Защита критических данных. 285

Многопроцессорный брутфорс. 289

Каналы в сопрограммах. 295

Таймеры. 296

Тикеры. 298

Когда не нужно злоупотреблять многопроцессорностью.. 299

Источники информации. 302

Заключение. 303

Об авторе. 304