Порядок байтов
Эта статья нуждается в дополнительных цитатах для проверки . ( июль 2020 г. ) |
В вычислениях порядок , при байтов памяти в слове цифровых данных передается по среде передачи данных или адресуется (по возрастанию адреса) в компьютера байта этом учитывается только значимость по сравнению с ранним доступом. Порядок байтов в первую очередь выражается как обратный порядок байтов (BE) или прямой порядок байтов (LE) — термины, введенные Дэнни Коэном в информатику для обозначения порядка данных в заметках об экспериментах в Интернете, опубликованных в 1980 году. [1] Прилагательное с порядком байтов берет свое начало в трудах англо-ирландского писателя XVIII века Джонатана Свифта . В романе 1726 года « Путешествия Гулливера » он изображает конфликт между сектами лилипутов, разделившихся на разбивающих скорлупу вареного яйца с большого конца или с маленького конца. [2] [3] По аналогии, ЦП может прочитать цифровое слово первым большим концом или первым маленьким концом.
Компьютеры хранят информацию в группах двоичных битов разного размера. Каждой группе присваивается номер, называемый ее адресом , который компьютер использует для доступа к этим данным. На большинстве современных компьютеров наименьшая группа данных с адресом имеет длину восемь бит и называется байтом. Большие группы содержат два и более байта, например, 32-битное слово содержит четыре байта. Компьютер может нумеровать отдельные байты в большой группе двумя способами, начиная с любого конца. Оба типа порядка байтов широко используются в цифровой электронной технике. Первоначальный выбор порядка байтов в новом проекте часто бывает произвольным, но последующие технологические изменения и обновления закрепляют существующий порядок байтов для обеспечения обратной совместимости .
В системе с прямым порядком байтов старший байт слова хранится по наименьшему адресу памяти , а младший байт — по наибольшему. В системе с прямым порядком байтов, напротив, младший байт хранится по наименьшему адресу. [4] [5] [6] Таким образом, из этих двух вариантов обратный порядок байтов ближе к тому, как цифры чисел записываются слева направо в английском языке, сравнивая цифры с байтами. Двусторонний порядок байтов — это функция, поддерживаемая многочисленными компьютерными архитектурами, в которых предусмотрен переключаемый порядок байтов при выборке и сохранении данных или при выборке инструкций. Другие порядки обычно называются средним порядком байтов или смешанным порядком байтов . [7] [8] [9] [10]
Прямой порядок байтов — это доминирующий порядок в сетевых протоколах, например, в наборе протоколов Интернета , где он называется сетевым порядком , при котором первым передается наиболее значимый байт. И наоборот, прямой порядок байтов является доминирующим порядком для процессорных архитектур ( x86 , большинство реализаций ARM , базовые реализации RISC-V ) и связанной с ними памяти. Форматы файлов могут использовать любой порядок; некоторые форматы используют смесь того и другого или содержат индикатор того, какой порядок используется во всем файле. [11]
Характеристики
[ редактировать ]Компьютерная память состоит из последовательности ячеек памяти (наименьших адресуемых единиц); в машинах, поддерживающих байтовую адресацию , эти единицы называются байтами . Каждый байт идентифицируется и доступен в аппаратном и программном обеспечении по его адресу в памяти . Если общее количество байтов в памяти равно n , то адреса нумеруются от 0 до n - 1.
Компьютерные программы часто используют структуры или поля данных , которые могут содержать больше данных, чем можно хранить в одном байте. В контексте этой статьи, где его тип не может быть сколь угодно сложным, «поле» состоит из последовательной последовательности байтов и представляет собой «простое значение данных», которым – по крайней мере потенциально – можно манипулировать с помощью аппаратной одной инструкции . В большинстве систем адресом многобайтового простого значения данных является адрес его первого байта (байта с наименьшим адресом). Есть исключения из этого правила - например, инструкция Add IBM 1401 адресует поля переменной длины в их младшей позиции (самой высокой адресации), при этом их длина определяется словесным знаком, установленным в их старшей (самой низкой позиции). -адресная) позиция. Когда выполняется такая операция, как сложение, процессор начинает с позиций младшего порядка по старшим адресам двух полей и переходит к старшим. [ нужна ссылка ]
Еще одним важным атрибутом байта, являющегося частью «поля», является его «значение». Эти атрибуты частей поля играют важную роль в последовательности доступа к байтам компьютерного оборудования, точнее: алгоритмов низкого уровня, влияющих на результаты компьютерной инструкции.
Числа
[ редактировать ]Позиционные системы счисления (в основном по основанию 2 или реже по основанию 10) являются преобладающим способом представления и, в частности, манипулирования целочисленными данными с помощью компьютеров. В чистом виде это справедливо для неотрицательных целых чисел среднего размера, например типа данных C. unsigned
. В такой системе счисления значение цифры, которую она вносит в целое число, определяется не только ее значением как отдельной цифры, но и положением, которое она занимает в полном числе, называемым ее значением. Эти позиции могут быть отображены в памяти главным образом двумя способами: [12]
- Уменьшение числового значения с увеличением адресов памяти (или увеличением времени), известное как big-endian и
- Увеличение числового значения с увеличением адреса памяти (или увеличением времени), известное как small-endian .
В этих выражениях термин «конец» подразумевает крайнюю точку, где происходит большая соотв. небольшое записывается Сначала поле значение, а именно, где начинается .
Целочисленные данные, которые напрямую поддерживаются компьютерным оборудованием , имеют фиксированную ширину низкой степени 2, например, 8 бит ≙ 1 байт, 16 бит ≙ 2 байта, 32 бита ≙ 4 байта, 64 бита ≙ 8 байт, 128 бит ≙ 16 байт. Последовательность низкоуровневого доступа к байтам такого поля зависит от выполняемой операции. сначала осуществляется доступ к младшему байту Для операций сложения , вычитания и умножения . сначала осуществляется доступ к самому старшему байту Для деления и сравнения . См. § Порядок расчета .
Текст
[ редактировать ]Когда строки символов (текста) необходимо сравнить друг с другом, например, для поддержки какого-либо механизма, такого как сортировка , это очень часто делается лексикографически, когда один позиционный элемент (символ) также имеет позиционное значение. Лексикографическое сравнение означает почти везде: первый символ занимает первое место – как в телефонной книге. Почти все машины, которые могут сделать это с помощью одной инструкции, имеют обратный порядок байтов или, по крайней мере, смешанный порядок байтов. [ нужна ссылка ]
Целые числа, записанные в виде текста, всегда представляются в памяти первой старшей цифрой, что похоже на обратный порядок байтов, независимо от направления текста .
Байтовая адресация
[ редактировать ]Когда байты памяти печатаются последовательно слева направо (например, в шестнадцатеричном дампе ), представление целых чисел с прямым порядком байтов имеет значение, увеличивающееся слева направо. Другими словами, при визуализации он появляется задом наперед, что может быть нелогичным.
Такое поведение возникает, например, в FourCC или подобных методах, которые включают упаковку символов в целое число, так что оно становится последовательностью определенных символов в памяти. Например, возьмем строку «ДЖОН», хранящуюся в шестнадцатеричном формате ASCII . На машинах с прямым порядком байтов значение отображается слева направо, что соответствует правильному порядку строк для чтения результата («JOH N»). Но на машине с прямым порядком байтов можно было бы увидеть «NHO J». Машины среднего звена еще больше усложняют ситуацию; например, на PDP-11 32-битное значение сохраняется в виде двух 16-битных слов «JO», «HN» с прямым порядком байтов, при этом символы в 16-битных словах сохраняются с прямым порядком байтов, в результате чего в «ОЙН Х». [ нужна ссылка ]
Замена байтов
[ редактировать ]Обмен байтов заключается в перестановке байтов для изменения порядка байтов. Многие компиляторы предоставляют встроенные функции , которые, скорее всего, будут скомпилированы в собственные инструкции процессора ( bswap
/ movbe
), такой как __builtin_bswap32
. Программные интерфейсы для замены включают в себя:
- Стандартные функции порядка байтов сети (от/до BE, до 32-бит). [13] Windows имеет 64-битное расширение.
winsock2.h
. - BSD и Glibc
endian.h
функции (из/в BE и LE, до 64-бит). [14] - macOS
OSByteOrder.h
макросы (из/в BE и LE, до 64-бит). - The
std::byteswap
функция в C++23 . [15]
Некоторые наборы инструкций ЦП обеспечивают встроенную поддержку замены байтов с порядком байтов, например bswap
[16] ( x86 — 486 и новее, i960 — i960Jx и новее [17] ), и rev
[18] ( ARMv6 и более поздние версии).
Некоторые компиляторы имеют встроенные средства для замены байтов. Например, компилятор Intel Fortran поддерживает нестандартную CONVERT
указатель при открытии файла, например: OPEN(unit, CONVERT='BIG_ENDIAN',...)
. Другие компиляторы имеют возможность генерировать код, который глобально обеспечивает преобразование для всех операций ввода-вывода с файлами. Это позволяет повторно использовать код в системе с противоположным порядком байтов без модификации кода.
Соображения
[ редактировать ]Упрощенный доступ к части поля
[ редактировать ]В большинстве систем адрес многобайтового значения — это адрес его первого байта (байта с наименьшим адресом); Системы с прямым порядком байтов этого типа обладают свойством, заключающимся в том, что для достаточно малых значений данных одно и то же значение может быть прочитано из памяти разной длины без использования разных адресов (даже если на выравнивание наложены ограничения ). Например, 32-битная ячейка памяти с содержимым 4A 00 00 00
могут быть прочитаны по тому же адресу, что и 8-битный (значение = 4A), 16-битный (004A), 24-битный (00004A) или 32-битный (0000004A), все из которых сохраняют одно и то же числовое значение. Хотя это свойство прямого порядка байтов редко используется напрямую программистами высокого уровня, оно иногда применяется оптимизаторами кода, а также программистами на языке ассемблера . Хотя это не разрешено C++, такой код каламбура типов допускается как «определяемый реализацией» стандартом C11. [19] и обычно используется [20] в коде, взаимодействующем с оборудованием. [21]
Порядок расчета
[ редактировать ]Некоторые операции в позиционных системах счисления имеют естественный или предпочтительный порядок выполнения элементарных шагов. Этот порядок может повлиять на их производительность на небольших процессорах и микроконтроллерах с байтовой адресацией . Однако высокопроизводительные процессоры обычно извлекают многобайтовые операнды из памяти за то же время, за которое они извлекают один байт, поэтому порядок байтов не влияет на сложность оборудования.
Сложение, вычитание и умножение начинаются с позиции младшей значащей цифры и распространяют перенос на последующую, более значащую позицию. В большинстве систем адрес многобайтового значения — это адрес его первого байта (байта с наименьшим адресом). Реализация этих операций немного проще при использовании машин с прямым порядком байтов, где первый байт содержит младшую цифру.
Сравнение и деление начинаются с самой старшей цифры и распространяют возможный перенос на последующие менее значащие цифры. Для числовых значений фиксированной длины (обычно длиной 1,2,4,8,16) реализация этих операций немного проще на машинах с прямым порядком байтов.
Некоторые процессоры с прямым порядком байтов (например, IBM System/360 и его преемники) содержат аппаратные инструкции для лексикографического сравнения строк символов различной длины .
Обычная транспортировка данных с помощью оператора присваивания в принципе не зависит от порядка байтов процессора.
Аппаратное обеспечение
[ редактировать ]Многие исторические и существующие процессоры используют представление памяти с прямым порядком байтов либо исключительно, либо в качестве конструктивного варианта. IBM System/360 использует обратный порядок байтов, как и его преемники System/370 , ESA/390 и z/Architecture . PDP -10 использует адресацию с прямым порядком байтов для байтовых инструкций. Миникомпьютер IBM Series/1 использует обратный порядок байтов. Процессоры Motorola 6800/6801 , 6809 и 68000 используют формат big-endian. К архитектурам с прямым порядком байтов относятся IBM z/Architecture и OpenRISC .
В Datapoint 2200 использовалась простая последовательная логика с прямым порядком байтов для облегчения распространения переноса . Когда Intel разработала микропроцессор 8008 для Datapoint, для совместимости они использовали прямой порядок байтов. Однако, поскольку Intel не смогла доставить 8008 вовремя, Datapoint использовала эквивалент интеграции среднего масштаба , но прямой порядок байтов сохранялся в большинстве разработок Intel, включая MCS-48 и 8086 , а также их x86 . преемников [22] [23] DEC Alpha , Atmel AVR , VAX , семейство MOS Technology 6502 (включая Western Design Center 65802 и 65C816 ), Zilog Z80 (включая Z180 и eZ80 ), Altera Nios II и многие другие процессоры и семейства процессоров также малочисленны. с порядком байтов.
Intel 8051 , в отличие от других процессоров Intel, ожидает 16-битные адреса для LJMP и LCALL в формате с прямым порядком байтов; однако инструкции xCALL сохраняют адрес возврата в стеке в формате с прямым порядком байтов. [24]
Архитектуры набора команд IA-32 и x86-64 используют формат с прямым порядком байтов. Другие архитектуры набора команд, которые следуют этому соглашению и допускают только режим с прямым порядком байтов, включают Nios II , Andes Technology NDS32 и Qualcomm Hexagon .
Некоторые архитектуры набора команд являются «двусторонними» и позволяют запускать программное обеспечение с любым порядком байтов; к ним относятся Power ISA , SPARC , ARM AArch64 , C-Sky и RISC-V . IBM AIX и IBM i работают в режиме прямого порядка байтов на Power ISA с прямым порядком байтов; Первоначально Linux работал в режиме с прямым порядком байтов, но к 2019 году IBM перешла на режим с прямым порядком байтов для Linux, чтобы облегчить перенос программного обеспечения Linux с x86 на Power. [25] [26] SPARC не имеет соответствующего развертывания с прямым порядком байтов, поскольку и Oracle Solaris, и Linux работают в режиме с прямым порядком байтов в системах SPARC с двойным порядком байтов, и на практике их можно считать прямым порядком байтов. ARM, C-Sky и RISC-V не имеют соответствующих развертываний с прямым порядком байтов и на практике могут считаться с прямым порядком байтов.
Двусторонний порядок байтов
[ редактировать ]Некоторые архитектуры (включая ARM версии 3 и выше, PowerPC , Alpha , SPARC V9, MIPS , Intel i860 , PA-RISC , SuperH SH-4 и IA-64 ) имеют настройку, которая позволяет переключать порядок байтов при выборке и сохранении данных, инструкции извлекает, или и то, и другое. Эта функция может повысить производительность или упростить логику сетевых устройств и программного обеспечения. Слово bi-endian , когда говорится об аппаратном обеспечении, обозначает способность машины вычислять или передавать данные в любом формате с порядковым порядком байтов.
Многие из этих архитектур можно переключить с помощью программного обеспечения на определенный формат по умолчанию (обычно это делается при запуске компьютера); однако в некоторых системах порядок байтов по умолчанию выбирается аппаратно на материнской плате и не может быть изменен с помощью программного обеспечения (например, Alpha, которая работает только в режиме с обратным порядком байтов на Cray T3E ).
Термин bi-endian относится прежде всего к тому, как процессор обрабатывает доступ к данным. Доступ к инструкциям (выборка командных слов) на данном процессоре может по-прежнему предполагать фиксированный порядок байтов, даже если доступ к данным полностью двусторонний, хотя это не всегда так, как, например, в Intel IA-64 процессоре Itanium на базе , который позволяет и то и другое.
Некоторым процессорам с номинальным обратным порядком байтов требуется помощь материнской платы для полного переключения порядка байтов. Например, 32-битные процессоры PowerPC , ориентированные на настольные компьютеры , в режиме прямого порядка байтов действуют как процессоры с прямым порядком байтов с точки зрения исполняемых программ, но они требуют, чтобы материнская плата выполнила 64-битную замену во всех 8-байтовых полосах для убедитесь, что представление вещей с прямым порядком байтов будет применяться к устройствам ввода-вывода . В отсутствие этого необычного аппаратного обеспечения материнской платы программное обеспечение драйвера устройства должно записывать данные по разным адресам, чтобы отменить незавершенное преобразование, а также выполнять обычную замену байтов. [ оригинальное исследование? ]
Некоторые процессоры, такие как многие процессоры PowerPC, предназначенные для встроенного использования, и почти все процессоры SPARC, позволяют выбирать порядок байтов для каждой страницы.
Процессоры SPARC с конца 1990-х годов (процессоры, совместимые с SPARC v9) позволяют выбирать порядок байтов данных для каждой отдельной инструкции, которая загружается из памяти или сохраняется в памяти.
Архитектура ARM поддерживает два режима с прямым порядком байтов, называемые BE-8 и BE-32 . [27] Процессоры до ARMv5 поддерживают только BE-32 или режим, инвариантный по словам. Здесь любой естественно выровненный 32-битный доступ работает как в режиме с прямым порядком байтов, но доступ к байту или 16-битному слову перенаправляется на соответствующий адрес, а невыровненный доступ не допускается. В ARMv6 представлен BE-8 или байт-инвариантный режим, в котором доступ к одному байту работает как в режиме с прямым порядком байтов, но доступ к 16-битному, 32-битному или (начиная с ARMv8) 64-битному слову приводит к замене байтов. данных. Это упрощает доступ к невыровненной памяти, а также доступ к отображаемой памяти к регистрам, отличным от 32-битных.
Многие процессоры имеют инструкции для преобразования слова в регистре в обратный порядок байтов, то есть меняют порядок байтов в 16-, 32- или 64-битном слове.
Последние процессоры Intel с архитектурой x86 и x86-64 имеют инструкцию MOVBE ( Intel Core начиная с поколения 4, после Atom ), [28] который извлекает слово в формате с прямым порядком байтов из памяти или записывает слово в память в формате с прямым порядком байтов. В остальном эти процессоры полностью придерживаются прямого порядка байтов.
Существуют также устройства, которые в разных местах используют разные форматы. Например, измеритель заряда батареи BQ27421 Texas Instruments использует формат с прямым порядком байтов для своих регистров и формат с прямым порядком байтов для оперативной памяти .
SPARC исторически использовал прямой порядок байтов до версии 9, которая является двусторонним порядком байтов. Аналогичным образом, ранние процессоры IBM POWER имели обратный порядок байтов, но потомки PowerPC и Power ISA теперь имеют обратный порядок байтов. Архитектура ARM была с прямым порядком байтов до версии 3, когда она стала двупорядковой.
Плавающая точка
[ редактировать ]Хотя многие процессоры используют хранилище с прямым порядком байтов для всех типов данных (целые, с плавающей запятой), существует ряд аппаратных архитектур, в которых числа с плавающей запятой представлены в форме с прямым порядком байтов, а целые числа представляются в форме с прямым порядком байтов. [29] Существуют процессоры ARM , которые имеют представление чисел с плавающей запятой со смешанным порядком байтов для чисел двойной точности: каждое из двух 32-битных слов сохраняется с прямым порядком байтов, но самое старшее слово сохраняется первым. VAX с плавающей запятой хранит 16-битные слова с прямым порядком байтов в порядке с прямым порядком байтов. Поскольку существовало множество форматов с плавающей запятой, для которых не было представления в стандарте сети, стандарт XDR использует в качестве представления IEEE 754 с прямым порядком байтов. Поэтому может показаться странным, что широко распространенный стандарт чисел с плавающей запятой IEEE 754 не определяет порядок байтов. [30] Теоретически это означает, что даже стандартные данные IEEE с плавающей запятой, записанные одной машиной, могут быть недоступны для чтения другой. Однако на современных стандартных компьютерах (т. е. реализующих IEEE 754) можно с уверенностью предположить, что порядок байтов одинаков для чисел с плавающей запятой и для целых чисел, что делает преобразование простым независимо от типа данных. Однако небольшие встроенные системы , использующие специальные форматы с плавающей запятой, могут оказаться другим вопросом.
Данные переменной длины
[ редактировать ]Большинство рассмотренных до сих пор инструкций содержат размер (длину) своих операндов в коде операции . Часто доступные длины операндов составляют 1, 2, 4, 8 или 16 байт. Но существуют также архитектуры, в которых длина операнда может храниться в отдельном поле инструкции или вместе с самим операндом, например, с помощью словесного знака . Такой подход допускает длину операндов до 256 байт и более. Типами данных таких операндов являются символьные строки или BCD . Машины, способные манипулировать такими данными с помощью одной инструкции (например, сравнить, добавить), включают IBM 1401 , 1410 , 1620 , System/360 , System/370 , ESA/390 и z/Architecture , все они имеют обратный порядок байтов.
средний конец
[ редактировать ]многочисленные другие упорядочивания, обычно называемые средне-порядковыми или смешанно-порядковыми Возможны .
PDP -11 в принципе представляет собой 16-битную систему с прямым порядком байтов. Инструкции по преобразованию между значениями с плавающей запятой и целыми числами в дополнительном процессоре с плавающей запятой PDP-11/45, PDP-11/70 и в некоторых более поздних процессорах хранят 32-битные целочисленные значения двойной точности с 16-битные половины поменялись местами в ожидаемом порядке с прямым порядком байтов. Компилятор UNIX C использовал тот же формат для 32-битных длинных целых чисел. Этот порядок известен как PDP-endian . [31]
UNIX была одной из первых систем, позволяющих компилировать один и тот же код для платформ с разными внутренними представлениями. Одна из первых конвертированных программ должна была распечатывать Unix
, но на Series/1 он печатал nUxi
вместо. [32]
Способ интерпретации этого порядка байтов состоит в том, что он хранит 32-битное целое число как два 16-битных слова с прямым порядком байтов с порядком слов с прямым порядком байтов:
смещение байта | 8-битное значение | 16-битное значение с прямым порядком байтов |
---|---|---|
0 | 0Bh | 0A0Bh |
1 | 0Ah | |
2 | 0Dh | 0C0Dh |
3 | 0Ch |
Дескрипторы сегментов IA -32 и совместимых процессоров сохраняют 32-битный базовый адрес сегмента, хранящийся в прямом порядке, но в четырех непоследовательных байтах, в относительных позициях 2, 3, 4 и 7 начала дескриптора. [33]
Программное обеспечение
[ редактировать ]Логический дизайн
[ редактировать ]Языки описания оборудования (HDL), используемые для выражения цифровой логики, часто поддерживают произвольный порядок байтов с произвольной степенью детализации. Например, в SystemVerilog слово может быть определено как с прямым порядком байтов или с прямым порядком байтов. [ нужна ссылка ]
Файлы и файловые системы
[ редактировать ]Распознавание порядка байтов важно при чтении файла или файловой системы, созданных на компьютере, с другим порядком байтов.
Последовательные неформатированные файлы Фортрана, созданные с одним порядком байтов, обычно не могут быть прочитаны в системе с другим порядком байтов, поскольку Фортран обычно реализует запись (определяемую как данные, записанные одним оператором Фортрана), поскольку данным предшествуют и следуют поля счетчика, которые представляют собой целые числа, равные к количеству байтов в данных. Попытка прочитать такой файл с помощью Фортрана в системе с другим порядком байтов приводит к ошибке времени выполнения, поскольку поля счетчика неверны.
в Юникоде Текст может опционально начинаться с метки порядка байтов (BOM), чтобы указать порядок байтов файла или потока. Его кодовая точка — U+FEFF. в UTF-32 файл с прямым порядком байтов должен начинаться с Например, 00 00 FE FF
; прямой порядок байтов должен начинаться с FF FE 00 00
.
Форматы двоичных данных приложения, такие как файлы MATLAB .mat или формат данных .bil , используемые в топографии, обычно не зависят от порядка байтов. Это достигается за счет хранения данных всегда с одним фиксированным порядком байтов или переноса с данными переключателя для указания порядка байтов. Примером первого является двоичный формат файла XLS , который переносим между системами Windows и Mac и всегда имеет прямой порядок байтов, требуя, чтобы приложение Mac меняло местами байты при загрузке и сохраняло при работе на процессоре Motorola 68K или PowerPC с прямым порядком байтов. [34]
Файлы изображений TIFF являются примером второй стратегии, заголовок которой сообщает приложению о порядке байтов их внутренних двоичных целых чисел. Если файл начинается с подписи MM
это означает, что целые числа представлены в виде big-endian, а II
означает прямой порядок байтов. Для каждой из этих подписей требуется одно 16-битное слово, и они являются палиндромами , поэтому их порядок байтов не зависит от порядка байтов. I
означает Intel и M
означает Моторола . Процессоры Intel имеют прямой порядок байтов, а процессоры Motorola 680x0 — обратный порядок байтов. Эта явная подпись позволяет программе чтения TIFF при необходимости менять местами байты, когда данный файл был создан программой записи TIFF, работающей на компьютере с другим порядком байтов.
В результате своей первоначальной реализации на платформе Intel 8080 независимая от операционной системы файловая система таблицы размещения файлов (FAT) определяется с прямым порядком байтов, даже на платформах, использующих другой порядок байтов, что требует операций замены байтов для поддержания FAT на этих платформах.
Известно, что ZFS , сочетающая в себе файловую систему и менеджер логических томов , обеспечивает адаптивный порядок байтов и работает как с системами с прямым порядком байтов, так и с прямым порядком байтов. [35]
сеть
[ редактировать ]Во многих документах IETF RFC используется термин «сетевой порядок» , означающий порядок передачи байтов по сети в сетевых протоколах . Среди прочего, исторический RFC 1700 определяет сетевой порядок протоколов в наборе протоколов Интернета как обратный порядок байтов. [36]
Однако не все протоколы используют обратный порядок байтов в качестве сетевого порядка. Протокол блока сообщений сервера (SMB) использует порядок байтов с прямым порядком байтов. В CANopen многобайтовые параметры всегда передаются сначала младшим байтом (с прямым порядком байтов). То же самое справедливо и для Ethernet Powerlink . [37]
API сокетов Беркли : определяет набор функций для преобразования 16- и 32-битных целых чисел в сетевой порядок байтов и обратно htons
(короткое замыкание хост-сеть) и htonl
Функции (длиной от хоста к сети) преобразуют 16- и 32-битные значения соответственно из машинного ( хоста ) в сетевой порядок; тот ntohs
и ntohl
функции преобразуют сетевой порядок в хостовый. [38] [39] Эти функции могут быть неактивными в системе с прямым порядком байтов.
В то время как сетевые протоколы высокого уровня обычно рассматривают байт (чаще всего подразумеваемый как октет ) в качестве атомарной единицы, самые нижние уровни сетевого стека могут иметь дело с упорядочиванием битов внутри байта.
См. также
[ редактировать ]- Порядок битов — соглашение для определения позиций битов.
Ссылки
[ редактировать ]- ^ Коэн, Дэнни (1 апреля 1980 г.). О священных войнах и призыве к миру . IETF . IEN 137. Также опубликовано на сайте Коэн, Дэнни (октябрь 1981 г.). «О священных войнах и призыве к миру» . IEEE-компьютер . 14 (10): 48–54. дои : 10.1109/CM.1981.220208 .
- ^ Свифт, Джонатан (1726). «Путешествие в Лилипутию, глава IV» . Путешествия Гулливера . Архивировано из оригинала 20 сентября 2022 г. Проверено 20 сентября 2022 г.
- ^ Брайант, Рэндал Э .; Дэвид, О'Халларон (2016), Компьютерные системы: взгляд программиста (3-е изд.), Pearson Education, стр. 79, ISBN 978-1-488-67207-1
- ^ «Понимание порядка байтов с прямым и прямым порядком байтов» . Архивировано из оригинала 24 мая 2019 г. Проверено 20 мая 2019 г.
- ^ «Упорядочение байтов PPC» . Архивировано из оригинала 9 мая 2019 г. Проверено 20 мая 2019 г.
- ^ «Написание кода, независимого от порядка байтов, на C» . Архивировано из оригинала 10 июня 2019 г. Проверено 20 мая 2019 г.
- ^ «Пионер Зала славы Интернета» . Зал славы Интернета . Интернет-сообщество . Архивировано из оригинала 21 июля 2021 г. Проверено 7 октября 2015 г.
- ^ Кэри, Дэвид. «Часто задаваемые вопросы по порядку байтов» . Архивировано из оригинала 09.11.2017 . Проверено 11 октября 2010 г.
- ^ Джеймс, Дэвид В. (июнь 1990 г.). «Мультиплексные автобусы: войны с порядком байтов продолжаются». IEEE микро . 10 (3): 9–21. дои : 10.1109/40.56322 . ISSN 0272-1732 . S2CID 24291134 .
- ^ Блан, Бертран; Маарауи, Боб (декабрь 2005 г.). «Порядок байтов или где находится байт 0?» (PDF) . Архивировано (PDF) из оригинала 3 декабря 2007 г. Проверено 21 декабря 2008 г.
- ^ Формат файла для обмена изображениями в Интернете . Апрель 1992 г. с. 7. дои : 10.17487/RFC1314 . РФК 1314 . Проверено 16 августа 2021 г.
- ^ Таненбаум, Эндрю С.; Остин, Тодд М. (4 августа 2012 г.). Структурированная компьютерная организация . Прентис Холл PTR. ISBN 978-0-13-291652-3 . Проверено 18 мая 2013 г.
- ^ Linux программиста Руководство – Библиотечные функции –
- ^ Linux программиста Руководство – Библиотечные функции –
- ^ "std::byteswap" . ru.cppreference.com . Архивировано из оригинала 20 ноября 2023 года . Проверено 3 октября 2023 г.
- ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 2 (2A, 2B и 2C): Справочник по набору команд, Аризона» (PDF) . Интел. Сентябрь 2016. с. 3–112. Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 5 февраля 2017 г.
- ^ «Руководство разработчика процессора i960® VH» (PDF) . Интел. Октябрь 1998 г. Архивировано (PDF) из оригинала 2 апреля 2024 г. Проверено 2 апреля 2024 г.
- ^ «Справочное руководство ARMv8-A» . АРМ Холдингс . Архивировано из оригинала 19 января 2019 г. Проверено 5 февраля 2017 г.
- ^ «Стандарт С11» . ИСО. Раздел 6.5.2.3 «Структура и члены Союза», §3 и сноска 95. Архивировано из оригинала 28 марта 2020 года . Проверено 15 августа 2018 г.
- ^ «3.10 Параметры, управляющие оптимизацией: -fstrict-aliasing» . Коллекция компиляторов GNU (GCC) . Фонд свободного программного обеспечения. Архивировано из оригинала 1 июля 2023 года . Проверено 15 августа 2018 г.
- ^ Торвальдс, Линус (5 июня 2018 г.). «[GIT PULL] Обновление структуры свойств устройства для версии 4.18-rc1» . Ядро Linux (список рассылки). Архивировано из оригинала 15 августа 2018 года . Проверено 15 августа 2018 г.
- ^ Хаус, Дэвид; Фаггин, Федерико; Фини, Хэл; Гельбах, Эд; Хофф, Тед; Мазор, Стэн; Смит, Хэнк (21 сентября 2006 г.). «Секция устной истории разработки и продвижения микропроцессора Intel 8008» (PDF) . Музей истории компьютеров . п. б5. Архивировано (PDF) из оригинала 29 июня 2014 г. Проверено 23 апреля 2014 г.
- ^ Понедельник, Кен (13 января 2009 г.). Обработка информации CJKV . О'Рейли Медиа, Инк. п. 29. ISBN 978-0-596-51447-1 . Проверено 21 мая 2013 г.
- ^ «Руководство пользователя Cx51: E. Порядок байтов» . keil.com . Архивировано из оригинала 02 апреля 2015 г. Проверено 28 марта 2015 г.
- ^ Джефф Шил (16 июня 2016 г.). «Маленький порядок байтов и Linux в IBM Power Systems» . ИБМ . Архивировано из оригинала 27 марта 2022 г. Проверено 27 марта 2022 г.
- ^ Тимоти Прикетт Морган (10 июня 2019 г.). «Переход на RHEL 8 начинается в энергосистемах» . ITДжунгли . Архивировано из оригинала 24 января 2022 года . Проверено 26 марта 2022 г.
- ^ «Различия автобусов БЕ-32 и БЕ-8» . Архивировано из оригинала 12 февраля 2019 г. Проверено 10 февраля 2019 г.
- ^ «Как обнаружить поддержку новых инструкций в семействе процессоров Intel® Core™ 4-го поколения» (PDF) . Архивировано (PDF) из оригинала 20 марта 2016 г. Проверено 2 мая 2017 г.
- ^ Савард, Джон Дж. Г. (2018) [2005], «Форматы с плавающей запятой» , четырехблок , заархивировано из оригинала 03 июля 2018 г. , получено 16 июля 2018 г.
- ^ «упаковать – преобразовать список в двоичное представление» . Архивировано из оригинала 18 февраля 2009 г. Проверено 4 февраля 2009 г.
- ^ Справочник по процессору PDP-11/45 (PDF) . Корпорация цифрового оборудования . 1973. с. 165. Архивировано (PDF) из оригинала 9 октября 2022 г.
- ^ Яличс, Пол Дж.; Хейнс, Томас С. (1 декабря 1983 г.). «Перенос портативной операционной системы: UNIX на миникомпьютер IBM» . Коммуникации АКМ . 26 (12): 1066–1072. дои : 10.1145/358476.358504 . S2CID 15558835 .
- ^ Руководство программиста по архитектуре AMD64, том 2: Системное программирование (PDF) (технический отчет). 2013. с. 80. Архивировано из оригинала (PDF) 18 февраля 2018 г.
- ^ «Спецификация формата двоичных файлов Microsoft Office Excel 97–2007 (формат *.xls 97–2007)» . Корпорация Майкрософт. 2007. Архивировано из оригинала 22 декабря 2008 г. Проверено 18 августа 2014 г.
- ^ Мэтт Аренс (2016). Внутреннее устройство ядра FreeBSD: подробное описание кода . Документация OpenZFS/Чтение и запись лекций. Архивировано из оригинала 14 апреля 2016 г. Проверено 30 марта 2016 г.
- ^ Рейнольдс, Дж .; Постел, Дж. (октябрь 1994 г.). «Обозначения данных» . Присвоенные номера . IETF . п. 3. дои : 10.17487/RFC1700 . СТД 2. RFC 1700 . Проверено 2 марта 2012 г.
- ^ Группа по стандартизации Ethernet POWERLINK (2012), Рабочий проект предложения EPSG 301: Спецификация профиля связи Ethernet POWERLINK, версия 1.1.4 , глава 6.1.1.
- ^ IEEE и Открытая группа (2018). «3. Системные интерфейсы». Базовые спецификации открытой группы, выпуск 7 . Том. 2. п. 1120. Архивировано из оригинала 18 апреля 2021 г. Проверено 9 апреля 2021 г.
- ^ «htonl(3) — справочная страница Linux» . linux.die.net . Архивировано из оригинала 18 апреля 2021 г. Проверено 9 апреля 2021 г.
Внешние ссылки
[ редактировать ]- Словарное определение порядка байтов в Викисловаре