Структура ОС Unix

 

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

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

Общая организация традиционного ядра ОС UNIX

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

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

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

Машинно-зависимая часть традиционного ядра ОС UNIX включает следующие компоненты:

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

Основные функции

К основным функциям ядра ОС UNIX принято относить следующие:

(a) Инициализация системы - функция запуска и раскрутки. Ядро системы обеспечивает средство раскрутки (bootstrap), которое обеспечивает загрузку полного ядра в память компьютера и запускает ядро.

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

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

(d) Управление файлами - функция, реализующая абстракцию файловой системы, - иерархии каталогов и файлов. Файловые системы ОС UNIX поддерживают несколько типов файлов. Некоторые файлы могут содержать данные в формате ASCII, другие будут соответствовать внешним устройствам. В файловой системе хранятся объектные файлы, выполняемые файлы и т.д. Файлы обычно хранятся на устройствах внешней памяти; доступ к ним обеспечивается средствами ядра. В мире UNIX существует несколько типов организации файловых систем. Современные варианты ОС UNIX одновременно поддерживают большинство типов файловых систем.

(e) Коммуникационные средства - функция, обеспечивающая возможности обмена данными между процессами, выполняющимися внутри одного компьютера (IPC - Inter-Process Communications), между процессами, выполняющимися в разных узлах локальной или глобальной сети передачи данных, а также между процессами и драйверами внешних устройств.

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

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

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

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

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

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

Наиболее важные системные вызовы ОС UNIX рассматриваются в оставшихся разделах этой части курса и в следующей части.

Принципы обработки прерываний

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

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

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

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

Архитектура ОС UNIX

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

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

 

                                            Рис. 1

 

На рисунке совокупность обращений к операционной системе разделена на те обращения, которые взаимодействуют с подсистемой управления файлами, и те, которые взаимодействуют с подсистемой управления процессами. Файловая подсистема управляет файлами, размещает записи файлов, управляет свободным пространством, доступом к файлам и поиском данных для пользователей. Процессы взаимодействуют с подсистемой управления файлами, используя при этом совокупность специальных обращений к операционной системе, таких как open (для того, чтобы открыть файл на чтение или запись),close, read, write, stat (запросить атрибуты файла), chown (изменить запись с информацией о владельце файла) и chmod (изменить права доступа к файлу).

Подсистема управления файлами обращается к данным, которые хранятся в файле, используя буферный механизм, управляющий потоком данных между ядром и устройствами внешней памяти. Буферный механизм, взаимодействуя с драйверами устройств ввода-вывода блоками, инициирует передачу данных к ядру и обратно. Драйверы устройств являются такими модулями в составе ядра, которые управляют работой периферийных устройств. Устройства ввода-вывода блоками относятся к типу запоминающих устройств с произвольной выборкой; их драйверы построены таким образом, что все остальные компоненты системы воспринимают эти устройства как запоминающие устройства с произвольной выборкой. Например, драйвер запоминающего устройства на магнитной ленте позволяет ядру системы воспринимать это устройство как запоминающее устройство с произвольной выборкой. Подсистема управления файлами также непосредственно взаимодействует с драйверами устройств "неструктурированного" ввода-вывода, без вмешательства буферного механизма. К устройствам неструктурированного ввода-вывода, иногда именуемым устройствами посимвольного ввода-вывода (текстовыми), относятся устройства, отличные от устройств ввода-вывода блоками.

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

Примерами обращений к операционной системе, используемых при управлении процессами, могут служить fork (создание нового процесса), exec (наложение образа программы на выполняемый процесс), exit (завершение выполнения процесса), wait (синхронизация продолжения выполнения основного процесса с моментом выхода из порожденного процесса), brk (управление размером памяти, выделенной процессу) и signal (управление реакцией процесса на возникновение экстраординарных событий).

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

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

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

Немного о Linux и модульности

Ядро - это часть кода системы Linux, считываемая в память машины при загрузке. Оно ответственно за запуск процессов, распределение памяти, работу с внешними устройствами и т.д. В отличие от многих других многозадачных операционных систем ядро в системе Linux пассивно, то есть ничего не делает, пока его об этом не "попросят". Программы используют ядро для удовлетворения своих потребностей и выполнения операций, связанных с обращением к ресурсам компьютера. С точки зрения процессов ядро можно рассматривать как набор резидентных в памяти программ и структур данных для выполнения действий, связанных с использованием ресурсов системы. Задача вызывает процедуры ядра. Такого рода вызовы в Linux называются системными. Процесс, осуществивший системный вызов, приостанавливается, пока последний не будет завершен. При этом говорят, что программа находится в режиме работы "система". Процесс, занятый обработкой своих локальных структур данных, работает в режиме "пользователь". Все процессы в системе работают параллельно, используя один центральный процессор по принципу разделения времени. Каждому из них присваивается определенный приоритет. Чем он выше, тем больше "внимания" уделяет ОС задаче (рис. 2).

 

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

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

Благодаря модульности ядра система предъявляет менее жесткие требования к аппаратным средствам и позволяет более эффективно их использовать. Linux может нормально работать на i386 с 8Mb. Это расширяет возможность применения в встроенных системах. В последнее время архитектура PC стала общепризнанной платформой, которая используется не только для настольного применения. Существует много разных типов встраиваемых компьютеров: PC/104, MicroPC (Octagon Systems).

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

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

Сравнение архитектур Linux и Windows

Очевидно, что прежде, чем принять решение пользоваться той или иной операционной системой, необходимо иметь хотя бы приблизительное представление об ее архитектуре и внутренней логике. Логическая структура Linux в значительной степени отличается от строения MS-DOS или Microsoft Windows, о нанаиболее близка к архитектуре другого класса операционных систем — UNIX. Безусловно, большинство российских пользователей, начинавших свой путь с DOS, установленной на примитивной двушке, и прошедших через эпоху Windows 95, привыкли к логике операционных систем в исполнении Microsoft настолько, что нечто новое, непривычное, выходящее из разряда условных рефлексов и утвердившихся в сознании постулатов о том, как работает машина, пугает их до дрожи в коленях. Однако Linux устроен ничуть не сложнее любой лакомой всем платформы. Просто он работает немного по-другому.

Если сравнить внутреннюю структуру Linux с анатомией MS Windows, различия становятся очевидны.

 

По умолчанию Windows устанавливается в один логический раздел диска с файловой таблицей FAT 16. Здесь хранится ядро системы, отвечающее за ввод/вывод данных, так называемая оболочка, или shell (файл explorer.exe),определяющая интерпретацию команд и действий пользователя, а также собственно файлы и библиотеки, формирующие оконный интерфейс Windows. Причем эти три составляющие системы настолько тесно интегрированы друг с другом, что при замене одной из них, скажем, на аналогичный файл из другой версии Windows, система работать не будет.

Функционально они также в значительной степени смешаны: например, некоторые процедуры по формированию интерфейса в Windows выполняет shell. В том же разделе хранятся дополнительные системные утилиты, такие как дефрагментатор диска, сервер удаленного доступа, драйверы, множество служебных библиотек, а также пользовательские файлы. В этой же области система осуществляет свопинг — кэширование не умещающихся в оперативной памяти данных на диск. Иными словами, все компоненты платформы хранятся в одном разделе, что, естественно, не прибавляет ей надежности: достаточно любого незначительного повреждения таблицы данных, чтобы привести Windows в неработоспособное состояние или испортить хранящуюся на диске полезную информацию. Изменить с помощью стандартных средств Windows внешний вид установленных по умолчанию окон также не представляется возможным. Это вполне осуществимо методом замены имеющейся shell на другую оболочку, например LiteStep, либо с помощью специальных утилит вроде Windows Blinds, которые, загружаясь в фоновом режиме, занимают оперативную память и замедляют работу компьютера. Архитектура Linux подразумевает создание на диске трех независимых разделов: системного, области данных и области свопинга.

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

В Windows 95 практически никак не были реализованы разделение доступа и защита данных: любой человек, решивший поработать с таким компьютером, получал практически полные права на изменение хранящейся на дисках информации и настроек системы, мог уничтожать и создавать данные, по собственному желанию инсталлировать и деинсталлировать программы. В Windows 98стало возможным определять права пользователей на доступ к тем или иным ресурсам, ограничивая их в основном элементами рабочего стола и пунктами меню Пуск. Однако при желании все запреты этой версии Windows можно без труда обойти. Из всего семейства операционных систем производства Microsoft наилучшим образом разделение доступа реализовано в Windows NT: имеется возможность запретить вход в систему незарегистрированному пользователю, причем сами пользователи имеют только те права, которые назначил им администратор. Они могут по крайней мере читать содержимое большинства директорий и открывать все имеющиеся в них файлы.

Иначе организовано разделение доступа в Linux. При входе в систему Linux требует идентификации пользователя с помощью логина и пароля. Системный администратор, то есть лицо, зарегистрированное как root, вправе менять настройки системы, устанавливать и удалять файлы и утилиты, назначать права других пользователей, работающих с Linux. Человек, не обладающий полномочиями администратора, доступа к системным установкам не получает. Более того, при соответствующей настройке Linux он вообще не увидит системного раздела. Возможности администратора Linux чрезвычайно широки: он вправе разрешить кому-либо работать только в одной директории или выделенном дереве каталогов, причем остальные области диска будут недоступны, а может настроить систему так, что она станет отображать другие разделы, но не разрешит изменять в них информацию. Настройки позволяют запретить загрузку каких-либо программ и наложить вето на использование Интернета или локальной сети. Иными словами, владелец компьютера имеет возможность сконфигурировать систему так, что больше у него не будет причин опасаться за хранящиеся на дисках данные. Согласитесь, это очень актуально для ситуаций, когда на машине работает более одного пользователя и для общедоступных web-серверов.

Как известно, в MS-DOS и Windows принято соглашение о том, что дисководам персонального компьютера присваиваются имена А: и В:, первый жесткий диск носит название С:, все остальные накопители имеют буквенное обозначение,

следующее по порядку за именем последнего жесткого диска. В Linux соглашение несколько иное: дисководы обозначаются как устройства fd0 и fd1, винчестеры соответственно hda, hdb и т. д. Причем если жесткий диск содержит несколько разделов, то им присваиваются имена hda1, hda2 и т. д. для первого накопителя и hdb1, hdb2 и т. д. — для второго. Порты компьютера также имеют собственные названия: СОМ1 —COM4 именуются в Linux, как ttys0 — ttys5, aLPT1 и LPT2 соответственно как lр0 и lр1. К таким обозначениям надо просто привыкнуть. Более того, в операционных системах от Microsoft любым папкам, кроме, пожалуй, C:\Windows, разрешено назначать произвольные имена, да и этой папке в процессе инсталляции системы можно дать другое название. Linux предусматривает стандартизацию структуры каталогов, содержащих компоненты системы. Директории пользователей хранятся в отдельной папке, называемой home. Им, как правило, назначаются имена учетных записей, зарегистрированных для входа в систему с самого компьютера либо по сети. Жесткий стандарт на названия директорий и их содержимое позволяет избежать множества ошибок и путаницы при сохранении или удалении данных, а также свалки из файлов и каталогов на диске, которая часто образуется в процессе эксплуатации MS Windows.

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

Из других характерных особенностей Linux необходимо, наверное, упомянуть поддержку национальных клавиатур, в том числе и русской, поддержку множества файловых систем, среди которых, помимо собственной (EXT2FS), имеются FAT16, MINIX-1 и XENIX. Программная поддержка FAT16 позволяет непосредственно обращаться к" гибким дискам MS-DOS, а также к файловым разделам DOS и Windows на винчестере. Имеется возможность работать с сетевыми протоколами TCP/IP, PLIP, РРР и многими другими, в рамках сетевых функций платформы реализован весь спектр клиентов и услуг Интернета: FTP, Telnet, NNTP, SMTP и POPS. Программы загружаются в память постранично, на диск кэшируются только те сегменты данных, которые не используются системой в данный момент, что значительно ускоряет работу приложений. Возможно совместное обращение к страницам памяти разными программами в один и тот же момент времени, это позволяет избежать. повторной загрузки идентичных фрагментов информации в RAM и заметно экономит ресурсы компьютера. Как и Microsoft Windows, в Linux применяется система динамических библиотек, иными словами, несколько приложений могут использовать в своей работе библиотеку, представленную на диске одним физическим файлом.

Из всего сказанного можно сделать вполне справедливый вывод о том, что Linux является более продуманной, систематизированной и качественно организованной операционной системой, нежели MS Windows. Linux создавался с учетом трех основных критериев: максимальных быстродействия, надежности и экономии ресурсов компьютера. Если Windows стремится занять все свободное место на диске, требует как можно больше оперативной памяти и заставляет пользователя ежемесячно переустанавливать систему из-за бесконечных сбоев, Linux позволяет работать с вдвое большей скоростью и схожим графическим интерфейсом на достаточно медленной машине с небольшим количеством RAM, устанавливается весьма компактно и при грамотном обращении может работать годами.

Литература

Морис Дж. Бах. Архитектура операционной системы UNIX.

http://www.linuxboss.narod.ru/linuxdoc/linux5_structure/kernel.htm

Категории: 

Метки: