Основные объекты операционной системы и работа с ними. Основы Pascal. Типы данных. Структура программы на языке Pascal Понятие события в операционных системах

Современные компьютеры невозможно себе представить без наличия в них операционной системы - средства взаимодействия между пользователем и компьютером (программами и «железными» компонентами). Сегодня их можно насчитать десятки. Рассмотрим вопрос о том, что собой представляют главные объекты операционной системы на примере ОС Windows.

Форма организации взаимодействия между пользователем и операционной системой

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

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

Основные объекты операционной системы

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

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

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

Интерфейс

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

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

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

Меню являются средствами выбора действий пользователя. Условно их можно разделить на основные и контекстные (те, которые вызываются правым кликом). Однако организация основных меню входит в состав объектов, называемых окнами. И меню можно отнести также к элементам управления, поскольку именно в них пользователю предлагается выбор определенного действия.

Окна: разновидности и доступные операции с ними

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

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

Элементы управления

И тут отдельно стоит остановиться на элементах управления. Главным элементом, если не учитывать планшетные ПК или смартфоны, а также сенсорные экраны, является курсор, при помощи которого можно перемещаться по всему интерфейсу, вызывать какие-то действия, производить изменение размеров и т. д.

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

Еще один управляющий элемент - экранная клавиатура, которая получила основное распространение на планшетах и смартфонах, когда подключение «железной» клавиатуры не предусмотрено.

Файлы и папки

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

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

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

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

Вместо итога

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

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

ОПЕРАЦИОННЫЕ СИСТЕМЫ, ИХ НАЗНАЧЕНИЕ И РАЗНОВИДНОСТИ

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

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

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

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

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

Однозадачные ОС предоставляют пользователю виртуальную машину и включают средства управления файлами, периферийными устройствами и средства общения с пользователем. Многозадачные ОС дополнительно управляют разделением между задачами совместно используемых ресурсов. Многозадачность бывает невытесняющая (NetWare, Windows3/95/98) и вытесняющая (Windows NT, OS/2, UNIX). В первом случае активный процесс по окончании сам передает управление ОС для выбора из очереди другого процесса. Во втором - решение о переключении процессора с одного процесса на другой принимает ОС.

По числу одновременно работающих пользователей ОС делятся на однопользовательские (MS DOS, Windows Зх, ранние версии OS/2) и многопользовательские (UNIX, WINDOWS NT). В многопользовательских системах присутствуют средства защиты информации пользователей от несанкционированного доступа.

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

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

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

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

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

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

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

ОС MS DOS широко использовалась для персональных компьютеров, построенных на базе процессоров Intel 8088-80486.

В настоящее время 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 (первые две обычно называют операционными оболочками, поскольку ОС DOS для них устанавливалась отдельно). Windows 95 характеризуется простотой инсталляции, невысокими уровнями защиты данных и устойчивости к сбоям приложений. Windows 95 обладает интуитивно понятным интерфейсом, поддерживает, технологию plug-and-play, содержит встроенные средства для сетевой работы.

Windows 98 является развитием Windows 95. Эта версия тесно интегрирована с Web-броузером Internet Explorer и содержит большое количество драйверов к старым и новым устройствам. Пользователи отмечают упрощенный процесс инсталляции ОС, пониженные по сравнению с NT требования к мощности процессора, объему памяти и дисковому пространству. Одной из разновидностей Windows является ОС Windows СЕ. Эта линия ОС предназначена для использования на портативных компьютерах. Windows СЕ представляет собой 32-разрядную объектно-ориентированную многозадачную ОС, имеет встроенные функции энергосбережения. Версия Windows СЕ 3.0 (2000) приближается по своим возможностям к системам реального времени. Основная часть этой компактной ОС записана в перепрограммируемое ПЗУ портативных компьютеров. Windows NT 5.0 или Windows 2000 - полностью 32-разрядная ОС с приоритетной многозадачностью, улучшенной реализацией работы с памятью и изначально проектировалась со средствами обеспечения надежности, защиты и управления. Windows 2000 выпускается в четырех вариантах: Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server и Windows 2000 DataCenter Server. Эти версии отличаются количеством входящих в поставку служб и программ, степенью поддержки аппаратного обеспечения.

Операционная система OS/2 (Operating system/2) является однопользовательской многозадачной ОС, односторонне (MS DOS -> OS/2) программно совместимой с MS DOS и предназначенной для работы с МП 80386 и выше (ПК IBM PC и PS/2). OS/2 может одновременно выполнять до 16 программ (каждая из них в своем сегменте памяти), но среди них только одну, подготовленную для MS DOS.

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

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

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

С 1990-х наиболее распространёнными операционными системами являются ОС семейства Microsoft Windows и системы класса UNIX (особенно Linux ).

Функции

Интерфейсные функции:

    Управление аппаратными средствами, устройствами ввода/вывода

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

    Поддержка многозадачности (разделение использования памяти, времени выполнения)

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

    Компьютерная сеть

Внутренние функции:

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

    Виртуальная память

    Планировщик задач

    Буферы ввода-вывода

    Обслуживание драйверов устройств

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

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

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

Операционные системы, в свою очередь, нужны, если:

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

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

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

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

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

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

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

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

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

    ядро , содержащее планировщик; драйверы устройств, непосредственно управляющие оборудованием; сетевую подсистему, файловую систему;

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

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

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

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

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

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

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

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

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

    аппаратную часть (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).