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

[b-free: 1188] Re: Memory Protection



皆さんこんにちは。
ホンとは、いま、宿題をしなきゃいけないのですが、息抜きという感じで、res します。^_^

ということで、林さんを代表に、まこたんさんと、ウェルビーンの鈴木さんにも、res しちゃ
います。<こらこら。(^^;;;



Takanori Hayashi wrote:

> 林です。
>
> In message <199803290730.QAA18821@a2.mbn.or.jp>
>  "[b-free: 1165] Re: Memory Protection"
>    "makotan@a2.mbn.or.jp" wrote:
> makotan> えーっと、Segmentation は Paging より Memory Protection によい。ってはな
> makotan> しなんですけど...どうでもいいと思います。
>
> 何というかAkiちゃんのいうsegmentationの用法がいまいち分からないですが
> 実装ベースでx86アーキテクチャのセグメントを使うのは絶対やめた方が良い
> です。理由は特にメリットがない上に他のアーキテクチャへの移植に難が出る
> からです。

えっと、僕も、少し、混乱しています。(^_^;;;

僕の当初の話は、OS の segmentation です。
林さんが仰られるように、segmentation は paging より、高位の概念です。
だから、「paging の方が segmentation より仮想記憶処理には向いているが、paging だと
address を直接処理するので、segmentation のように memory の一塊を特別扱いするという処
理には向いていない」ということでした。

paging の方は、言うなれば、programmer の方からは見えない(transparent) のです。
segmentation の方は、memory を固まりとして扱い、名前を付けられるのです。

だから、segmentation では、<name,offset> で、address を表現します。
だから、64k の話もあんまりしませんでした。

# ここまで良いですよね?

で、実装の話になると、これが、入り組んでくる。

僕は最初、B-free は、segmentation での、access 管理をしていないと思ったのです。しか
し、実際は後で気付いて書いたとおり、SMB の key こそ、segment name そのもの何ですね
ぇ。で、提案の一つとして、SMB の key attrib. を変える syscall に、access privilege の
変更ができる機能も与えようと言ったわけです。(なぜなら、林さんが「それは、SMB に対し
ては当たり前の機能だ」と言うようなことを言ったので&僕が「そうだなぁ」と思ったので。
^_^;)

で、それとは別に、実際に B-free を 386 以降の CPU に乗せることを考えた場合に、386 は
segmentation を chip で使っているわけですよね。だから、それを利用したら、(移植性が下
がるかもしれないけど)高速になるんじゃないかって。
それも、結構違いがあるんじゃないのかなって?

64k の壁のことは話題になりましたが、それは確か、protect mode(real mode ならなお単純で
すが) において 286 の DT が offset 16bits までしか許容しないからで、386 protect mode
からは、offset 32 bits 即ち、一つの segment が 4GB まで広がることができるわけですよ
ね。だから flat model でも通用すると。一つの process のぜーんぶの segment base を 0
にしても、4GB あれば収まるわけです。

# ここまでは、OK? >みんな。


> なおB-Freeでも多重仮想空間は使用されています。メモリマネージャの仕様を
> 見れば分かるようにアプリケーションのコード領域が固定アドレスに割り付け
> られているでしょう。多重仮想空間を使わなければ、プロセス間でアドレスが
> 衝突してしまいます。

なるほど。これを、固定 address ではなくすると、segmentation になるのですよね。
一時期、data の空間領域が狭すぎるとかいう話もありましたが、segmentation だと、いい加
減にできるわけです。たぶん、それが一つの segmentation の(protection 以外の)利点でし
ょうね。

> makotan> セグメント方式はWin16で使われているものです。
> makotan> 一つのアドレス空間を複数プロセスで共有するものです。
>
> こちらは誤解があります。もともとsegmentationはセグメント/オフセットに
> よる二次元のアドレス空間を提供する機能です。8086でおかしなセグメントの
> 概念が作られて以来誤解されているようですけど。
> 実際のところはsegmentationはページングや多重仮想空間より概念的には上位
> にあるもので、x86プロテクトモード(286以降)のようにハードウェアで実装の
> なされているものもありますけど、リニアアドレスのページングサポートだけ
> あれば十分に実装できます。現実問題としてx86のセグメンテーションは重い
> ので使わない方が良いでしょう。

重いんですか。^_^;;;

> UNIXでもセグメントの概念は使われています。コードセグメント、データセグ
> メント、スタックセグメントという分類でですけど。それでコードセグメント
> はプロセス間で共有できるように書き込み禁止とかするわけです。最終的には
> セグメントをリニアアドレスに割り付けるわけですけど。

この割付は、動的な物でしょうか?

> 余談ですが286プロテクトモードのセグメントはアーキテクチャとしては悪く
> ないです。もちろんセグメントの最大サイズが64KBというのは、今となっては
> 小さすぎますが、それは適用分野の問題でしょう。実際、一部の応用では既に
> 4GBのアドレス空間でも足りないとか。データベースは96bitアドレスを使って
> いますし、それも仕方のないことなのでしょう。
>
> --
> Takanori Hayashi
> takanori@ohsaki.meidensha.co.jp

というわけで今までの話。

Segmentation:
 固定 address 空間より、大きさの面で融通が利く。(4Gbyte max on 386)
 386 の Segmentation は、重いらしい。^^;
 Memory block に対して、access 制御などを行う場合には必須の概念。
 (注:access 制御には tag とか色々方法がありますが、まあ妥当でしょう)

多重仮想空間 with paging:
 移植性がよい。
 Segmentation を実現するための下地になりえる。

 -Aki.