web-dev-qa-db-ja.com

Linuxで64ビットへの移行はどのように処理されましたか

Linux/Unixでは64ビットへの移行はどのように処理されましたか? Windowsの世界にはまだ問題があるようで、* nixの世界でどのように処理されたか興味があります。

15
Louis Salin

カーネルを64ビットにするために必要な作業は、DEC Alphaシステムを使用してlooooong時間前に行われました。ただし、プログラムは別の問題です。

私がこれまでに見た一般的なコンセンサスは次のようです。

  • 分ける /libおよび/lib64バイナリが混在するシステムのディレクトリ
  • 64ビットとしてコンパイルします。コンパイルが失敗した場合は、ソースが64ビット用にクリアされるまで32ビットとして再コンパイルします。

それ以外は、32/64ビットの混合ビルドからの「悲しみ」はあまり見られません。

12
Avery Payne

Windowsと* ixは、移行に異なるデータモデルを使用しました。このUNIX.org page は少し古いですが、それでもトレードオフの概要がわかります(long longは後でC99に追加され、少なくとも64ビット)。同じトピックについて ウィキペディアの記事 も見ることができます。 UNIX.orgの記事の最後で提唱されているように、ほとんどのUNIXライクなシステムはLP64を採用しています。つまり、longlong long、およびポインターはすべて64ビットです。

Windowsは、LLP64データモデルと呼ばれるものを採用しました。これは、long longとポインターのみが64ビットであることを意味します。 longは32ビットのままです。理由の一部は、longintに収まると想定した壊れたコードを調べて修正したくないということでした。

8

実際には、ACMキューで「64ビットへの長い道のり」を試してください: http://queue.acm.org/detail.cfm?id=1165766 これは後でACMのCommunicationsによって取り上げられました。最初の64ビットマイクロはMIPSR4000で、SGI Crimson 1Q1992で出荷され、DecAlphasはその年の後半に出荷されました。

R4000は、最初は32ビットモードで実行され、その後64/32モード、つまり64ビットOS、64ビットまたは32ビットのユーザーコードで実行されていました。 Alphaは常にUNIXを64ビットのみで実行していました(32ビットアプリのインストールベースがなかったため、妥当な選択です)。

1990年代後半、XFSがLinuxに移植された頃(本当に64ビットが必要だった)、SGIは64ビットサイズのLinux(Itaniumで実行するため)に貢献しました。

2
John Mashey

Linuxディストリビューションはほとんどがオープンソースであるため、すでに大規模な移行が行われています。独自のソフトウェア(Skypeなど)を使用しない限り、不利な点なしに純粋な64ビットシステムを実行できます。

ただし、IMHOの本当の違いは、通常、最初に移植されるのはオープンソースソフトウェアであるため(一部のボランティアは何かを再コンパイルする必要があります-おそらくいくつかのコンパイルの問題を修正する必要があります)、またはほとんどの場合、再コンパイルされたばかりを除いてすべて;)-そして最後に移植されたプロパティ。

おそらくLinuxにはさらにリポジトリがあり、インストールは自動的に処理されます。64ビットまたは32ビットバージョンを選択する必要はありません(システムが自動的に選択します)。 Windowsの場合、プログラムがダウンロードされ、64ビットバージョンと32ビットバージョンが別々になります。

  • サーバー上のファイルのサイズを2倍にします
  • ユーザーは自分のバージョンを知っている必要があります。またはそれらが何かによって異なることさえ

これが、Windowsバイナリが通常32ビットである理由だと思います。これは万能であり、すべての人が64ビットバージョンに移行しているわけではありません。

2