[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 2446] from OSASK BOARD



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい。


http://www.imasy.or.jp/~mone/osask/index.cgi?REFER=3bf20c60_cb22

From: 川合秀実
Message-ID: 3bf20c60_cb22
Date: 2001/11/14 15:17
Subject: Re: 質問 第7稿

[OSASK 2419]へのレスです。

>>>20ビットと24ビットは一体なんなんだー!3モードあったりして
>これは16ビットCPUのころ考え出された方式で32ビット使うのですが、
>20ビットのほうは1000:2345が12345になるように上位アドレス
>を16倍して下位アドレスに足したものです。とにかくcomファイルとEXEファイルの違いを勉強すればわかるはずです。

 せっかく書き込んでいただいたのに申し訳ないのですが、これは混乱を増して
しまったかもしれません。

 この問題では、どうやってCPUが20bitアドレスを生成するのかということはか
なりどうでもいいことなのではないかと思います。肝心なことは、かつては20bi
tアドレスしか使えなくて、それでその時に設計されたデバイスのいくつかはこ
れを前提に設計されているので、20bitアドレス空間内のメモリは他のメモリと
比べて貴重なリソースといえる、ということだけだと思います。

>勉強不足なものなので24ビットの使い方は知りません。

 僕は知っていますが、混乱を増しそうなのであまり詳しくは説明しません。結
局80286は、プロテクトモード時のセグメントディスクリプターのベースの解釈
が、32bitではなく24bitになっているというだけの事です(上位8bitは無視され
る)。

>そういえば486の本を読んで気が付いたんですが、80486(80386も?)仮想メモリは46ビット(8TB)まで大丈夫なんですね。

 この8TBという数字をどうやって出したのかは解りませんが、それくらいはあ
るかもしれません。しかしこれは仮想メモリのアドレス空間であり、実メモリや
デバイスとのコミュニケーションとは全く無関係です。ですから以下の話と、20
、24、32bitメモリの話とは全く関係ありません。混乱しないようにしてくださ
い。

 純粋にmitsuさんの好奇心のために書きますが、i386は最大で8192個のタスク
をGDTに同時に登録できます。このそれぞれのタスクがページングによって4GBの
リニアアドレス空間を持てるので、この計算では全タスクの合計で32TBの仮想ア
ドレスを利用できるということになります。

 またページングの利用は考えずに、セグメンテーションだけで仮想メモリ空間
を確保することもできるでしょう。GDTの半分をTSSに使って残り半分をLDTに使
うなら、4096タスクがローカルな8192個のセグメントに自由にアクセスできます
。セグメントディスクリプターのPビットを使ってうまく切り替えるなら、それ
ぞれのセグメントサイズをほぼ4GBにすることもできるでしょう。このとき、各
タスクはそれぞれ8192x4GB=32TBという仮想アドレス空間を持ち、よって全タス
クでの仮想アドレス空間の総和は、4096x32TB=128PBになるわけです。

 しかしGDTを固定的に使わなければいけないというルールがある訳ではなく、
これをOSが動的に管理するなら、最大タスク数の制限はなくせます。そうなると
以上の2つの話の前提が変わるので、より広い仮想アドレス空間を確保できるこ
とになります。

 最後に、これはまことにどうでもよい指摘ですが、46bitアドレスで表現可能
な領域は8TBではなく、64TBだと思われます。