В компьютерной архитектуры , 31-битных чисел , адресов памяти , или других данных единиц являются те , которые являются 31 битов в ширину.
В 1983 году IBM представила 31-битную адресацию в архитектуре мэйнфрейма System / 370 -XA в качестве обновления до 24-битной физической и виртуальной [1] и переходной 24-битной виртуальной / 26-битной физической, [2] [ 3] обращение к более ранним моделям. [4] [5] Это усовершенствование позволило увеличить адресное пространство в 128 раз, что позволило программам адресовать память размером более 16 МБ (что называется «над строкой»). [6] [1] Включена поддержка COBOL , FORTRAN и более поздних версий Linux / 390 .
В начале 1980- х была представлена Motorola 68012 ; у него были 32-битные регистры данных и адреса, как у Motorola 68010 , но вместо того, чтобы предоставлять младшие 24 бита адреса на адресных контактах, он предоставлял все, кроме 30-го бита на адресных контактах. [7]
31-битные мэйнфреймы IBM
Архитектура
В System / 360 , кроме 360/67 и ранних архитектур System / 370 , регистры общего назначения имели ширину 32 бита, машина выполняла 32-битные арифметические операции, а адреса всегда хранились в 32-битных словах, поэтому архитектура считалась 32-битной , но машины игнорировали верхние 8 бит адреса, что приводило к 24-битной адресации. С расширением XA только старший бит (бит 0) в слове игнорировался для адресации. Исключением является то, что инструкции переключения режима также использовали бит 0. Было как минимум две причины, по которым IBM не реализовала 32-битную адресацию 360/67
- Команды управления циклом BXH и BXLE проводили сравнения со знаком .
- Большая часть существующего программного обеспечения использует бит 0 как индикатор конца списка. [8]
Переход
Переход был непростым: программисты на ассемблере, в том числе архитекторы и разработчики операционных систем IBM, почти двадцать лет использовали запасной байт в верхней части адреса для флагов. [9] IBM решила предоставить две формы адресации, чтобы минимизировать боль: если был включен самый старший бит (бит 0) 32-битного адреса, следующие 31 бит интерпретировались как виртуальный адрес. Если старший бит был выключен, то только младшие 24 бита обрабатывались как виртуальный адрес (как и в системах до XA). Таким образом, программы могут продолжать использовать семь младших битов старшего байта для других целей, пока они не убирают верхний бит. Единственными программами, требующими модификации, были те, которые устанавливали верхний (крайний левый) бит слова, содержащего адрес. Это также повлияло на сравнение адресов: крайний левый бит слова также интерпретируется как знаковый бит в арифметике дополнения до 2, указывая отрицательное число, если бит 0 включен. Программы, использующие инструкции арифметического сравнения со знаком, могут получить обратные результаты. Два эквивалентных адреса можно было бы сравнить как неравные, если бы у одного из них был установлен знаковый бит, даже если остальные биты были идентичны. Большая часть этого была невидима для программистов, использующих языки высокого уровня, такие как COBOL [10] или FORTRAN , [3] [11], и IBM в течение некоторого времени способствовала переходу с двухрежимным оборудованием.
Некоторые машинные инструкции в этом 31-битном режиме адресации изменяют бит режима адресации как, возможно, преднамеренный побочный эффект. Например, исходные инструкции вызова подпрограммы BAL, Branch и Link и его регистр-регистровый эквивалент, BALR, Branch and Link Register, хранят определенную информацию о состоянии, код длины инструкции [12], код условия и маску программы, в старший байт обратного адреса. Была добавлена инструкция BAS, Branch and Save, чтобы разрешить 31-битные адреса возврата. BAS и его эквивалент регистр-регистр, BASR, Branch and Save Register, были частью набора команд System / 360 Model 67 , которая была единственной моделью System / 360, допускающей адреса длиной более 24 бит. Эти инструкции были сохранены, но были изменены и расширены для 31-битной адресации.
Дополнительные инструкции для поддержки 24/31-битной адресации включают две новые инструкции вызова / возврата регистр-регистр, которые также влияют на изменение режима адресации (например, Branch and Save and Set Mode, BASSM, [13] 24/31- битная версия вызов, при котором адрес связи, включая режим, сохраняется, и переход осуществляется по адресу, возможно, в другом режиме, а также BSM, Branch и Set Mode, 24/31-битная версия возврата, где возврат осуществляется непосредственно к предыдущему сохраненный адрес связи и в предыдущем режиме). Взятые вместе, BASSM и BSM разрешают 24-битные вызовы в 31-бит (и возвращаются к 24-битным), 31-битные вызовы в 24-битные (и возвращаются к 31-битным), 24-битные вызовы в 24-битные ( и вернуться к 24-битному) и 31-битному вызову к 31-битному (и вернуться к 31-битному).
Подобно BALR 14,15 (24-битная форма вызова), BASSM используется как BASSM 14,15, где адрес связи и режим сохраняются в регистре 14, а ветвление осуществляется по адресу подпрограммы и режиму. указан в регистре 15. В некоторой степени аналогично BCR 15,14 (24-битная форма безусловного возврата), BSM используется как BSM 0,14, где 0 указывает, что текущий режим не сохранен (программа выходит из подпрограмму, во всяком случае), и должен быть выполнен возврат к вызывающему по адресу и в режиме, указанном в регистре 14. См. Публикацию IBM MVS / Библиотека системного программирования с расширенной архитектурой: 31-разрядная адресация, GC28-1158-1, где приведены обширные примеры использования BAS, BASR, BASSM и BSM, в частности, стр. 29–30.
370 / Архитектура ESA
В 1990-х годах IBM представила архитектуру 370 / ESA (позже названную 390 / ESA и, наконец, ESA / 390 или System / 390, сокращенно S / 390), завершив эволюцию до полной 31-битной виртуальной адресации и сохранив этот флаг режима адресации. Эти более поздние архитектуры позволяют использовать более 2 ГБ физической памяти и несколько одновременных адресных пространств размером до 2 ГБ каждое. По состоянию на середину 2006 года было слишком много программ, чрезмерно ограниченных этим множественным 31-битным режимом адресации. [ необходима цитата ]
z / Архитектура
IBM преодолела барьер линейной адресации в 2 ГБ («планку») в 2000 году, представив первую 64-разрядную систему z / Architecture , IBM zSeries Model 900. [1] [14] В отличие от перехода на XA, z / Architecture не резервирует верхний бит для идентификации более раннего кода. z / Architecture поддерживает совместимость с 24-битным и 31-битным кодом, даже более старый код, работающий одновременно с новым 64-битным кодом.
Linux / 390
Поскольку Linux / 390 был впервые выпущен для существующего оборудования для 32-битных данных / 31-битной адресации в 1999 году, начальные приложения Linux для мэйнфреймов, скомпилированные в режиме pre-z / Architecture, также ограничены 31-битной адресацией. Это ограничение исчезло с 64-битным оборудованием, 64-битным Linux на IBM Z и 64-битными приложениями Linux. В 64-битных дистрибутивах Linux по-прежнему работают 32-битные программы адресации данных / 31-бит. 31-битная адресация IBM позволяет 31-битному коду использовать дополнительную память. Однако в любой момент в каждом рабочем адресном пространстве может находиться максимум 2 ГБ. Для не 64-битного Linux на процессорах с 31-битной адресацией можно назначить память над полосой 2 ГБ в качестве RAM-диска. Поддержка 31-битного ядра Linux (без пользовательского пространства) была удалена в версии 4.1. [15]
Рубин и Smalltalk
Интерпретаторы для языков Ruby и Smalltalk используют младший бит, чтобы определить, является ли значение распакованным целым числом или нет. Это означает, что на 32-битных машинах (или 16-битных машинах с 32-битными указателями) 31-битные целые числа распаковываются. В случае переполнения результат помещается в упакованный объект, что означает, что он должен быть выделен и собран в мусор. Таким образом, если у вас есть 32-битные значения, которые не подходят для 31-битного формата со знаком, они будут очень неэффективны в этих интерпретаторах. То же самое и с 63-битными целыми числами без упаковки на 64-битных компьютерах. Подобные конструкции можно найти в LISP и некоторых других языках, переменные которых могут принимать значения любого типа. В некоторых случаях имелась аппаратная поддержка этого типа дизайна: см. Тегированная архитектура и машина на Лиспе .
Рекомендации
- ^ a b c «Краткая история виртуальной памяти и 64-битной адресации» .
- ^ "с переходной поддержкой 26-бит"
- ^ а б К.Э. Пламбек (2002). «Развитие и атрибуты z / Architecture » » (PDF) .
- ^ Роберт Т. Фертиг (май 1983 г.). "XA: Вид из окопов (стр.122-136)". Датамация .
- ^ Рональд Л. Бонд (май 1983 г.). "XA: Вид с Белых равнин (стр.139-152)". Датамация .
- ^ "... для запуска в 31-битной области над строкой, ... «Перезапись для запуска в 31-битной области» . Компьютерный мир . 27 октября 1986 г. с. 13.
- ^ MC68010 / MC68012 16- / 32-разрядные микропроцессоры виртуальной памяти (PDF) . Motorola Semiconductor. Май 1985 г.
- ^ "... старший бит последнего полного слова должен быть установлен в единицу, чтобы указать конец списка." «ПОДОЖДИТЕ - дождитесь одного или нескольких событий» .
- ^ В самом деле, в списке адресов с параметрами переменной длины для последней записи адреса обычно был установлен самый старший бит, равный 1, в то время как для других записей адреса требовалось, чтобы их старший бит был установлен на 0.
- ^ «VS Cobol II компилирует программы на языке Cobol в 31-битном формате» . 1988-02-08.
- ^ "для размещения больших массивов в FORTRAN."
- ^ Поскольку код длины инструкции - 00b для BALR и 01b для BAL, бит высокого порядка всегда гарантированно установлен в 0, тем самым указывая 24-битный режим для BALR и BAL в XA и более поздних системах.
- ^ "BASSM (переход, сохранение и установка режима)" «Использование инструкций BASSM и BSM» .
- ^ "2-гигабайтный адрес из личного кабинета пользователя называется панелью" «Введение в новый мэйнфрейм: основы z / OS» (PDF) .
- ^ «4.1 Окно слияния, часть 1» . LWN. 15 апреля 2015 года.