Введение в администрирование UNIX

Материал из Викиучебника

Перейти к: навигация, поиск
Исходный текст написал Алексей Федосеев

Тема администрирования UNIX-подобных операционных систем очень обширна, объединить её одним курсом невозможно. Если же говорить о «введении в администрирование», то можно органичиться только начальными знаниями: теми, что пригодятся начинающему системному администратору.

UNIX-системы хорошо документированы, ибо пользователям и администраторам этих систем приходится рано или поздно заниматься самообучением. Здесь же мы будем направлять читателя на общедоступные полезные справочные сведения.

Этот учебник расчитан как курс лекций и практических лабораторных работ на один семестр. Курс был опробован на Факультете Военного Обучения МГТУ им. Н. Э. Баумана. Часть материалов не обязательна для изучения, но ознакомиться с ними всё же полезно. В конце приводится список вопросов и заданий для самопроверки, покрывающие материал всего курса.

Работа над лекциями продолжается, следите за обновлениями.

Содержание

[править] Введение в Юникс

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

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

[править] Основные концепции операционных систем

[править] Обзор компьютерных систем

Презентация 1-01: обзор компьютерных систем

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

На основании этого можно выделить три основных структурных элемента компьютера (см. Рисунок 1.1, «Компоненты компьютерных систем»):

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

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

Рисунок 1.1. Компоненты компьютерных систем Компоненты компьютерных систем

Презентация 1-02: центральный процессор

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

В каждый момент времени процессор может испонять только одну программу. Многие современные операционные системы относятся к многозадачным, т.е. одновременно может исполняться несколько задач, число которых заранее не известно. Так как число процессоров конечно, необходимы алгоритмы, позволяющие чередовать исполнения процессов так, чтобы каждый из них получал процессорное время. Этот подход называется псевдопараллелизмом (см. Рисунок 1.2, «Пример пcевдопараллелизма»): каждому процессу выделяется квант процессорного времени, по истечение которого управление передается другому процессу (это действие называют переключением контекста). Также управление может быть передано другому процессу, если исполняемый процесс ожидает системный ресурс. В случае многопроцессорных компьютеров принцип остаётся прежним – только лишь большее число процессов может одновременно исполняться на этих процессорах.

Рисунок 1.2. Пример пcевдопараллелизма Пример пcевдопараллелизма

Презентация 1-03: память

Конфигурация памяти компьютера определяется в основном тремя параметрами: объём, быстродействием, стоимость. Очевидно, между этими противоречивыми характеристиками существует компромисс, который представляет собой иерархию памяти (см. Рисунок 1.3, «Иерархия видов памяти»). Таким образом, к дорогим устройствам с высокой производительностью и малым объёмом добавляются дешёвые устройства с меньшей скоростью доступа и большим объёмом. При этом ярко выражена функция каждого из уровней: регистровая память хранит операнды команд, кэш используется для хранения самых используемых участков памяти, основная память хранит исполняющиеся программы, внешняя – сохраняет данные и программы между запусками.

Рисунок 1.3. Иерархия видов памяти Иерархия видов памяти

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

Презентация 1-04: управление вводом-выводом

Взаимодействие с устройствами ввода-вывода может происходить тремя способами: программируемый ввод-вывод, ввод-вывод с помощью прерываний, прямой доступ к памяти (Direct Memory Access, DMA).

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

[править] Назначение операционной системы

Презентация 1-05: Операционная система

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

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

Операционная система как виртуальная машина

Презентация 1-06: виртуальная машина

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

Программное и аппаратное обеспечение можно выстроить в виде иерархии, каждый уровень которой представляет собой виртуальную машину со своим интерфейсом (например, Рисунок 1.4, «Уровни вычислительной системы»), за которым скрываются детали нижележащего уровня.

Рисунок 1.4. Уровни вычислительной системы Уровни вычислительной системы

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

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

Операционная система как менеджер ресурсов

Презентация 1-07: управлнение ресурсами

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

В разделе «Обзор компьютерных систем» уже рассматривались основные ресурсы компьютера: процессорное время, основная память, всевозможные внешние устройства; также к ресурсам можно отнести таймеры и некоторые процедуры операционной системы. Ресурсы эти распределяются между процессами. Процесс предсталяет собой базовое понятие большинства операционных систем, и чаще всего определяется как программа в стадии своего выполнения.

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

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

[править] Архитектура операционной системы

Презентация 1-08: архитектура операционной системы

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

Наиболее общим подходом к структуризации операционной системы является её разделение всех её модулей на две группы:

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

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

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

Монолитная операционная система

Презентация 1-09: монолитное ядро

Большинство операционных систем использует монолитное ядро, которое компонуется как одна программа, работающая в привилегированном режиме и использующая быстрые переходы с одной процедуры на другую, не требующие переключения из привилегированного режима в пользовательский и наоборот (хоть этот процесс и происходит с аппаратной поддержкой, он занимает значительное время). Такое ядро делится на основные компоненты и модули, реализующие дополнительную функциональность – например, работу со специфическими внешними устройствами и файловыми системами (см. Рисунок 1.5, «Структура монолитного ядра операционной системы»). Переход из пользовательского режима в режим ядра осуществляется через системные вызовы – интерфейс ядра операционноый системы.

Рисунок 1.5. Структура монолитного ядра операционной системы Структура монолитного ядра операционной системы

Микроядерная операционная система

Презентация 1-10: микроядро

Альтернативой является построение операционной системы на базе микроядра, работающего также в привилегированном режиме и выполняющего только минимум функций по управлению аппаратурой. Тогда как функции операционной системы более высокого уровня выполняют специализированные компоненты – серверы, работающие в пользовательском режиме. Управление и обмен данными при этом осуществляется через передачу сообщений, доставка которых является одной из основных функций микроядра (см. Рисунок 1.6, «Структура операционной системы с микроядром»).

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

Рисунок 1.6. Структура операционной системы с микроядром Структура операционной системы с микроядром

[править] История развития операционных систем

Презентация 1-11: история операционных систем

За половину века своего существования операционные системы прошли сложный путь, огромное влияние на который оказало развитие вычислительной аппаратуры. Хотя большинство алгоритмов и подходов в операционных системах было разработано в 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.

[править] Классификация операционных систем по назначению

Презентация 1-12: классификация операционных систем

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

Системы реального времени

   Основной особенностью таких систем является сторого регламентированное время отклика на внешние события. Другим важным параметром является одновременная обработка – даже если одновременно происходит несколько событий, реакция системы на них не должна запаздывать. Компьютеры для управления самолетами, ядерными реакторами и подобными сложными системами работают под управлением часто специализированных операционных систем реального времени.
   Операционные системы реального времени принято делить на два класса: жесткого и мягкого реального времени. Можно выделить признаки систем жёсткого реального времени:
  • недопустимость никаких задержек ни при каких условиях;
  • бесполезность результатов при опоздании;
  • катастрофа при задержке реакции;
  • цена опоздания бесконечно велика.

Хороший пример системы жесткого реального времени – бортовая система управления самолетом. Среди систем с жеским реальным временем можно выделить распространённую коммерческую операционную систему QNX, которая основывается на UNIX и имеет схожий интерфейс.

Система мягкого реального времени характеризуется следующими признаками:

  • за опоздание результатов приходится платить;
  • снижение производительности системы, вызванное запаздыванием реакций, приемлемое.

Операционные системы мягкого времени могут использоваться в мобильных и коммуникационных системах – там, где цена опаздания не так велика. В настоящее время многие многозадачные операционные системы разделения времени модифицируются для того, чтобы соответствовать требованием мягкого реального времени. Среди примеров можно выделить варианты Windows NT и специфические версии ядра Linux.

Встраиваемые системы

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

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

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

Примерами таких систем могут служить: банковские системы, веб-серверы и серверы баз данных, файловые серверы масштаба предприятия, многопользовательские терминальные серверы и т.п. Традиционно этот класс систем обслуживается коммерческими операционными системами – различными версиями UNIX, операционными системами от компаний IBM, Nowell, а затем и Microsoft. Сейчас все большую популярность в этом классе систем завоёвывают открытые и свободные операционные системы, базирующиеся на UNIX. Операционные системы для домашних и офисных компьютеров

Современные персональные компьютеры обладают высокой производительностью и богатыми мультимедийными возможностями. Для операционных систем этого класса важны удобный пользовательский интерфейс и поддержка широкого набора устройств для персональных компьютеров. Самыми распространёнными операционными системами в этом классе являются продукты компании Micrososft, также на персональных компьютерах Apple используется операционная система MacOS (с версии 10 она также основывается на UNIX). Исследовательские операционные системы

Многие алгоритмы и подходы в построении операционных систем не пошли дальше исследовательских лабораторий. Например, операционные системы, основанные на микроядре, в чистом виде не используются до сих пор из-за огромных затрат на пересылку сообщений. Одной из самых известных микроядерных операционных систем является Mach, на которой основывается целый ряд операционных систем, в том числе GNU Hurd, реализующая интерфейс UNIX.

[править] Резюме

Презентация 1-13: резюме

В первой лекции было рассмотрено введение в операционные системы.

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

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

Операционная система состоит из модулей, среди которых выделяют ядро, как основу всей операционной системы. Существует два типа ядер: монолитные и микроядра.

За время существования операционные системы прошли длительную эволюцию, однако, большинство идей, алгоритмов и архитектурных решений было реализовано в 1960–70-е года: тогда появились многозадачность, многопользовательсякая работа, файловые системы и т.п..

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

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

[править] Дополнительные материалы

  1. Курячий Г.В. Операционная система UNIX. – М.:Интуит.Ру, 2004. – 292 с.: ил.
  2. Олифер В.Г., Олифер Н.А. Сетевые операционные системы. – СПб.: Питер, 2005. – 539 с.: ил.
  3. Эрик С. Рэймонд Искусство программирования для UNIX. – М.: Издательский дом «Вильямс», 2005. – 544 стр.: ил.
  4. Вильям Столлингс Операционные системы, 4-е издание. – М.:Издательский дом «Вильямс», 2002. – 848 с.: ил.

[править] Вопросы

  1. Каково назначение операционной системы? Почему говорят об операционной системе как виртуальной машине? Какими ресурсами и как управляет операционная система?
  2. Архитектура операционной системы: что такое ядро и прикладные программы? Чем отличаются монолитные и микроядерные системы?
  3. Какие можно выделить классы операционных систем? В чём заключаются их отличия?

[править] Презентация

Рисунок 1.7. Презентация 1-01: обзор компьютерных систем Презентация 1-01: обзор компьютерных систем

Рисунок 1.8. Презентация 1-02: центральный процессор Презентация 1-02: центральный процессор

Рисунок 1.9. Презентация 1-03: память Презентация 1-03: память

Рисунок 1.10. Презентация 1-04: управление вводом-выводом Презентация 1-04: управление вводом-выводом

Рисунок 1.11. Презентация 1-05: Операционная система Презентация 1-05: Операционная система

Рисунок 1.12. Презентация 1-06: виртуальная машина Презентация 1-06: виртуальная машина

Рисунок 1.13. Презентация 1-07: управлнение ресурсами Презентация 1-07: управлнение ресурсами

Рисунок 1.14. Презентация 1-08: архитектура операционной системы Презентация 1-08: архитектура операционной системы

Рисунок 1.15. Презентация 1-09: монолитное ядро Презентация 1-09: монолитное ядро

Рисунок 1.16. Презентация 1-10: микроядро Презентация 1-10: микроядро

Рисунок 1.17. Презентация 1-11: история операционных систем Презентация 1-11: история операционных систем

Рисунок 1.18. Презентация 1-12: классификация операционных систем Презентация 1-12: классификация операционных систем

Рисунок 1.19. Презентация 1-13: резюме Презентация 1-13: резюме

[править] Архитектура UNIX

[править] Особенности архитектуры UNIX

Презентация 2-01: основные концепции UNIX

Знакомство с архитектурой UNIX начнем с рассмотрения таких неотъемлимых для неё характеристических понятий, как стандартизация и многозадачность:

Стандартизация

Несмотря на многообразие версий UNIX, основой всего семейства являются принципиально одинаковая архитектура и ряд стандартных интерфейсов (в UNIX стандартизовано почти всё – от расположения системных папок и файлов, до интерфейса системных вызовов и списка драйверов базовых устройств). Опытный администратор без особого труда сможет обслуживать другую версию, тогда как для пользователей переход на другую систему и вовсе может оказаться незаметным. Для системных же программистов такого рода стандарты позволяют полностью сосредоточиться на программировании, не тратя время на изучение архитектуры и особенностей конкретной реализации системы. Многозадачность

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

Два кита UNIX: файлы и процессы

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

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

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

Презентация 2-02: беглый взгляд на архитектуру UNIX

Самый общий взляд на архитектуру UNIX позволяет увидеть двухуровневую модель системы, состоящую из пользовательской и системной части (ядра) (см. Рисунок 1.20, «Архитектура операционной системы UNIX»). Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы (процессы в пользовательской части операционной системы) от особенностей ее архитектуры. Ядро имеет набор услуг, предоставляемых прикладным программам посредством системных вызовов. Таким образом, в системе можно выделить два уровня привилегий: уровень системы (привиегии специального пользователя root) и уровень пользователя (привилегии всех остальных пользователей). Подробнее об управлении доступом рассказывается в следующих главах (Глава 3, Безопасность операционной системы UNIX).

Рисунок 1.20. Архитектура операционной системы UNIX Архитектура операционной системы UNIX

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

Презентация 2-03: ядро UNIX

Операционная система UNIX обладает классическим монолитным ядром (см. «Архитектура операционной системы»), в котором можно выделить следующие основные части:

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

   Доступ к структурам ядра осуществляется через файловый интерфейс.

Управление процессами

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

Драйверы устройств

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

Изображение:Yadro.jpg


Рисунок 1.21. Ядро операционной системы UNIX ( Блок-схема ядра операционной системы UNIX)


Благодаря тому, что в UNIX аппаратно-независимая часть явно отделена, это семейство операционных систем может быть с минимальными затратами перенесено на новые аппаратные платформы.

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

[править] Файловая система UNIX

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

Презентация 2-04: файловая система UNIX

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

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

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

     Презентация 2-05: индексный узел
     Файлы и каталоги идентифицируются не по именам, а по индексным узлам (i-node) – индексам в общем массиве файлов для данной файловой системе. В этом массиве хранится информация об используемых блоках данных на носителе, а также – длина файла, владелец файла, права доступа и другая служебная информация под общим названием «метаданные о файле». Логические же связки типа «имя–i-node» – есть ни что иное как содержимое каталогов.
     Таким образом, каждый файл характеризуется одним i-node, но может быть связан с несколькими именами – в UNIX это называют жёсткими ссылками (см. Рисунок 1.22, «Пример жесткой ссылки»). При этом, удаление файла происходит тогда, когда удаляется последняя жёсткая ссылка на этот файл.
     Рисунок 1.22. Пример жесткой ссылки
     Пример жесткой ссылки
     Важной особенностью таких файловых систем является то, что имена файлов зависят от регистра, другими словами файлы test.txt и TEST.txt отличаются (т.е. являются разными строками в файле директории).
     В определенных (фиксированных для данной файловой системы) блоках физического носителя данных находится т.н. суперблок. Суперблок – это наиболее ответственная область файловой системы, содержащая информацию для работы файловой системы в целом, а также – для ёе идентификации. В суперблоке находится «магическое число» – идентификатор файловой системы, отличающий её от других файловых систем, список свободных блоков, список свободных i-node'ов и некоторая другая служебная информация.
     Помимо каталогов и обычных файлов для хранения информации, ФС может содержать следующие виды файлов:
     Специальный файл устройства
         Обеспечивает доступ к физическому устройству. При создании такого устройства указывается тип устройства (блочное или символьное), старший номер – индекс драйвера в таблице драйверов операционной системы и младший номер – параметр, передаваемый драйверу, поддерживающему несколько устройств, для уточнения о каком «подустройстве» идет речь (например, о каком из нескольких IDE-устройств или COM-портов). 
     Именованный канал
         Используется для передачи данных между процессами, работает по принципу двунаправленной очереди (FIFO). Является одним из способов обмена между изолированными процессами (подробнее см. «Межпроцессное взаимодействие»). 
     Символическая ссылка
         Особый тип файла, содержимое которого – не данные, а имя какого-либо другого файла (см. Рисунок 1.23, «Пример символической ссылки». Для пользователя такой файл неотличим от того, на который он ссылается.
         Символическая ссылка имеет ряд преимуществ по сравнению с жёсткой ссылкой: она может использоваться для связи файлов в разных файловых системах (ведь номера индексных узлов уникальны только в рамках одной файловой системы), а также более прозрачно удаление файлов – ссылка может удаляться совершенно независимо от отсновного файла.
         Рисунок 1.23. Пример символической ссылки
         Пример символической ссылки
     Сокет
         Предназначен для взаимодействия между процессами через специальное API, схожее с TCP/IP-сокетеми (подробнее см. «Межпроцессное взаимодействие»). 

Такие файловые системы наследуют особенности оригинального UNIX. К ним можно отнести, например: s5 (используемая в версиях UNIX System V), ufs (BSD UNIX), ext2, ext3, reiserfs (Linux), qnxfs (QNX). Все эти файловые системы различаются форматами внутренних структур, но совместимы с точки зрения основных концепций. Дерево каталогов

Презентация 2-06: монтирование файловых систем

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

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

В мире стандартов UNIX определено, что корневой каталог единого дерева файловой системы должен иметь имя /, как и символ-разделитель при формировании полного имени файла. Тогда полное имя файла может быть, например, /usr/share/doc/bzip2/README. Задача VFS – по полному имени файла найти его местоположение в дереве файловой системы, определить её тип в этом месте дерева и «переключить», т.е. передать файл на дальнейшую обработку драйверу конктретной файловой системы. Такой подход позволяет использовать практически неограниченое количество различных файловых систем на одном компьютере под управлением одной операционной системы, а пользователь даже не будет знать, что файлы физически находятся на разных носителях информации.

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

Рисунок 1.24. Стандартные каталоги в файловой системе UNIX Стандартные каталоги в файловой системе UNIX

Презентация 2-07: стандарт на файловую систему

Приведем краткое описание основных каталогов системы, формально описываемых специальным стандартом на иерархию файловой системы (Filesystem Hierarchy Standart). Все каталоги можно разделить на две группы: для статической (редко меняющейся) информации – /bin, /usr и динамической (часто меняющейся) информации – /var, /tmp. Исходя из этого администраторы могут разместить каждый из этих каталогов на собственном носителе, обладающем соответствующими характеристиками.

Корневой каталог

   Корневой каталог / является основой любой ФС UNIX. Все остальные каталоги и файлы располагаются в рамках 

струтуры (дерева), порождённой корневым каталогом, независимо от их физического местонахождения.

/bin

   В этом каталоге находятся часто употребляемые команды и утилиты системы общего пользования. Сюда входят все 

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

/boot

   Директория содержит всё необходимое для процесса загрузки операционной системы: программу-загрузчик, 

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

/dev

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

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

/etc

   В этом каталоге находятся системные конфигурационные файлы. В качестве примеров можно привести файлы /etc/fstab, содержащий список монтируемых файловых систем, и /etc/resolv.conf, который задаёт правила составления локальных DNS-запросов. Среди наиболее важных файлов – скрипты инифиализации и деинициализации системы. В системах, наследующих особенности UNIX System V, для них отведены каталоги с /etc/rc0.d по /etc/rc6.d и общий для всех файл описания – /etc/inittab. 

/home (необязательно)

   Директория содержит домашние директории пользователей. Её существование в корневом каталоге не обязательно и её содержимое зависит от особенностей конкретной UNIX-подобной операционной системы.

/lib

   Каталог для статических и динамических библиотек, необходимых для запуска программ, находящихся в директориях /bin и /sbin. 

/mnt

   Стандартный каталог для временного монтирования файловых с