Принцип работы линукс ядра

Содержание
  1. 3.1. Как устроен Linux: ядро и процессы
  2. Читайте также
  3. Глава 1 Введение в ядро Linux
  4. Ядро Linux в сравнении с классическими ядрами Unix
  5. Ядро в роли арбитра
  6. Ядро системы
  7. IPLabs Linux Team: начало русского Linux’а
  8. Linux (ядро)
  9. 1.4. Ядро
  10. 20.5.1. Зачем обновлять ядро?
  11. Семантическое ядро
  12. Составьте семантическое ядро
  13. Глава 1 Как устроен компьютер
  14. Ядро API Firebird
  15. Как устроен Internet
  16. Технология мысленных приказов: как устроен первый интерфейс «мозг — мозг» Андрей Васильков
  17. Национальная библиотека им. Н. Э. Баумана Bauman National Library
  18. Персональные инструменты
  19. Linux (ядро)
  20. Содержание
  21. Историческая справка
  22. Краткая история Unix
  23. Краткая история Linux
  24. Переход от Unix к Linux
  25. Понятие ядра операционной системы Linux.
  26. Устройство компонентов ядра ОС Linux
  27. Файловая подсистема
  28. Подсистема управления запросами
  29. Подсистема ввода/вывода
  30. Особенности архитектуры
  31. Выполнение в режиме ядра
  32. Примечания
  33. Литература

3.1. Как устроен Linux: ядро и процессы

3.1. Как устроен Linux: ядро и процессы

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

Рис. 3.1. Устройство ОС Linux

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

Начальная загрузка системы состоит в том, что файл с образом ядра считывается в оперативную память, начиная с нулевого адреса. Этот файл находится в каталоге /boot и называется vmlinuz-x.y.z, где x.y.z — это номер версии ядра. На текущий момент большинство дистрибутивов основано на ядре версии 2.4, хотя уже вышло ядро 2.6 (Fedora Core 3) и кое-где еще встречается версия 2.2.

По соглашению разработчиков ядра, все ветви с четным номером (2.2, 2.4 и т.д.) считаются стабильными и рекомендуются для широкого использования, а на ветвях с нечетным номером испытываются новые идеи, Линус Торвальдс предложил распространить эту схему нумерации и на третью цифру версии: в ядра с нечетными номерами добавлять новые функции, а в четных — только исправлять обнаруженные ошибки.

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

Этих компонент ОС Линус Торвальдс не создавал: они поступили из проекта GNU (http://www.gnu.org), участники которого с 1984 года работают над созданием полноценной UNIX-подобной ОС, целиком состоящей из свободно распространяемого программного обеспечения. К 1991 году им не хватало только ядра, и эту-то прореху и заполнил Торвальдс. Так что ОС, которой посвящена эта книга, правильнее называть не Linux, а «операционной системой GNU, основанной на ядре Linux», или просто GNU/Linux.

Итак, ядро обслуживает запросы процессов. Что же такое процесс? Это понятие является базовым в UNIX-подобных системах. Процесс можно представить себе как виртуальную машину, отданную в распоряжение одной задачи. Каждый процесс считает, что он на машине один и может распоряжаться всеми ее ресурсами. На самом же деле процессы надежно изолированы друг от друга, так что крушение одного не может повредить всей системе (сколько раз вы наблюдали в Windows, как сбой одной программы приводил к общему зависанию?).

Каждый процесс выполняется в собственной виртуальной памяти (см, рис. 3.2), в которую никакой другой процесс вмешаться не может. Этим и обеспечивается устойчивость всей системы.

Рис. 3.2. Виртуальная память процесса

Напоминаю, что такое виртуальная память. Каждому процессу разрешено считать, что его адреса начинаются с нулевого адреса и от него наращиваются. Таким образом, в 32-разрядной ОС процесс может адресовать 4 гигабайта оперативной памяти. Механизм виртуальной памяти позволяет процессу думать, что именно столько ему и выделено, хотя физически объем ОЗУ вашей машины — какие-то жалкие 256 Мбайт. Недостающую память заменяет жесткий диск путем записи временно не используемых страниц памяти в раздел подкачки (свопинга).

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

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Читайте также

Глава 1 Введение в ядро Linux

Глава 1 Введение в ядро Linux Даже после трех десятилетий использования операционная система (ОС) Unix все еще считается одной из самых мощных и элегантных среди всех существующих операционных систем. Со времени создания операционной системы Unix в 1969 году, это детище Денниса

Ядро Linux в сравнении с классическими ядрами Unix

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

Ядро в роли арбитра

Ядро в роли арбитра Так кто же определяет, который из потоков должен выполняться в данный момент времени? Этим занимается ядро.Ядро определяет, который из потоков должен использовать процессор в данный момент времени и переключает контекст на этот поток. Давайте

Ядро системы

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

Читайте также:  Надстройка интерфейса для windows

IPLabs Linux Team: начало русского Linux’а

IPLabs Linux Team: начало русского Linux’а Следующая веха на пути русского Linux’а – 1998 год, когда фирма IPLabs (точнее, ее подразделение – IPLabs Linux Team) совместно с Институтом логики (на самом деле это были одни и те же люди – Алексей Новодворский, Алексей Смирнов и Юрий Девяткин с

Linux (ядро)

Linux (ядро) Официальная ссылкаLinux (2.4.19): ftp://ftp.kernel.org/pub/linux/kernel/Содержимое LinuxПоследняя проверка: версия 2.4.18.Файлы поддержкиЯдро Linux и и его заголовочные файлыОписанияЯдро LinuxЯдро – основа любой системы Linux. Когда компьютер включается и загружает Linux, первое, что загружается –

1.4. Ядро

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

20.5.1. Зачем обновлять ядро?

20.5.1. Зачем обновлять ядро? Linux развивается быстрее любой другой операционной системы. Регулярно появляются новые версии ядра, реализующие новые функции. Например, едва успел выйти дистрибутив Fedora Core 4 на ядре 2.6.11, а на www.kernel.org уже лежит стабильная версия 2.6.12.2. Еще чаще

Семантическое ядро

Семантическое ядро Анализ семантического ядра на полноту охвата. Очень важно, чтобы семантическое ядро охватывало максимально возможное количество проблем пользователей и запросов, формирующих эти проблемы. Нужно выяснить:? охватывает ли семантическое ядро весь

Составьте семантическое ядро

Составьте семантическое ядро Чтобы успешно продвигать свой бизнес в Интернете, необходимо правильно составить семантическое ядро.Семантическое ядро, говоря простым языком, – это слова, которые будут наиболее точным образом характеризовать направленность вашей

Глава 1 Как устроен компьютер

Глава 1 Как устроен компьютер Эта глава посвящена обзору аппаратных средств персонального компьютера. В ней мы также кратко познакомимся с понятием программного обеспечения и узнаем о назначении операционной системы.• Аппаратные средства ПК• Как включить

Ядро API Firebird

Ядро API Firebird Программирование с использованием API необходимо при написании драйверов для создания сценариев в таких языках, как PHP и Python, и при разработке объектно- ориентированных классов доступа к данным для объектно-ориентированных языков типа Java, C++ и Object Pascal.

Как устроен Internet

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

Технология мысленных приказов: как устроен первый интерфейс «мозг — мозг» Андрей Васильков

Технология мысленных приказов: как устроен первый интерфейс «мозг — мозг» Андрей Васильков Опубликовано 29 августа 2013 Исследователи из университета штата Вашингтон провели необычный эксперимент, который можно считать первым в истории случаем

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Linux (ядро)

Linux kernel
Разработчик Линус Торвальдс и сторонние разработчики
Написана на C и Ассемблер [1]
Линейка ОС Unix-подобная
Дата первого релиза 0.01 (17 September 1991 года ; 30 years ago ( 1991-09-17 ) )
Доступно в Русский
Ядро (тип) Монолитное ядро
Лицензия GNU GPL, version 2 [2] plus various optional freely redistributable (proprietary) binary blobs [3]
Официальный веб-сайт kernel .org

Содержание

Историческая справка

Краткая история Unix

Хронология разработки ядра Linux очень обширна, однако точно прослеживаются истоки его создания, которые ведут к UNIX. В 1969 году Кен Томпсон из исследовательской группы Bell Laboratories совместно с Деннисом Ритчи на передовом микро-компьютере PDP-7 разработал ядро многозадачной, многопользовательской операционной системы UNICS ( позже переименованной в UNIX-TP). В момент создания ядра UNIX-TP Ритчи находился под влиянием своего прошлого проекта — ОС MULTICS, несмотря на наличие достаточно инновационных и передовых идей, таких как: строго сегментированная модель данных, сегментно-страничная виртуальная память, динамическое связывание, переконфигурация всей системы «на ходу», иерархическая файловая система, впервые реализованный подход с использованием стеков для каждого вычислительного процесса внутри системы ядра и др; проект был закрыт ввиду сложной архитектуры ОС, а также из-за недостатков, связанных с распределением памяти файлов, больших по размеру чем установленный системный лимит. Стоит также заметить, что вся операционная система, включая сложный компилятор языка PL/I, пользовательские команды и дополнительные библиотеки, состояла из примерно полутора тысяч исходных файлов, каждый из которых содержал примерно по 200 строк кода. В скомпилированном виде весь этот код занимал около 4,5 Мегабайт, что было огромным размером по тем временам. Компиляторы Multics в основном оптимизировали код по размеру, а не по эффективности использования центрального процессора, что было обосновано стремлением к экономии памяти в многопользовательской системе.

Несмотря на неудачу своего предшественника, UNIX вобрал в себя концепцию MULTICS и был детально проработан. Первые две версии ОС были написаны на ассемблере, однако третья и четвертая версии использовали язык, разработанный Ритчи — С [4] , архитектура третьей версии использовала встроенный компилятор языка, а четвертая представляла собой полностью переписанное на СИ системное ядро. С приходом пятой версии UNIX был полностью переписан на язык СИ. Изначально создателем он был задуман как язык необходимый в написании операционных систем. Это переписывание разрешено команде UNIX TM с целью перехода на более мощную аппаратную часть — PDP-11/45 и 11/70 компьютеры. С 1974 года UNIX стал распространяться среди университетов и академических учреждений. С 1975 года началось появление новых версий, разработанных за пределами Bell Labs, и рост популярности системы.

Читайте также:  Parallel mac os sierra

В 1980 году компанией AT&T был разработан пакет коммерческих лицензий на все дистрибутивы UNIX, и сведение всех версий в одну: UNIX System V. Университет Калифорнии, Беркли продолжал разрабатывать свою собственную версию Unix под названием BSD. Многие из важнейших разработок в UNIX изначально пришли из BSD, к примеру, включение TCP/IP в основную версию UNIX. Поскольку основная часть системы поставлялась в исходных текстах, написанных на языке С, опытным программистам не требовалось документации, чтобы разобраться в архитектуре UNIX. C ростом популярности микропроцессоров другие компании переносили эту операционную систему на другие платформы, но простота и ясность операционной системы искушали многих на ее расширение и последующую модификацию, в результате чего появилось много разновидностей базовой системы.

Не желая терять инициативу, AT&T в 1982 году объединила несколько существовавших версий UNIX и создала версию под названием SYSTEM |||. В отличие от редакций, предназначавшихся, в первую очередь, для внутреннего использования и не получивших дальнейшего развития, SYSTEM ||| была создана для распространения за пределами Bell Labs и AT&T и положила начало новой ветви UNIX , которая и сегодня жива и развивается.

Краткая история Linux

В 1991 году в Хельсинки, Финляндии, Линус Торвальдс начал работу над проектом, который был, по его словам, «просто для удовольствия». Этот проект в конечном счете стал ядром Linux. Он никогда не был предназначен для чего-то особенного, просто инструмент, который позволил бы студенту получить доступ к UNIX-серверам в соседнем университете. Он написал его специально для железа, на котором он работал на тот момент, и оно не зависело от операционной системы. Linux разработана «с нуля» для процессора Intel i386, сегодня она перенесена на огромный ряд других аппаратных платформ, включая серверы Alpha фирмы DEC.

Переход от Unix к Linux

Linux был разработан в попытке создать бесплатную альтернативу коммерческим UNIX-средам. Его история начинается в 1991 или даже в 1983 гг., когда был создан проект GNU, чьей исходной целью было предоставить бесплатную альтернативу UNIX. Linux работает на гораздо большем количестве платформ, например на Intel®/AMD x86. Большинство ОС UNIX способны работать только на одной платформе.У Linux и UNIX общие исторические корни, но есть и серьезные отличия. Много инструментов, утилит, и бесплатных приложений, являющихся стандартными для Linux, первоначально задумывались как бесплатная альтернатива программам для UNIX. Linux часто предоставляет поддержку множества опций и приложений, заимствуя лучшую или наиболее популярную функциональность из UNIX. Администратору или разработчику, который привык работать с Linux, система UNIX может показаться не очень удобной для использования. С другой стороны, фундамент UNIX-подобной операционной системы (инструменты, файловая система, интерфейсы API) достаточно стандартизирован.

Понятие ядра операционной системы Linux.

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

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

Взаимодействие прикладных задач с ядром происходит посредством стандартного интерфейса системных вызовов. Интерфейс системных вызовов представляет собой набор услуг ядра и определяет формат запросов на услуги. Процесс запрашивает услугу посредством системного вызова определенной процедуры ядра, внешне похожего на вызов обычной библиотечной функции . Ядро от имени процесса выполняет запрос и возвращает процессу необходимые данные.

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

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

Все коммерческие версии UNIX в некоторой степени эволюционировали до модульного ядра. Драйверы и отдельные особенности ОС доступны как отдельные компоненты и могут быть по необходимости загружены или выгружены из ядра. Но открытая модульная архитектура Linux гораздо гибче. Однако гибкость и адаптируемость Linux означают и постоянное изменение. Исходный код Linux постоянно меняется, и, по прихоти разработчика, может поменяться API. Когда модуль или драйвер написан для коммерческой версии UNIX, он проработает гораздо дольше, чем тот же драйвер для Linux.

Устройство компонентов ядра ОС Linux

Ядро состоит из:

  1. Файловая система
  2. Подсистема управления процессами и памятью
  3. Подсистема ввода / вывода

Файловая подсистема

Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, а также к периферийным устройствам. Одни и те же функции open(), read(), write() могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или в терминал. Файловая подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы, права доступа к файлам определяют привилегии пользователя в системе. Файловая подсистема обеспечивает маршрутизацию запросов периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.

Читайте также:  Windows mobile для виндовс 10

Подсистема управления запросами

Запущенная на выполнение программа порождает в системе один или более процессов ( задач ). Подсистема управления процессами контролирует:

  1. Создание и удаление процессов
  2. Распределение системных ресурсов ( памяти, вычислительных ресурсов ) между процессами
  3. Синхронизацию процессов
  4. Межпроцессорное взаимодействие

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

Подсистема ввода/вывода

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

Особенности архитектуры

Ядро Linux поддерживает многие унаследованные от UNIX особенности, такие как:

  1. многозадачность
  2. виртуальную память
  3. динамические библиотеки
  4. отложенную загрузку
  5. производительную систему управления памятью
  6. современные сетевые протоколы

На сегодняшний день Linux — монолитное ядро с поддержкой загружаемых модулей. Драйверы устройств и расширения ядра обычно запускаются в 0-м кольце защиты, с полным доступом к оборудованию. В отличие от обычных монолитных ядер, драйверы устройств легко собираются в виде модулей и загружаются или выгружаются во время работы системы, эта особенность также является унаследованной от первого предшественника — ОС Multics. То, что архитектура Linux не является микроядерной, вызвало обширнейшие споры между Линусом Торвальдсом и Эндрю Таненбаумом в конференции.

Выполнение в режиме ядра

Существуют всего три события, при которых выполнение процесса переходит в режим ядра:

  1. аппаратные прерывания
  2. особые ситуации
  3. системные вызовы

Во всех случаях ядро Linux получает управление и вызывает соответствующую системную процедуру для обработки события. Непосредственно перед вызовом ядро сохраняет состояние системы, а именно состояние прерванного процесса в системном стеке. После завершения обработки, состояние процесса восстанавливается и процесс возвращается в исходный режим выполнения. Чаще всего это режим задачи, например, когда прерывание возникло, когда процесс уже находился в режиме ядра, после обработки события он останется в том же состоянии. Стоит разграничить особые ситуации и прерывания. Аппаратные прерывания генерируются периферией при наступлении исключительных событий ( например, завершение печати или поступление данных на последовательный вход ввода ) и имеют асинхронный характер, поскольку невозможно в тот или иной момент сказать, когда система нам пробросит исключение. Часто, эти прерывания не связаны с текущим процессом, а вызваны внешними событиями. Именно поэтому, обработка прерываний происходит в системном контексте, при этом недопустим доступ к адресному пространству процесса. По этой причине обработка ситуаций не должна блокироваться, поскольку это вызовет блокирование выполнения независимого процесса Системные вызовы позволяют процессам воспользоваться базовыми услугами ядра. Интерфейс системных вызовов определяет ограниченный набор точек входа в ядро системы, обращение к которым изменяет режим выполнения процесса и позволяет выполнять привилегированные функции ядра. Стандартная библиотека C, позволяющая использовать системные функции как обычные процедуры, на самом деле содержит заглушки, обеспечивающие фактическую реализацию вызова соответствующей точки входа ядра. Эта реализация практически не зависит от аппаратной части системы. Например, для систем на базе процессоров Intel используются шлюзы. Имеются два типа шлюзов: шлюзы ловушек и шлюзы вызовов. Для осуществления вызова через шлюз ловушки процесс выполняет команду прерывания, а при работе через шлюз вызова — команду межсегментного вызова. Выполнение системного вызова происходит в режиме ядра, но в контексте процесса, сделавшего системный вызов. Таким образом, открыт доступ к адресному пространству процесса и используется стек ядра процесса.

Примечания

  1. ↑ Balsa, Andrew D. «The linux-kernel mailing list FAQ». Tux.Org.
  2. ↑ Martens, China (28 July 2006). «Linux creator Torvalds still no fan of GPLv3». InfoWorld. IDG . Retrieved 15 February 2015 .
  3. ↑»kernel/git/stable/linux-stable.git». git.kernel.org. 16 October 2002 . Retrieved 21 August 2012 . path: root/firmware/WHENCE
  4. ↑Си

Литература

Робачевский, Андрей (2002). Autotools : Операционная система Unix / by Андрей Робачевский. No Starch Press. p. 528. ISBN 5-8206-0030-4.

Источник

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