Управление подпулами

Управление основной памятью раздела в режиме мультипрограммирования с переменным числом задач осуществляется на уровне блоков памяти, закрепленных за подпулами, и на уровне участков памяти внутри блоков. Блоки обычно представляют собой непрерывные области памяти, длина которых кратна 2К.

Память, назначаемая программой пользователя (рис. 7.3), представляется элементом очереди памяти (PQE), адрес которого содержится в блоках управления задачами (ТСВ) каждой задачи. Элемент PQE имеет указатель границ раздела. Все подпулы, используемые задачей, представляются элементами очереди подпулов (SPQE). Адрес элемента SPQE, построенного последним, содержится в блоке ТСВ соответствующей задачи. Элементы SPQE содержат номера представляемых ими подпулов. Память, назначаемая подпулу, отводится блоками, которые представляются элементами описания блоков (DQE). Адрес первого элемента DQE в очереди содержится в соответствующем элементе SPQE. Элемент DQE имеет указатели границ представляемого им блока памяти. Свободные блоки памяти, не вошедшие в состав подпулов какой-либо задачи, представляются элементами очереди свободных блоков (FBQE). Адрес первого элемента FBQE содержится в элементе PQE данного раздела. Элементы FBQE имеют указатели границ соответствующих им блоков свободной памяти раздела.

 

Рис. 7.3. Представление свободных и занятых блоков основной памяти раздела

Построение полпула. Когда от задачи приходит запрос на выделение участка памяти из подпула, супервизор просматривает очередь элементов SPQE задачи. Просмотр позволяет определить, имеет ли задача подпул, номер которого указан в запросе. Если подпул отсутствует, то супервизор строит элемент SPQE для представления нового подпула и ставит его последним в очередь имеющихся элементов SPQE. Далее супервизор округляет величину требуемого участка памяти в сторону увеличения до значения, кратного 2К, и, просматривая очередь элементов FBQE раздела, определяет, имеется ли свободный блок подходящей длины. Если требуемый свободный блок памяти найден, то для его представления строится элемент DQE, который ставится в очередь к созданному элементу SPQE. При этом модифицируется или устраняется элемент FBQE, который представлял найденный свободный блок. Участок памяти требуемой длины внутри блока выделяется путем представления свободных участков блока очередью элементов и модификации этой очереди при удовлетворении запроса на память. Если свободный блок подходящей длины не найден, то супервизор поступает с задачей в соответствии с типом запроса: для безусловного запроса производит аварийное завершение задачи, для условного – возвращает управление задаче с кодом возврата 4.

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

Ликвидация подпула. Участки памяти в блоках подпула освобождаются путем модификации очереди элементов FBQE в соответствующих блоках подпула. После того как вся память блока будет освобождена, супервизор возвратит его разделу в качестве свободного, ликвидируя элемент DQE, который представлял его в подпуле. Далее построится элемент FBQE, который представляет данный блок как свободный. При ликвидации последнего блока супервизор устраняет и элемент SPQЕ, который представлял данный подпул.