[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