LINUX.ORG.RU

Книга «Внутреннее устройство Linux. 2 изд.»

 , , ,


4

2

Добрый день! Предлагаю вашему вниманию еще одну книгу — «Внутреннее устройство Linux», автор Уорд Б. Её можно заказать на сайте издательства, и если применить промокод LinuxORG, то получите скидку 30%. Действует на все книги издательства. Также в подарок при покупке бумажной будет её электронная версия.

Отрывок из книги для ознакомления:

Как происходит загрузка ядра Linux

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

Упрощенная схема процесса загрузки выглядит так.

  1. Система BIOS или прошивка загрузки загружают и запускают загрузчик системы.
  2. Загрузчик системы отыскивает образ ядра на диске, загружает его в память и запускает.
  3. Ядро выполняет инициализацию устройств и их драйверов.
  4. Ядро монтирует корневую файловую систему.
  5. Ядро запускает команду init с идентификатором процесса 1. Эта точка является началом пространства пользователя.
  6. Команда init приводит в действие остальные системные процессы.
  7. В определенный момент команда init запускает процесс, позволяющий вам войти в систему. Обычно это происходит в конце или незадолго до окончания загрузки системы.

В этой главе рассмотрены шаги с первого по четвертый, основное внимание уделено загрузчикам ядра и системы. В главе 6 продолжается рассказ о загрузке пространства пользователя.

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

Сообщения при запуске

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

Существуют два способа увидеть сообщения ядра о загрузке и оперативной диагностике. Вы можете:

  • заглянуть в системный журнал ядра. Обычно он находится в файле /var/log/kern.log, но в зависимости от конфигурации вашей системы может также оказаться вместе с другими системными журналами в каталоге /var/log/messages или где-либо еще;

  • воспользоваться командой dmesg, не забыв при этом указать параметр less, поскольку результаты займут намного больше места, чем один дисплей. Команда dmesg использует циклический буфер ядра, размер которого ограничен, но в большинстве новых версий ядра буфер достаточно велик, чтобы хранить сообщения в течение длительного времени.

Вот пример того, что можно ожидать в результате работы команды dmesg:

[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.2.0-67-generic-pae (buildd@toyol) (gcc version 4.
6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #101-Ubuntu SMP Tue Jul 15 18:04:54 UTC 2014
(Ubuntu 3.2.0-67.101-generic-pae 3.2.60)
[ 0.000000] KERNEL supported cpus:
--snip--
[ 2.986148] sr0: scsi3-mmc drive: 24x/8x writer dvd-ram cd/rw xa/form2 cdda tray
[ 2.986153] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 2.986316] sr 1:0:0:0: Attached scsi CD-ROM sr0
[ 2.986416] sr 1:0:0:0: Attached scsi generic sg1 type 5
[ 3.007862] sda: sda1 sda2 < sda5 >
[ 3.008658] sd 0:0:0:0: [sda] Attached SCSI disk
--snip--  

Процедура запуска пространства пользователя часто оставляет сообщения после запуска ядра. Эти сообщения будет сложнее увидеть и просмотреть, поскольку в большинстве систем они не находятся в одном файле журнала. Сценарии запуска, как правило, выводят собщения в консоль, а по завершении процесса загрузки они стираются. Тем не менее это не является проблемой, поскольку каждый сценарий обычно ведет собственный журнал. Определенные версии команды init, например Upstart и systemd, способны перехватывать диагностические сообщения процесса загрузки и обычной работы, которые в обычном случае отображаются в консоли.

Инициализация ядра и параметры загрузки

Во время запуска ядро системы Linux выполняет инициализацию в следующем порядке.

  1. Проверка центрального процессора.
  2. Проверка оперативной памяти.
  3. Обнаружение шины устройств.
  4. Обнаружение устройств.
  5. Настройка вспомогательной подсистемы ядра (сеть и т. п.).
  6. Монтирование корневой файловой системы.
  7. Запуск пространства пользователя.

Первые шаги не слишком примечательны, но зато, когда ядро добирается до устройств, возникает вопрос о зависимостях. Например, драйверы дисковых устройств могут зависеть от поддержки шины и подсистемы SCSI.

Далее в ходе инициализации ядро должно смонтировать корневую файловую систему до запуска команды init. Как правило, вам не придется беспокоиться об этих процессах, исключая тот случай, когда необходимые компоненты являются загружаемыми модулями ядра, а не частями основного ядра. На некоторых компьютерах вам может потребоваться загрузить такие модули ядра до монтирования реальной корневой файловой системы. Мы рассмотрим этот вопрос и обходные пути его решения в разделе 6.8.

На момент написания книги ядро не выводит каких-либо специальных сообщений, когда оно готово к запуску первого пользовательского процесса. Тем не менее приведенные ниже сообщения об управлении памятью являются верным признаком того, что скоро вступит в игру пространство пользователя, так как именно сейчас ядро защищает собственную память от процессов из пространства пользователя:

Freeing unused kernel memory: 740k freed
Write protecting the kernel text: 5820k
Write protecting the kernel read-only data: 2376k
NX-protecting the kernel data: 4420k 

Вы можете также увидеть сообщение о том, что в данный момент происходит монтирование корневой файловой системы.

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

Параметры ядра

При запуске ядра Linux загрузчик передает ему набор текстовых параметров ядра, которые говорят ядру о том, как оно должно быть запущено. Эти параметры описывают различные варианты действий, такие как, например, величина выполняемого ядром диагностического вывода и варианты настроек, зависящие от драйверов устройств. Параметры ядра при загрузке вашей системы можно увидеть в файле /proc/cmdline:

BOOT_IMAGE=/boot/vmlinuz-3.2.0-67-generic-pae root=UUID=70ccd6e7-6ae6-44f6-
812c-51aab8036d29 ro quiet splash vt.handoff=7 

Эти параметры являются либо простыми однословными флагами, вроде ro и quiet, либо парами key=value, например vt.handoff=7. Многие из этих параметров не являются существенными, например флаг splash, отвечающий за отображение экрана загрузки. Действительно важным является параметр root. Он задает местоположение корневой файловой системы, без него ядро не может отыскать команду init, а следовательно, и выполнить запуск пространства пользователя.

Корневая файловая система может быть определена как файл устройства, например так:

root=/dev/sda1

Однако в большинстве современных ПК более распространенным является применение идентификаторов UUID (см. подраздел 4.2.4):

root=UUID=70ccd6e7-6ae6-44f6-812c-51aab8036d29

Параметр ro стандартен; он указывает ядру на то, что корневую файловую систему при запуске пространства пользователя следует монтировать в режиме «только чтение». Этот режим гарантирует возможность безопасной проверки корневой файловой системы с помощью команды fsck. По окончании проверки процесс загрузки выполняет повторное монтирование корневой файловой системы в режиме «чтение-запись».

При обнаружении какого-либо непонятного параметра ядро Linux сохраняет его, а затем передает команде init при выполнении запуска пространства пользователя. Например, если вы добавите к параметрам ядра флаг -s, оно передаст его команде init, и это будет означать, что запуск следует выполнить в режиме одиночного пользователя.

Теперь рассмотрим механику того, как загрузчики системы запускают ядро.

Загрузчики системы

В начале процесса загрузки, до запуска ядра и команды init, загрузчик системы запускает ядро. Задача загрузчика системы выглядит просто: он загружает ядро в память, а затем запускает его с определенными параметрами. Рассмотрим вопросы, на которые должен ответить загрузчик системы.

  • Где находится ядро?

  • Какие параметры ядра должны быть переданы ему при запуске?

Ответ (как правило) такой: ядро и его параметры обычно располагаются в корневой файловой системе. Кажется, что параметры ядра отыскать несложно, но ведь само ядро еще не запущено, поэтому оно не может «пройтись» по файловой системе в поисках необходимых файлов. Кроме того, драйверы устройств, которые ядро обычно использует для доступа к диску, также недоступны. Можно увидеть в этом нечто вроде проблемы «яйцо или курица».

Начнём разбираться с драйверами. На персональных компьютерах загрузчики системы используют систему BIOS или интерфейс UEFI, чтобы получить доступ к дискам. Практически все дисковые аппаратные средства снабжаются прошивками, которые позволяют системе BIOS получать доступ к присоединенным устройствам хранения с помощью блочной адресации LBA (Linear Block Addressing). Хотя производительность этого режима невысока, он все же позволяет получить универсальный доступ к дискам. Загрузчики системы часто являются единственными программами, которые используют систему BIOS для доступа к дискам; ядро применяет собственные высокопроизводительные драйверы.

Вопрос о файловой системе более сложен. Многие современные загрузчики системы способны читать таблицы разделов, а также имеют встроенную поддержку доступа к файловым системам в режиме «только чтение». Следовательно, они могут находить и читать файлы. Такая возможность значительно облегчает динамическую конфигурацию и улучшение загрузчика системы. Загрузчики системы Linux не всегда обладали этой возможностью; без нее настройка загрузчика была намного более сложной.

Задачи загрузчика системы

Основные функции загрузчика системы Linux содержат следующие возможности:

  • выбор среди нескольких ядер;

  • переключение между наборами параметров ядра;

  • разрешение ручного переопределения и редактирование имен образов ядра и его параметров пользователем (например, чтобы войти в режим одиночного пользователя);

  • поддержка загрузки других операционных систем.

Загрузчики системы стали более сложными по сравнению с начальными вариантами ядра Linux. Появились такие функции, как история и меню, однако главной потребностью всегда остается гибкость образа ядра и выбор его параметров. Интересным фактом является то, что некоторые возможности были ослаблены. Поскольку теперь вы можете, например, выполнять аварийную или восстановительную загрузку частично или полностью с USB-накопителя, вам, вероятно, не придется беспокоиться о том, чтобы вручную вводить параметры ядра или переходить в режим одиночного пользователя. К тому же современные загрузчики предлагают больше возможностей, чем когда-либо ранее. Это может быть чрезвычайно удобно, если вы разрабатываете пользовательское ядро или желаете настроить параметры.

Кому следует читать книгу

Интерес к устройству операционной системы Linux может быть вызван разными причинами. Профессионалы в сфере информационно-технологического обслуживания, а также разработчики программного обеспечения для Linux найдут в этой книге практически все, что необходимо знать, чтобы использовать операционную систему наилучшим образом. Исследователи и студенты, которым зачастую приходится подстраивать систему под себя, найдут здесь практичные объяснения того, почему все устроено именно так, а не иначе. Есть еще «затейники» — пользователи, которым нравится проводить время за компьютером ради развлечения, выгоды или и того и другого сразу.

Хотите узнать, почему некоторые вещи работают, а другие — нет? Вам интересно, что произойдет, если что-либо изменить? Тогда вы относитесь к числу «затейников».

Необходимые условия

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

Что нового во втором издании

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

Благодаря упорному труду разработчиков ПО и создателей дистрибутивов Linux ситуация изменилась. Я пересмотрел материал первого издания в поисках обновлений: особое внимание уделил процессу загрузки системы и тому, как она управляет оборудованием, а также удалил устаревший материал (например, подробное объяснение процесса печати), чтобы расширить рассмотрение роли ядра системы Linux в каждом дистрибутиве. Вы, вероятно, взаимодействуете с ядром гораздо чаще, чем сами об этом догадываетесь, и я специально отметил моменты, когда это бывает.

Я также изменил последовательность подачи материала в книге, чтобы он соответствовал интересам и потребностям современных читателей. Единственное, что не изменилось, — это объем книги. Мне хотелось снабдить вас сведениями, которые понадобятся для быстрого начала работы. Их усвоение потребует некоторых усилий, однако я не намереваюсь делать из вас «тяжелоатлетов», чтобы вы смогли одолеть эту книгу. Когда вы будете понимать важнейшие моменты, изложенные здесь, для вас не составит труда отыскать подробности и разобраться в них.

Я изъял некоторые исторические детали, которые были в первом издании, главным образом чтобы сконцентрировать ваше внимание. Если вы интересуетесь системой Linux и ее отношением к истории системы Unix, обратитесь к книге Питера Салуса (Peter H. Salus) The Daemon, the Gnu, and the Penguin (Reed Media Services, 2008) — в ней рассказано о том, как развивалось используемое нами программное обеспечение.

Третье издание в русском переводе выйдет, ориентировочно в августе 2022 года.

Желаю приятного чтения!

>>> Можно купить на сайте издательства



Проверено: xaizek ()

Ответ на: комментарий от t184256

Давай пости, лентяй. Хоть в летние каникулы себя займешь, заодно среди одноклассников блеснёшь. Скажешь им какую классную книжонку читал.

anonymous ()

Есть еще «затейники» — пользователи, которым нравится проводить время за компьютером ради развлечения, выгоды или и того и другого сразу.

Хотите узнать, почему некоторые вещи работают, а другие — нет? Вам интересно, что произойдет, если что-либо изменить? Тогда вы относитесь к числу «затейников».

Эй, «затейники» ЛОРа, отзовитесь!

cocucka ★★★★ ()
Ответ на: комментарий от anonymous

Я «затейник», пошалим?

Анонимус: я медленно конфигурирую ядро командой `make menuconfig`, оно соптимизировано под мою конфигурацию и пахнет мной

cocucka: я поставил бинарный пакет с дефолтным ядром из реп и закурил.
cocucka ★★★★ ()
Последнее исправление: cocucka (всего исправлений: 1)

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

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)

Обложка: «ДЛЯ ПРОФЕССИОНАЛОВ!111»

Содержимое: «понадобятся лишь основные навыки пользователя компьютера». Начнем разбираться с драйверами: ну короче там драйверы и оно потом грузится потому что ядро.

Ясно, понятно, стопицотое «введение в основы начал».

thesis ★★★★★ ()
Ответ на: комментарий от crutch_master

Я думал там будет про сорцы ядра, их архитектуру, кто что вызывает, как оно работает

Как я понял, это перевод вот этого:

https://www.amazon.de/How-Linux-Works-Superuser-Should/dp/1593275676/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=

Ключевая фраза на обложке и в названии оригинала: «what every superuser should know», а это не то же самое, что «внутреннего устройство». И кстати уже 3е издание оригинала есть, так что смысл эти переводы-перепевы читать…

seiken ★★★★★ ()
Ответ на: комментарий от seiken

Ключевая фраза на обложке и в названии оригинала: «what every superuser should know», а это не то же самое, что «внутреннего устройство».

Ну так на «то, что должен знать каждый рут-неофит» никто даже не посмотрит.

crutch_master ★★★★★ ()
Ответ на: комментарий от thesis

«понадобятся лишь основные навыки пользователя компьютера». Начнем разбираться с драйверами: ну короче там драйверы и оно потом грузится потому что ядро.

Не ну а чё, профессиональный язык. Короче не понимаю твоих претензий.

anonymous ()
Ответ на: комментарий от crutch_master

А тут пособие для эникейшиков, которое можно и так нагуглить.

Я полистал оглавление. Там есть про /dev, про процедуру загрузки, про systemd, upstart и классику (openrc нет, правда)… Это разве для эникейщиков?

Но переведённое заглавие вызывает несоразмерно высокие ожидания, да.

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

Это, скорее, «Ядро Linux в комментариях» Максвелла.

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от crutch_master

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

Это тайное знание для корпоративных энжонеров. Ты что, захотел патчи на ядро накладывать, смерд?!

wandrien ()
Ответ на: комментарий от hobbit

Я полистал оглавление. Там есть про /dev, про процедуру загрузки, про systemd, upstart и классику (openrc нет, правда)… Это разве для эникейщиков?

Ну не для программистов точно. Даже не для прикладников.

wandrien ()
Ответ на: комментарий от seiken

Этот регистрант прав. Проблема переводов в том что они устаревают в момент когда работа над ними заканчивается, или ещё раньше. Про третье издание верно подмечено, либо учите английский и читайте актуальные оригиналы, либо кушайте несвежее. Так что лично я денег не дам. Хотя с удовольствием дал бы их за оригинальный актуальный текст на родном языке, а не за свежий перевод устаревшего оригинала.

Jameson ★★★ ()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от anonymous

Хороший вопрос. Из демо-контента не особо ясно. Оригинал 2015г. - это уже 2изд, так что если перевод начался со 2го изд, то переводное 2изд может соответствовать оригиналу 3изд (тоже 2021г). Но я бы все равно побрезговал, если есть достаточный навык чтения на английском.

Я как-то увидел в русском переводе «UNIX and Linux System Administration Handbook», как image (в контексте disk image) перевели как «изображение», и в целом перевод какой-то дубовый, вот реально странное ощущение создалось, когда на родном языке тяжело читать. И как-то уже не ожидаю лучшего перевода от менее популярных книг. Хотя конечно и цены не сравнимы. Видимо, трудятся так, как работа оплачивается.

seiken ★★★★★ ()
Ответ на: комментарий от seiken

С переводами у нас вообще «бяда». Вспомнить тот же переведённый спустя лет 7 двухтомник Лутца, который в оригинале был однотомником. Или «Лёгкий способ выучить Python» который в оригинале был «learn python the hard way». А ещё есть книга «Внутреннее устройство Linux» от Дмитрия Кетова.

anonymous ()