質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

Q&A

2回答

7627閲覧

i386 と 現在のCPU, 各種ソースコード

strike1217

総合スコア651

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

1グッド

2クリップ

投稿2017/05/01 11:13

Linuxカーネルのソースコードや、GNU binutilsのソースコードを見てみると、
必ず、i386のフォルダーがあるのが時々疑問になるのですが・・・

#i386のフォルダがある理由はなんですか?

x86と呼ばれる32bitシリーズはi386と互換性があるというのは分かるのですが・・・

i386 wiki では、1985年だそうですが、なんでそんな古い物が入っているのでしょうか??

CPUの命令は、i386から32bitシリーズは全く変わっていないのでしょうか?
x86というファイルにしてくれた方がわかりやすくないですか?

binutils
binutilsのopcodesというフォルダにアセンブリ言語のニーモニックと16進数の対情報が入っていたのですが、
x86-64(amd64) のファイルがないのですが・・・なぜでしょうか?

amd64 は x86 と互換性があるとはいえ、amd64の命令も,i386の中に含まれているわけではないですよね??

64bit環境用にLinuxカーネルなどをビルドすると、i386フォルダもビルドの対象になるのでしょうか?

CPUが現在のSkylakeやkaby_lakeといった世代に以降されたのはいつでしょうか?
i386時代と、~~世代と言われるようになったに全く繋がりが見えないのですが・・・

どなたか教えてください。

yohhoy👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

i386 wiki では、1985年だそうですが、なんでそんな古い物が入っているのでしょうか??

まったく同じことを考えたメーカーがあります。インテルです。
インテルはこう考えて、もう設計の古いi386命令を捨て去って新しく合理的な64ビットの命令体系を作りました。命令体系の名前はIA64といいます(これによってi386の命令体系はここから逆にIA32と命名されました)。
命令体系が違うのでOSもアプリケーションも作り直しです。IA64用のWindowsというのも発売されました。

結果は惨憺たるもので、IA64マシンは売れませんでした。

そこへ、当時から互換CPUメーカーであったAMDが、IA32を拡張した(つまり後方互換性のある)64ビット命令体系を作ります(AMD64と呼ぶことが多いです)。こちらの64ビットCPUは馬鹿売れします。ユーザーが欲しかったのは、合理的な設計の64ビット命令より、従来のソフトウェア資産が動くことの方だったのです。

その結果、インテルもAMD64のCPUを出さざるを得なくなりました。現在のPC用64ビットCPUはAMD64であり、この分野ではインテルこと互換CPUメーカーであると言えます。AMD64の核となっているIA32はインテル発なのでもうどちらが互換かとかはどうでもいいところありますけど。

というわけで、

CPUの命令は、i386から32bitシリーズは全く変わっていないのでしょうか?

互換性を保ちつつ拡張されているわけです。

amd64 は x86 と互換性があるとはいえ、amd64の命令も,i386の中に含まれているわけではないですよね??

i386の命令体系がamd64の命令体系に含まれている、ですね。

CPUが現在のSkylakeやkaby_lakeといった世代に以降されたのはいつでしょうか?
i386時代と、~~世代と言われるようになったに全く繋がりが見えないのですが・・・

命令セットの拡張の歴史とCPU製品のマーケティングの歴史は、無関係ではないのですが切り離した方が。
マーケティング的には、i386の時代は新製品出すごとに8086→80186→80286→386→486と製品番号を上げていく命名方法で、今はCore i3,5,7という製品名を保ったまま内部実装のコードネームを表に出していくやり方に変えたというだけです。

投稿2017/05/01 11:53

編集2017/05/01 11:54
yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/05/01 12:40

ふむ~~。 x86シリーズ、amd64シリーズともに、基本のところには、i386が入っている訳ですね! i386時代のプログラムは、現代の64bitコンピュータ上でも動くのでしょうか?? 互換性を保ちつつ拡張されている→拡張された部分は、i386には含まれていないはずです。 ちゃんとプログラムとして動作するのでしょうか?
strike1217

2017/05/01 12:42

現在のプログラムは、i386時代のCPUでは動作しないですよね? なんで、ファイルの名前にi386が使われているのでしょうか?
yuba

2017/05/01 13:28

> なんで、ファイルの名前にi386が使われているのでしょうか? IA32という命令セット名が付いたのが最近なので、古くからあるプログラムだとi386としか呼びようがなくてそうしているんじゃないでしょうか(推測
guest

0

i386のフォルダがある理由はなんですか?
i386 wiki では、1985年だそうですが、なんでそんな古い物が入っているのでしょうか??

2012年のバージョン3.8でi386サポートが終了するまで、Linuxカーネルはi386プロセッサを正式にサポートしていました。つまり、i386プロセッサで動きます。

x86というファイルにしてくれた方がわかりやすくないですか?

歴史を無視すれば、その通りだと思います。しかし、巨大プロジェクトでソースコード構成を急に変えるのは難しい(というか不可能に近い)ですから、i386フォルダはその名残と考るのが妥当です。

CPUの命令は、i386から32bitシリーズは全く変わっていないのでしょうか?

変化はあります。後方互換性を保ちながら、新しい機能が追加されています。言い換えると、昔のIntelプロセッサ向けのコードは、新しいIntelプロセッサ上でも正しく動作します。


binutilsのopcodesというフォルダにアセンブリ言語のニーモニックと16進数の対情報が入っていたのですが、x86-64(amd64) のファイルがないのですが・・・なぜでしょうか?

amd64/x86-64命令セットはIA-32(x86)命令セットからの自然な拡張になっており、アセンブリ言語のニーモニックレベルでは互換性があります。例えば汎用レジスタ名はAX(16bit), EAX(32bit), RAX(64bit)のような関係性になっています。binuitlsではファイル名はi386とありますが、中身は32bit/64bitをサポートしているようです。

http://cgit.haiku-os.org/buildtools/plain/binutils/opcodes/i386-dis.c

CPUが現在のSkylakeやkaby_lakeといった世代に以降されたのはいつでしょうか?
i386時代と、~~世代と言われるようになったに全く繋がりが見えないのですが・・・

(8086 → i186 → i286 →)i386 → i486 → i586[初代Pentium頃] → i686[Pentium 4頃] までは「iX86」という名前でした。マイクロアーキテクチャの世代を"NetBurst"のようにコードネームで呼称するようになったのは、Pentium 4以降のようです。理由は定かではありませんが、Intel社のマーケティング戦略判断でしょう。

命名規則が切り替わった当時はコードネーム"NetBurst"と従来方式"i786"が混在していたようですが、今では"i786"という表記を見かけることはなくなった気がします。

参考:

投稿2017/05/01 14:46

yohhoy

総合スコア6189

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/05/01 15:09

「i386とありますが、中身は32bit/64bitをサポートしている。」 左様ですか! 紛らわしいですね・・・ ○○世代と言われるCPU群は第一世代から64bitなのですか?
yohhoy

2017/05/01 15:32 編集

Wikipediaを読む限りは"NetBurst"以降で64bit(x86-64)をサポートするようです。
strike1217

2017/05/01 15:33

全部は見ていないんですが、c言語で作った実行ファイルを逆アセンブラして、opcodes/i386-tbl.hと比較してみました。 64bitと確かに一致しています。 アセンブリ言語は、「ニーモニック+オペランド で16進数に変換されている」でよろしいんでしょうか? NetBurstというのは、知らなかったんですが、64bitのCPUなんですか?
strike1217

2017/05/01 15:35

NetBurstのあとに、現在のcoreシリーズが登場するんですね!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問