Операционные системы, их назначение и разновидности. Операционная система Windows 2 основные понятия операционных систем

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

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

Операционная система обычно хранится во внешней памяти компьютера — на диске. При включении компьютера она считывается с дисковой памяти и размещается в ОЗУ . Этот процесс называется загрузкой операционной системы.

В функции операционной системы входит:

основные функции (простейшие ОС) :

  • Загрузка приложений в оперативную память и их выполнение;
  • Стандартизованный доступ к периферийным устройствам (устройства ввода-вывода);
  • Управление оперативной памятью (распределение между процессами, виртуальная память);
  • Управление энергонезависимой памятью (Жёсткий диск, Компакт-диск и т.д.), как правило с помощью файловой системы;
  • Пользовательский интерфейс;

дополнительные функции (развитые современные ОС) :

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

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

К современным операционным системам предъявляются следующие требования:

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

По числу одновременно выполняемых задач выделяют ОС однозадачные (MS DOS, ранние версии PC DOS) и многозадачные (OS/2, UNIX, Windows).

В настоящий момент около 90% компьютеров используют КС Windows. Более широкий класс ОС ориентирован для использования на серверах. К этому классу ОС относятся семейство UNIX, разработки фирмы Microsoft (MS DOS и Windows), сетевые продукты Novell и корпорации IBM.


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

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

DOS (ДОС) — семейство операционных систем для компьютеров, расшифровывается как «дисковая операционная система», что означает её ориентированность на использование дисковых накопителей, таких как жёсткий диск и дискета.

Существовали операционные системы с таким названием для больших ЭВМ производства IBM и их клонов в 60-80-х гг. XX века.

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

В настоящее время MS DOS для управления персональными компьютерами практически не применяется. Однако ее не следует считать полностью исчерпавшей свои возможности и потерявшей актуальность. Низкие требования к аппаратным ресурсам оставляют DOS перспективной для практического использования. Так, в 1997 г. компания СаШега начала работы по адаптации DR DOS (аналог MS DOS) к рынку встроенных ОС мелких высокоточных устройств, присоединяемых к Интернету и интрннет-сетям. К этим устройствам относятся кассовые аппараты, факсы, персональные цифровые ассистенты, электронные записные книжки и др.

Операционные системы Windows — это семейство операционных систем, включающих: Windows 3.1, Windows for Workgroups 3.11, Windows 9X, Windows NT, Windows 2000, Windows ME, WindowsXP (первые две обычно называют операционными оболочками, поскольку ОС DOS для них устанавливалась отдельно).

Основные понятия операционных систем (ОС)

Понятие ОС, операционной среды и операционной оболочки.

Любая Вычислительная система включает в себя:

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

Программа - это записанный в определённом порядке набор команд, выполнение которых обеспечивает решение конкретной задачи.

Определение 1.1. Операционная система (ОС) - комплекс системных управляющих и обрабатывающих программ, которые:

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

Интерфейс (от англ. interface - согласование) в широком смысле - определённая стандартами граница между взаимодействующими независимыми объектами.

Мы под термином Интерфейс будем понимать конкретный способ взаимодействия пользователя с компьютером.

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

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

Определение 1.2. Операционная среда - программная среда, в которой выполняются прикладные программы пользователей.

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

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

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

Процесс - абстракция, представляющая программу во время её выполнения.

Файл - именованная часть пространства на носителе информации.

Назначение ОС:

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

Управление ресурсами включает решение ряда общих задач:

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

Кроме того, современные ОС имеют достаточно большой набор средств и способов диагностики и восстановления работоспособности системы. Сюда относятся:

    диагностические программы для выявления ошибок в конфигурации ОС; средства восстановления последней работоспособной конфигурации; средства восстановления поврежденных и пропавших системных файлов и др.

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

Классификация ОС.

Рассмотрим основные классификационные признаки ОС.

По назначению ОС делятся на: Специализированные - работающие с фиксированным набором программ (функциональных задач); Универсальные - рассчитанные на решение любых задач пользователей. По способу загрузки можно выделить Загружаемые ОС (большинство); Системы, постоянно находящиеся в памяти вычислительной системы . Последние, как правило, специализированные и используются для управления работой специализированных устройств (например, в БЦВМ баллистической ракеты или спутника, научных приборах, автоматических устройствах различного назначения и др.). По особенностям алгоритмов управления ресурсами . Главным ресурсом системы является процессор, поэтому дадим классификацию по алгоритмам управления процессором: Поддержка многозадачности (многопрограммности) . По числу одновременно выполняемых задач ОС делятся на 2 класса:

    однопрограммные (однозадачные) - MS-DOS; многопрограммные (многозадачные) - Windows.

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

    однопользовательские (MS-DOS, Windows 3х); многопользовательские (Windows NT/2000/2003/XP/Vista).

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

    не вытесняющая многопрограммность (Windows 3.x) - активный процесс выполняется до тех пор, пока он сам не отдаст управление ОС; вытесняющая многопрограммность (Windows 2000/2003/ XP) - решение о переключении процессов принимает ОС.

Многопроцессорная обработка.

    ОС без поддержки многопроцессорной обработки (Windows 3.x, Windows 95); ОС с поддержкой многопроцессорной обработки (Windows NT/ 2000/2003/XP).

По области использования и форме эксплуатации: Системы пакетной обработки (OS/360, OC EC) предназначены для решения задач в основном вычислительного характера, не требующих быстрого получения результатов. Главной целью и критерием эффективности таких систем является максимальная пропускная способность, т. е. решение максимального числа задач в единицу времени. В Системах разделения времени (UNIX, VMS) каждому пользователю предоставляется терминал, с которого он может вести диалог со своей программой. Т. к. каждой задаче выделяется только квант процессорного времени, ни одна задача не занимает процессор надолго, и время ответа оказывается приемлемым. Если квант выбран достаточно небольшим, то у всех пользователей, одновременно работающих на одной и той же машине, складывается впечатление, что каждый из них единолично использует машину. Системы реального времени (QNX, RT/11) предназначены для управления техническими объектами (станок, спутник и т. п.), где существует предельное время на выполнение программ, управляющих объектом. По аппаратной платформе (типу вычислительной техники) , для которой они предназначаются, ОС делят на следующие группы: ОС для смарт-карт. Некоторые из них могут управлять только одной операцией, например, электронным платежом. Встроенные ОС . Управляют карманными компьютерами (lialm OS, Windows CE - Consumer Electronics - бытовая техника), мобильными телефонами, телевизорами, микроволновыми печами и т. п. ОС для персональных компьютеров , например, Windows 9.x, Windows ХР, Linux, Mac OSX и др. ОС мини-ЭВМ , например, RT-11 для PDP-11 - OC реального времени, RSX-11 M для PDP-11 - ОС разделения времени, UNIX для PDP-7. ОС мэйнфреймов (больших машин) , например, OS/390, происходящая от OS/360 (IBM). Обычно ОС мэйнфреймов предполагает одновременно три вида обслуживания: пакетную обработку, обработку транзакций (например, работа с БД, бронирование авиабилетов, процесс работы в банках) и разделение времени. Серверные ОС , например, UNIX, Windows 2000, Linux. Область применения - ЛВС, региональные сети, Intranet, Internet. Кластерные ОС . Кластер - слабо связанная совокупность нескольких вычислительных систем, работающих совместно для выполнения общих приложений и представляющихся пользователю единой системной, например, Windows 2000 Cluster Server, Windows 2008 Server, Sun Cluster (базовая ОС - Solaris).

ОССО Н.Н.Люблинская

Лекция 1-2. Основные понятия ОС 2009

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

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

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

Этот принцип иллюстрируется рис.1.

Рис. 1. Операционная система, процессы, оборудование

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

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

Отделение процессов пользователя от оборудования преследует две цели.

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

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

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

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

- планирование ресурса - то есть определение, кому, когда, а для делимых ресурсов и в каком количестве, необходимо выделить данный ресурс;

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

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

1. Эволюция ОС

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

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

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

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

Для этого периода характерно также создание семейств программно-совместимых машин. Первым семейством программно-совместимых машин, построенных на интегральных микросхемах, явилась серия машин IBM/360. Построенное в начале 60-х годов это семейство значительно превосходило машины второго поколения по критерию «цена-производительность». Вскоре идея программно-совместимых машин стала общепризнанной.

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

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

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

Четвертый период (1980 - настоящее время). Следующий период в эволюции операционных систем связан с появлением больших интегральных схем (БИС). В эти годы произошло резкое возрастание степени интеграции и удешевление микросхем. Компьютер стал доступен отдельному человеку. С точки зрения архитектуры персональные компьютеры ничем не отличались от класса миникомпьютеров типа PDP-11.

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

На рынке операционных систем доминировали две системы: MS-DOS и UNIX. Однопрограммная однопользовательская ОС MS-DOS широко использовалась для компьютеров, построенных на базе микропроцессоров Intel 8088, а затем 80286, 80386 и 80486. Мультипрограммная многопользовательская ОС UNIX доминировала в среде «неинтеловских» компьютеров, особенно построенных на базе высокопроизводительных RISC-процессоров.

В середине 80-х стали бурно развиваться сети персональных компьютеров, работающие под управлением сетевых или распределенных ОС.

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

2. Классификация ОС

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

Ниже приведена классификация ОС по нескольким наиболее основным признакам.

2.1. Особенности алгоритмов управления ресурсами

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

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

- однозадачные (например, MS-DOS, MSX)

Многозадачные (OC EC, OS/2, UNIX, Windows 95, Windows NT).

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

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

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

- однопользовательские (MS-DOS, ранние версии OS/2);

- многопользовательские (UNIX, Windows NT).

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

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

- невытесняющая многозадачность (NetWare, Windows 3.x);

- вытесняющая многозадачность (Windows NT, OS/2, UNIX).

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

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

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

В наши дни становится общепринятым введение в ОС функций поддержки многопроцессорной обработки данных. Такие функции имеются в операционных системах Solaris 2.x фирмы Sun, Open Server 3.x компании Santa Crus Operations, OS/2 фирмы IBM, Windows NT фирмы Microsoft и NetWare 4.1 фирмы Novell.

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

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

2.2. Особенности методов построения

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

К таким базовым концепциям относятся:

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

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

3) Наличие нескольких прикладных сред дает возможность в рамках одной ОС одновременно выполнять приложения, разработанные для нескольких ОС. Многие современные операционные системы поддерживают одновременно прикладные среды MS-DOS, Windows, UNIX (POSIX), OS/2 или хотя бы некоторого подмножества из этого популярного набора. Концепция множественных прикладных сред наиболее просто реализуется в ОС на базе микроядра, над которым работают различные серверы, часть которых реализуют прикладную среду той или иной операционной системы.

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

2.3.Особенности аппаратных платформ

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

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

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

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

Другие требования предъявляются к операционным системам кластеров. Кластер - слабо связанная совокупность нескольких вычислительных систем, работающих совместно для выполнения общих приложений, и представляющихся пользователю единой системой. Наряду со специальной аппаратурой для функционирования кластерных систем необходима и программная поддержка со стороны операционной системы, которая сводится в основном к синхронизации доступа к разделяемым ресурсам, обнаружению отказов и динамической реконфигурации системы. Одной из первых разработок в области кластерных технологий были решения компании Digital Equipment на базе компьютеров VAX.

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

2.4. Особенности областей использования

Многозадачные ОС подразделяются на три типа в соответствии с использованными при их разработке критериями эффективности:

- системы пакетной обработки (например, OC EC),

- системы разделения времени (UNIX, VMS),

- системы реального времени (QNX, RT/11).

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

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

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

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

Задачи и упражнения

1. Какие события в развитии технической базы вычислительных машин стали вехами в истории операционных систем?

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

3. Может ли компьютер работать без операционной системы?

4. Как эволюционировало отношение к концепции мультипрограммирования на протяжении всей истории ОС?

5. Какое влияние на развитие ОС оказал Интернет?

6. Чем объясняется особое место ОС UNIX в истории операционных систем?

7. В чем состоят современные тенденции развития ОС?

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

      1. Процессы и потоки

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

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

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

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

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

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

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

Пример 3.2. Юлий Цезарь

Пусть Цезарь выполняет одновременно два процесса. Чтобы процессы выполнялись параллельно, Цезарь делает по небольшой части каждого из них, попеременно переключаясь. Т.е. сделав небольшую часть первого, переходит ко второму, сделав небольшую часть второго - вновь к первому и т.д. Процесс A- игра в шахматы. ПроцессB- чтение трактата Платона.

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

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

В данном примере контекст процесса A- позиции фигур на шахматной доске и очерёдность хода, контекст процессаB- пометка места на котором остановлено чтение (абзац, строка, предложение). Аккуратно сохраняя контекст каждого из процессов, Цезарь сможет выполнять оба процесса параллельно

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

Таким образом, архитектурно, приостановленный процесс состоит из собственного адресного пространства, обычно называемого образом памяти (coreimage– «сердечник»), и компонентов таблицы процессов, содержащей, помимо других величин, его регистры.

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

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

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

С момента запуска процесс последовательно переживает определённый набор состояний (в той или иной очередности):

      Выполнение - состояние когда процесс непосредственно исполняется на процессоре

      Готовность - процесс временно приостановлен, чтобы позволить выполняться другим процессам (при это других объективных причин для невыполнения данного процесса может не существовать).

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

Потоки

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

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

    Потоком (или управляющим потоком) будем называть последовательность команд, со связанным с нею указателем команд.

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

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

При запуске многопоточного процесса в системе с одним процессором потоки работают поочередно. Пример работы процессов в многозадачном режиме был показана на рис. Рисунок 2Error: Reference source not found. Иллюзия параллельной работы нескольких различных последовательных процессов создается путем постоянного переключения системы между процессами. Многопоточность реализуется примерно так же. Процессор переключается между потоками, создавая впечатление параллельной работы потоков.

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

Пример 3.3. Длительная обработка события

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

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

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

Межпроцессное взаимодествие

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

Пример 3.4. Спулер (spooler)

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

Тем самым снимается конкуренция за использование принтера различными процессами. Кроме того, процесс печати может решать по каким-либо определённым правилам в какой очерёдности следует пускать задания на печать.

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

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

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

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

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

Теоретическая концепция критических областей имеет несколько стандартных реализаций, применяемых в различных операционных системах. Подробно рассмотрим лишь некоторые из них.

      Запрет прерываний.

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

      Переменные блокировки

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

Кроме рассмотренных можно назвать распространённые реализации: строгое чередование, алгоритм Петерсона, флаги готовности, алгоритм булочной (Bakeryalgorithm).

В простейших случаях концепция критических секций отлично срабатывает. Но существует ряд ситуаций, когда критических секций не достаточно. Рассмотрим на примере.

Проблема производителя и потребителя. Пусть два процесса совместно используют буфер ограниченного размера. Один из процессов помещает в буфер информацию (назовём этот процесс производителем), а другой читает информацию из буфера (назовём этот процесс потребителем). Трудность возникнет в тот момент, когда производитель заполнит буфер целиком. Решение очевидно, производитель должен ожидать пока потребитель прочтёт частично или полностью информацию из буфера. Аналогичная трудность возникнет, когда потребитель обратится к буферу для чтения и обнаружит, что буфер пуст. В этом случае потребитель должен ждать, пока производитель не поместит информацию в буфер.

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

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

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

Над семафорами определены две операции:

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

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

    Мьютекс -это семафор, находящийся в одном из двух возможных состояний: 0 - блокирован, либо 1 - не блокирован. Если процесс должен войти в критическую секцию, и мьютекс не заблокирован, процесс входит в критическую секцию, при этом заблокировав мьютекс. Если мьютекс заблокирован, вызывающий процесс блокируется до тех пор, пока процесс, работающий в критической области, не выйдет из неё.

Пример 3.5. Решение проблемы производителя и потребителя с помощью семафоров

#define N 100; /* Определяем размер буфера(в ячейки) */

typedef int semaphore; /* Задаём тип "семафор" как целый */

semaphore mutex = 1; /* Контроль входа в критическую область */

semaphore empty = N; /* Число свободных ячеек буфера */

semaphore full = 0; /* Число занятых ячеек буфера */

void producer(){

/* Переменная "элемент", в неё будем класть вновь созданный элемент, для дальнейшей отправки в буфер */

/* Бесконечный цикл */

/* Создать элемент */

item=produce_item();

/* Уменьшить empty */

/* Увеличить full */

void consumer(){

/* Переменная "элемент", в неё будем класть взятый из буфера для обработки элемент */

/* Бесконечный цикл */

/* Уменьшить full */

/* Войти в критическую область*/

/* Поместить в буфер созданный элемент */

item=get_item();

/* Выход из критической области */

/* Увеличить empty */

/* Обработка элемента */

consum_item(item);

В представленном в примере решении используются три семафора: один для подсчета заполненных сегментов буфера (full), другой для подсчета пустых сегментов (empty), а третий предназначен для исключения одновременного доступа к буферу произ­водителя и потребителя (mutex). Значение счетчика fullисходно равно нулю, счетчик empty равен числу сегментов в буфере, a mutex равен 1. Рассмотрим действия обоих процессов пошагово.

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

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

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

Файловая система компьютера

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

Файловая система связывает носитель информации с одной стороны и API для доступа к файлам - с другой. Когда прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жёстком диске, магнитной ленте или блоке флеш-памяти) он записан. Всё, что знает программа - это имя файла, его размер и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске).

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

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

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

Есть приложения вычислительной техники, для которых ОС излишни. Например, встроенные микрокомпьютеры содержатся сегодня во многих бытовых приборах, автомобилях (иногда по десятку в каждом), сотовых телефонах и т. п. Зачастую такой компьютер постоянно исполняет лишь одну программу, запускающуюся по включении. И простые игровые приставки - также представляющие собой специализированные микрокомпьютеры - могут обходиться без ОС, запуская при включении программу, записанную на вставленном в устройство «картридже» или компакт-диск. Тем не менее, некоторые микрокомпьютеры и игровые приставки всё же работают под управлением особых собственных ОС. В большинстве случаев это UNIX-подобные системы (последнее особенно верно в отношении программируемого коммутационного оборудования: межсетевых экранов, маршрутизаторов).



ОС нужны, если:

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

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

· между программами и пользователями системы необходимо распределять полномочия, чтобы пользователи могли защищать свои данные от несанкционированного доступа, а возможная ошибка в программе не вызывала тотальных неприятностей;

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

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

Таким образом, современные универсальные ОС можно охарактеризовать, прежде всего, как

· использующие файловые системы (с универсальным механизмом доступа к данным),

· многопользовательские (с разделением полномочий),

· многозадачные (с разделением времени).

Многозадачность и распределение полномочий требуют определённой иерархии привилегий компонентов самой ОС. В составе ОС различают три группы компонентов:

· системные библиотеки;

· оболочка с утилитами.

Большинство программ, как системных (входящих в ОС), так и прикладных, исполняются в непривилегированном («пользовательском») режиме работы процессора и получают доступ к оборудованию (и, при необходимости, к другим ресурсам ядра, а также ресурсам иных программ) только посредством системных вызовов. Ядро исполняется в привилегированном режиме: именно в этом смысле говорят, что ОС (точнее, её ядро) управляет оборудованием.

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