Системная архитектура Unisys серии 2200 - Unisys 2200 Series system architecture

OS 2200 Architecture.jpg

На рисунке показана высокоуровневая архитектура ОС 2200 система, определяющая основные аппаратные и программные компоненты. Большая часть программного обеспечения Unisys включена в область подсистем и приложений модели. Например, менеджеры баз данных - это подсистемы, а компиляторы - это приложения.

Основы системы

OS 2200 System Basics.jpg

Детали архитектуры системы описаны в публикации Unisys 3850 7802. Справочное руководство по программированию командного процессора. Также см UNIVAC серии 1100/2200.

В серии 1100 с 1962 года использовалось 36-битное слово с 6-битными символами. Министерство обороны (DoD) требование.[нужна цитата ] Поскольку военным нужно было рассчитывать точные траектории, проектировать мосты и выполнять другие инженерные и научные расчеты, им требовалось более 32 бит точности. 32-битное число с плавающей запятой обеспечивало только около 6 цифр точности, в то время как 36-битное число обеспечивало 8 цифр точности, которые были приняты в качестве минимального требования. Поскольку память и дисковое пространство и затраты были движущими силами системы, переход на 64-битную версию в целом был просто неприемлем. Эти системы используют дополнение арифметика, что в то время не было необычным. Почти все производители компьютеров того времени поставляли 36-битные системы с 6-битными символами, включая IBM, DEC, General Electric, и Сильвания.

6-битный набор символов, используемый серией 1100, также является обязательным набором DoD. Он был определен Корпусом связи армии и назывался Fieldata (данные, возвращенные из поля).[1] 1108 предоставил 9-битный формат символов для поддержки ASCII а позже ISO 8 бит наборы, но они не использовались широко до 1980-х годов снова из-за нехватки места.

Архитектура серии 2200 предоставляет множество регистры. Базовые регистры логически содержат виртуальный адрес который указывает на слово в коде или банке данных (сегменте). Они могут указывать на начало банка или на любое слово в банке. Индексные регистры используются инструкциями для изменения смещения указанного или предполагаемого базового регистра. Простая арифметика (сложение, вычитание) может выполняться для всех индексных регистров. Кроме того, индексные регистры состоят из нижней части смещения и верхней части приращения. Инструкция может как использовать значение смещения в индексном регистре как часть адреса, так и указывать, что приращение должно быть добавлено к смещению. Это позволяет выполнять циклы с меньшим количеством инструкций, поскольку увеличение индекса на размер шага может выполняться без отдельной инструкции. Арифметические регистры позволяют использовать полный набор вычислительных инструкций, включая все операции с плавающей запятой. Некоторые из этих инструкций работают с соседними парами регистров для выполнения операций с двойной точностью. Нет четных-нечетных ограничений. Любые два регистра могут использоваться как значение двойной точности. Четыре из арифметических регистров также являются индексными регистрами (наборов перекрывается - индексный регистр X12 является арифметическим регистром A0). Это позволяет выполнять полный спектр вычислений с индексами без необходимости перемещать результаты. Остальные регистры, известные как регистры R, используются как быстрое временное хранилище и для некоторых специальных функций. R1 содержит счетчик повторов для тех инструкций, которые могут повторяться (передача блока, повторное выполнение и т. Д.). R2 содержит битовую маску для нескольких инструкций, которые выполняют побитовые логические операции в дополнение к некоторым другим функциям (например, верхняя маскированная загрузка)

Есть два полных набора регистров (A, X, R и B). Один набор, регистры пользователя, используется всеми приложениями и большинством частей операционной системы. Он сохраняется и восстанавливается как часть состояния активности (потока). Другой набор, регистры Exec, используется прерывать процедуры обработки и некоторые другие части операционной системы, которые хотят избежать необходимости сохранять и восстанавливать регистры пользователей. Регистры Exec не доступны для записи пользовательскими приложениями, хотя некоторый пользовательский код может их читать. В результате Exec тщательно разработан, чтобы никогда не оставлять личную, безопасную или конфиденциальную информацию в реестрах. Интерпретация инструкций выбирает соответствующий набор регистров для использования на основе бита в регистре состояний процессора. Этот бит всегда устанавливается (изменяется на привилегированный) при прерывании. Все регистры также видны в адресном пространстве, но часть Exec защищена, и ссылка непривилегированным кодом приведет к прерыванию по ошибке.

Серия 2200 использует 36-битное сегментированное виртуальное адресное пространство. Позже мы рассмотрим архитектуру адресации.

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

OS 2200 Series Technical Architecture.jpg

На приведенном выше рисунке показаны некоторые строительные блоки архитектуры. «Данные» и «COMM» - два основных примера программных подсистем, которые находятся в защитном кольце между пользовательским приложением и Exec. Есть много других таких подсистем, и пользователи пишут свои собственные.

Память и адресация

OS 2200 Virtual Address Level.jpg

Уровень

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

Виртуальный адрес состоит из трех частей. Старшие 3 бита определяют уровень совместного использования. Это сердце всей схемы адресации и защиты. Каждый поток имеет восемь таблиц дескрипторов банков (таблиц дескрипторов сегментов в отрасли) на основе B16-B23. Таблицы индексируются по уровням - уровень 0 относится к таблице дескрипторов банка (BDT) на основе B16, уровень 2 - к BDT на основе B18 и т. Д. BDT уровня 0 и уровня 2 являются общими для всех потоков в системе. Каждый запуск (процесс) имеет свой собственный BDT уровня 4, и этот BDT является общим для всех потоков в запуске. Каждый пользовательский поток имеет свой собственный неразделенный BDT уровня 6.

Мероприятия

Каждое действие (поток) расширенного режима всегда имеет шесть банков, сегментов, которые полностью уникальны для него. Один из них - это стек управления возвратом, который содержит информацию о вызывающей структуре, включая любые связанные с безопасностью привилегии и изменения состояния. Он не доступен потоку, кроме как с помощью CALL, RETURN и подобных инструкций. Это основная часть механизма защиты и надежности. Приложения не могут вызывать плохие эффекты, изменяя адреса возврата или перезаписывая стек управления возвратом.[2]

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

Действия могут создавать дополнительные сегменты до предела доступного адресного пространства (233 слова = 8ГВт или около 36 ГБ). Это удобный способ для многопоточных приложений получить большой объем памяти, зная, что он полностью потокобезопасен и что они не занимают места для остальной части того, что доступно программе. Каждое действие в программе имеет собственное независимое пространство, что означает, что приложение с, скажем, 100 действиями может использовать более 800 ГВт (> 3 ТБ) виртуального пространства.

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

Программ

OS 2200 не реализует программы точно так же, как UNIX, Linux, и Windows реализовать процессы, но это ближайшая аналогия. Наиболее очевидное различие заключается в том, что OS 2200 позволяет выполнять только одну программу за один запуск (задание, сеанс) за раз. Программа может иметь сотни потоков, но не может порождать другие программы для одновременного выполнения.

На уровне программы есть несколько банков, которые содержат как информацию о выполнении (задании, сеансе), так и информацию о программе. Это управляющие структуры для операционной системы. У них нет доступа или доступа только для чтения к программе. Программы могут извлекать информацию из некоторых из этих структур в целях отладки или извлекать такие вещи, как идентификатор пользователя и идентификатор терминала, без дополнительных затрат на системный вызов. Они не могут быть записаны программой. Они содержат такие вещи, как области сохранения состояния потока, блоки управления файлами и учетную информацию.

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

Таким образом, каждая программа имеет собственное адресное пространство, отличное от всех других программ в системе. Никакие действия программы не могут изменить содержимое памяти любой другой программы. ОС и разделяемые подсистемы защищены другими механизмами, которые будут рассмотрены позже. Почти во всех случаях из кода программы запрещен даже доступ для чтения к памяти ОС и подсистемы. Можно создать общую подсистему, которая обычно доступна для чтения или даже записи для нескольких программ, но она должна быть явно установлена ​​таким образом привилегированным системным администратором. Программы изначально создаются только с банками, указанными в объектном файле, и с единственная деятельность. Они могут использовать системные вызовы для создания дополнительных банков в рамках своего собственного программного уровня и дополнительных действий.

Подсистемы

Ближайшей аналогией с разделяемой подсистемой является .dll. Подсистема во многом похожа на программу, за исключением того, что с ней не связаны никакие действия. Вместо этого к нему обращаются другие программы и подсистемы, как правило, через инструкцию CALL. Фактически программа - это подсистема плюс одно или несколько действий. Каждое действие принадлежит «домашней» подсистеме, то есть программе, которая его создала. Эта концепция подсистемы важна как инкапсуляция прав доступа и привилегий. Внутри своей домашней подсистемы действия обычно имеют общие права доступа к банкам кода и данных. Банки кода в домашней подсистеме обычно доступны только для чтения или даже только для выполнения, если они не содержат постоянных данных, но все действия будут иметь право на их выполнение.[3]

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

Операционные системы

Уровень ОС содержит банки Exec. Эти банки никогда не доступны напрямую ни программам, ни глобальным подсистемам. Все точки входа в ОС обрабатываются так же, как и защищенная подсистема. Вызовы в ОС всегда осуществляются через «шлюзы», инструкции, которые существуют для этой цели (ER = Executive Request), или через прерывания.

Индекс дескриптора банка (BDI)

Виртуальный адрес OS 2200 BDI.jpg

Следующая часть виртуального адреса - это BDI или индекс дескриптора банка. В поле «Уровень» выбран конкретный базовый регистр таблицы дескрипторов банка (B16-B23). Базовые регистры B16-B23 являются частью состояния активности и обслуживаются Exec без прямого доступа для активности. Таблицы дескрипторов банка для уровней программы и активности существуют в банках уровня программы, принадлежащих операционной системе.

BDI - это просто индекс в таблице дескрипторов банка. Каждая запись в таблице содержит информацию о банке. Каждая такая запись описывает до 1 МБ (256 КБ) виртуального адресного пространства. Когда требуется большее непрерывное пространство, последовательные записи логически объединяются, чтобы создать больший банк до максимум 230 слова.

Запись в таблице дескрипторов банка (дескриптор банка - BD) дает размер банка (маленький = до 256 кВт, большой = до 16 МВт, очень большой = до 1 ГВт). Небольшой банк всегда представлен одной BD. Крупные банки представлены до 64 последовательных BD, а очень большой банк - до 4096 BD. Большим и очень большим банкам не обязательно использовать все 64 или 4096 последовательных BD. Они используют столько, сколько необходимо для обеспечения необходимого виртуального адресного пространства. Запись также содержит верхний и нижний пределы допустимых зачетов внутри банка. Виртуальные адреса, выходящие за установленные пределы, создают прерывание при ошибке. Это позволяет небольшим банкам, например, содержащим сообщение, иметь только виртуальное пространство, зарезервированное для него, которое им действительно нужно, и обеспечивает отладочную проверку на неправильные указатели и индексы.

BD также содержит ключевые значения и поля управления доступом. Поля указывают, предоставлено ли разрешение на чтение, запись или выполнение процессору команд (3 бита). Специальные разрешения доступа (SAP) применяются только к действиям, выполняемым в подсистеме-владельце (на самом деле только к тем, у которых есть совпадающее значение ключа). Общие разрешения доступа (GAP) применяются ко всем остальным и обычно равны нулю (нет доступа). Exec устанавливает значение ключа в состоянии каждого действия, которое может быть изменено переходами шлюза и прерывания.

Механизмы защиты

OS 2200 Access Control.jpg
OS 2200 Protection Domains.jpg

Архитектура защиты серии 2200 использует три части состояния активности, которые отражаются в состоянии оборудования. Это привилегия процессора (PP), кольцо и домен.

Привилегия процессора контролирует возможность выполнения привилегированных инструкций и доступа к защищенным регистрам и другому состоянию. PP = 0 используется Exec и дает полный доступ ко всем инструкциям и привилегированному состоянию. Действия Exec и действия пользователей, которые использовали шлюз для доступа к Exec API запустить при PP = 0.

PP = 1 ограничивает большинство привилегированных инструкций, но разрешает чтение дневных часов и чтение содержимого некоторых привилегированных регистров. Ни один из привилегированных регистров не содержит действительно конфиденциальной информации, но разрешение общего доступа для чтения может легко привести к необнаруженным ошибкам в пользовательских программах. Обычно при PP = 1 все инструкции, которые могут изменять среду адресации, изменять тактовые импульсы, изменять состояние инструментария или выполнять ввод-вывод, ограничены. PP = 1 используется редко.

PP = 2 - это обычный пользовательский режим и состояние, в котором выполняется весь остальной код. Это еще одно ограничение PP = 1.

Существует также PP = 3, который дополнительно ограничивает инструкции, которые может выполнять пользовательская программа, но в настоящее время он не используется, так как слишком много существующих программ использовали некоторые из этих инструкций. Намерение состояло в том, чтобы ограничить доступ к инструкциям, которые могут зависеть от модели системы.

Механизм домена - это сердце механизма защиты. Каждый BD (дескриптор банка) имеет поле блокировки, состоящее из номера звонка и номера домена. В состоянии каждого действия также есть ключевое поле. Если ключ соответствует замку или кольцо в ключе меньше, чем кольцо в замке, действие имеет специальное разрешение доступа. В противном случае у действия есть разрешение общего доступа.

Кольцо позволяет переопределить механизм защиты домена. Пользовательские приложения работают с Ring = 3. Защищенные подсистемы работают с Ring = 2. Это дает им доступ к их собственным данным, в то же время позволяя им получать доступ к параметрам и данным в пространстве вызывающего пользователя. Обратите внимание, что поток по-прежнему не может вызвать защищенную подсистему для доступа к пространству другого пользователя, поскольку используются только таблицы дескрипторов банка этого потока. Ring = 0 используется ОС и позволяет ей получать доступ к собственным данным, сохраняя при этом доступ к параметрам, переданным либо из пользовательских программ, либо из защищенных подсистем.

Ворота - еще одна часть механизма защиты. Шлюз - это структура данных, которая контролирует переходы между доменами. Шлюз находится в банке шлюзов, и оборудование требует, чтобы все ссылки на шлюзы были на адреса с правильным смещением (кратным размеру ворот) в банке ворот. Шлюз содержит целевой адрес, новые значения для PP, Ring и Domain, а также может содержать скрытый параметр, который нужно передать цели. Защищенные подсистемы не доступны напрямую другим подсистемам. Вместо этого подсистема должна запросить создание шлюза в ее банке ворот для доступа к этой подсистеме. Это позволяет операционной системе выполнять любые проверки контроля доступа. Система связывания затем найдет адрес шлюза, связанный с точкой входа. Фактически, весь механизм обычно прозрачно обрабатывается в системе связывания. Параметр hidden позволяет, например, шлюзу ввода-вывода файла содержать адрес или дескриптор блока управления файлом. Поскольку это гарантированно верно, поскольку оно было создано ОС, когда пользователь открыл файл, многие проверки ошибок могут быть исключены из длины пути для выполнения операций ввода-вывода.

Инструкции Процессоры

Регистры OS 2200 в адресном пространстве.jpg

OS 2200 предназначена для обработки до 32 командных процессоров (или Процессоры ). За прошедшие годы было сделано много разработок, направленных на оптимизацию этой среды. Например, OS 2200 почти не использует критические разделы в своем дизайне. Слишком высока вероятность того, что один и тот же код выполнят несколько процессоров. Вместо этого он использует блокировку данных с максимально возможной детализацией. Обычно блокировки имеют дело с одним экземпляром объекта данных (например, структурой управления действиями или блоком управления файлом) и содержатся в структуре данных объекта. Это сводит к минимуму вероятность конфликтов. Когда необходимо установить больше глобальных блокировок, например, при обновлении списка объектов, блокировка устанавливается только на время, необходимое для обновления ссылок в списке. Даже диспетчеризация выполняется с отдельными блокировками для разных уровней приоритета. Можно проверить наличие пустого уровня приоритета без установки блокировки. Блокировку нужно устанавливать только при добавлении или удалении элемента из очереди.

Набор регистров находится в видимом адресном пространстве. Кажется, что регистры существуют в первых 128 словах (2008) текущего банка инструкций (B0), когда на него ссылаются как на элемент данных. Это налагает ограничение на компиляторы, чтобы они не помещали константы данных в первые 128 слов банка кода. Результатом этого является расширение набора команд без необходимости использования дополнительных кодов операций. Операции «регистр-регистр» выполняются с помощью кодов операций хранения регистров.

OS 2200 Instruction Format.jpg

Типичные инструкции содержат код функции, целевой (или исходный) регистр, индексный регистр, базовый регистр и поле смещения. Когда код функции с ее квалификатором указывает непосредственные данные, поля смещения, основания, i и h объединяются, чтобы сформировать одно 18-битное непосредственное значение. Это позволяет загружать, складывать, умножать и т. Д. На небольшие константы, чтобы исключить обращение к памяти и соответствующее хранилище.

Состояние процессора OS 2200.jpg

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

OS 2200 Basic Mode.jpg

Базовый режим - это еще одна целая форма форматов инструкций и адресации. Базовый режим обеспечивает совместимость с предыдущими системами вплоть до 1108. Для всех практических целей архитектура оборудования определяет правила, по которым адреса и инструкции преобразуются в указанные выше формы. Наиболее очевидное различие в базовом режиме - отсутствие явных регистров B в инструкциях. Вместо этого используются четыре неявно используемых регистра B (B12-B15). Существует сложный алгоритм, использующий пределы банков, представленных этими регистрами B, адресом операнда и регистром B, в котором находится текущая инструкция.

OS 2200 Интересные инструкции.jpg

Самыми интересными инструкциями в репертуаре 2200 являются инструкции блокировки и синхронизации. Условная замена знакома и очень похожа на Сравнить и поменять местами в архитектуре Intel. Эти инструкции всегда получают исключительное использование строки памяти / кэша, содержащей указанное слово. TS и TSS немного проверяют указанное слово. Если бит сброшен, они устанавливают его и продолжают (TS) или пропускают (TSS). Если бит установлен, они либо прерывают (TS), либо переходят к следующей инструкции (TSS). При прерывании TS ОС выполняет одно из нескольких действий в зависимости от последовательности команд и приоритета активности. Действия в реальном времени и Exec просто получают контроль, чтобы разрешить повторную попытку, если только не ожидается еще более приоритетное действие. Предполагается, что блокировка установлена ​​на другом процессоре и скоро будет снята. Если это действие пользователя, не выполняющееся с приоритетом в реальном времени, его приоритет может быть временно снижен и он будет снова помещен в очереди отправки.

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

Результатом этих механизмов является очень высокая эффективность, низкие накладные расходы, синхронизация действий.

Архитектура организации очереди OS 2200.jpg

Еще один интересный частный случай - архитектура массового обслуживания. Он был специально разработан для обеспечения очень эффективной обработки сообщений, когда количество сообщений, ожидающих обработки, может быть практически неограниченным. Он также направлен на снижение одной из основных затрат на обмен сообщениями, а именно на необходимость постоянного перемещения сообщений в памяти. Исключается даже перемещение их из диспетчера связи в подсистему очереди сообщений в программу обработки. Вместо этого каждое сообщение помещается в отдельный небольшой банк. Инструкции позволяют помещать дескрипторы этих банков в очередь и удалять их из очереди. Когда сообщение помещается в очередь, отправляющая программа или подсистема больше не имеет к нему доступа. Этот банк удаляется из адресного пространства. Когда сообщение извлекается из очереди, банк становится частью адресного пространства получателя. Инструкции по организации очереди также предоставляют функции синхронизации активности (например, ожидание сообщения).

Перемещаются только «указатели», и они перемещаются таким образом, чтобы обеспечить безопасность и целостность. После перемещения данные в сообщении видны только получателю.

Процессоры ввода / вывода

Все операции ввода-вывода в системах серии 2200 обрабатываются Процессоры ввода / вывода. Эти процессоры разгружают большую часть длины пути ввода-вывода и восстановления, а за счет полной изоляции основной системы от ошибок ввода-вывода, прерываний, ошибок шины и т. Д. Значительно повышают надежность и доступность. Процессоры ввода-вывода бывают трех разных типов (хранилище, связь, кластеризация), но единственная реальная разница - это прошивка нагрузка.[4]

Все процессоры ввода-вывода контролируются операционной системой. OS 2200 предоставляет необработанный режим для ввода-вывода, называемый «произвольный ввод-вывод устройства», но даже в этом случае ОС проверяет, что программа обращается к разрешенному устройству, и обрабатывает все прерывания и сбои перед передачей соответствующего статуса программе. Сотрудник службы безопасности должен предоставить программам права доступа к устройствам в произвольном режиме, которые могут быть ограничены как сотрудником службы безопасности, так и оператором системы для определенных устройств. Произвольный ввод-вывод не разрешен для устройства, которое также используется какой-либо другой программой или системой. Устройство должно быть выделено исключительно программе.

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

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

  1. ^ Уоттс С. Хамфри, "MOBIDIC и Fieldata", IEEE Annals of the History of Computing, vol. 9, вып. 2, стр. 137-182, апрель-июнь 1987 г., Дои:10.1109 / MAHC.1987.10018. http://doi.ieeecomputersociety.org/10.1109/MAHC.1987.10018
  2. ^ Корпорация Unisys (2013). Справочное руководство по программированию исполнительных запросов по программному обеспечению Exec. (Публикация Unisys 7830 7899). Розвилл, Миннесота. http://public.support.unisys.com/2200/docs/cp14.0/pdf/78307899-022.pdf
  3. ^ Корпорация Unisys (2012 г.). Руководство по программированию связывания системных подсистем. (Публикация Unisys 7830 7451). Розвилл, Миннесота. http://public.support.unisys.com/2200/docs/cp14.0/pdf/78307451-015.pdf
  4. ^ Корпорация Unisys (2012 г.). ClearPath Dorado 300/400/700/800/4000/4100/4200 Server I / O Planning Guide. (Публикация Unisys 3839 6586). Розвилл, Миннесота. http://public.support.unisys.com/2200/docs/cp14.0/pdf/38396586-010.pdf