31-битные вычисления - 31-bit computing

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

В 1983 году IBM представила 31-битную адресацию в архитектуре мэйнфрейма System / 370 -XA в качестве обновления до 24-битной физической и виртуальной и переходной 24-битной-виртуальной / 26-битной физической адресации более ранних моделей. Это усовершенствование позволило увеличить адресное пространство в 128 раз, что позволило программам адресовать память размером более 16  МБ (называемую «над чертой»). Включена поддержка COBOL , FORTRAN и более поздних версий Linux / 390 .

В начале 1980- х была представлена Motorola 68012 ; у него были 32-битные регистры данных и адреса, как у Motorola 68010 , но вместо того, чтобы предоставлять младшие 24 бита адреса на адресных контактах, он предоставлял все, кроме бит 30 на адресных контактах.

31-битные мэйнфреймы IBM

Архитектура

В System / 360 , кроме 360/67 и ранних архитектур System / 370 , регистры общего назначения имели ширину 32 бита, машина выполняла 32-битные арифметические операции, а адреса всегда хранились в 32-битных словах, поэтому архитектура считалась 32-битной , но машины игнорировали верхние 8 бит адреса, что приводило к 24-битной адресации. С расширением XA только старший бит (бит 0) в слове игнорировался для адресации. Исключением является то, что инструкции переключения режима также использовали бит 0. Было по крайней мере две причины, по которым IBM не реализовала 32-битную адресацию 360/67

  1. Команды управления циклом BXH и BXLE проводили сравнения со знаком .
  2. Большая часть существующего программного обеспечения использует бит 0 как индикатор конца списка.

Переход

Переход был непростым: программисты на ассемблере, в том числе архитекторы и разработчики операционных систем IBM, почти двадцать лет использовали запасной байт в верхней части адреса для флагов. IBM решила предоставить две формы адресации, чтобы минимизировать боль: если был включен самый старший бит (бит 0) 32-битного адреса, следующие 31 бит интерпретировались как виртуальный адрес. Если старший бит был выключен, то только младшие 24 бита обрабатывались как виртуальный адрес (как и в системах до XA). Таким образом, программы могут продолжать использовать семь младших битов старшего байта для других целей, пока они не убирают верхний бит. Единственными программами, требующими модификации, были те, которые устанавливали верхний (крайний левый) бит слова, содержащего адрес. Это также повлияло на сравнение адресов: крайний левый бит слова также интерпретируется как знаковый бит в арифметике дополнения до 2, указывая отрицательное число, если бит 0 включен. Программы, использующие инструкции арифметического сравнения со знаком, могут получить обратные результаты. Два эквивалентных адреса можно было бы сравнить как неравные, если бы у одного из них был установлен знаковый бит, даже если остальные биты были идентичны. Большая часть этого была невидима для программистов, использующих языки высокого уровня, такие как COBOL или FORTRAN , и IBM в течение некоторого времени помогала переходу с двухрежимным оборудованием.

Некоторые машинные инструкции в этом 31-битном режиме адресации изменяют бит режима адресации как, возможно, преднамеренный побочный эффект. Например, исходные инструкции вызова подпрограммы BAL, Branch и Link и его регистр-регистровый эквивалент, BALR, Branch and Link Register, хранят определенную информацию о состоянии, код длины инструкции, код условия и маску программы в верхнем байте. обратного адреса. Была добавлена ​​инструкция 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, 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. В отличие от перехода 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.

Рубин и Smalltalk

Интерпретаторы для языков Ruby и Smalltalk используют младший бит, чтобы определить, является ли значение распакованным целым числом или нет. Это означает, что на 32-битных машинах (или 16-битных машинах с 32-битными указателями) 31-битные целые числа распаковываются. В случае переполнения результат помещается в упакованный объект, что означает, что он должен быть выделен и собран в мусор. Таким образом, если у вас есть 32-битные значения, которые не подходят для 31-битного формата со знаком, они будут очень неэффективны в этих интерпретаторах. То же самое и с 63-битными целыми числами без упаковки на 64-битных компьютерах. Подобные конструкции можно найти в LISP и некоторых других языках, переменные которых могут принимать значения любого типа. В некоторых случаях имелась аппаратная поддержка для такого типа дизайна: см. Архитектура с тегами и машина на Лиспе .

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