• ベストアンサー

16bit?32bit?64bitOS???

○○bitOSという言い方を良くするのですが そこで、ふと、思ったのですが Win3.1・・・・・・16bitOS Win95,98,me・・・16bitOS/32bitOS WinNT,2000・・・・32bitOS 次期OSから64bitOSを混在させていくみたいですが この8bitとか16bitと言うのは何でしょうか? OSと言うプログラムが扱えるメモリ空間が16bit=65536までと 思っていたんですが、65536b=8MBでは少ないし・・・・ それと、CPUに関しての16Bitとか32bitとか言うのは何なんで しょうか?CPU内部のバスの幅を表してるのかな・・・ もしそうなら16BitCPU=最大8bit命令*2を1サイクルで処理 できるって事になり、最初に書いた質問に帰結するような 気がしますが・・・・ちょっと混乱してます。 以上です、分かる方よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

まず最初に2の16乗=65536=64KBです。同様に2の32乗=4GB。 OSでいう○○ビットとCPUの○○ビットは同一ではありません。 CPUの○○ビットは主にデータバスのピン数を示します。 8086(Pentium系の先祖)は16本持っており最大2バイトのデータ転送を1サイクルで行うことができました。 現在のPentium系CPUは32ビットのデータバスを持っており、4バイトのデータ転送を1サイクルで行います。 OSでいう○○ビットはアドレス値のビット幅を示します。 これはCPUのアドレスバスのピン数と一致するとは限りません。 8086CPUは16ビットのアドレスバスを持っていました。 結果、プログラムは「16ビットで表現可能な64KB」または「2つの16ビットアドレス値をハード的に演算処理した“20ビットアドレス”で表現可能な1MB」の空間で動くように作成される必要がありました。 「アドレスバスのビット数(=16)」と「アドレス値のビット数(16×2=32)」、さらに「2つのアドレス値を演算処理した実アドレス値のビット数(20)」の3つ違いや特性を認識する必要があるため8086系のOSは複雑なものでした。 (その後、EMSと呼ばれる外部メモリ空間が加わり実空間が数MBに広がったため話はもっと複雑になります。) Windows3.1はこのような複雑な環境を制御できるように作成されました(実際にWindows3.1が動作するCPUはもっと後期のものです)。 Pentium直系の先祖である80386の登場で話は一気に簡単になります。 80386はアドレスバス、データバス共に32ビット持っていたため32ビット空間(4GB)を素直に使うことができます。 しかし、Windows3.1で開発された多くのプログラムは8086の変則的な16(20)ビット空間で動作するように作られていたため、80386の単純な32ビット空間では動作しません。 結果,Windows95ではWindows3.1のソフトウェア資産を引き継ぐ必要性から16(20)ビットプログラムが動作可能なように「16ビット環境」を内包しています。 WindowsNT(実際はその直系先祖のOS/2)は「Windows3.1のソフトウェア資産を切り捨てる」という大英断によって純粋な32ビットOSとして存在します。 次世代PentiumであるIA64系CPUは64ビットのアドレスバスを持つ予定です(もう「最大空間○バイト」などというレベルではありません)。 単純な32ビットアプリケーションは単純な64ビット環境で動作することができますが、OSの場合はそうは行きません。 64ビットハードウェアに合わせたOSと32ビットハードウェアに合わせたOSが必要なのです。 しかし、巷に存在するであろう32ビットハードウェアを見捨てることもできません。 そこで、次世代Windowsは32/64ビットOSである必要があるのです。 無論、その後は64ビット環境で一本化されるでしょう。 というようにOSの16→16/32→32→32/64→64という変転にはそれぞれに特殊事情が絡んでいて「○○ビットOS」と呼ばれる理由もそれぞれに違ったりします。

noname#38849
質問者

お礼

有り難う御座います m(__)m 大変解りやすくて、喉につかえていた魚の骨が取れた気分です

その他の回答 (2)

回答No.3

すみませんちょっと抽象的ですが...。 ご質問の「OSにおける○bitOS」という言い方は、そのOS上でプログラムをする時に、「自然」に扱う事のできる変数(データ)の大きさということになると思います。(C言語の表現で言うと「sizeof(int)」です。) つまり、完全な16bitOSであるwindows3.1では32bitの値を扱うことはできますが、16bitを扱う場合に比べて「不自然」な扱いが必要になる場合があります。(32bit数を扱う場合にいつでも「不自然」であるという意味ではなく、16bitの値を中心に扱うような仕組みにOSがなっているという意味です。) 同様に32bitOSであるWindowsNTでは32bit値を基本的なデータ型としており(16bit値は、メモリ効率が悪い事を除けばそのまま使えます。)64bit値を扱う場合は「不自然」な仕組みが存在します。(64bitOSも同様です。繰り返しません。) 次に「CPUにおける○bitCPU」ですが、内部データバスということで基本的には良いと思います。ただ、メーカの発表ではこれに厳密に一致していると言えない場合があります。内部データバスの条件を満たしていなくても○bitCPUを名乗るだけの風格(?)があれば、○bitCPUと言うことがあるようです。 最後に「OSにおけるbitとCPUにおけるbitの関係」ですが、CPUが○bitを「自然」に扱える仕組みを持っていない限りそのOS上で○bitOSを設計することができません。(Windows3.1がサポートしていた80286は32bitを「自然」に扱える仕組みをもっていなかったため、80286を対象CPUにいれているかぎり32bitOSになることはできません。)

noname#38849
質問者

お礼

たいへんありがとう御座います 勉強になります

  • nag3
  • ベストアンサー率28% (103/361)
回答No.1

32bitと言うのは、2進数で32桁という意味です。 16bitは16桁になります。 CPUに関してはおっしゃる様にバス幅のことで、たとえば32bitであれば、一度に2進数で32桁のデータを転送出来るという意味になります。 拡張命令とは、異なるものです。

関連するQ&A