Введение в администрирование UNIX/Введение в Юникс
Современные свободные операционные системы, такие как Линукс или OpenBSD, представляют собой наследие операционной системы UNIX, созданной в начале 1970-х годов и оказавшей огромное влияние на практические реализации операционных систем и развитие всей области информационных технологий. Поэтому изучение современных UNIX-подобных операционных систем следует предварить познанием замыслов, заложенных в оригинальный UNIX.
Из этой главы Вы сможете узнать основы теории операционных систем и то, как эти концепции реализованы в операционной системе UNIX. Также в ней рассматриваются основные этапы развития операционных систем с момента их возникновения до настоящего времени.
Основные концепции операционных систем
[править]Обзор компьютерных систем
[править]Все современные компьютерные системы построены по трём принципам Джона фон Неймана: программного управления, однородности памяти и адресности. Эти принципы можно раскрыть следующим образом: программа, состоящая из набора команд, и исходные данные хранятся в общей памяти, каждая ячейка которой имеет свой адрес; каждая команда вместе с данными выбирается из памяти и исполняется процессором, выбор команды осуществляется с помощью специального счётчика команд, который содержит в себе адрес исполняемой в данный момент команды; команды расположены в памяти друг за другом, за счёт чего организуется последовательная выборка из памяти цепочки команд.
На основании этого можно выделить три основных структурных элемента компьютера (см. Рисунок 1.1, «Компоненты компьютерных систем»):
- Процессор
- Осуществляет контроль за действиями компьютера, а также выполняет функцию обработки данных согласно программе. В современных системах может быть один и более центральных процессоров.
- Основная память
- В ней хранятся программы и данные. Как правило является временной (информация сохраняется, пока подаётся питание).
- Устройства ввода-вывода
- Служат для передачи данных между компьютером и внешним окружением, состоящим из переферийных устройств, в число которых входят внешняя память, коммуникационное оборудование, терминалы.
Перечисленные компоненты вычислительной системы объединяются с помощью системной шины. Это структуры и механизмы, обеспечивающие взаимодействие между процессором, основной памятью и устройствами ввода-вывода.
Центральный процессор извлекает программу из памяти, декодирует и исполняет команды, переходит к следующей команде согласно текущей команде.
В каждый момент времени процессор может исполнять только одну программу. Многие современные операционные системы относятся к многозадачным, т.е. одновременно может исполняться несколько задач, число которых заранее не известно. Так как число процессоров конечно, необходимы алгоритмы, позволяющие чередовать исполнения процессов так, чтобы каждый из них получал процессорное время. Этот подход называется псевдопараллелизмом (см. Рисунок 1.2, «Пример пcевдопараллелизма»): каждому процессу выделяется квант процессорного времени, по истечение которого управление передается другому процессу (это действие называют переключением контекста). Также управление может быть передано другому процессу, если исполняемый процесс ожидает системный ресурс. В случае многопроцессорных компьютеров принцип остаётся прежним – только лишь большее число процессов может одновременно исполняться на этих процессорах.
Конфигурация памяти компьютера определяется в основном тремя параметрами: объём, быстродействие, стоимость. Очевидно, между этими противоречивыми характеристиками существует компромисс, который представляет собой иерархию памяти (см. Рисунок 1.3, «Иерархия видов памяти»). Таким образом, к дорогим устройствам с высокой производительностью и малым объёмом добавляются дешёвые устройства с меньшей скоростью доступа и большим объёмом. При этом ярко выражена функция каждого из уровней: регистровая память хранит операнды команд, кэш используется для хранения самых используемых участков памяти, основная память хранит исполняющиеся программы, внешняя – сохраняет данные и программы между запусками.
Особое значение имеет основная память – в ней хранятся все исполняющиеся программы и данные к ним. Программа может обращаться к любой ячейке памяти в своём адресном пространстве. Существует несколько видов адресных пространств: реальное (соответствует ячейкам физической памяти) и виртуальное (каким-то образом проецируемое на реальное адресное пространство). В современных операционных системах каждый процесс обладает своим собственным адресным пространством, так что не может нанести вред памяти других процессов.
Взаимодействие с устройствами ввода-вывода может происходить тремя способами: программируемый ввод-вывод, ввод-вывод с помощью прерываний, прямой доступ к памяти (Direct Memory Access, DMA).
В первом случае процессор явно обращается к контроллеру внешнего устройства, вызывая управляющие команды и обмениваясь данными. Так как скорость работы процессора значительно превышает скорость работы внешних устройств, при таком способе обмена простои в работе процессора будут очень велики. Для избежания этой ситуации используется механизм прерываний: выполнение программы в процессоре может быть прервано, когда данные на внешнем устройстве готовы для чтения или записи – при этом запускается специальная функция-обработчик прерывания, затем выполнение исходной программы возобновляется. При использовании прямого доступа к памяти, процессор не участвует в процессе ввода-вывода – за копированием данных из устройства в основную память следит специальный контроллер прямого доступа к памяти.
Назначение операционной системы
[править]Операционная система – это комплекс взаимосвязанных программ, который действует как интерфейс между приложениями и пользователями с одной стороны, и аппаратурой компьютера с другой стороны. В соответствии с этим определением, операционная система выполняет две основные функции:
- предоставление пользователю или программисту вместо реальной аппаратуры расширенной виртуальной машины (которую иногда называют операционная среда), с которой удобно работать и которую легче программировать;
- повышение эффективности использования компьютера путём рационального управления его ресурсами в соответствии с некоторыми критериями.
Операционная система как виртуальная машина
[править]Чтобы успешно решать свои задачи, ныне пользователь или программист может обойтись без досконального знания аппаратного устройства компьютера и может даже не знать системы команд процессора (для программистов существует множество библиотек и высокоуровневых функций).
Программное и аппаратное обеспечение можно выстроить в виде иерархии, каждый уровень которой представляет собой виртуальную машину со своим интерфейсом (например, Рисунок 1.4, «Уровни вычислительной системы»), за которым скрываются детали нижележащего уровня.
Операционная система избавляет программистов от необходимости напрямую работать с аппаратурой, предоставляя им простой интерфейс (файловый, сетевой и т.п.), а также берет на себя все рутинные операции по управлению аппаратными устройствами компьютера: физической памятью, таймерами, устройствами ввода и т.п..
В результате реальная машина, способная выполнять элементарные действия, определенные её набором команд, превращается в виртуальную машину, выполняющую набор более мощных функций. Виртуальная машина также управляется командами, но более высокого уровня: создание и удаление файлов, установка сетевых соединений и т.п.. В свою очередь, эти команды также могут быть объединены в виртуальную машину с более высоким уровнем абстракции, например графический пользовательский интерфейс, который оперирует объектами.
Операционная система как менеджер ресурсов
[править]Операционная система не только предоставляет пользователям и программистам удобный интерфейс к аппаратным средствам компьютера, но и является механизмом, распределяющим ресурсы компьютера.
В разделе «Обзор компьютерных систем» уже рассматривались основные ресурсы компьютера: процессорное время, основная память, всевозможные внешние устройства; также к ресурсам можно отнести таймеры и некоторые процедуры операционной системы. Ресурсы эти распределяются между процессами. Процесс предсталяет собой базовое понятие большинства операционных систем, и чаще всего определяется как программа в стадии своего выполнения.
Управление ресурсами вычислительной системы с целью наиболее эффективного их использования – назначение операционной системы. Многозадачная операционная система занимается переключением процессора с одного процесса на другой, максимизируя его загрузку, а также отслеживает конфликты при обращении к общим ресурсам.
Критерий эффективности, в соответствии с которым операционная система организует управление ресурсами компьютера, может быть различным и зависит от назначения информационно-вычислительной системы, частью которой она является. Например, в одних системах важен такой критерий, как пропускная способность – число задач, выполненных за единицу времени, а в других – время реакции (время, прошедшее с момента ввода команды до получения отклика системы).
Архитектура операционной системы
[править]Операционная система выполняет множество функций, которые обычно группируются в соответствии с видом ресурса, которым управляет операционная система, либо со специфической задачей, применимой ко всем видам ресурсов. Можно выделить следующие функции современной многозадачной многопользовательской операционной системы: управление процессами, управление памятью, управление файлами и внешними устройствами, защита данных и администрирование, интерфейс прикладного программирования, пользовательский интерфейс.
Наиболее общим подходом к структуризации операционной системы является её разделение всех её модулей на две группы:
- ядро – модули, выполняющие основные функции операционной системы, решающие внутрисистемные задачи организации вычислительного процесса, такие как переключение контекста, управление памятью, обработка прерываний, работа с внешними устройствами и т.п..
- компоненты, реализующие дополнительные функции операционной системы – всевозможные служебные программы, или утилиты.
Для надежного управления ходом выполнения программ операционная система должна иметь по отношению к пользовательским процессам определённые привилегии – иначе некорректно работающее приложение сможет вмешаться в работу операционной системы. Например, взаимодействие с аппаратурой возможно только на самом высоком уровне привилегий, который не дается обычным программам. Чаще всего именно ядро является той частью операционной системы, которая работает в привилегированном режиме.
Большинство современных операционных систем представляет собой хорошо структурированные модульные системы, способные к развитию, расширению и переносу на новые платформы. Существует ряд универсальных подходов к структурированию операционных систем, среди которых можно выделить монолитную и микроядерную архитектуры.
Монолитная операционная система
[править]Большинство операционных систем использует монолитное ядро, которое компонуется как одна программа, работающая в привилегированном режиме и использующая быстрые переходы с одной процедуры на другую, не требующие переключения из привилегированного режима в пользовательский и наоборот (хоть этот процесс и происходит с аппаратной поддержкой, он занимает значительное время). Такое ядро делится на основные компоненты и модули, реализующие дополнительную функциональность – например, работу со специфическими внешними устройствами и файловыми системами (см. Рисунок 1.5, «Структура монолитного ядра операционной системы»). Переход из пользовательского режима в режим ядра осуществляется через системные вызовы – интерфейс ядра операционной системы.
Микроядерная операционная система
[править]Альтернативой является построение операционной системы на базе микроядра, работающего также в привилегированном режиме и выполняющего только минимум функций по управлению аппаратурой. Тогда как функции операционной системы более высокого уровня выполняют специализированные компоненты – серверы, работающие в пользовательском режиме. Управление и обмен данными при этом осуществляется через передачу сообщений, доставка которых является одной из основных функций микроядра (см. Рисунок 1.6, «Структура операционной системы с микроядром»).
При таком построении операционная система работает значительно более медленно, так как часто выполняются переходы между привилегированным и пользовательским режимом, зато система получается более гибкой – её функции можно наращивать или модифицировать, добавляя, изменяя или исключая серверы пользовательского режима. Кроме того, серверы хорошо защищены друг от друга, как и любые пользовательские процессы.
История развития операционных систем
[править]За половину века своего существования операционные системы прошли сложный путь, огромное влияние на который оказало развитие вычислительной аппаратуры. Хотя большинство алгоритмов и подходов в операционных системах было разработано в 1960–1970-х годах, в настоящее время операционные системы продолжают развиваться и видоизменяться согласно потребностям пользователей. Можно выделить три основные характеристики, ставшие уже обязательными для большинства операционных систем: переносимость между различными аппаратными архитектурами, многозадачность и многопользовательский режим работы.
Рассмотрим основные этапы развития операционных систем от момента их появления до текущего состояния.
Что было до операционных систем
[править]С середины 50-х годов началось бурное развитие вычислительной техники, связанное с появлением полупроводниковых элементов. Вместе с этим заметный прогресс наблюдался в автоматизации программирования и организации вычислений, в эти годы появились первые алгоритмические языки (Алгол, Фортран, Кобол). Для организации эффективного совместного использования трансляторов, библиотечных программ и загрузчиков в штат многих вычислительных комплексов были введены операторы – но как быстро они не работали, они не могли состязаться в производительности с работой компьютера. Для решения этой проблемы были разработаны системы пакетной обработки, которые автоматизировали последовательность действий оператора. Оператор составлял пакет заданий, которые в дальнейшем без его участия запускались на выполнение специальной программой – монитором.
Операционные системы для мэйнфреймов
[править]В 1965–1975 годах появилось следующее поколение компьютеров: стала возможна реализация сложных компьютерных архитектур (например, IBM/360) и практически всех основных механизмов, присущих современным операционным системам: многозадачность, поддержка многотерминального многопользовательского режима работы, виртуальная память, файловые системы, разганичение доступа и сетевая работа. Но такие системы всё ещё были очень редки и чрезвычайно дороги.
Одним из главных достижений стал переход к мультипрограммированию – способ организации вычислительного процесса, при котором в памяти компьютера одновременно находится несколько программ, попеременно выполняющихся на одном процессоре. Для того, чтобы у пользователя оставалось ощущение непосредственного взаимодействия с компьютером, был разработан такой вариант мультипрограммирования, как системы разделения времени. Каждый пользователь работает за своим терминалом (подробнее терминалы рассматриваются в разделе «Терминал»), тогда как все процессы работают псевдопараллельно (как было показано выше, в разделе «Обзор компьютерных систем»).
Появление операционной системы UNIX
[править]В середине 1970-х годов наряду с мэйнфреймами получили широкое распространение мини-компьютеры (слово «мини-» сейчас может показаться смешным, такие компьютеры занимали объём в несколько шкафов), такие как PDP-11. Архитектура таких компьютеров была заметно упрощена по сравнению с мэйнфреймами (что значительно снижало стоимость с миллионов до сотен тысяч долларов), что сказалось на операционных системах для этих компьютеров – они были лишены части функций, например многопользовательского режима работы.
Важным этапом в истории мини-компьютеров и операционных систем в целом явилось появление операционной системы UNIX в лаборатории Bell Labs компании AT&T. Изначально она была разработана для мини-компьютера PDP-7 и включала в себя множество архитектурных особенностей более сложных операционных систем, такие как разделение времени и многопользовательская работа. В 1970-х годах началось массовое использование операционной системы UNIX, к этому времени она была переписана на языке программирования высокого уровня С, что заметно облегчило её переносимость. Поскольку эта операционная система распространялась вместе с исходными текстами, она стала первой операционной системой, в которую могли вносить изменения энтузиасты. Удачные архитектурные решения UNIX, гибкость, элегантность, мощные функциональные возможности и открытость позволили этой операционной системе завоевать рынок не только мини-компьютеров, но и мэйнфреймов, серверов, рабочих станций на базе RISC-процессоров.
Многие появившиеся впоследствии операционные системы позаимствовали некоторые ключевые идеи UNIX: переносимость на основе языка C, иерархическую файловую систему, интерфейс командной строки.
Развитие операционных систем в глобальных сетях
[править]В начале 1980-х годов в рамках экспериментальной сети ARPANET впервые появился рабочий вариант стека протоколов TCP/IP. Переход на TCP/IP был ускорен ещё и тем, что его первая реализация была создана в рамках BSD UNIX (Berkley Software Distribution – академической версии UNIX, созданной в университете Беркли). Новая глобальная сеть, получившая название Интернет, стала средой для развития информационных технологий, создания всевозможных сообществ разработчиков и развития открытых систем.
В этот период появляется множество коммерческих версий операционной системы UNIX: SunOS (в дальнейшем, Solaris), HP-UX, Irix, AIX и многие другие. Разнообразие версий породило проблему их несовместимости, которую периодически пытались решать различные организации. В результате были приняты стандарты POSIX (Portable Operation System Interface based on uniX – интерфейс для переносимых операционных систем, основанных на UNIX), включающие формальное описание программного интерфейса операционной системы, описание командной оболочки, безопасности и т.п..
Операционные системы для персональных компьютеров
[править]Ещё одно знаменательное событие начала 1980-х годов – появление персональных компьютеров. С точки зрения архитектуры они мало отличались от мини-компьютеров и рабочих станций, но стоимость их была значительно ниже. Это позволило персональным компьютерам распространиться повсеместно, и это в значительной степени изменило современные информационные технологии.
Первые операционные системы для персональных компьютеров были очень просты (например, MS-DOS). Недостатки в функциональности компенсировались графическим интерфейсом пользователя. Со временем эти операционные системы (например, Microsoft Windows) получили сетевую подсистему и возможность работать с несколькими программами одновременно. Также для персональных компьютеров появились и более мощные операционные системы, как OS/2 (не получила широкого распространения) и Windows NT, которые также обладали многозадачностью и многопользовательским режимом работы.
В первую очередь благодаря низкой стоимости аппаратного и программного обеспечения, персональные компьютеры начали вытеснять прежде распространенные рабочие станции и мэйнфреймы. На домашних и офисных компьютерах повсеместно распространились операционные системы компании Microsoft, тогда как нишу серверов заняли наследники UNIX: коммерческие версии UNIX и открытые, свободно распространяемые Linux и операционные системы из семейства BSD, созданные и поддерживаемыми энтузиастами по всему миру.
Операционные системы для встраиваемых систем
[править]В начале 21-го века широкое распространение получили встраиваемые и мобильные устройства. Благодаря развитию вычислительных систем, такие устройства, как мобильные телефоны или домашние бытовые приборы, обрели возможности, сравнимые с персональными компьютерами. В настоящее время в этой области существует множество операционных систем, среди которых всё большую роль начинают играть открытые операционные системы, наследующие архитектуру и принципы работы UNIX.
Классификация операционных систем по назначению
[править]Операционные системы являются неотъемлемой частью информационно-вычислительных комплексов, которые выполняют определённые функции и могут быть по этому признаку разделены на некоторые классы.
Системы реального времени
[править]- Основной особенностью таких систем является сторого регламентированное время отклика на внешние события.
- Другим важным параметром является одновременная обработка – даже если одновременно происходит несколько событий, реакция системы на них не должна запаздывать. Компьютеры для управления самолетами, ядерными реакторами и подобными сложными системами работают под управлением часто специализированных операционных систем реального времени.
- Операционные системы реального времени принято делить на два класса: жесткого и мягкого реального времени. Можно выделить признаки систем жёсткого реального времени:
- недопустимость никаких задержек ни при каких условиях;
- бесполезность результатов при опоздании;
- катастрофа при задержке реакции;
- цена опоздания бесконечно велика.
- Хороший пример системы жесткого реального времени – бортовая система управления самолетом. Среди систем с жестким реальным временем можно выделить распространённую коммерческую операционную систему QNX, которая основывается на UNIX и имеет схожий интерфейс.
- Система мягкого реального времени характеризуется следующими признаками:
- за опоздание результатов приходится платить;
- снижение производительности системы, вызванное запаздыванием реакций, приемлемое.
- Операционные системы мягкого времени могут использоваться в мобильных и коммуникационных системах – там, где цена опоздания не так велика. В настоящее время многие многозадачные операционные системы разделения времени модифицируются для того, чтобы соответствовать требованием мягкого реального времени. Среди примеров можно выделить варианты Windows NT и специфические версии ядра Linux.
Встраиваемые системы
[править]- Такие системы работают на специфическом аппаратном обеспечении (автомобили, микроволновые печи, роботы) и также обладают некоторыми требованиями к времени отклика системы. Как правило, в таких операционных системах применяются специфичные алгоритмы, минимизирующие потребляемые ресурсы. В настоящее время широкое распространение имеют операционные системы Windows Embedded фирмы Microsoft и различные версии операционной системы Linux.
Операционные системы для супер-компьютеров
[править]- Для решения очень сложных и объёмных вычислительных задач создается специализированные компьютеры, содержащие сотни и тысячи процессоров. Для управления такими системами применяются специальные операционные системы, в которых особенно важны вопросы производительности и скорости обмена между элементами системы. В настоящее время самыми распространёнными среди сверх-производительных систем являются модификации операционной системы Linux.
Операционные системы для серверов
[править]- С момента расцвета сети Интернет нишу серверов (специализированных систем, предоставляющих по сети какой-то сервис клиентским системам) занимают универсальные многопользовательские многозадачные операционные системы. Для таких систем большое значение имеют стабильность работы, безопасность и производительность, меньшее – интерфейс пользователя.
- Примерами таких систем могут служить: банковские системы, веб-серверы и серверы баз данных, файловые серверы масштаба предприятия, многопользовательские терминальные серверы и т.п. Традиционно этот класс систем обслуживается коммерческими операционными системами – различными версиями UNIX, операционными системами от компаний IBM, Nowell, а затем и Microsoft. Сейчас все большую популярность в этом классе систем завоёвывают открытые и свободные операционные системы, базирующиеся на UNIX.
Операционные системы для домашних и офисных компьютеров
[править]- Современные персональные компьютеры обладают высокой производительностью и богатыми мультимедийными возможностями. Для операционных систем этого класса важны удобный пользовательский интерфейс и поддержка широкого набора устройств для персональных компьютеров. Самыми распространёнными операционными системами в этом классе являются продукты компании Micrososft, также на персональных компьютерах Apple используется операционная система MacOS (с версии 10 она также основывается на UNIX).
Исследовательские операционные системы
[править]- Многие алгоритмы и подходы в построении операционных систем не пошли дальше исследовательских лабораторий. Например, операционные системы, основанные на микроядре, в чистом виде не используются до сих пор из-за огромных затрат на пересылку сообщений. Одной из самых известных микроядерных операционных систем является Mach, на которой основывается целый ряд операционных систем, в том числе GNU Hurd, реализующая интерфейс UNIX.
Резюме
[править]В первой лекции было рассмотрено введение в операционные системы.
Операционные системы существуют в рамках информационно-вычислительных систем, которые сейчас, как и много лет назад, построены по принципам фон Неймана и содержат три основных компонента: центральный процессор, основную память и устройства ввода-вывода.
Операционная система является комплексом программ, объединяющих пользователей, программы и аппаратуру компьютера. Выделяют две основные функции операционной системы: предоставление виртуальной машины и управление ресурсами компьютера.
Операционная система состоит из модулей, среди которых выделяют ядро, как основу всей операционной системы. Существует два типа ядер: монолитные и микроядра.
За время существования операционные системы прошли длительную эволюцию, однако, большинство идей, алгоритмов и архитектурных решений было реализовано в 1960–70-е года: тогда появились многозадачность, многопользовательсякая работа, файловые системы и т.п..
Современные операционные системы можно классифицировать по их назназначению. При этом выделяют операционные системы: реального времени, для встраиваемых систем, для супер-компьютеров, для серверов, для домашних и офисных компьютеров и исследовательские.
Ключевые термины:три принципа фон Неймана, системная шина, центральный процессор, многозадачные ОС, псевдопараллелизм, квант процессорного времени, переключение контекста, иерархия памяти, адресное пространство, прерывание, прямой доступ к памяти, операционная система, виртуальная машина, ресурс, процесс, пропускная способность, время реакции, ядро, утилиты, привилегированый режим, монолитное ядро, системный вызов, микроядро, сообщение, системы пакетной обработки, мультипрограммирование, системы разделения времени, ОС реального времени, жёсткое реальное время, мягкое реальное время, сервер
Дополнительные материалы
[править]- Курячий Г.В. Операционная система UNIX. – М.:Интуит.Ру, 2004. – 292 с.: ил.
- Олифер В.Г., Олифер Н.А. Сетевые операционные системы. – СПб.: Питер, 2005. – 539 с.: ил.
- Эрик С. Рэймонд Искусство программирования для UNIX. – М.: Издательский дом «Вильямс», 2005. – 544 стр.: ил.
- Вильям Столлингс Операционные системы, 4-е издание. – М.:Издательский дом «Вильямс», 2002. – 848 с.: ил.
Вопросы
[править]- Каково назначение операционной системы? Почему говорят об операционной системе как виртуальной машине? Какими ресурсами и как управляет операционная система?
- Архитектура операционной системы: что такое ядро и прикладные программы? Чем отличаются монолитные и микроядерные системы?
- Какие можно выделить классы операционных систем? В чём заключаются их отличия?