[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[b-free: 1270] Re: Memory Protection



えっと、仮想空間を考えた場合、paging の方がよいです。
swap とか、そう言った物は、paging の段階で処理します。

で、segmentation は、swap の単位ではないです。もっと、高位な概念です。
具体的に言うと、例えば、72Kの seg. があったとしましょう。それを、内部
で32Kの page 3枚で表現することにしましょう。swap とかは、この page
を軸に行われます。seg. のはじめから45Kくらい離れた場所に access する
と、2枚目の page が読み込まれたりします。すると、seg. の大きさは、別に
仮想記憶と何も関わりがないと言うことが、分かってもらえると思います。
仰り通り、chip によって大きさが云々は関係ありませんが、実装のことを考え
ると、chip の支援する seg. の大きさより大きい seg. を許すというのは、結
構、処理的にしんどい気がします。これは、chip が seg, を提供しないなら
ば、逆にそれはそれで良いのですが(全部自分で program すればよい)、chip
の支援を利用した場合の話です。

もう一つ。ここで話していたのは、address 空間の code や data への割り振り
です。
多重仮想空間(Multiple Virtual Memory Space って云うんだっけ? ^^)にし
た場合、実際、各 data や code の始まる address を固定にしても、他の
process と重なることはありませんから、基本的には問題ありません。むしろ、
この方が loading の際の relocation などで有利です。しかし、そこには
segmentation に対する幾つかの不利な点があります。挙げると、

 1.program によって、使う data/code の量が大きく
   違うのに、どうやって、適当な address 空間の
   配分を決められるか。>loading 時に決められ無くもないけど。
 2.stack/heap などは大きさが変化するが、他の data
   や code などを address 空間で浸食してしまう可能性はないか。
 3.data を実行しようとした場合に、どう protection を掛けるか。

などなどです。
そう言ったわけで、segmentation を使って方が安全ではあるのですが、実際は
その cost をどうするかですねぇ。
あと、386 arch. の話で、もう一つの利点(僕が書いたやつ)は、flat model
で process を走らせる場合に programmer は 386 の仕様(限界?)のために、
code も data も stak も heap も、ぜーんぶ、4Gの address 空間に押し込ま
なければいけません(と言うほど一般人の用途には狭くはないけど)。で、も
し、seg. 一つに code とかって割り振れば、code/data/stack/heap それぞれ
が、4Gまで使えます。その辺が、若干の追加の良い点かな。

-Aki.

Yasushi Suzuki wrote:

> > Segmentation:
> >  固定 address 空間より、大きさの面で融通が利く。(4Gbyte max on 386)
> 
>  む? わかりません。
> 
>  OSにおけるSegmentationは何よりも「プログラマ」が「自発的」
> に「二次元アドレスを用いてプログラムを作成する」ということが前
> 提になっているものと私は理解していました。そうすることでOSが
> スワップだのなんだのをしてくれると。
>  プログラマの下(上?)にOSがあるわけでチップのアーキテクチャ
> がx86だから大きさが云々は関係ない様に思いますが。
> 
>  つまりx86の場合には、「自分以外」のだれかがディスクにスワッ
> プしてくれるとかと「無関係」に二次元アドレスを「強制される」と
> いうことではないのですか? これはOSを「作る」場合に関係するこ
> とで(いやだなぁという人が多いと察しますが)、少なくともまともな
> OS上でのプログラムとは無関係だと思います。
> 
> ----------------------------------
> (株)ウェルビーン   鈴木保是
> ----------------------------------
>   E_Mail : suzu@beebee.co.jp
>   Tel    : 048-654-3499
>   Fax    : 048-654-3520
> ----------------------------------