Топп: классификация программных модулей, рентабельность, повторная входимость.

рода ресурсов, любые могут использоваться согласно особого типа программного модуля.

Типы программных модулей с точки зрения параллельного программирования.

Программные модули делятся на исполняемые однократно и многократно.

Однократно исполняемые — разрушают себя в процессе выполнения и не м.б. использованы для паралельного программирования. Обычно онииспользуються при загрузке ОС.
Многократно исполняемые — привилегированные и непривилегированные.

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

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

На практике чаще используется 3-я разновидность модулей — повторновходимые и занимают промежуточные положения между рентабельными и нерентабельными модулями. Такие модули состоят из частей некоторые, из которые являются нерентабельными, однако, сам модуль является, по сути, не рентабельным. Эти части называются критическими секциями. Внутри критической секции в текущий момент времени может находится только одна нить. Существуют способы обеспечения данного условия. Повторно входимые модули встречаются чаще чем рентабельные.
Пример: рентабельный макрос max(a,b)
      {
            Char str[50]=”.”;
            Strlen (str);
      }
Повторно входящий модуль

      Fopen(“aaa”, …);

Комментариев нет:

Отправить комментарий