Автор работы: Пользователь скрыл имя, 16 Декабря 2012 в 12:09, курс лекций
Программное и аппаратное обеспечение в компьютере работают в неразрывной связи и в непрерывном взаимодействии. Между программами, как и между физическими узлами и блоками существует взаимосвязь – многие программы работают, опираясь на другие программы более низкого уровня. Уровни программного обеспечения (ПО) представляют собой пирамидальную конструкцию. Каждый следующий уровень опирается на программное обеспечение предшествующих уровней (рис.1).
Конвейер имеет максимальный размер 64 Кбайт и работает циклически.
Рис. 2. Организация очереди на массиве.
Имеется некий массив и два указателя, равные нулю в начальный момент:
Запись (добавление) одного элемента
в пустую очередь делает оба
указателя, равными единице. В
последующем при добавлении
Конвейеры представляют
системный ресурс. Чтобы начать работу
с конвейером, процесс должен заказать
его у операционной системы и
получить в свое распоряжение. Процессы,
знающие идентификатор
Очереди сообщений (queue) являются более сложным методом связи между взаимодействующими процессами по сравнению с каналами. С помощью очередей также можно из одной или нескольких задач независимым образом посылать сообщения некоторой задаче-приемнику. При этом только процесс-приемник может читать и удалять сообщения из очереди, а процессы-клиенты имеют право лишь помещать в очередь свои сообщения. Таким образом, очередь работает в одном направлении. Если необходима двухсторонняя связь, то можно создать две очереди.
Отличия работы с очередями от работы с конвейерами:
Каждый процесс, использующий очередь, должен предварительно получить разрешение на использование общего сегмента памяти с помощью системных запросов API (application program interface).
Проблема тупиков и методы борьбы с ними
При организации параллельного выполнения нескольких процессов одной из главных функций ОС является решение сложной задачи корректного распределения ресурсов между выполняющимися процессами и обеспечение последних средствами взаимной синхронизации и обмена данными.
При параллельном исполнении
процессов могут возникать
Рассмотрим пример, поясняющий причину возникновения тупиков.
Пусть имеются три процесса ПР1, ПР2, ПР3, которые вырабатывают соответственно сообщения М1, М2, М3. Пусть процесс ПР1 является «потребителем» сообщения М3, процесс ПР2 получает сообщение М1, а ПР3 – сообщение М2 от процесса ПР2, то есть каждый из процессов является и «поставщиком» и «потребителем» одновременно и вместе они образуют «кольцевую» систему передачи сообщений через почтовые ящики (ПЯ) – рис.1.
Рис.1. Кольцевая схема взаимодействия процессов
Если процедуры в каждом процессе выполняются в следующем порядке:
ПР1: …
Послать сообщение (ПР2, М1, ПЯ2);
Ждать сообщение (ПР3, М3, ПЯ1);
…
ПР2: …
Послать сообщение (ПР3, М2, ПЯ3);
Ждать сообщение (ПР1, М1, ПЯ2);
…
ПР3: …
Послать сообщение (ПР1, М3, ПЯ1);
Ждать сообщение (ПР2, М2, ПЯ3);
…,
то никаких трудностей не возникает. Однако перестановка этих двух процедур в каждом из процессов (Ждать….;Послать….;) вызывает тупик. В самом деле, в этом случае ни один из процессов не может послать сообщения до тех пор, пока сам его не получит, а этого события никогда не произойдет, поскольку ни один процесс не может этого сделать.
Проблема борьбы с тупиками становится все более актуальной и сложной по мере развития и внедрения параллельных систем. Борьба с тупиковыми ситуациями основывается на одной из трех стратегий:
Предотвращение тупиков
Предотвращение тупика
основывается на предположении о
чрезвычайно высокой его
Для того чтобы возник тупик необходимо, чтобы одновременно выполнялись следующие условия:
Дисциплина, предотвращающая тупик просто должна гарантировать, что ни одно из четырех условий, необходимых для его наступления, не может возникнуть.
Условие взаимного исключения можно подавить путем разрешения неограниченного распределения ресурсов. Это совершенно неприемлемо к совместно используемым переменным в критических интервалах.
Условие ожидания можно подавить, предварительно выделяя ресурсы. При этом процесс может начать исполнение, только получив все необходимые ресурсы. Это может привести к снижению эффективности работы вычислительной системы в целом. Кроме того, это сделать зачастую невозможно, так как необходимые ресурсы становятся известны процессу только после начала исполнения.
Условие отсутствия перераспределения можно исключить, позволяя ОС отнимать у процесса ресурсы. Перераспределение процессора реализуется достаточно легко, в то время как перераспределение устройств ввода/вывода крайне нежелательно.
Условие кругового ожидания можно исключить, предотвращая образование цепи запросов. Это можно обеспечить с помощью принципа иерархического выделения ресурсов, если порядок использования ресурсов является иерархическим.
В целом стратегия
предотвращения тупиков – это
очень дорогое решение
Обход тупиков
Это можно интерпретировать как запрет входа в опасное состояние. Если ни одно из 4-х условий не исключено, то вход в опасное состояние можно все же предотвратить при наличии у системы информации о последовательности запросов, связанных с каждым параллельным процессом. Достаточно проверить, не приведет ли выделение затребованного ресурса к опасному состоянию. Если да, то запрос отклоняется. Если нет, то запрос выполняется. Проверка того, является ли состояние опасным или нет, требует анализа последующих запросов процессов. Существуют методы эффективного выполнения такого просмотра.
Распознавание тупика
За счет различных дорогостоящих вычислений можно установить, существуют ли процессы, находящиеся в состоянии тупика. Чтобы выполнить эти вычисления, ОС должна вести список тех ресурсов, которые ждет каждый заблокированный процесс, и список тех процессов, которые держат каждый недоступный ресурс. Алгоритм распознавания замкнутых цепей можно выполнять с любой нужной частотой. Как только тупик выявлен, должно быть выполнено восстановление. Существуют следующие методы восстановления:
Стоимость стратегии распознавания тупика зависит от того, насколько часто выполняется алгоритм распознавания. Основная цена восстановления от тупика – это потери времени, которые могут быть существенными.
Современные операционные системы
На ПК типа IBM PC наиболее популярными являются ОС семейства Windows компании Microsoft. Это и Windows 95/98, и Windows NT, и Windows 2000, и Windows XP. Но, кроме этих ОС, на ПК используются ОС Unix, Linux, OS/2, QNX.
Изучая теорию ОС и работая на ПК, мы фактически познакомились с OC семейства Windows. Поэтому не будем отдельно описывать эти ОС.
Рассмотрим же кратко ОС UNIX, которая является примером исключительно удачной реализацией простой мультипрограммной и многопользовательской ОС.
Семейство операционных систем UNIX
UNIX проектировалась как инструментальная система для разработки программного обеспечения. Была создана по сути, двумя разработчиками (Кен Томпсон и Денис Ритчи) для себя и написана на языке С.
Unix-системы уже существуют 30 лет и сейчас поставляются с большим набором системных и прикладных программ, включающим редакторы текстов, программируемые интерпретаторы командного языка, компиляторы с нескольких популярных языков программирования, отладчики, многочисленные библиотеки системных и пользовательских программ, средства сортировки и ведения баз данных, многочисленные административные и обслуживающие программы.
Система UNIX – многопользовательская. Каждому пользователю после регистрации предоставляется виртуальный компьютер, в котором есть все необходимые ресурсы: процессор (процессорное время выделяется на основе «карусельной» диспетчеризации – RR и с использованием динамических приоритетов), память, устройства, файлы. Текущее состояние такого виртуального компьютера называется образ. Образ состоит из:
Образ процесса во время его выполнения размещается в основной памяти.
Образ памяти делится на три логических сегмента:
Информация о работе Программное обеспечение вычислительной системы