Операционные системы
Причины кооперации процессов в вычислительной системе. Основные проблемы межпроцессного взаимодействия. Характеристика средств обмена информацией: сигналов, каналов, разделяемой памяти. Синхронизация процессов в операционной системе, хранилище памяти.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 13.06.2015 |
Размер файла | 336,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Волгоградский государственный технический университет
Факультет подготовки инженерных кадров
Контрольная работа
Операционные системы
Волгоград 2015
Оглавление
Введение
1. Проблемы межпроцессного взаимодействия
2. Обмен информацией между процессами
3. Синхронизация процессов
Использованная литература
Введение
Для достижения поставленной цели различные процессы (возможно, даже принадлежащие разным пользователям) могут исполняться псевдопараллельно на одной вычислительной системе или параллельно на разных вычислительных системах, взаимодействуя между собой.
Для чего процессам нужно заниматься совместной деятельностью? Какие существуют причины для их кооперации?
§ Одной из причин является повышение скорости работы. Когда один процесс ожидает наступления некоторого события (например, окончания операции ввода-вывода), другие в это время могут заниматься полезной работой, направленной на решение общей задачи. В многопроцессорных вычислительных системах программа разделяется на отдельные кусочки, каждый из которых будет исполняться на своем процессоре.
§ Второй причиной является совместное использование данных. Различные процессы могут, к примеру, работать с одной и той же динамической базой данных или с разделяемым файлом, совместно изменяя их содержимое.
§ Третьей причиной является модульная конструкция какой-либо системы. Типичным примером может служить микроядерный способ построения операционной системы, когда ее различные части представляют собой отдельные процессы, общающиеся путем передачи сообщений через микроядро.
§ Наконец, это может быть необходимо просто для удобства работы пользователя, желающего, например, редактировать и отлаживать программу одновременно. В этой ситуации процессы редактора и отладчика должны уметь взаимодействовать друг с другом.
Процессы не могут взаимодействовать не общаясь. Общение процессов обычно приводит к изменению их поведения в зависимости от полученной информации. Если деятельность процессов остается неизменной при любой принятой ими информации, то это означает, что они на самом деле не нуждаются во взаимном общении. Процессы, которые влияют на поведение друг друга путем обмена информацией, принято называть кооперативными или взаимодействующими процессами, в отличие от независимых процессов, не оказывающих друг на друга никакого воздействия и ничего не знающих о взаимном сосуществовании в вычислительной системе.
Различные процессы в вычислительной системе изначально представляют собой обособленные сущности. Работа одного процесса не должна приводить к нарушению работы другого процесса. Для этого, в частности, разделены их адресные пространства и системные ресурсы, и для обеспечения корректного взаимодействия процессов требуются специальные средства и действия операционной системы. Нельзя просто поместить значение, вычисленное в одном процессе, в область памяти, соответствующую переменной в другом процессе, не предприняв каких-либо дополнительных организационных усилий. Давайте рассмотрим основные аспекты организации совместной работы процессов.
1. Проблемы межпроцессного взаимодействия
Проблема разбивается на три пункта:
§ обмен информацией между процессами,
§ недопущение конфликтных ситуаций,
§ согласование действий процессов.
Последние две проблемы можно объединить в одну и назвать ее «Синхронизация».
2. Обмен информацией между процессами
Средства обмена информацией можно разделить на три категории:
§ Сигнальные. Передается минимальное количество информации - один бит, "да" или "нет". Используются, как правило, для извещения процесса о наступлении какого-либо события.
§ Канальные. «Общение» процессов происходит через линии связи, предоставленные операционной системой, и напоминает общение людей по телефону. Объем передаваемой информации в единицу времени ограничен пропускной способностью линий связи.
§ Разделяемая память. Два или более процессов могут совместно использовать некоторую область адресного пространства. Созданием разделяемой памяти занимается операционная система (если, конечно, ее об этом попросят). «Общение» процессов напоминает совместное проживание студентов в одной комнате общежития. Возможность обмена информацией максимальна, как, впрочем, и влияние на поведение другого процесса, но требует повышенной осторожности (если вы переложили на другое место вещи вашего соседа по комнате, а часть из них еще и выбросили). Использование разделяемой памяти для передачи/получения информации осуществляется с помощью средств обычных языков программирования, в то время как сигнальным и канальным средствам коммуникации для этого необходимы специальные системные вызовы. Разделяемая память представляет собой наиболее быстрый способ взаимодействия процессов в одной вычислительной системе.
Сигналы
Сигналы -- одно из традиционных средств межпроцессного взаимодействия в UNIX. Сигнал может быть отправлен процессу операционной системой или другим процессом. Операционная система использует сигналы для доставки процессу уведомлений об ошибках и неправильном поведении.
При получении сигнала исполнение процесса приостанавливается и запускается специальная подпрограмма -- обработчик сигнала. Обработчики сигналов могут быть явно определены в исходном тексте исполняемой программы, если же они отсутствуют, используется стандартный обработчик, определённый операционной системой.
У сигнала есть только одна характеристика, несущая информацию -- его номер (целое число). Иначе говоря, сигналы -- это заранее определённый и пронумерованный список сообщений. Для удобства использования каждый сигнал имеет сокращённое буквенное имя. Список сигналов и их имён стандартизован и практически не отличается в различных версиях UNIX. Для отправки сигналов процессам используется специальный системный вызов kill и одноимённая ему пользовательская утилита. Стандарт POSIX определяет 28 сигналов, вот несколько примеров:
§ SIGINT (2) -- Сигнал передается активному приложению при нажатии сочетания Ctrl+C, по умолчанию завершает процесс.
§ SIGKILL (9) -- Сигнал аварийного завершения процесса. По этому сигналу процесс завершается немедленно -- без освобождения ресурсов. Этот сигнал не может быть перехвачен, заблокирован или переопределён самим процессом, всегда используется стандартный обработчик опрационной системы. Этот сигнал используется для гарантированного завершения процесса.
§ SIGTERM (15) -- Сигнал завершения процесса, как правило используется для корректного завершения его работы.
§ SIGUSR1 (10) и SIGUSR2 (12) -- Зарезервированные сигналы под нужды программистов.
Сигналы являются ограниченным средством межпроцесснного обмена. Они прекрасно подходят для уведомлений, но не могут использоваться для передачи информации между процессами. Сигналы передаются без каких-либо сопутствующих данных, поэтому они обычно комбинируются с другими способами обмена.
Вызовы POSIX -- signal(), kill().
Каналы
Канал -- поток данных между двумя или несколькими процессами, имеющий интерфейс, аналогичный чтению или записи в файл. Каналы бывают одно- и двунаправленными. В UNIX каналы, как и многие другие системные объекты, представлены в виде файлов, вся работа с ними производится через базовый файловый интерфейс -- открытие и закрытие файла, чтение и запись данных и т. п. В этом смысле каналы можно представлять в виде специализированных файлов, которые не хранят информацию, а лишь накапливают её до следующей операции чтения из канала другим процессом, образуя очередь.
По умолчанию в UNIX каждому процессу при запуске ставится в соответствие три открытых файла: стандартного ввода, стандартного вывода и стандартного вывода для ошибок. С помощью средств командной строки такие потоки для разных процессов могут быть объединены так, что, к примеру, вывод одного процесса будет подаваться на ввод другого. То есть процесс работает с тремя потоками данных одинаково вне зависимости от того, обычные это файлы или же кананлы. В более общем смысле такие потоки называют неименованными каналами. Канал создаётся по запросу и существует только в ходе работы двух процессов, другие процессы в системе не могут обратиться к этому каналу. Если процесс на одной из сторон канала завершается и закрывает канал, другому процессу посылается специальный сигнал -- SIGPIPE.
Другой вид каналов в UNIX -- именованные каналы -- представляют собой особый тип файлов. Эти файлы располагаются в файловой системе и могут быть открыты любым процессом. Одни процессы записывают данные в канал, другие -- читают из него, данные продвигаются по каналу в порядке очереди (FIFO).
Каналы широко используются в UNIX, как при запуске программ в командной строке, так и при взаимодействии системных процессов. Главное достоинство каналов -- простота и удобство использования привычного файлового интерфейса. С другой стороны, данные в каналах передаются в одном направлении и последовательно, что ограничивает сферу применения каналов.
Вызов POSIX -- pipe().
Разделяемая память
Самый простой способ «обойти» разделение виртуальных пространств процессов -- использование разделяемой памяти. Это специальный механизм, с помощью которого средствами операционной системы два процесса могут обращаться к общему участку физической памяти -- каждый через свое адресное пространство.
Для операционной системы этот способ является наиболее простым -- ведь все страницы виртуальной памяти процессов в любом случае проецируются на какую-то область физической памяти -- так почему бы на ту же область не проецировать часть адресного пространства другого процесса? Самое важное, что такое взаимодействие не требует каких-либо накладных расходов, процессы обмениваются информацией со скоростью обращения к памяти.
Однако для пользователя такой способ межпроцессного взаимодействия является труднодоступным. Во-первых, программы, взаимодействующие таким образом, должны изначально содержать соответствующий код -- с помощью специальных системных вызовов обе программы должны обозначить участки своих адресных пространств, предназначенные для обмена информацией. Другая сложность состоит в том, что разделяемая память сама по себе не содержит средств синхронизации, программы должны согласованно изменять общий участок памяти, чтобы не испортить данные; обычно для этих целей применяются семафоры и аналогичные механизмы синхронизации. Эту проблему мы осветим чуть ниже.
Таким образом, разделяемая память -- наиболее быстрый способ обмена, но при этом малопригодный для широкого использования. Обычная сфера применения разделяемой памяти -- специализированные высокопроизводительные программы. Стоит также обратить внимание на явную аналогию разделяемой памяти и исполнения множества потоков в рамках одного процесса -- в UNIX эти инструменты построения программ используются редко и только в связи с высокопроизводительными вычислениями и вводом-выводом.
Вызовы POSIX -- shmem(), mmap().
3. Синхронизация процессов
Состязание процессов
В операционных системах процессы, работающие совместно, могут сообща использовать некое общее хранилище данных. Каждый процесс может считывать из общего хранилища данных и записывать туда информацию. Таким хранилищем может быть участок разделяемой памяти или файл общего доступа. Природа хранилища данных не влияет на суть проблемы. Какие могут возникнуть проблемы?
Рассмотрим простой пример: спулер печати. Если процессу требуется вывести на печать файл, он помещает имя файла в специальный каталог спулера. Другой процесс, демон печати, периодически проверяет наличие файлов, которые нужно печатать, печатает файл и удаляет его имя из каталога.
Пусть каталог спулера -- это большое число сегментов, пронумерованных 0, 1, 2, ..., в каждом из которых может храниться имя файла. Также есть две совместно используемые, общедоступные переменные: out, указывающая на следующий файл для печати, и in, указывающая на следующий свободный сегмент. Допустим ситуацию, что два процесса A и B одновременно решают поставить файл в очередь на печать.
Чем это грозит? Процесс A считывает значение переменной in и запоминает его (значение -- 7). После этого происходит прерывание по таймеру и процессор переключается на процесс B. Процесс B тоже считывает значение переменной in и опять же его запоминает как «7». В данный момент оба процесса считают, что следующий свободный сегмент -- седьмой.
Затем происходит прерывание по таймеру и процессор переключается обратно на процесс А и он продолжает с того места, где его перехватили, а именно с того момента, когда он собирался поместить имя нужного файла в спулер и меняет значение in на 8. На этом процесс А завершается.
Тем временем, управление передается процессу В, которыйсохраняет в каталоге спулера имя нужного ему файла. Так он до сих пор считает, что следующая свободная ячейка -- №7, он в нее помещает нужное имя файла, затем как ни в чем не бывало поменяет значение in на 8 и не будет чувствовать угрызений совести.
Демон, в свою очередь, ничего подозрительного не заметит и распечатает файл, нужный процессу В в ячейке №7, а процесс А останется ни с чем, хотя будет считать, что его файл распечатан.
Состояние состязания -- ситуация, в которой два и более процесса считывают или записывают данные одновременно и конечный результат зависит от того, какой из них был первым.
Критические области
Как избежать состязания? Основной способ -- это запрет одновременной записи и чтения разделяемых данных более чем одним процессом. Иными словами, необходимо взаимное исключение. Это означает, что в тот момент, когда один процесс использует разделенные данные, другому процессу это делать будет запрещено. Проблема, описанная выше, возникла из-за того, что процесс В начал работу с совместно используемой переменной до того, как процесс А ее закончит.
Сформулируем проблему исключения состязаний на абстрактном уровне. Некоторый промежуток времени процесс занят внутренними расчетами и другими задачами, не приводящими к состоянию состязания. В другие моменты времени процесс обращается к совместно используемым данным, называется критической областью. Если удастся избежать одновременного нахождения в критических областях, мы сможем избежать состязаний.
Для решения проблемы попадания в критическую область есть два способа:
§ программный, при помощи специальных алгоритмов,
§ применение специальных примитивов межпроцессного взаимодействия.
Механизмы межпроцессного взаимодействия
Алгоритмические способы обладают рядом недостатков, в частности, все они достаточно громоздки и основанны на активном ожидании, при котором при ожидании входа в критический участок участок предполагается достаточно длительное вращение процесса в пустом цикле, то есть напрасную трату драгоценного времени процессора.
Семафоры
Одним из первых механизмов, предложенных для синхронизации поведения процессов, стали семафоры, концепцию которых описал Дейкстра (Dijkstra) в 1965 году.
Дейкстра предложил две операции, down и up. Операция down сравнивает значение семафора с нулем. Если значение семафора больше нуля, операция down уменьшает его и просто возвращает управление. Если значение семафора равно нулю, процедура down не возвращает управление процессу, а процесс переводится в состояние ожидания. Все операции проверки значения семафора, его изменения и перевода процесса в состояние ожидания выполняются как единое и неделимое элементарное действие. Тем самым гарантируется, что после начала операции ни один процесс не получит доступа к семафору до окончания или блокирования операции. Атомарность операции чрезвычайно важна для разрешения проблемы синхронизации и предотвращения состояния состязания.
Операция up увеличивает значение семафора. Если с этим семафором связаны один или несколько ожидающих процессов, которые не могут завершить более раннюю операцию down, один из них выбирается системой (например, случайным образом) и ему разрешается завершить свою операцию down. Таким образом, после операции up, примененной к семафору, связанному с несколькими ожидающими процессами, значение семафора так и останется равным 0, но число ожидающих процессов уменьшится на единицу. Операция увеличения значения семафора и активизации процесса тоже неделима. Ни один процесс не может быть блокирован во время выполнения операции up, как ни один процесс не мог быть блокирован во время выполнения операции wakeup в предыдущей модели.
POSIX -- sem_init(), sem_wait(), sem_post(), sem_destroy().
Мьютексы
Мьютекс -- упрощенная версия семафора, которая может находиться в одном из двух состояний -- блокированном или неблокированном.
POSIX -- mutex_init(), mutex_lock(), mutex_unlock(), mutex_destroy().
Мониторы
Монитор -- механизм организации параллелизма, который содержит как данные, так и процедуры, необходимые для обеспечения доступа к неразделяемым ресурсам.
В простейшем случае монитор состоит из мьютекса и набора процедур, взаимодействующих с общим ресурсом.
Передача сообщений
Для решения проблемы согласованности процессов при передаче информации, существуют специальные механизмы обмена данными, основанные на мьютексах. Это системные вызовы send() и recieve(). Первый посылает сообщение заданному адресату, второй получает сообщение от указанного источника. Если сообщения нет, второй запрос блокируется до поступления сообщения либо немедленно возвращает код ошибки.
Барьеры
Некоторые приложения делятся на фазы, и существует правило, что процесс не может перейти в следующую фазу, пока к этому не готовы все остальные процессы. Этого можно добиться, разместив в конце каждой фазы барьер. Когда процесс доходит до барьера, он блокируется, пока все процессы не дойдут до барьера.
операционный сигнал канал память
Источники
1. Э. Таненбаум «Современные операционные системы»
2. Курс «Основы операционных систем» на intuit.ru
3. Андрей Боровский, Linux API -- Введение в межпроцессное взаимодействие
4. Алексей Федосеев, UNIX: Учебный курс
Размещено на Allbest.ru
Подобные документы
Взаимодействие процессов и потоков в операционной системе, основные алгоритмы и механизмы синхронизации. Разработка школьного курса по изучению процессов в операционной системе Windows для 10-11 классов. Методические рекомендации по курсу для учителей.
дипломная работа [3,2 M], добавлен 29.06.2012Классификация компьютерной памяти. Использование оперативной, статической и динамической оперативной памяти. Принцип работы DDR SDRAM. Форматирование магнитных дисков. Основная проблема синхронизации. Теория вычислительных процессов. Адресация памяти.
курсовая работа [1,5 M], добавлен 28.05.2016Запуск из одного приложения других приложений. Технология связывания и внедрения объектов. Понятие межпроцессного взаимодействия. Сценарий использования разделяемой памяти. Библиотеки динамической компоновки. Именованные и анонимные каналы, сокеты.
курсовая работа [46,5 K], добавлен 26.07.2014Циклы обмена информацией в режиме прямого доступа к памяти. Управляющие сигналы, формируемые процессором и определяющие моменты времени. Запросы на обмен информацией по прерываниям. Мультиплексирование шин адреса и данных. Протоколы обмена информацией.
лекция [29,0 K], добавлен 02.04.2015История разработки многозадачной операционной системы POSIX-стандарта - FreeBSD; описание ее виртуальной памяти, файловой системы, уровня защиты. Описание основных средств синхронизации процессов - сигналов и семафоров. Способы блокировки файлов.
презентация [584,2 K], добавлен 02.06.2011Структура ядра операционной системы. Основные компоненты подсистемы управления процессами и памятью. Характеристика системных и прикладных процессов в Unix. Идентификация процесса Linux, его атрибуты и вызовы. Средства межпроцессного взаимодействия.
лекция [170,1 K], добавлен 29.07.2012Алгоритмы планирования мультипрограммных операционных систем. Оценка возможности выполнения двух процессов в реальном времени. Организация доступа к критической секции с использованием передачи сообщений. Обнаружение блокировок в вычислительной системе.
курсовая работа [858,7 K], добавлен 24.03.2015Управление процессами - часть операционной системы, влияющая на функционирование вычислительной машины. Контекст дескриптор процесса и алгоритм его планирования. Средства синхронизации и взаимодействия процессов. Критическая секция, тупики и нити.
лекция [166,6 K], добавлен 05.02.2009Объем двухпортовой памяти, расположенной на кристалле, для хранения программ и данных в процессорах ADSP-2106x. Метод двойного доступа к памяти. Кэш-команды и конфликты при обращении к данным по шине памяти. Пространство памяти многопроцессорной системы.
реферат [28,1 K], добавлен 13.11.2009Рассмотрение способов просмотра состояния процессов через диспетер задач в операционной системе Windows: определение взаимосвязи процессов и потоков, времени работы системы в пользовательском режиме. Ознакомление со сведениями о файлах драйверов.
лабораторная работа [3,1 M], добавлен 07.04.2010