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

[b-free: 1086] OS による言語へのスタック機構のサポート




隆一です。

# subject 変えました。


From: 片桐 明 <killy@rigy.co.jp>
Subject: [b-free: 1082] Re: はじめまして
Date: Wed, 25 Feb 1998 00:22:37 +0900

>  岩間さん、こんにちは。リギーコーポレーションの片桐です。
> 
> |     どもです、片桐さん。こちらでも、よろしくお願いします。片桐
> |    さんが参加されると、実際にOSに組み込むときのOS側の実装に
> |    ついても具体的な話しができそうですね。
> 
>  よろしくお願いします。(でもOSの中身については素人ですσ(^^;
> 
>  ついでと言っては何なんですが、FORTH/Mindのような、スタックオリエン
> テッドな言語を組み込み易くしてくれるといいなと思っています。
>  具体的に言いますと、
>  明に使えるスタックのPUSH/POPの機構だけでもいいからアセンブラ書かな
> くても使えるといいのですが‥。できれば2本。(←おいおい)
>  C風にかけば、push(data), data=pop() みたいなのが欲しいのです。
> (バリエーションとしては、drop(), swap() とかもう少しありますが)

えーと、これは OS にスタック操作用のシステムコールを追加するということ
でしょうか?
システムコールを介した場合、オーバーヘッドが、言語内でスタックをエミュ
レートする時より大きくなると思います。

# ひょっとしてハズしてます?


>  MindをUNIXに乗せる時に一番苦慮したのがそこでした。今まではずっと
> ディスパッチャ/低レベル単語はアセンブラ定義でったのですが、さすがに
> UNIXでアセンブラというのは見当も付かない話だったので、仕方なくスタッ
> クをエミュレーションしているのですが、速度が遅くなっています。
> 速度だけでなく、静的変数にスタックポインタを取っていることから、マルチ
> スレッド化もしずらくなっています。
> 
>  Cのランタイムの話と思われるかも知れませんが、正式にスタックとして
> 使うには、CPUの実レジスタに割り当てて欲しいので、やはりOSがらみの話に
> なるかと思います。(実レジスタだったら、割り込みやタスクスイッチで
> 自動的に保存されると思うので)

うーん、OS 側でユーザプログラムのレジスタの使用を制限することはないの
で、レジスタはユーザプログラムで自由に使えます。

もちろん、特権レベルが高くないと使えないようなシステムレジスタ(セグメ
ントレジスタなど)は、ユーザプログラムでは使えません。しかし、システム
レジスタの類は、ユーザプログラムレベルで普通のプログラムを組む場合には
必要ないと思います。

ですから、C コンパイラの convention が許す限り、実レジスタをスタックポ
インタとして使うことはできると思います(ただ、i386 系の CPU は、汎用レ
ジスタの数が少ないので、C コンパイラはすべてのレジスタを使っていまうよ
うな気がします)。


この辺の話は、Windows でも同じかと思っていたんですが、ひょっとして、
Windows ではレジスタの使いかたが違うんでしょうか?



p----------------------------------------------------------------------q
| FROM R.Night                                                         |
| E-mail:                                                              |
|         naitoh_r@soft.hitachi.co.jp                                  |
|         rnaitoh@st.rim.or.jp                                         |
| Key fingerprint = 89 EB 77 95 40 C0 3C CC  37 A1 A7 FA 1C 66 FF D0   |
b----------------------------------------------------------------------d