рода
ресурсов, любые могут использоваться согласно особого типа программного модуля.
Типы программных модулей с точки зрения
параллельного программирования.
Программные
модули делятся на исполняемые однократно и многократно.
Однократно
исполняемые
— разрушают себя в процессе выполнения и не м.б. использованы для паралельного
программирования. Обычно онииспользуються при загрузке ОС.
Многократно
исполняемые
— привилегированные и непривилегированные.
Привилегированные — забирают на
себя все ресурсы ЦП путем отключения прерываний в процессе своей работы. ЦП
может переключиться на другой контекст только после завершения выполнения
текущего модуля. Из таких модулей обычно сотоит низкоуровневая часть ОС.
Непривилегированные — обычные
программные модули, которые могут быть прерваны во время своего исполнения.
Делятся на рентабельные и нерентабельные:
·
Нерентабельные
— модули используют в процессе своего исполнения глобальные переменные
(выделяемая память), поэтому при переключении контекста внутри такого модуля
нельзя допускать выполнение этого модуля другой нитью, иначе это приведет к
краху процесса.
·
Рентабельные
- не использую глобальные переменные. Используют только переменные, заведенные
в стеке, т.к. стек входит внутрь контекста, то прерывание переведёт к
переключению стека и модуль может использоваться др. нитью.
На
практике чаще используется 3-я разновидность модулей — повторновходимые и
занимают промежуточные положения между рентабельными и нерентабельными
модулями. Такие модули состоят из частей некоторые, из которые являются
нерентабельными, однако, сам модуль является, по сути, не рентабельным. Эти
части называются критическими секциями.
Внутри критической секции в текущий момент времени может находится только одна
нить. Существуют способы обеспечения данного условия. Повторно входимые модули
встречаются чаще чем рентабельные.
Пример: рентабельный
макрос max(a,b)
{
Char
str[50]=”.”;
Strlen
(str);
}
Повторно
входящий модуль
Fopen(“aaa”, …);
Комментариев нет:
Отправить комментарий