LINUX.ORG.RU

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

 , ,

Книга «Внутреннее устройство 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 ()
Последнее исправление: Satori (всего исправлений: 10)
Ответ на: комментарий от anonymous

А что бы понять, что блюдо - говно, надо быть проф. поваром.
Прочитайте также man sacrasm.

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

Не поможет, она слишком быстро и легко переустанавливается.

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

И кстати уже 3е издание оригинала есть

Превью же только. А значит с перлами. Например самое начало:

can a user process completely wreck the data on a disk? [b]With the correct permissions[/b], yes

Какие это нафиг тогда «correct permissions». Больше подошло бы «right permissions».

Наверное, дальше - больше.

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

Не сомневаюсь. Мы здесь все просрали, кругом неквалифицированное быдло, везде вебня, все обмазано жаваскриптом и запрещено цензурой, да еще и ОРВИ какое-то новое придумали. А у вас там почти золотой век, разве что венда глючит, да и то вот-вот перестанет.

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

может быть, даже наверное… я к тому, что перевод надо «переводить»

anonymous
()

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

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

Не"right", а «certain».

Иди мамку поучи борщ варить. «Certain» - для сухого технического мануала. Конструкция «with the right $thingname you can do $wrongaction» - популярный в живом языке оборот вроде русского «при должном усердии можно протереть ластиком дырку в дневнике» (автор не одобряет и не советует, но это звучит живее, чем «при определённых обстоятельствах в дневнике возникнет дырка»).

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

Вот и унеси эту конструкцию обратно на кухню, поэт-борщевед, а здесь говорят о технической литературе.

anonymous
()

Это не та книга, за которую надо платить деньги. Более того, её не следует читать даже за бесплатно. Подчеркну, именно не «не стоит», а «не следует».

Книга явно не для гуманитариев. А человека, который нацелился в технари, она запутает так (если читать её целиком), что потом не вылезешь.

И вот почему: очень много копипасты из манов. Много листов потрачено на то, что к работе линукса не относится, например - всякие баши и мейки, ssh. Это, конечно, нужно, но только как справка. Схем, как там и что связано - очень мало. Да, они наглядны, но их мало и они разделены большим объёмом текста. Если бы было побольше схем и поменьше текстового болота, книга была бы неплоха. А в итоге, пока читаешь очередной опус по малозначительной теме (по которой есть маны и куча ответов на стековерфлоу) на много страниц, уже можно забыть «а с чего это вообще началось». Структура книги ассоциируется с песнями акынов «что вижу, то и пою».

Увы, не могу пооветовать что-то другое. Только самостоятельная работа, наставник(и) и поле для экспериментов.

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

оборот вроде русского «при должном усердии можно протереть ластиком дырку в дневнике» не уместен.

Здесь акцент на другое: нужной отвёрткой можно вкрутить правый винт в левую резьбу.

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

Видишь ли, мудила, в чём дело. Есть люди, которые умеют писать книги. В результате образованный читатель с чувством языка получает не только информацию по теме, но и удовольствие от самого текста. А есть элочки-людоедочки со знанием 17 слов и звуков бе-ме (как у тебя), что на ЛОРе, видимо, повод для гордости. Такими опусами только жопу подтирать.

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

На goodreads под тысячу оценок, сотня обзоров. В основном, оценивают положительно.

https://www.goodreads.com/book/show/514432.How_Linux_Works

опус по малозначительной теме (по которой есть маны и куча ответов на стековерфлоу)

Сам по себе этот факт ни о чём не говорит. Складывается ли цельная картинка при прочтении, достигается более фундаментальное понимание? Так то любую проблему можно загуглить, но если описываются принципы, а не разовое решение, это намного эффективнее и полезнее слепого следования ответу со stackoverflow. Вопрос - описываются ли? Или прям от фонаря копипаста манов?

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

Оба варианта - говно. Твой в большей степени. Язык надо чувствовать. Пусть подбором русских аналогов в прозе занимаются профессиональные переводчики. Хотя и они в массе тоже говно.

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

Я иногда думаю - живи я в Рязани, мы были бы с вами лучшими друзьями … Даже дистрибутивы подобные используем ...

Владимир

anonymous
()

Первое издание было так себе, честно говоря. Водица.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.