Изоляция модулей
При рассмотрении механизмов работы КСЗ СУБД ЛИНТЕР необходимо отдельно исследовать работу механизма параллельной обработки запросов различных пользователей. Контроль над изолированностью запросов отдельных пользователей производит диспетчер доступа СУБД ЛИНТЕР. Он получает управление:
-
при установке логических связей (каналов) с СУБД различными пользователями и при их разрыве;
-
при подаче запроса пользователем;
-
при выдаче ответа пользователю;
-
в процессе параллельной обработки запроса;
-
при окончании кванта текущего запроса.
В момент установления логической связи с СУБД и при условии выполнения всех процедур проверки доступа диспетчер доступа выделяет под обработку запросов от данного пользователя управляющую структуру, располагающуюся в адресном пространстве СУБД ЛИНТЕР. В случае если с СУБД установлено несколько логических соединений, для каждого из них будет выделена своя собственная управляющая структура. Управляющая структура канала полностью описывает пользователя, установившего соединение, и содержит всю информацию о текущем состоянии выполнения запросов данного пользователя.
СУБД ЛИНТЕР в процессе обработки запросов оперирует не данными пользователя, а только управляющей информацией, характеризующей их. Эта информация представляет собой, в основном, массивы ссылок на файлы данных. Вся управляющая информация хранится в управляющей структуре соответствующего канала.
При параллельном исполнении запросов диспетчер доступа просто выбирает очередную структуру управления каналом в соответствии с приоритетами исполнения запросов. Дальнейшая работа СУБД ЛИНТЕР, вплоть до передачи управления диспетчеру доступа, ведется в контексте параметров и информации данной структуры.
Все модули СУБД ЛИНТЕР (кроме диспетчера доступа) получают на входе и выдают на выходе управляющую структуру, соответствующую каналу, для которого эти модули будут осуществлять свои функции. В процессе выполнения запроса диспетчер доступа контролирует невозможность использования или повреждения структур, относящихся к другим каналам. Любая подобная попытка считается ошибочной ситуацией, и попытка доступа к БД соответствующего пользователя будет завершена с ошибкой, указывающей на нарушение изоляции.
При корректном закрытии или аварийном разрыве логической связи диспетчер доступа производит процедуру освобождения канала. В этом случае уничтожается вся управляющая информация, касавшаяся данного канала, освобождаются все использованные каналом ресурсы СУБД, и уничтожается структура управления каналом.