unix что такое ядро
Unix что такое ядро
Как и в любой другой многопользовательской операционной системе, обеспечивающей защиту пользователей друг от друга и защиту системных данных от любого непривилегированного пользователя, в ОС UNIX имеется защищенное ядро, которое управляет ресурсами компьютера и предоставляет пользователям базовый набор услуг.
В результате, ядро большинства современных коммерческих вариантов ОС UNIX (как мы отмечали ранее, почти все они основаны на UNIX System V) представляет собой не очень четко структуризованный монолит большого размера. По этой причине программирование на уровне ядра ОС UNIX продолжает оставаться искусством (если не считать отработанной и понятной технологии разработки драйверов внешних устройств). Эта недостаточная технологичность организации ядра ОС UNIX многих не удовлетворяет. Отсюда стремление к полному воспроизведению среды ОС UNIX при полностью иной организации системы (в частности, с применением микроядерного подхода, который мы кратко рассмотрим в конце курса).
По причине наибольшей распространенности в этом подразделе мы в основном обсуждаем ядро UNIX System V (можно считать его традиционным). В конце курса мы обсудим отличия в организации ядра других ветвей иерархии вариантов ОС UNIX.
Общая организация традиционного ядра ОС UNIX
Одно из основных достижений ОС UNIX состоит в том, что система обладает свойством высокой мобильности. Смысл этого качества состоит в том, что вся операционная система, включая ее ядро, сравнительно просто переносится на различные аппаратные платформы. Все части системы, не считая ядра, являются полностью машинно-независимыми. Эти компоненты аккуратно написаны на языке Си, и для их переноса на новую платформу (по крайней мере, в классе 32-разрядных компьютеров) требуется только перекомпиляция исходных текстов в коды целевого компьютера.
Конечно, наибольшие проблемы связаны с ядром системы, которое полностью скрывает специфику используемого компьютера, но само зависит от этой специфики. В результате продуманного разделения машинно-зависимых и машинно-независимых компонентов ядра (видимо, с точки зрения разработчиков операционных систем, в этом состоит наивысшее достижение разработчиков традиционного ядра ОС UNIX) удалось добиться того, что основная часть ядра не зависит от архитектурных особенностей целевой платформы, написана полностью на языке Си и для переноса на новую платформу нуждается только в перекомпиляции.
Однако сравнительно небольшая часть ядра является машинно-зависимой и написана на смеси языка Си и языка ассемблера целевого процессора. При переносе системы на новую платформу требуется переписывание этой части ядра с использованием языка ассемблера и учетом специфических черт целевой аппаратуры. Машинно-зависимые части ядра хорошо изолированы от основной машинно-независимой части, и при хорошем понимании назначения каждого машинно-зависимого компонента переписывание машинно-зависимой части является в основном технической задачей (хотя и требует высокой программистской квалификации).
Основные функции
К основным функциям ядра ОС UNIX принято относить следующие:
В следующих разделах этой части курса и, более подробно, в третьей части курса мы будем знакомиться с базовыми возможностями ядра ОС UNIX.
Принципы взаимодействия с ядром
В любой операционной системе поддерживается некоторый механизм, который позволяет пользовательским программам обращаться за услугами ядра ОС. В операционных системах наиболее известной советской вычислительной машины БЭСМ-6 соответствующие средства общения с ядром назывались экстракодами, в операционных системах IBM они назывались системными макрокомандами и т.д. В ОС UNIX такие средства называются системными вызовами.
Понятно, что конкретные механизмы возбуждения внутренних прерываний по инициативе пользовательской программы различаются в разных аппаратных архитектурах. Поскольку ОС UNIX стремится обеспечить среду, в которой пользовательские программы могли бы быть полностью мобильны, потребовался дополнительный уровень, скрывающий особенности конкретного механизма возбуждения внутренних прерываний. Этот механизм обеспечивается так называемой библиотекой системных вызовов.
Для пользователя библиотека системных вызовов представляет собой обычную библиотеку заранее реализованных функций системы программирования языка Си. При программировании на языке Си использование любой функции из библиотеки системных вызовов ничем не отличается от использования любой собственной или библиотечной Си-функции. Однако внутри любой функции конкретной библиотеки системных вызовов содержится код, являющийся, вообще говоря, специфичным для данной аппаратной платформы.
Наиболее важные системные вызовы ОС UNIX рассматриваются в оставшихся разделах этой части курса и в следующей части.
Принципы обработки прерываний
Конечно, применяемый в операционных системах механизм обработки внутренних и внешних прерываний в основном зависит от того, какая аппаратная поддержка обработки прерываний обеспечивается конкретной аппаратной платформой. К счастью, к настоящему моменту (и уже довольно давно) основные производители компьютеров де-факто пришли к соглашению о базовых механизмах прерываний.
В основном, ОС UNIX придерживается общего подхода. В векторе прерывания, соответствующем внешнему прерыванию, т.е. прерыванию от некоторого внешнего устройства, содержатся команды, устанавливающие уровень выполнения процессора (уровень выполнения определяет, на какие внешние прерывания процессор должен реагировать незамедлительно) и осуществляющие переход на программу полной обработки прерывания в соответствующем драйвере устройства. Для внутреннего прерывания (например, прерывания по инициативе программы пользователя при отсутствии в основной памяти нужной страницы виртуальной памяти, при возникновении исключительной ситуации в программе пользователя и т.д.) или прерывания от таймера в векторе прерывания содержится переход на соответствующую программу ядра ОС UNIX.
Сравнение Linux и Unix
Обновл. 22 Май 2021 |
Unix — это очень старая система, которая считается «матерью» всех операционных систем. Ядро Linux является производным от Unix продуктом. Основное различие между ними заключается не в том, как они выглядят, а в том, как они работают внутри, т.е. в ядре. Многое также будет зависеть от того, какие именно версии/дистрибутивы Linux и Unix вы сравниваете.
Важно также отметить, что Linux (и многие другие Unix-подобные ОС) свободны в распространении и модификации своих исходных кодов, в то время как операционные системы Unix — нет. Стоимость всегда является главной проблемой при принятии решения о том, какую технологию использовать, и Linux имеет преимущество в этом отношении.
Что такое Unix?
Unix считается «матерью» большинства операционных систем. Об истории Unix мы говорили на соответствующем уроке.
Главной управляющей составляющей Unix является её ядро. Ядро имеет полный контроль над всей системой. Оно имеет подсистемы, которые предлагают свои «услуги» по обработке файловой системы, обработке ресурсов, управлению памятью, запуску и остановке программ и нескольким другим низкоуровневым основным задачам.
Ядро является сердцем операционной системы и выступает в качестве интерфейса между пользователем и аппаратным обеспечением компьютера. Каждая подсистема ядра имеет определенные черты, такие как параллелизм, виртуальная память, подкачка и виртуальная файловая система.
Во внешних слоях архитектуры мы имеем оболочку, команды и прикладные программы. Оболочка — это интерфейс между пользователем и ядром. Оболочка позволяет пользователю вводить команды, интерпретирует эти команды и вызывает соответствующие компьютерные программы.
Примерами операционной системы Unix являются Solaris и HP-UX. Крупнейшими дистрибьюторами UNIX-систем являются IBM, HP и SUN.
Что такое Linux?
Люди часто путают термины Unix и Linux и обычно задают такие вопросы, как «отличается ли Unix от Linux?» / «являются ли Linux и Unix одним и тем же?» / «является ли Linux похожим на Unix?» / «построен ли Linux на Unix?».
Вот ответ на все подобные вопросы. Во-первых, да, Linux и Unix отличаются друг от друга, но при этом у них есть взаимосвязь друг с другом, поскольку Linux происходит от Unix.
Linux — это не Unix, а Unix-подобная операционная система. Система Linux является производной от Unix и является продолжением тех основ, которые были заложены в Unix. Дистрибутивы Linux являются наиболее известными примерами прямых потомков от системы Unix. Система BSD (сокр. от «Berkeley Software Distribution») также является примером производной от системы Unix.
На данном этапе важно, чтобы вы четко понимали для себя, что значит термин «Unix-подобная система».
Unix-подобная ОС (также называемая «UN*X» или «*nix») — это та система, которая работает аналогично системе Unix, однако при этом ей не нужно соответствовать Единой спецификации UNIX (сокр. «SUS» от «Single UNIX Specification») или схожему стандарту POSIX (сокр. от «Portable Operating System Interface»).
SUS — это стандарт, который должен соблюдаться операционной системой, чтобы претендовать на использование торговой марки «UNIX». Данная торговая марка предоставляется компанией «The Open Group». Несколько примеров зарегистрированных в настоящее время UNIX-систем включают macOS, Solaris и AIX.
Если же брать стандарт POSIX, то Linux можно рассматривать как Unix-подобную ОС. Согласно официальному файлу README ядра Linux, Linux — это клон UNIX, разработанный с нуля Линусом Торвальдсом и командой других разработчиков. Linux нацелен на соответствие требованиям стандарта POSIX. Код ядра был написан с нуля. Система разработана таким образом, что действует как Unix, но в нее нет исходного кода Unix.
Важно также отметить, что Linux — это только ядро, а не полноценная ОС. Ядро Linux обычно упаковывается в дистрибутивы Linux, что, таким образом, и делает его полноценной ОС. С другой стороны, UNIX сама по себе является полноценной ОС, поскольку всё (все необходимые приложения, связанные вместе) поставляется от одного вендора (поставщика). Например, система Solaris.
Дистрибутив Linux — это операционная система, созданная из набора программного обеспечения, установленного поверх ядра Linux. Стандартный дистрибутив Linux состоит из ядра Linux, системы GNU, утилит GNU, библиотек, компилятора, дополнительного программного обеспечения, документации, оконной системы, оконного менеджера и окружения рабочего стола.
Большая часть программного обеспечения, включенного в дистрибутив Linux, является бесплатным и открытым. Но при этом дистрибутив может включать в себя проприетарные (платные) программы (например, массивы двоичных данных (BLOB)), которые необходимы для некоторых драйверов устройств.
Различия между Unix и Linux
Давайте теперь рассмотрим некоторые наиболее важные различия между Linux и Unix в следующей таблице:
Сравнение | Linux | Unix |
Разработчик | Вдохновленный системой Minix (Unix-подобной ОС), Linux был первоначально разработан финско-американским инженером-программистом Линусом Торвальдсом. Поскольку исходные коды Linux являются открытыми, то у Linux присутствует огромное сообщество разработчиков. | Была разработана в стенах Bell Labs компании AT&T Кеннетом Лейном Томпсоном, Деннисом Ричи и тремя другими программистами. |
Язык программирования | Написан (преимущественно) на языке Cи и на других языках программирования. | Написана на языке Cи и на Ассемблере. |
Торговая марка | Торговая марка «Linux» принадлежит Линусу Торвальдсу и управляется организацией Linux Mark Institute при Linux Foundation. | Торговая марка «UNIX» сертифицирована компанией Open Group. |
Стандарт | Стандартная база Linux (сокр. «LSB» от «Linux Standard Base»), описанная в стандарте ISO/IEC 23360, представляет собой работу по стандартизации ряда дистрибутивов Linux. LSB в основном является расширением POSIX, но имеет некоторые отличия. Однако нет особой необходимости в сертификации LSB, поскольку различные дистрибутивы в любом случае используют одно и то же ядро. | Сертификация Unix основана на «Единой спецификации Unix», которая является расширением стандарта IEEE 1003 (POSIX), а также стандарта ISO/IEC 9945. POSIX определяет программируемый API, а также интерфейсы оболочки и утилит. Стандарт POSIX был разработан как способ обеспечения совместимости между различными дистрибутивами Unix. |
Лицензия | GNU v2 (GPL General Public License) и другие. | Тип лицензии варьируется. Некоторые версии являются проприетарными, в то время как другие являются бесплатными. |
Семейство ОС | Unix-подобная | Unix |
Языковая поддержка | Мультиязычная | Английский |
Первый релиз | Linux моложе Unix. Он был получен из Unix и выпущен в сентябре 1991 года. | Unix старше Linux. Система была выпущена в октябре 1973 года. До этого, с момента её создания в 1970 году, она использовалась исключительно внутри компании Bell Labs. |
Примеры | Множество различных дистрибутивов: Ubuntu, Debian, CentOS, Fedora, Manjaro, Arch и пр. | IBM AIX, Solaris, HP-UX, Darwin, macOS и пр. |
Тип ядра | Монолитное ядро | Тип ядра варьируется. Оно может быть монолитным, микроядром или гибридным. |
Файловые системы | Поддерживает почти все файловые системы, используемые в разных операционных системах. | Большинство версий поддерживают две или, возможно, три файловые системы. |
GUI | Linux ориентирован на работу с командной строкой, но некоторые дистрибутивы могут предлагать и поддержку GUI-интерфейсов. Самыми популярными GUI-интерфейсами являются Gnome, KDE и Xfce. | Изначально система была заточена на работу с командной строкой, но позже была реализована поддержка окружения рабочего стола. В большинстве Unix-дистрибутивов в качестве такого окружения используется Gnome. |
Масштабируемость | *Масштабируемость достигается с помощью кластеров, сетей или облаков. | *Масштабируемость достигается с помощью кластеров или сетей. |
Интерфейс | Стандартной оболочкой является BASH (сорк. от «Bourne Again SHell»). Но некоторые дистрибутивы разработали свои собственные интерфейсы. | Изначально использовался интерфейс sh (сокр. от «Bourne shell»). Но также система совместима и с другими GUI-интерфейсами. |
Модель исходных кодов | Открытые исходные коды (open-source software). | Смешанная. Обычно исходные коды являются закрытыми, однако некоторые проекты Unix (по типу ОС illumos и ОС BSD) относятся к проектам с открытым исходным кодом. |
Безопасность | Linux-системы обычно считаются очень хорошо защищенными от вредоносных программ. Это связано с тем, что выполнять какие-либо действия по изменению системных файлов может только пользователь с правами superuser (su) или root. Постоянно работать под этими правами продвинутый пользователь в Linux (в отличие от Windows) не будет, а когда будет — то он знает, что он делает и какие файлы запускает. Вирусы под Linux-системы есть, но их сравнительно малое количество, что напрямую связано с маленькой мировой долей рынка. | Unix также считается очень безопасным по тем же причинам, что и Linux. |
Обнаружение ошибок | Поскольку исходные коды Linux являются открытыми, то всякий раз, когда пользователь публикует информацию о какой-либо ошибке/угрозе, разработчики со всего мира очень скоро начинают работать над ней. И, следовательно, обеспечивается более быстрое решение проблемы. | Из-за проприетарной природы Unix-пользователям приходится ждать исправляющие ошибки патчи. |
Поддержка | Бесплатная поддержка сообществом. Платная поддержка доступна от ряда поставщиков услуг. | Платная коммерческая поддержка. Часто это приводит к вендор локу (привязка к поставщику). |
Использование | Преимущественно используется для облачного развертывания и центров обработки данных (в первую очередь по экономическим причинам). | Преимущественно используется для серверов с особыми требованиями к приложениям из-за необходимости в поддержки устаревшего оборудования/ПО. |
Стоимость использования | Может быть получен и использован свободно. Также существуют платные дистрибутивы Linux, которые, как правило, дешевле Windows. | Проприетарные операционные системы имеют различные структуры затрат, установленные соответственно вендорами (поставщиками), продающими их. |
*Примечание: Кластер — это совокупность однородных компьютеров, сетка — совокупность распределенных компьютеров, а облачная служба — совокупность виртуализированных кластеров.
Ядро Linux vs. Ядро Unix
Поскольку Linux сам по себе является просто ядром, то стоит обсудить основные различия между ядром Linux и ядром Unix.
Существует три типа ядра: монолитное, микроядро и гибридное (комбинация монолитного и микроядра).
Хотя ядро Linux и наследует большую часть своих характеристик от Unix/Unix-подобных ядер, тем не менее, между ними есть некоторые существенные различия.
Давайте теперь рассмотрим некоторые наиболее важные различия между ядром Linux и ядром Unix в следующей таблице:
Ядро Linux
Что такое ядро операционной системы
Ядро является главной частью любой операционной системы. Существует точка зрения, которая понятие операционной системы приравнивает к ядру. Есть точка зрения, когда в понятие операционной системы включают как ее ядро, так и системные программы, позволяющие пользователю обращаться через ядро к аппаратным ресурсам.
Так что же такое ядро ОС и каковы его функции? Как известно, компьютер – не только система аппаратного обеспечения (железа), но и набор работающего на нем программного обеспечения. Чтобы второе могло эффективно работать на первом, нужна более низкоуровневая программа, скрывающая сложности работы с железом и предоставляющая обычным программам и пользователям удобный для них интерфейс.
Представим себе, что ядра нет, а каждая запущенная программа сама обращается к железу и обрабатывает сигналы от него. Вроде бы ничего страшного, кроме дублирования кода в каждой такой программе. Но на компьютере одновременно работает множество программ. Как они будут «договариваться» между собой о совместном использовании общего аппаратного обеспечения?
Конечно, они могут встать в очередь, и сначала одна программа выполнится полностью, затем другая. Однако одни программы должны работать постоянно в фоновом режиме, другие – могут долго ожидать ввода или вывода, третьи – должны получать данные из другой работающей программы. Поэтому функция оптимального распределения аппаратных ресурсов возлагается на ядро. Оно организует как бы параллельную работу множества программ, играет роль менеджера.
Ядро операционной системы – это тоже программа, написанная на том или ином языке программирования и скомпилированная в исполняемый файл. Однако, в отличии от других программ, ядро всегда загружается первым и потом постоянно «сидит» в определенной области оперативной памяти. То есть это программа, которая всегда находится в запущенном состоянии и взаимодействует, с одной стороны, с железом, а с другой – с системными и пользовательскими программами.
В коде ядра особо выделяют драйверы устройств. Драйвер – это программный код, функция которого заключается в предоставлении возможности использовать определенное железо (например, видеокарту). Причем конкретный драйвер не всегда загружается в память вместе с остальной частью ядра. Он туда грузится, лишь когда возникает потребность в ресурсах устройства. Так экономится память, но в ущерб скорости.
Выделяют операционные системы на монолитном ядре и микроядре, а также разные промежуточные варианты. Монолитное ядро проще и быстрее работает, так как в памяти всегда находится почти весь код. Микроядро меньше, сложнее, работает медленнее, однако нередко считается более передовым из-за легкости подключения новых частей кода. Микроядро, находясь в памяти, организует взаимодействие между другими частями кода операционной системы, которые являются самостоятельными программами (см. пример выше про загрузку драйверов).
Ядра Unix-подобных систем
Ядро Unix являлось первой практической реализацией новых идей и открытий 60-70-х годов XX века в области создания операционных систем.
Unix имеет простое монолитное ядро, в котором почти все представляется в виде файлов. Настройки хранятся в текстовых файлах, оборудование также имеет файловый интерфейс. Unix была написана на языке C, и это сделало ее переносимой с одной аппаратной платформы на другую. В Unix были впервые реализованы так называемые многозадачность и многопоточность, виртуальная память и многое другое.
В 80-х годах Unix-системы начали множится и видоизменяться. Некоторые умы вовремя спохватились и создали специальные стандарты, обеспечивающие совместимость систем. Это значит, что программа, написанная для одной Unix-подобной системы, должна работать в другой. Стандарты назвали POSIX.
Особенности ядра Linux
Обычно конечные пользователи имеют дело с дистрибутивами Linux, которые незначительно отличаются между собой, в том числе по компонентам ядра (например, наличию/отсутствию определенных драйверов). Однако ядро в своей основе все-равно остается ядром Linux, его исходники предоставляет проект https://www.kernel.org/. Это совместный проект, к нему может присоединится каждый программист. Основным руководителем остается Линус Торвальдс.
С технической точки зрения, Linux – это ядро, а не операционная система. Linux + программы из проекта GNU рождают операционную систему GNU/Linux. Однако ее тоже не существует в чистом виде. Разработчики дистрибутивов дорабатывают на свой лад GNU/Linux, после чего получаются различные операционные системы-дистрибутивы. У каждого дистрибутива есть собственное имя (Ubuntu, Fedora и т. п.). Однако в основе всех этих систем лежит ядро Linux, поэтому все они принадлежат одному семейству Linux-систем.
Ядро Linux начал разрабатывать в 1991 году Линус Торвальдс. В дальнейшем оно развивалось и совершенствовалось многими людьми. Ядро Linux выпускается под лицензией GNU GPL.
Ядро Linux Unix-подобно, так как заимствовало идеи, заложенные в Unix, соответствует стандартам POSIX, а также по большей части написано на языке С.
У Linux монолитное ядро. Однако некоторые идеи микроядерной архитектуры тут также используются. Так драйверы устройств могут быть представлены в виде модулей и загружаться по требованию, а не при загрузки всего ядра.
Ядро выпускается в виде стабильных и разрабатываемых версий. В стабильных обычно исправлены ошибки, добавлены новые драйверы устройств. До недавнего времени четное второе число в названии ядра, говорило, что оно стабильно. Нечетное число обозначало разрабатываемую нестабильную версию. В 2011 году от такого подхода к нумерации версий отказались.
Опытные пользователи дистрибутивов Linux нередко сами скачивают и устанавливают себе новое ядро. Для этого они сначала распаковывают исходные коды, затем выполняют конфигурацию, потом компилируют, размещают в загрузочном каталоге и изменяют настройки загрузчика.
Конфигурируют ядро с целью включения, отключения или компиляции в виде модуля какого-либо драйвера или функции. Другими словами, «ядро под себя» не будет содержать лишних драйверов для оборудования, которого нет.
Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.