[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[b-free: 1161] Re: Memory Protection
林さん、お久しぶり! :-)
Aki です。
Takanori Hayashi wrote:
> お久しぶり。林です。
>
> In message <351B109D.CA7A79B@bridgew.edu>
> "[b-free: 1158] Memory Protection"
> "Hideaki Suzuki <h1suzuki@bridgew.edu>" wrote:
>
> h1suzuki> 今週の僕の Computer の授業では、普通の OS の Security Protection につい
> h1suzuki> て話していました。
> h1suzuki> で、そのなかで(まあ教科書に書いてあったのですが)、
> h1suzuki>
> h1suzuki> 「Segmentation は Paging より Memory Protection によい。」
> h1suzuki>
> h1suzuki> ということがありました。
> h1suzuki> なぜ Seg. のほうが Pag. よりも良いかというのは、要するに、一つの共有
> h1suzuki> memory(SMB) への access を考えた場合に、 program の種類により access
> h1suzuki> privilege を変えられるからと云う話でした。
> h1suzuki> たとえば、shared memory block M にたいして、program A は読み書きできる権
> h1suzuki> 利を持つ segment Sa を通して操作し、program B は読み込みだけしかできない
> h1suzuki> segment Sb を通じて操作すると云った場合です。
>
> チップレベルで見ればpagingでも多重仮想空間を使えば同様のことはできますね。
> ここでいうsegmentationはx86の機能じゃなくてOS上の概念だろうからソフトウェア
> でsegmentationを実装するということかも知れないけど。
えっと、教科書の方では、segmentation の話は、CPU/OS/Compiler などを総合して書いてある
ようです。で、segmentation の方は、幾つかの program で同じ segment name を共有するのに
追加の処理が必要だと書いてありました。要するに、Win95 で関数を export にするために
、.def を書くような処理ですね。この本の扱っている、segmentation は name base みたいで
す。で、多重仮想空間というのは、なんです?<しらない。^_^;
「幾つかの program context で、memory address が重なっても別の memory を参照していると
考える」とか、そんな感じでしょうか? 同じ事ですが「各 process が、個別の address 空間
を持っている」とか。
> h1suzuki> x86 arch. のために、B-free は Paging による仮想記憶と Segmentation によ
> h1suzuki> る code protection と同時にやっていると思うのですが、もし、SMB の access
> h1suzuki> right を変更できたら面白いかもしれませんね。たぶん有用な、実現例としては
> h1suzuki> SMB を獲得時に、獲得した process しか書き込めない(共有する process は読
> h1suzuki> み込みのみ)とか、 SMB の属性を読み書き許可から読み込みのみ許可に切り替
> h1suzuki> えるとかかな。より制限された権利で、segment を dup して、他の process に
> h1suzuki> 渡すという使い方も出来るかも。
>
> B-Freeの実装はきちんと見てないけどx86のセグメントは使ってないと思うな。厳密
> にいうと使わないことはできないから、全部のセグメントをゼロベースで固定して
> いるということだけど。フラット(32bit near)モデルという奴ね。
flat model と、segment model では、どちらが、どのような利点があるのでしょうか?想像す
るには、segment model の方が、incremental compile とかの時に楽そうだけど、、、(code
なら code head からだけの offset で address が記述できて、data の量とかによらないか
ら)。
でも、flat model の方が、速いのかなぁ? どのくらい違うのだろう。
Address 空間という意味では、flat model の方が offset で表現できる大きさに限定される
(near)のに、segment model の方は、各 code や data それぞれが、offset 表現の限界まで、
address 空間を持てるというのがありそうですが、near は一つの process に対しては十分に広
いという気もする、、、。
# 1Bは286ですから、Segmentation のみですね。
# Win95 の、NEW-EXE も基本は Segmantation でしたっけ?
# ちなみに、Segmentation の下に Paging をひいているので、
# fragmentation は気にしない物として、話を扱っています。
> でも多重仮想空間は使っているから(コードのアドレスとか固定にするのに)上記の
> ようなことはそのまま実現しているはずです。
>
> h1suzuki> どちらにしても、まあ、特権命令を使うでしょうから中心核に入る必要があるで
> h1suzuki> しょうし、需要が多くないと、あんまり実現しない機能ではある気がするけど
> h1suzuki> 、、、。(笑)
>
> 需要が多いかどうかは知らないけれど共有メモリでは当たり前の機能だと思うな。
> 見るプロセスによってアドレスが違ったりアクセス権が違ったりするのは。
> # アドレスは特に指定しない限り違う可能性があるのが普通です
そうですね。>Address。
うーむ。でも、B-free OS の、Memory Manager をみるかぎり(たぶん BTRON1 の API を参考に
したせいでしょうが) Access Right を変更するような API はありませんねぇ。
get_sma/set_sma あたりを拡張するか、それとも別の API を用意するかですね。
どちらの方が良いのでしょう。>MM 担当の人(だれ? (^_^;;;;)
# <B-free MM spec. >
# http://rosetta.sccs.chukyo-u.ac.jp/B-Free/technical/memory-manager.html
それと、segment を複製して、別の process に渡すというのは、どうしたらいいでしょうか。
これはただ単に、SMB の key の複製で良いのかな。ともったら、key を複製する API も無いで
すねぇ。
そういえば、key の事を考えると、ようするに、segment name って、key と実質的に同じです
ね。そうすると、flat model だろうと、segmentation model だろうと、B-free の MM API の
段階で、SMB に対しては、Segmentation を行っていると考えられますね。
すると、あとは、code まで、segmentation を持ち込むかどうかですね。
code に segmentation を持ち込む一つの利点は、上記のように、data から address が独立し
address 空間が広がり、incremental compile のと気に楽ができそう、という感じですが、他に
あるでしょうか?
> 。
>
> h1suzuki> 追伸:
> h1suzuki> ちなみに、記憶空間に正負の signed integer を
> h1suzuki> 使うという話は書かれていなかった。
> h1suzuki> あんまり一般的ではないのかなぁ?<坂村教授の発案?
>
> これは他では見ないですね。普通はアドレス空間は符号無しです。特許かも。
たしか、符号付きにすると、address 幅を変えたときに移行が楽なんですよね。でも、教授はあ
んまり特許を主張しないからなぁ。
Infra. になることを考えると、主張するべきじゃないと考えてるのかなぁ。
いやむしろ、主張しているほど暇じゃないのがホンとの所だったりして。(笑)
> --
> Takanori Hayashi
> takanori@ohsaki.meidensha.co.jp
-Aki.