
Как был реализован переход на 64 бита в Linux/Unix? В мире Windows, похоже, до сих пор есть проблемы с этим, и мне интересно, как это было реализовано в мире *nix.
решение1
Работа, необходимая для того, чтобы сделать ядро 64-битным, была проделанадооолгонекоторое время назад с использованием систем DEC Alpha. Программы, однако, это другое дело.
Общий консенсус, который я наблюдаю на данный момент, выглядит следующим образом:
- Отдельные
/lib
и/lib64
каталоги для систем со смешанными двоичными файлами - Скомпилируйте как 64-битную версию; если компиляция не удалась, перекомпилируйте как 32-битную версию, пока исходный код не будет очищен для 64-битной версии.
В остальном вы вряд ли увидите много «горя» от смешанных 32/64-битных сборок.
решение2
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
.
решение3
Поскольку дистрибутивы Linux в основном OpenSource, то переход уже в значительной степени сделан. Если вы не используете фирменное ПО (такое как Skype), вы можете запустить чистую 64-битную систему без каких-либо недостатков.
Однако, по моему скромному мнению, реальная разница больше в выборе между проприетарным и открытым ПО, чем между unix и windows, поскольку обычно первым портируется программное обеспечение с открытым исходным кодом (какому-то из добровольцев нужно что-то перекомпилировать — возможно, исправить некоторые проблемы компиляции) — или в большинстве случаев вообще не портируется, а просто перекомпилируется ;) — а проприетарное ПО портируется последним.
Возможно, в Linux у вас есть репозитории, поэтому установка выполняется автоматически - вам не нужно выбирать 64-битную или 32-битную версию (система выбирает вашу автоматически). В Windows программы загружаются и имеют отдельные 64-битную и 32-битную версии:
- Удваивает размер файлов на сервере
- Требует от пользователя знать свою версию. Или даже то, что они чем-то отличаются
Думаю, именно поэтому двоичные файлы Windows обычно 32-битные — они универсальны, и не все перешли на 64-битную версию.
решение4
На самом деле, попробуйте «Долгая дорога к 64-битам» на ACM Queue: http://queue.acm.org/detail.cfm?id=1165766 Это позже подхватили Communications of the ACM. Первым 64-битным микро был MIPS R4000, поставленный в SGI Crimson 1Q1992, Dec Alphas были поставлены в конце того же года.
R4000 сначала работали в 32-битном режиме, затем в 64/32-режиме, т. е. 64-битная ОС, 64 или 32-битные пользовательские коды. Alpha всегда запускали UNIX только в 64-битном режиме (разумный выбор, поскольку не было установленной базы 32-битных приложений).
Позднее, в 1990-х годах, SGI внесла свой вклад в 64-разрядную версию Linux (для работы на компьютерах Itanium), примерно в то же время, когда XFS была портирована на Linux (ей действительно требовалась 64-разрядная версия).