Cтраница 2
В работе, посвященной изучению проблемы целостности операционной системы OS / VS-2, автор исследует уязвимые места операционной системы, которые могут позволить программе пользователя поставить под угрозу целостность системы. Такими уязвимыми местами являются: расположение системной информации в области памяти, предоставленной пользователю; неоднозначная идентификация ресурсов системы; системные нарушения защиты памяти; передача данных пользователей как системных данных; задание адреса защищаемых блоков управления самим пользователем; параллельное использование ресурсов системы; отсутствие контроля за ресурсами системы. [16]
В реализации Фортрана, как правило, вся память распределяется статически. Каждая программа компилируется отдельно от остальных, при этом компилятор создает блок памяти, содержащий скомпилированную программу, ее области данных, временные переменные, позиции для точки возврата, а также области системных данных. Программа-загрузчик выделяет пространство в памяти для этих скомпилированных блоков, а также для системных программ, требуемых во время выполнения. В процессе выполнения программы не происходит никакого управления памятью. [17]
Остальные виды онлайновых систем можно разделить на две категории: системы, функционирование которых происходит без какого-либо вмешательства человека, и системы со средней или большой степенью участия человека в их работе. Системы автоматического управления производят непрерывную автоматическую оценку существенных элементов управляемого процесса и необходимую настройку, чтобы гарантировать правильное его функционирование. Управленческие информационные системы обеспечивают пользователя достаточным количеством системных данных и предоставляют широкие возможности по их обработке с целью эффективного управления организацией. [18]
Перепланирование процессов не происходит, если текущий процесс находится в системной фазе. В течение системной фазы могут меняться системные данные, и, прежде чем эти изменения не будут полностью завершены, перепланирование делать нельзя. Отказ от перепланирования в течение всей системной фазы гарантирует целостность системных данных, хотя и является достаточно грубым решением проблемы. [19]
Каждая подпрограмма на Фортране транслируется отдельно. Структуры языка разработаны таким образом, что все запросы подпрограммы на память можно выявить при трансляции. Поэтому транслятор может полностью определить структуру времени выполнения для подпрограммы в виде непрерывного блока памяти, разделенного на области транслированных команд, системных данных и структур данных, определяемых программистом. Только ссылки на общие блоки, системные программы, требуемые во время выполнения, и вызываемые подпрограммы не могут быть разрешены во время начальной компиляции. Однако эти ссылки могут быть разрешены загрузчиком, когда независимо странслированные программы объединяются в памяти перед выполнением. Поэтому компилятор конструирует образ блока памяти для каждой подпрограммы и, кроме того, создает для загрузчика набор таблиц, содержащих сведения о ссылках, которые должны быть разрешены перед выполнением. Загрузчик, как правило, легко справляется с этой работой. [20]
Почти любая характеристика программы и структуры данных Снобола 4 может измениться в любой момент во время выполнения. Как следствие в Снобол-системе приходится во время выполнения программы хранить, постоянно выбирать и модифицировать значительный объем динамических данных. Это в большинстве своем такие данные, которые в других языках генерируются и используются транслятором при построении выполняемой формы программы, а затем исключаются перед началом выполнения. Удобнее всего характеризовать эти динамические системные данные в терминах множества таблиц, хотя такие данные могут храниться по-разному в разных реализациях. Ниже перечислены основные динамические таблицы, которые должны поддерживаться при выполнении программ, написанных на Сноболе. [21]
По этой причине данные, определяемые системой, являются важной темой в каждой из последующих глав. Однако такая форма данных, определяемых системой, как дескрипторы данных, существующие во время выполнения программы, является центральным элементом в представлении данных, определяемых программистом. Поэтому этот конкретный вид системных данных рассматривается в настоящей главе. Кроме того, многие типы структур данных, обсуждаемые здесь ( например, стеки и связанные списки), во многих языках могут определяться как системой, так и программистом. [22]
Управление памятью во время выполнения программ, написанных на ПЛ / 1, представляет довольно сложную проблему. Должна существовать большая статическая область, необходимая для хранения выполняемой программы, вспомогательных программ, структур данных, переменных с классом памяти STATIC, а также различных данных, определяемых системой. Для записей активаций подпрограмм и блоков используется центральный стек. Каждая запись активации в общем случае состоит из статического указателя цепочки, точки возврата, областей памяти для переменных и структур данных с классом памяти AUTOMATIC, системных данных, касающихся разрешения прерываний и программ прерываний, определяемых инструкциями ON, а также других системных данных. Обычно для выделения памяти во время выполнения программы используется центральный стек. [23]
Управление памятью во время выполнения программ, написанных на ПЛ / 1, представляет довольно сложную проблему. Должна существовать большая статическая область, необходимая для хранения выполняемой программы, вспомогательных программ, структур данных, переменных с классом памяти STATIC, а также различных данных, определяемых системой. Для записей активаций подпрограмм и блоков используется центральный стек. Каждая запись активации в общем случае состоит из статического указателя цепочки, точки возврата, областей памяти для переменных и структур данных с классом памяти AUTOMATIC, системных данных, касающихся разрешения прерываний и программ прерываний, определяемых инструкциями ON, а также других системных данных. Обычно для выделения памяти во время выполнения программы используется центральный стек. [24]
В основе типичной реализации АПЛ лежит чисто программ-ная интерпретация выполняемой программы. Программы хранятся по существу в том виде, в котором вводятся, подвергнувшись лишь минимальной трансляции. Выделяются две статические области памяти: одна для системных программ и одна для рабочей области, используемой программистом в данный момент. С системными программами обычно работают сразу несколько пользователей, однако у каждого из них имеется своя собственная рабочая область. Память, выделяемая под рабочую область, включает статическую подобласть, содержащую системные данные и три динамические подобласти: стек для записей активаций подпрограмм ( локальные среды ссылок и точки возврата), куча для массивов и тел определений подпрограмм и таблица ассоциаций для глобальных идентификаторов. Когда необходимо, выполняется сбор мусора и полное уплотнение памяти. Для хранения массивов применяется обычное последовательное представление с полными дескрипторами, используемыми во время выполнения программы. [25]