[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だと思われます。