LXF169:Linux – что это?
Olkol (обсуждение | вклад) |
Olkol (обсуждение | вклад) (→ferfef) |
||
Строка 70: | Строка 70: | ||
Из GNU пришли не только программы в /bin и /usr/bin; glibc – основная библиотека С, используемая в Linux – это тоже наследие GNU. И при каждом вашем действии на своем компьютере, при каждом вводе команды или щелчке по значку на каком-то уровне запускается программа GNU. Неудивительно, что стойкие приверженцы GNU огорчаются, когда мы именуем нашу ОС Linux, а не GNU/Linux. Но стоит отметить, что никто не отрицает важности аспекта GNU; то, что ОС называют просто Linux вместо GNU/Linux, в большей степени объясняется ленью, нежели политическими причинами – полное название слишком уж громоздкое.}} | Из GNU пришли не только программы в /bin и /usr/bin; glibc – основная библиотека С, используемая в Linux – это тоже наследие GNU. И при каждом вашем действии на своем компьютере, при каждом вводе команды или щелчке по значку на каком-то уровне запускается программа GNU. Неудивительно, что стойкие приверженцы GNU огорчаются, когда мы именуем нашу ОС Linux, а не GNU/Linux. Но стоит отметить, что никто не отрицает важности аспекта GNU; то, что ОС называют просто Linux вместо GNU/Linux, в большей степени объясняется ленью, нежели политическими причинами – полное название слишком уж громоздкое.}} | ||
− |
Версия 14:43, 13 ноября 2018
|
|
|
Содержание |
Linux – что это?
Нейл Ботвик копается в лучшей в мире операционной системе, выясняя, что же заставляет ее работать.
Слово «Linux» — одно из самых часто встречающихся в этом журнале, но что оно означает? Оно означает разное для разных людей — от пуристов, для которых это в первую очередь ядро, до сторонников GNU, которые считают его частью GNU/Linux, и новых пользователей, полагающих, что это второе название Ubuntu. На самом деле Linux — все это сразу, а выбор зависит от вашей точки зрения. Строго говоря, термин “Linux”, используемый отдельно, относится к ядру операционной системы, а GNU/Linux — это вся операционная система, объединяющая ядро Linux и инструменты GNU; одно будет совершенно бесполезно без другого (или какой-либо его альтернативы).
Если добавить сюда еще и приложения, и некоторые инструменты, позволяющие управлять всем этим в целом, вы получите дистрибутив, например, Ubuntu.
За долгие годы мы рассказали практически обо всех отдельно взятых компонентах, составляющих операционную систему, известную нам как Linux, но они не работают по отдельности – они должны объединяться вместе, и здесь мы попытаемся объяснить, как из частей складывается целое и что эти части делают.
Что такое ОС?
Что такое дистрибутив?
Операционную систему можно определить как программу, необходимую для того, чтобы приложения работали на оборудовании – как таковая, она состоит из нескольких переплетенных уровней. В самом сердце ее лежит ядро, которое взаимодействует с оборудованием через драйверы и позволяет другим программам использовать это оборудование. Поверх него располагаются различные слои, работающие с устройствами ввода, сетевыми устройствами, устройствами звука и видео. Обычно вам незачем об этом знать. Знания, конечно, бывают полезны при возникновении каких-либо проблем, но даже тогда они не так уж важны, особенно если ваш компьютер есть кому отремонтировать. Однако, раз уж вы читаете этот журнал, есть вероятность, что вас интересует происходящее «внутри» Linux, и мы попытаемся дать вам представление об этом – и о том, кто за что отвечает.
Дистрибутив Linux – это способ распространения основанной на Linux операционной системы и сопутствующих программ. В самом начале это были просто файлы, необходимые для ОС, плюс способ их установки на компьютер. Постепенно дистрибутиву начали требоваться менеджеры пакетов, инструменты обновления, настройка GUI и множество иных удобств. Тем не менее, при появившихся дружелюбии к пользователю и внешнем лоске (или не появившихся, если ваш дистрибутив – Gentoo) все дистрибутивы по-прежнему представляют собой Linux.
Ядро
Нервный центр в сердцевине вашей операционной системы Linux.
Ядро — это бьющееся сердце системы, но что оно такое? Ядро — это программный интерфейс к оборудованию компьютера. Оно общается с CPU, памятью и прочими устройствами от имени любой программы, установленной на компьютере. И как таковое, является самым низкоуровневым компонентом среди программ — и самым важным. Если в ядре есть проблема, эта проблема отражается на любой программе, работающей на компьютере.
Ядро Linux монолитно, т. е. все основные сервисы ОС работают в нем. Альтернативный подход – микроядро, где большая часть работы делается внешними процессами, а ядро занимается всего лишь координированием.
Чисто монолитное ядро неплохо работало раньше, когда пользователи компилировали ядро под свое оборудование; но сейчас такое количество комбинаций оборудования, что встраивание их всех в ядро приведет к появлению неподъемного файла. Поэтому ядро Linux стало модульным: ключевые функции находятся в файле ядра (его можно увидеть в /boot как vmlinuz-version), а опциональные драйверы встроены в виде отдельных модулей в /lib/modules (файлы .ko в этой директории).
Например, 64-битное ядро Ubuntu 12.10 имеет размер 5 MБ, и есть еще 3700 модулей, занимающих более 100 MБ. На конкретной машине нужна только часть из них, и было бы сущим безумием пытаться загрузить их все с основным ядром. Вместо этого ядро определяет используемое оборудование и загружает соответствующие модули, которые становятся частью ядра в памяти, так что в загруженном виде оно по-прежнему остается монолитным, даже когда распределяется по тысячам файлов. Это позволяет системе реагировать на изменение оборудования. Если подключить устройство USB, загрузятся модуль usb-storage и модуль файловой системы, необходимый для того, чтобы его подмонтировать. Вот почему при добавлении оборудования так редко приходится устанавливать новые драйверы: все они уже есть, и просто ждут, когда вы купите и подключите новые игрушки. Компьютеры, работающие на специализированном оборудовании, которое не изменяется, например, серверы, обычно имеют ядро с уже скомпилированными необходимыми драйверами и отключенной загрузкой модулей, что добавляет небольшую долю безопасности.
Если вы компилируете свое ядро, хорошо бы взять за правило встраивать в него драйверы для тех устройств, которые всегда используются, например, для сетевого интерфейса и файловых систем жесткого диска, а для всего остального создать модули.
И еще модули
Огромное количество модулей, большинство из которых – драйверы устройств, стало одной из сильных сторон Linux: по умолчанию поддержано столько устройств, что драйверы качать и устанавливать откуда-то еще совершенно незачем. Но некоторые устройства пока не охвачены встроенными в ядро модулями, обычно по причине того, что код еще очень нов или его лицензия не позволяет включать его в ядро (да, ZFS, это про тебя).
Самый известный пример – драйверы для карт Nvidia. Обычно именуемые сторонними модулями, хотя Ubuntu также использует термин «ограниченные драйверы», они устанавливаются из вашего менеджера пакетов, если их поддерживает ваш дистрибутив. В ином случае их придется компилировать из исходника, что нужно будет проделывать регулярно, при каждом обновлении ядра, поскольку они привязаны к ядру, для которого компилировались.
Предпринимались некие попытки автоматизировать этот процесс, например, DKMS (Dynamic Kernel Module Support – динамическая поддержка модулей ядра), когда при установке ядра автоматически перекомпилируются все сторонние модули, делая процесс обновления ядра почти таким же безболезненным, как процесс обновления пользовательских приложений.
Говоря о ядре, обязательно жонглируют такими понятиями, как «область ядра» и «пользовательская область». Область ядра – это память, доступ к которой есть только у ядра; ни одна пользовательская программа (то есть нечто помимо ядра и его модулей) не может ничего здесь записывать, поэтому сторонняя программа не может повредить работе ядра. А пользовательская область – это область, доступ к которой может получить любая программа с соответствующими привилегиями. Это способствует стабильности и безопасности Linux, поскольку ни одна программа, даже работающая от имени суперпользователя-root, не может напрямую разрушить ядро.
Порядок загрузки
Таинственное чередование вспышек и звуков при запуске.
Большинство дистрибутивов при загрузке сразу прикрываются заставкой, и мы не можем наблюдать за происходящим. А происходит-то много чего — как до появления заставки, так и после. Первым загружается BIOS с материнской платы. Она ищет устройство загрузки и загружает с него код.
Если жесткий диск использует традиционную систему деления на разделы DOS, она содержится в Master Boot Record (MBR) диска – всего 512 байт. 64 байта используются для хранения таблицы разделов для диска (вот почему доступны только четыре первичных раздела), а остальные 446 байт остаются для кода программы-загрузчика (обычно это Grub). В 446 байт особо много функций не впихнуть, поэтому все, что делает этот код – загружает остаток загрузочного кода откуда-то еще с диска, из того места, которое устанавливается при задании кода MBR загрузчиком.
В поисках списка опций загрузки загрузчик считывает свой файл конфигурации – обычно это /boot/grub2/grub.cfg – и либо отображает меню, либо переходит прямиком к загрузке по умолчанию. На данной стадии Linux никак не задействован: работает только код загрузчика. Файл конфигурации выдает загрузчику адрес ядра Linux и всех необходимых файлов initramfs, а также любые другие настройки, такие, как раздел root и то, надо ли скрывать это все за заставкой. Для желающих видеть, что происходит начиная с этого момента и дальше, в большинстве дистрибутивов заставку можно убрать, нажав кнопку Е для редактирования пунктов меню Grub, удалив опции заставки и заглушения звуков и нажав F10 для продолжения загрузки.
Зачем нужен ramdisk?
Большинство дистрибутивов используют файл initramfs – главным образом, по той причине, что определенные драйверы, в частности, нужные для загрузки диска (например, контроллеры SATA и код файловой системы), надо загружать вместе с ядром. Для обычного дистрибутива встраивание всех возможных опций в ядро раздует его настолько, что оно окажется неработоспособным, поэтому все встраивается в виде модулей, и те, что нужны для загрузки, включаются в initramfs. Это тип ramdisk’а, загружаемого программой загрузки вместе с ядром (используя процедуру BIOS, чтобы считать его с диска), содержащий все файлы, необходимые для того, чтобы подмонтировать раздел root. Здесь помогает функция распознавания ядром устройств, решая, какие модули загружать, и затем управление передается жесткому диску. Также initramfs используется для вывода на экран заставок, поэтому они и появляются в самом начале процесса загрузки.
После монтирования раздела root, напрямую или через initramfs, всерьез запускается последовательность инициализации. Традиционно она начинается с запуска /sbin/init, которая затем запускает все остальное, под контролем /etc/inittab, и отвечает за список сообщений при запуске сервисов, которые вы видите на консоли, если у вас нет заставки. Также это позволяет увидеть, в каком месте процесс загрузки подвис или занял больше положенного времени, если у вас возникли такие проблемы.
Новые опции
Время идет, и все эти системы подвергаются изменениям. На самом последнем оборудовании BIOS заменяется на UEFI, хотя если вы установили программу загрузки, разницы вы не почувствуете. Есть также попытки заменить традиционную систему SysVinit, которая существует уже много лет. Ubuntu ввел Upstart, а Red Hat и Fedora предпочитают systemd.
Все они делают примерно одно и то же – запускают задачи, необходимые, чтобы заработала ОС. Отличаются только методы. Основное различие в том, что SysVinit последовательна: каждый следующий сервис дожидается завершения запуска предыдущего. Медленно запускаемый сервис тормозит все остальные. Upstart и systemd запускают сервисы параллельно, избегая подобных узких мест. Конечно, есть те, кто считает, что Linux настолько стабилен, что время загрузки не столь важно – если вы вместо выключения машины можете уйти в спящий режим, перезагрузка становится весьма редким случаем.
> Убрав заставку, вы увидите процесс загрузки во всей красе, в том числе и состояние запускаемых процессов.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить