Как проходил переход на 64 бит в Linux

15

Как проходил переход на 64 бита в Linux / Unix? Мир Windows по-прежнему имеет проблемы с этим, и мне любопытно, как с этим справились в мире * nix.

Луи Салин
источник
С летающими цветами.
Каз

Ответы:

12

Работа, необходимая для того, чтобы ядро ​​было 64-битным, была выполнена довольно давно, с использованием систем DEC Alpha. Программы, однако, это другое дело.

Общий консенсус, который я видел до сих пор:

  • Отдельные /libи /lib64каталоги для систем, которые имеют смешанные двоичные файлы
  • Компилировать как 64-битный; если компиляция не удалась, перекомпилируйте как 32-битную, пока источник не будет очищен для 64-битной.

Кроме этого, вы действительно не увидите много «горя» из смешанных 32/64 битных сборок.

Эйвери Пэйн
источник
Плюс символические ссылки, чтобы сохранить двоичные имена постоянными и последовательными.
Geoffc
и у нас есть то, что называется multilib alien.slackbook.org/dokuwiki/doku.php?id=slackware:multilib
phunehehe
Не могли бы вы назвать любую программу для Linux, которая может быть скомпилирована, но только для 32-битных?
Мацей Печотка
@Maciej Piechotka: не думай, что их осталось много. Я думаю, я помню, что OpenOffice.org был хитрым, но это было очень давно, когда началось преобразование в 64-битную версию. Кроме этого: очевидно, Flash Player хитрый: P
wzzrd
С тех пор, когда Flash Player скомпилирован;) gnash / lightspark работает на 64-битной версии, но Adobe Flash Player является собственностью.
Мацей Пехотка
8

Windows и * ix использовали разные модели данных для перехода. Эта страница UNIX.org немного устарела , но все же содержит хороший обзор компромиссов (обратите внимание, что long longпозже он был добавлен в C99 и должен был быть как минимум 64-разрядным). Вы также можете увидеть статью в Википедии на ту же тему. Как указывалось в конце статьи UNIX.org, большинство UNIX-подобных систем используют LP64, а это значит long, что long longвсе указатели являются 64-битными.

В Windows использовалась так называемая модель данных LLP64, что означает, что только long longуказатели и 64-битные. longостается 32-битным. Одной из причин было просто то, что они не хотели проходить и исправлять неработающий код, который предполагал longвписываться в int.

Мэтью Флэшен
источник
2
Также было много споров в мире Unix. Одним из аргументов в пользу добавления «long long» было то, что там было слишком много кода, который предполагал, что «long» был 32-битным. (По крайней мере, в конкретном аргументе, который я получил на comp.std.c незадолго до стандарта C99.)
Дэвид Торнли
2

Поскольку дистрибутивы Linux - это в основном OpenSource, большой переход уже сделан. Если вы не используете правильное программное обеспечение (такое как Skype), вы можете запустить чистую 64-битную систему без каких-либо недостатков.

Однако реальная разница, IMHO, более правильная и открытая, чем unix против windows, поскольку обычно сначала портируется программное обеспечение с открытым исходным кодом (некоторым волонтерам нужно что-то перекомпилировать - возможно, исправить некоторые проблемы компиляции) - или в большинстве случаев не переносить в все, но только перекомпилировано;) - и свойство, которое переносится последним.

Возможно, дополнительно в Linux у вас есть репозитории, поэтому установка выполняется автоматически - вам не нужно выбирать 64-битную или 32-битную версию (система выбирает вашу автоматически). На Windows программы загружаются и имеют отдельные 64-битную и 32-битную версии:

  • Удваивает размер файлов на сервере
  • Требуется, чтобы пользователь знал свою версию. Или даже что они чем-то отличаются

Я полагаю, что именно по этой причине двоичные файлы Windows обычно являются 32-разрядными - они универсальны, и не все переходят на 64-разрядную версию.

Мацей Печотка
источник
2

На самом деле, попробуйте «Длинный путь к 64-битам» в очереди ACM: http://queue.acm.org/detail.cfm?id=1165766 Это было позже обнаружено Коммуникациями ACM. Первым 64-разрядным микропроцессором был MIPS R4000, выпущенный в SGI Crimson 1Q1992, декабрь. Альфы были выпущены в конце того же года.

Сначала R4000 работали в 32-битном режиме, а затем в режиме 64/32, то есть в 64-битной ОС, 64-битном или 32-битном коде пользователя. Alphas всегда запускал UNIX только в 64-битном режиме (разумный выбор, поскольку не было установленной базы 32-битных приложений).

Позже, в 1990-х годах, SGI приложил усилия для 64-битной Linux (для запуска на Itanium), примерно в то время, когда XFS была портирована на Linux (ей действительно требовалась 64-битная версия).

Джон Машей
источник