Что такое «ядро» и зачем оно
Ядро: монолитный программный компонент, который постоянно находится в памяти и выполняет основные функции ОС — унификацию, разделение и учёт доступа к ресурсам компьютера. Поскольку ядро отвечает за работу с внешними устройствами, слишком старое ядро может не распознать слишком новое «железо» (и наоборот).
Что такое ядро?
В мультипрограммном режиме работы одновременно выполняются несколько задач, но так каких явно больше, чем количество процессоров (который может быть и один), в действительности ими управляет планировщик:
- Текущий процесс выполняется в течение небольшого кванта времени (доли секунды)
Контекст этого процесса (все данные, необходимые для продолжения работы) сохраняется, процесс приостанавливается
- Процесс помещается в конец очереди (или не в конец, если у процессов есть приоритеты)
- На его место загружается контекст следующего процесса в очереди
- Этот новый процесс продолжает работу с точки предыдущего сохранения
- …
- Когда-нибудь продолжит работу и тот, первый процесс
- … (и так далее)
Это очень упрощённая схема унификации, разделения и учёта машинного времени (Вытесняющая многозадачность)
Пример — запуск top: сколько процессов, и у каких из них статус R.
Ещё одна задача мультипрограммного режима — унификация, разделение и учёт работы с оперативной памятью: если давать всем задачам одинаковый доступ ко всей памяти, любая ошибка может испортить всё.
Большинство современных процессоров поддерживают два т. п. уровня выполнения:
- Если код выполняется на уровне supervisor, ему доступна вся оперативная память, а также специальные ячейки, отвечающие за сохранения контекста процессов
Если код выполняется на уровне user, вместо всей оперативной памяти ему доступна только её часть, причём для удобства она представлена для всех процессов одинаково (с использованием механизма виртуальной памяти)
В традиционной ОС единственный процесс, который работает на уровне supervisor — это ядро. Отсюда и вся его специфика
Ядро Linux создаётся большим сообществом профессоналов, в которое входят и индивидуальные разработчики, и организации. Лицензия на него свободная — GPLv2. Сообщество имеет иерархическую структуру, определяемую самим сообществом.
Ядро, драйверы устройств и «прошивки»
Доступ к большинству внешних устройств также разрешён на уровне supervisor, и не разрешён на уровне user. Это значит, что доступ обычного процесса к периферии часто управляется ядром — если оно знает, как это делать, то есть включает в себя «драйвер».
Понятие «драйвер» не имеет чёткого определения. Драйвер — это что-то, без чего ОС не может работать с чем-то.
Примеры:
Компонент ядра (модуль), унифицирующий работу с конкретным WiFi-адаптером
Пример: lspci -k
Компонент ядра (модуль), унифицирующий работу с некоторым представлением данных, например, с файловой системой (не имеет привязки к аппаратуре)
Пример: lsmod | grep vfat
Компонент графической подсистемы (библиотека), транслирующий стандартные графические функции в управляющие команды конкретного семейства видеокарт
Пример: /var/log/Xorg.0.log
Программа, транслирующая документ в очереди на печать из стандартного формата в формат вывода на конкретный принтер
Кроме того, для полноценной работы многих «умных» внешних устройств требуется т. н. «прошивка» (микропрограмма, firmware). «Умные» устройства — это по сути специализированные компьютеры с архитектурой, непохожей на обычные ЭВМ, а прошивка — это фактически ядро их встроенной операционной системы.
Прошивка изготавливается производителем устройства, и зачастую лицензия на неё не свободная, а только допускающая распространение (т. н. «freeware»). В Linux прошивки не входят в пакет с ядром из-за лицензионных соображений, вместо этого есть пакет firmware-linux, в который сообщество складывает все доступные к распространению микропрограммы.
Пример: состав и объём firmware-linux
Если производитель аппаратуры не хочет или не может сделать свой драйвер свободным, в состав ОС включается отдельный пакет с компонентами, непосредственно взятыми с сайта производителя.
Новая «железяка» не работает! Что делать?
Есть несколько вариантов:
В любом случае стоит обновить firmware-linux — возможно, новая вариация устройства уже поддерживается, но ей нужна новая прошивка
- Производитель заинтересован, чтобы его устройство поддерживалось в ядра Linux. В этом случае драйвер как правило свободный, и появляется в составе ядра практически одновременно с выходом устройства
- ⇒ Обновить ядро
- Производитель (по каким-то соображениям) предоставляет несвободный драйвер. Ждём, пока этот драйвер появится, а затем — пока сообщество вашего дистрибутива соберет соответствующий пакет
- ⇒ Обновить или установить пакет с драйвером. Придётся посмотреть, как он называется. Скорее всего, придётся обновить также и ядро
- Производитель предоставляет кем-то как-то собранный комплект программ (например, фильтр для системы печати) и называет это драйвером. Здесь проблем больше, потому что не всякий комплект подойдёт (например, не подходит пакет для Ubuntu), а если производитель прилагает «инсталлятор» без оглядки на дистрибутив, велик шанс, что что-нибудь установиться не туда. В любом случае придётся искать инструкции.
- Производителя не интересует работа в Linux — с этим пользователь справиться не в состоянии
Особенности ядер в ALT
Ядро — чуть ли не единственный пакет, который:
Не надо ставить стандартным установщиком (можно использовать скрипт update-kernel или GUI)
- Можно установить в системе в нескольких экземплярах — разных версий
⇒ Самостоятельно не обновляется при обновлении системы
Если всё «и так работает», обновлять ядро скорее всего не надо. Исключение: большие пакеты, например, VirtualBox, в состав которых входят модули для самого свежего ядра. Тогда при обновлении VirtualBox может потребоваться и обновление ядра.
В ALT есть несколько типов ядер. Два из них применяются в ОС общего назначения: «стабильное» (название пакета — kernel-image-std-def) и «свежее» (kernel-image-un-def). В состав дистрибутива входит по умолчанию стабильное ядро. Если оно всё ещё не поддерживает ваше «железо», можно попробовать установить свежее — командой update-kernel -t un или из GUI.
Все установленные ядра доступны в меню загрузки ОС при включении компьютера. Рекомендуется держать установленными как минимум два ядра: текущее и предыдущее. Старые ядра можно удалить (например, командой remove-old-kernels).