Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические материалы СПтаОС (3курс).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
929.79 Кб
Скачать

Лабораторна робота № 2

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

Мета роботи. Засобами мови JAVA створити паралельні процеси, що асинхронно використовують спільні ресурси при допомозі моніторних повідомлень.

Основные вопросы, на которые сосредоточивается внимание разработчиков ОС, связанное с управлением процессами и потоками:

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

Многопроцессорность: управление множеством процессов в многопроцессорной системе.

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

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

2.1. Понятие процесса

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

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

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

2.2. Понятие ресурса

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

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

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

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

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

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

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

  1. Запрос ресурса.

  2. Использование ресурса.

  3. Возврат ресурса.

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