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

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

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

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

アーキテクチャ

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

Q&A

解決済

2回答

3156閲覧

OSの歴史を教えてください。

strike1217

総合スコア651

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

アーキテクチャ

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

1グッド

1クリップ

投稿2016/08/27 06:02

OSの勉強していたら、理解できないところが出てきました。

「64KBと640KBの壁」とは何でしょうか??
これに関連する「A20ゲート」とは何ですか??

教えてください。

kazuyakazuya👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

64KBの壁、1MBの壁、640KBの壁

x86が16ビットだった時代、(以前も触れたように)アドレスは「セグメント」と「オフセット」という2つの16ビットの値で表現していました。そして、オフセットだけ変えてアクセスできるのは16ビットのアドレス空間=64キロバイトで、これを超える場合にはセグメントも変更するなど、プログラム的にも特別な対応が必要となりました(64KBの壁)。

また、セグメントとオフセットはバラバラな値ではなく、「セグメント×16+オフセット」という式で計算していたため、合計しても20ビット分=1MBまでしかアクセスができませんでした(1MBの壁)。そして、多くのMS-DOSではこのうち384KBをBIOSやI/O空間としていたので、メモリは残り640KBとなっていました(640KBの壁)。

A20とHMA

そして、8086の時代にはアドレス空間が本当に20ビットしかなかったので、セグメントを0xfff0など最後の方に合わせることで、オフセットの操作だけでBIOS自体(ふつうの計算でアクセス)と、割り込みなどの下位メモリ(アドレス計算を桁あふれさせる)をまとめてアクセスする、というようなことが行われていました。

ところが、286ではリアルモード以外にプロテクトモードが登場し、プロテクトモードではアドレス空間も1MBを超えて広がったのはいいのですが、アドレス計算にバグがあって、リアルモードでも「セグメント×16+オフセット」の計算が桁あふれせず、1MBを超えたメモリにアクセスしてしまう、ということが判明しました。桁あふれを利用していたプログラムとの互換を図るために、アドレスバスの21ビット目(0から数えるのでA20)をCPU外部で強制的に0とする回路を付けて凌ぐこととしました。

その後、積極的にA20を使うことで、リアルモードのまま1MBの壁を超えた64KB弱のメモリにアクセスする「HMA」という手法も登場し、386以降ではこのアドレス計算が正式な機能となって、現在に至っています。

※以上の文章の「キロバイト」「メガバイト」はすべて、1024基準で計算したものです。

最後に

気になったことを逐一聞くより、そろそろMS-DOS、あるいは16ビット時代のx86について1冊本を読んでしっかり勉強したほうがいいかもしれません。

投稿2016/08/27 08:15

maisumakun

総合スコア145121

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

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

0

レジスタ長が16ビット時代の話です。

レジスタ一個で指し示す値の範囲は2の16乗=65536=64Kなので、これがメモリアクセスにおける一つの壁でした。それで、2個組み合わせる方法が考案されました。が、2の32乗ではなく、2の20乗=1Mが次の壁でした。ただし、1Mも全ては自由に使用できず実質は640Kの壁となりました。

A20ゲートは新しい時代とこの時代との互換性のためのものです。当時の一部のプログラムは上位桁の桁あふれを利用する(例えば1M+100番地以降のメモリ領域にアクセスしようとすると、100番地をアクセスする性質を前提としていた)ものであったため、新しい方式でもこのやり方になるように調整するものです。

投稿2016/08/28 12:25

HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問