Что делает ядро Linux | Losst

Что делает ядро Linux

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

Но что делает ядро Linux? Как оно работает? Какие его основные задачи? Это очень обширная тема и мы попытаемся разобрать ее в этой статье.

Что делает ядро Linux?

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

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

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

Возьмем для примера чтение и запись данных в оперативную память. Каждая материнская плата может иметь разные контроллеры памяти, а ваш компьютер может работать на процессоре ARM, Intel, AMD, SPARC, PowerPC или MIPS. Но это не будет иметь значения для вашей программы Hello World, а так как ядро предоставляет унифицированный интерфейс для всех этих платформ.

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

Хранение данных:

  • RAM - Чтение и запись данных в оперативную память;
  • Постоянное хранение - Чтение и запись данных на постоянные запоминающие устройства;
  • Виртуальная файловая система;

Доступ к сетям:

  • Работа с физическими сетями (Ethernet, Wireless, LTE, коммутаторы, Bluetooth;
  • Виртуальные сети;

Планирование задач:

  • Совместное использование процессорного времени программами;
  • Балансировка нагрузки процессора и приоритеты;

Поддержка внешних устройств:

  • Съемные USB носители;
  • Веб-камеры;
  • Мыши и клавиатуры;

Безопасность:

  • Права доступа к файлам для пользователей и групп;
  • Разрешение доступа к ресурсам системы;

Благодаря вышеуказанным функциям ядра Linux разработка программ становится проще. Ядро реализует все это с помощью системных вызовов. Дальше мы рассмотрим более детально многие функции.

Хранение данных

Существует два способа хранения данных - это временный и постоянный. Временное хранение - это оперативная память. Не все данные, которые попадают в ОЗУ нужно постоянно хранить. Например, когда вы просматриваете интернет, вы же не хотите чтобы каждая веб-страница, видео или изображение были сохранена на вашем жестком диске. Иначе он очень быстро переполниться. Также для некоторых данных нужна максимальная скорость чтения и записи, ее и обеспечивает ОЗУ.

Ядро Linux обеспечивает прозрачный интерфейс для чтения и записи данных из оперативной памяти. Не имеет значения где запущенна операционная система, на старом процессоре i386 или новом Andorid ARM смартфоне. Код не нужно менять для обеспечения совместимости. Ядро содержит код для большинства аппаратных платформ, поэтому оно может обеспечить единый интерфейс для работы с ними.

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

Похоже, дела обстоят с постоянным хранением. Ядро скрывает от программ отличия между интерфейсами SATA, PATA, SCSI, USB, M2 и другими протоколами хранения. Одна программа может работать с любым носителем и любой поддерживаемой файловой системой без каких-либо изменений в программе. Это увеличивает повторное использование кода и производительность труда разработчиков.

Доступ к сети

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

Но к счастью, на данный момент самые популярные протоколы, это IPv4 и IPv6. Что касается других сетевых протоколов, таких как DECnet, IPX, AppleTalk, то они поддерживаются ядром, но вряд ли есть смысл использовать их в современных программах.

Вернемся к IPv4 и IPv6. У обоих слишком разные форматы записи IP адреса, но это скорее хорошо, чем плохо. Тип протокола можно определить сразу по форме IP адреса. Ядро обеспечивает поддержку протоколов передачи данных: TCP, UDP, SCTP и ICMP. Все они могут быть очень легко использованы с помощью системных вызовов. Не имеет значения, подключен ли ваш компьютер к Ethernet или Wifi. Эта обеспечивает гибкость для конечных пользователей.

Планирование задач

Планирование процессорного времени это очень большая и сложная тема. Мы не будем затрагивать алгоритмы планирования, нас интересуют только задачи ядра Linux в относительно управления каждым процессом.

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

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

Выводы

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

На завершение краткая история Linux:

Источник: https://fossbytes.com

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую OpenSUSE. Кроме Linux интересуюсь всем, что связано с информационными технологиями и современной наукой.

Ваше имя тоже может быть здесь. Как? Пишите для нас! Смотрите подробнее как стать автором Losst.

Оцените статью:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (17 оценок, среднее: 4,82 из 5)
Загрузка...

  3 comments for “Что делает ядро Linux

  1. Декабрь 15, 2016 at 7:30 пп

    А как компилируется, отсеивается код который предоставляет комьюнити, и как вообще ведеться работа по разработке самого ядра просто интересно. или там все модульно?

    • Валентин
      Декабрь 16, 2016 at 11:19 дп

      Всё модульное. Чтоб включить код который пишет комьюнити , необходимо отправить письмо с патчем в Linux Kernel Mailing List (lkml) , и после рассмотрения патча мэйтейнером целевой подсистемы он может быть включен в staging ветку ядра для тестирования.
      Чтоб модуль можно было использовать с ядром он должен экспортировать тип лицензии которую он использует как GPL иначе ядро не будет грузить такой модуль. Вообще есть замечательная книга Linux Kernel Development , 3е издание, там всё это описано.

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

  2. Николай
    Декабрь 15, 2016 at 8:40 пп

    Отличная статья. Ошибка в тексте: миши вместо мыши.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: