Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзамену СПО.docx
Скачиваний:
1
Добавлен:
18.01.2024
Размер:
1.11 Mб
Скачать
  1. Понятие параллельных, последовательных процессов (потоков). Виды взаимодействия процессов (потоков). Проблемы взаимодействия параллельных процессов (потоков). Пример состояния гонок.

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

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

Виды взаимодействия процессов:

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

– Обмен данными: Процессы могут обмениваться данными через разделяемую память, каналы, сокеты, общие переменные и другие механизмы IPC.

– Кооперация: Процессы могут кооперироваться, выполняя задачи в определенной последовательности или в зависимости от результатов друг друга.

Проблемы взаимодействия параллельных процессов:

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

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

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

  • Ошибки в синхронизации: если процессы не синхронизированы должным образом, то возможны проблемы с корректной работой программы.

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

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

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

Критические ресурсы – это ресурсы, которые в какой-то момент требуются нескольким процессам. Это проблема возникает в результате того, что процессы с ресурсами отрабатываются за разное время.

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

Раота с КС на С++:

// Определяем критическую секцию

CRITICAL_SECTION cs;

// Вход в критическую секцию

EnterCriticalSection(&cs);

// Выход из критической секцию=и

LeaveCriticalSection(&cs);

// Инициализация критической секции чтобы убедиться, что критическая секция готова к использованию

InitializeCriticalSection(&cs);

// Удаление критической секции

DeleteCriticalSection(&cs)

Требования к КС:

  • в любой момент времени только один процесс может находиться в своей критической секции по данному ресурсу (это главное требование - взаимное исключение);

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

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

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

Способы реализации взаимного исключения:

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

- переменные блокировки.

- строгое чередование.

- алгоритм Петерсона.

- команда TSL (Test and Set Lock – проверить и заблокировать). Это решение требует участия аппаратного обеспечения. Многие компьютеры имеют команду: TSL RX, LOCK. В регистр RX считывается содержимое слова памяти LOCK, в ячейке памяти LOCK сохраняется некоторое ненулевое значение. Операция считывания слова неделима. Процессор, выполняющий команду TSL, блокирует шину памяти, чтобы остальные процессоры, если они есть, не могли обратиться к памяти.

  1. Способы взаимного исключения. Способы совместного использования информации процессами (потоками). Механизмы взаимодействия процессов (потоков): неименованные (программные) и именованные (FIFO) каналы.

Способы реализации взаимного исключения:

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

- переменные блокировки.

- строгое чередование.

- алгоритм Петерсона.

- команда TSL (Test and Set Lock – проверить и заблокировать). Это решение требует участия аппаратного обеспечения. Многие компьютеры имеют команду: TSL RX, LOCK. В регистр RX считывается содержимое слова памяти LOCK, в ячейке памяти LOCK сохраняется некоторое ненулевое значение. Операция считывания слова неделима. Процессор, выполняющий команду TSL, блокирует шину памяти, чтобы остальные процессоры, если они есть, не могли обратиться к памяти.

Для взаимодействия процессов создается совместный буфер.

Буфер- это область памяти, которую используют два или более процессов для обмена данными. Буфер создается одним процессом и используется другими процессами для передачи данных. Имеет фиксированные размеры, следовательно, процессы могут находиться в состояние ожидания, когда:

- буфер заполнен – ожидает процесс-производителя;

- буфер пуст – ожидает процесс-потребитель.

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

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

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

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

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

Аббревиатура FIFO расшифровывается как “first in, first out” – “первым вошел, первым вышел”, то есть эти каналы работают как очереди. Именованные каналы в Unix функционируют подобно неименованным – они позволяют передавать данные только в одну сторону. Однако в отличие от программных каналов каждому каналу FIFO сопоставляется полное имя в файловой системе, что позволяет двум неродственным процессам обратиться к одному и тому же FIFO.