Дескрипторы больших систем Берроуза - Википедия - Burroughs large systems descriptors

Дескрипторы являются архитектурной особенностью Большие системы Берроуза, в том числе текущие (по состоянию на 2006 г.) Unisys Системы Clearpath / MCP. Помимо того, что куча - и на основе тегов, примечательной архитектурной особенностью этих систем является то, что они основаны на дескрипторах. Дескрипторы средства иметь данные который не находится в стеке, как для массивы и объекты. Дескрипторы также используются для нить данные как в компиляторы и коммерческий Приложения.

Подробности

Дескрипторы описывают области хранения, запросы ввода-вывода и результаты ввода-вывода. Они содержат поля, указывающие, например, тип дескриптора, адрес, длина, наличие данных в хранилище. Детали различаются в зависимости от линейки продуктов и типа дескриптора. В следующем тексте крайний левый (самый значимый) бит нумеруется как 0 в соответствии с документацией Берроуза.

B5000, B5500 и B5700

B5000[1] был первым компьютером на основе дескрипторов. Каждый дескриптор имеет флаг (бит 0), равный 1. Дескрипторы данных содержат 15-битный адрес хранения и 10-битный размер, как и большинство дескрипторов ввода-вывода. Дескрипторы программ и дескрипторы внешнего результата имеют 15-битный адрес, но не имеют поля размера.

Дескрипторы программы B5x00

Дескрипторы программы используются для определения сегментов программы. Либо вызов операнда, либо вызов дескриптора, который ссылается на дескриптор программы, вызовет вызов подпрограммы, если бит присутствия равен 1, в противном случае это вызовет прерывание присутствия.

Дескрипторы программы B5x00[2]
012345678-1718-3233-47
ФлагяПрисутствиеяРежимААдрес
110 = нет в памяти
1 = в памяти
10 = слово
1 = персонаж
0 = аргумент не требуется
необходим аргумент


Дескрипторы данных

Дескрипторы данных относятся либо к блоку данных, присутствующему в памяти (P = 1), либо к блоку данных, который должен быть считан в память (P = 0), в зависимости от значения бита присутствия. Либо вызов операнда, либо вызов дескриптора, который ссылается на дескриптор данных, проверяет бит присутствия и поле размера; если бит присутствия равен 0, произойдет прерывание присутствия; если поле размера не равно нулю, то второе слово в стеке должно быть в пределах диапазона, иначе произойдет прерывание индекса.

Дескрипторы данных B5x00[3]
0123-78-1718192021-3233-47
ФлагяПрисутствиеРазмеряCАдрес
100 = нет в памяти
1 = в памяти
Зарезервированный
для MCP
Зарезервированный
для MCP
0 = плавающий
1 = целое число
[D5 1]Зарезервированный
для MCP
  1. ^ Бит непрерывности - для управления типом прерывания, вызванного оператором выпуска программы
    0 = Установить прерывание при выпуске программы - незаполненные области ввода / вывода или последняя область ввода / вывода
    1 = Установить прерывание непрерывности - области ввода / вывода зарезервированы

Дескрипторы ввода / вывода

Дескрипторы ввода-вывода B5x00[4]
0123-78-1718-3233-47
ФлагяАльтернативный
Внешний
Единица измеренияРазмерУстройство
Зависимый
Адрес
110 = написать
1 = читать

Дескрипторы внешнего результата

Дескриптор внешнего результата содержит дескриптор ввода-вывода, используемый для запуска операции с заменой некоторых полей.

Дескрипторы внешнего результата B5x00[5]
0123-78-2526-3233-47
ФлагяАльтернативный
Внешний
Единица измеренияНе имеющий отношенияУстройство
Зависимый
Адрес
110 = написать
1 = читать
ошибка
условия
последний
место расположения

B6500, B7500 и преемники

Дескрипторы описывают блоки данных. Каждый дескриптор содержит 20-кусочек адресное поле, ссылающееся на блок данных. Каждый блок имеет длину, которая хранится в дескрипторе, также 20 бит. Также указывается размер данных: 4-, 6-, 8- или 48-битные данные в трехбитном поле.

Первым компьютером с такой архитектурой был B6500. в этой реализации значение различных битов состояния было:

  • Бит 47 - бит присутствия (P-Bit)
  • Бит 46 - бит копирования
  • Бит 45 - индексированный бит
  • Бит 44 - сегментированный бит
  • Бит 43 - бит только для чтения

В более поздних реализациях эти биты состояния эволюционировали, чтобы идти в ногу с растущими объемами памяти и получать информацию.

Бит 47, вероятно, самый интересный бит в системе - это то, как архитектура реализует виртуальная память. Виртуальная память изначально была разработана для Атлас проект на Манчестерский университет в конце 1950-х гг. Стремясь увидеть это в коммерческих приложениях, они пригласили на семинар инженеров из нескольких компьютерных компаний, в том числе из Берроуз и IBM. Инженеры Burroughs осознали важность виртуальной памяти и внедрили ее в B5000. Инженеров IBM это не интересовало, и IBM не «изобретала» виртуальную память еще десять лет.

При обращении к дескриптору аппаратное обеспечение проверяет бит 47. Если он равен 1, данные находятся в памяти в месте, указанном в поле адреса. Если бит 47 равен 0, блок данных отсутствует и прерывание (p-бит прерывать ) повышается и MCP код, введенный для отображения блока. В этом случае, если поле адреса равно 0, блок данных не был выделен (init p-bit), и MCP ищет свободный блок, размер которого указан в поле длины.

Последний p-битовый сценарий - это когда бит 47 равен 0, что указывает на то, что данных нет в памяти, но адрес не равен нулю, что указывает на то, что данные были выделены, и в этом случае адрес представляет адрес диска в виртуальном область памяти на диске. В этом случае возникает p-битное прерывание, которое отмечается как «другой» p-бит.

Использование в компиляторах

В АЛГОЛ, границы массива полностью динамические, могут быть взяты из значений, вычисленных во время выполнения, в отличие от Паскаль где размер массивов фиксируется во время компиляции. Это основная слабость Паскаля, как определено в его стандарте, но она была удалена во многих коммерческих реализациях Паскаля, особенно в реализациях Берроуза (как Университет Тасмании версия Артура Сейла и Роя Фрика, а реализация на Burroughs Slice Мэттом Миллером и др.)

В программе в среде Burroughs массив не выделяется при его объявлении, а только при первом прикосновении - таким образом можно объявлять массивы и избегать накладных расходов на их выделение, если они не используются.

Кроме того, системные вызовы низкоуровневого распределения памяти, такие как маллок класс звонков C и Unix не нужны - массивы автоматически распределяются по мере использования. Это избавляет программиста от огромного бремени наполнения программ подверженной ошибкам деятельностью по управлению памятью, что имеет решающее значение для мэйнфрейм Приложения.

Когда перенос программ на языках более низкого уровня, таких как C, структура памяти C обрабатывается путем выделения собственной памяти в большом выделенном блоке B5000 - таким образом, безопасность остальной части системы B5000 не может быть скомпрометированный ошибочными программами C. Фактически, при портировании на B5000 было обнаружено множество переполнений буфера в очевидно правильно работающих программах на C.[нужна цитата ] архитектура. C, как и Паскаль, также был реализован с использованием системы компилятора Slice (которая, как и LLVM, использует общий генератор кода и оптимизатор для всех языков). Компилятор C, исполняющая система, POSIX Интерфейсы, а также перенос многих инструментов Unix были выполнены Стивом Бартелсом. An Эйфель компилятор также был разработан с использованием Slice.

Для объектно-ориентированных программ, которые требуют более динамичного создания объектов, чем архитектура B5000, объекты лучше всего размещать в одном блоке B5000. Такое распределение объектов находится на более высоком уровне, чем malloc в C, и лучше всего реализуется с помощью современных эффективных уборщик мусора.

Интеграция в архитектуру памяти

Поле адреса в B5000 составляет всего 15 бит, что означает, что дескрипторы могут адресовать только 32К слов (192 КБ) памяти. B6500 расширил это до 20 бит или 1 мегабайт слов (6 МБ). К середине семидесятых это все еще было существенным ограничением архитектуры. Чтобы преодолеть это, были реализованы два решения:

  1. Своппер - это решение фактически реализует еще один уровень поверх управления памятью, одновременно перемещая большие кластеры связанных данных в память и из нее.
  2. ASN - это решение позволяет сконфигурировать физически больший объем памяти в системе, разделенный на отдельно адресуемые блоки. Эта архитектура стала известна как память ASN (номер адресного пространства). Память логически разделена на две области, в которых адреса младшей памяти выделяются в глобальном адресном пространстве для операционной системы, а вспомогательное программное обеспечение и адреса верхней памяти для нескольких параллельных локальных адресных пространств для отдельных программ. Адресные пространства пронумерованы, ноль указывает на глобальное, 1..n указывает на локальные адресные пространства. Программы, совместно использующие данные, автоматически помещаются в одно и то же адресное пространство.

Для использования этих функций не требовалось никаких изменений программного кода. Оба решения можно даже комбинировать, но в конечном итоге требования к памяти MCP и требования к совместному использованию программных данных превысили максимальный размер самого адресного пространства.

С появлением серии A в начале 1980-х годов значение этого поля было изменено, чтобы содержать адрес главного дескриптора, что означает, что можно выделить блоки данных размером 1 мегабайт, но что память машины может быть значительно расширена до гигабайт. или, возможно, терабайты. Эта архитектура получила название памяти ASD (Advanced Segment Descriptors). Это потребовало новой общей спецификации микрокода, называемой бета-версией. Главный провидец, стоящий за памятью ASD, - Джон МакКлинток. Позже 3-битный тег памяти был увеличен до 4-битной спецификации, что позволило увеличить размер дескриптора сегмента с 20 до 23 бит, что позволило одновременно адресовать еще больший объем памяти. Эта спецификация микрокода стала известна как гамма уровня.

Управление памятью

Еще одно существенное преимущество было реализовано для виртуальной памяти. В проекте B5000, если блок данных был развернут, все дескрипторы, ссылающиеся на этот блок, должны были быть найдены, чтобы обновить бит присутствия и адрес. В главном дескрипторе нужно изменить только бит присутствия в главном дескрипторе. Также MCP может перемещать блоки в памяти для сжатия, и ему нужно только изменить адрес в главном дескрипторе.

Разница между B5000 и большинством других систем состоит в том, что другие системы в основном использовали выгружаемую виртуальную память, то есть страницы выгружаются фрагментами фиксированного размера независимо от структуры информации в них. Виртуальная память B5000 работает с сегментами переменного размера, как описано в дескрипторах.

Когда память заполнена до определенной емкости, вызывается процесс ОС, называемый «Шериф рабочего набора», либо для сжатия памяти, либо для начала перемещения сегментов из памяти. Сначала он выбирает сегменты кода, поскольку они не могут измениться и могут быть перезагружены из оригинала в файле кода, поэтому не требуется запись, а затем сегменты данных, которые записываются в файл виртуальной памяти.

P-битовые прерывания также полезны для измерения производительности системы. Для первоначального выделения "p-биты инициализации" указывают на потенциальную проблему производительности в программе, например, если постоянно вызывается процедура, выделяющая массив. Повторная загрузка блоков из виртуальной памяти на диск может значительно снизить производительность системы и не является ошибкой какой-либо конкретной задачи. Вот почему многие современные компьютеры могут повысить производительность системы за счет добавления памяти. На машинах B5000 «другие p-биты» указывают на системную проблему, которую можно решить либо путем лучшей балансировки вычислительной нагрузки в течение дня, либо путем добавления дополнительной памяти.

Таким образом, архитектура больших систем Burroughs помогает оптимизировать как отдельные задачи, так и систему в целом.

Защита от переполнения буфера

Последний и, возможно, самый важный момент, который следует отметить относительно дескрипторов, - это то, как они влияют на дополнительные понятия безопасности системы и правильности программы. Один из лучших инструментов хакер Сегодняшние операционные системы должны поставить под угрозу переполнение буфера. C, в частности, использует наиболее примитивный и подверженный ошибкам способ пометки конца строк, используя нулевой байт в качестве сигнального индикатора конца строки в самом потоке данных.

Указатели реализованы на B5000 с помощью индексированных дескрипторов. Во время операций индексации указатели проверяются при каждом приращении, чтобы убедиться, что ни исходный, ни целевой блоки не выходят за границы. Во время операции сканирования или замены механизмы, используемые для чтения или копирования больших блоков памяти, как источник, так и место назначения, проверяются при каждом приращении слова на наличие допустимого тега памяти. Каждый сегмент памяти ограничен словами тега 3, что может привести к сбою такой операции. Каждый сегмент памяти, содержащий конфиденциальные данные, такие как программный код, хранится в словах тега 3, что делает невозможным неконтролируемое чтение, не говоря уже о модификации. Таким образом, значительный источник программных ошибок может быть обнаружен на раннем этапе до того, как программное обеспечение будет запущено в производство, и более значительный класс атак на безопасность системы невозможен.

Примечания

Рекомендации

  1. ^ Эксплуатационная характеристика процессоров Burroughs B 5000 (PDF) (Ред.), Детройт: Берроуз, 1962, 5000-21005A.
  2. ^ Взято из «Дескриптор программы». 5000-21005A. п. 4-2.
  3. ^ Взято из «Дескриптор данных». 5000-21005A. п. 4-3.
  4. ^ Взято из «Данные и ввод / вывод». 5000-21005A. С. 4-4–4-13.
  5. ^ Взято из «Дескрипторы внешнего результата». 5000-21005A. С. 4-14–4-15.