カーネルモードからユーザーモード(またはその逆)への変更


8

Galvinによるオペレーティングシステムの本を読んでいます。Galvinは、カーネルモードとユーザーモードとは何か、両方のモードに与えられる命令特権、およびモードビットについても説明しています。しかし、モードがどのように変化するか知りたいです。基本的に私は次の質問を解決したいと思います:

CPUには、特権モードと非特権モードの2つのモードがあります。モードを事前から非事前に変更するため

a)ハードウェア割り込みが必要

b)ソフトウェア割り込みが必要です。

c)特権命令が必要です。

d)非特権命令が必要です。

私が理解していることから、

ユーザーモードからカーネルモードへ-ハードウェア割り込みが必要です(ディスクI / Oのように)。ユーザープログラムが許容範囲を超えるメモリにアクセスするのに疲れた場合、トラップが発生します。トラップは基本的にOSによって処理されるソフトウェア割り込みです。これで、ユーザーモードでは特権命令を実行できなくなりました。したがって、I / O要求などの非特権命令は、ユーザーをカーネルモードに変更できます。だから私は、変えるために

非特権(ユーザー)から特権(カーネル)へ-H / W割り込み、S / W割り込み、非特権命令が実行します。

カーネルがユーザーモードになりました。OSはカーネルをユーザーモードに変更できます。そのため、カーネルからユーザーモードに変更する特権命令を実行します。H / wまたはS / w割り込みを生成する必要はありません。だから私は結論を変える

previledgedからnon-previledgedへ-特権付きの命令で実行されます

私は正しいですか?

また、カーネルモードで実行すると、すべての割り込みが無効になりますよね?したがって、答えは(a)または(b)にはできません。また、OSは基本的にはソフトウェアであるため、ハードウェア割り込みを発生させることはできません。

また、OS自体が割り込みを処理するため、カーネルからユーザーモードに変更するために割り込みを生成(およびサービス)する必要がある理由は私にはわかりません。

私がどこか間違っている場合はお知らせください。これに関するどんな助けでもありがたいです。

回答:


7

ユーザーモードからカーネルモードへ:間違っています!;-)はい、割り込みはカーネルモードで処理され、元々カーネルモードに入る方法は、ソフトウェアによって何らかの方法で強制された割り込みによるものでした。DEC 2020では、UIO(実装されていない命令オペコード)のセットがあり、それらのいずれかを呼び出すとオペレーティングシステムにトラップが発生しました。これらには、浮動小数点命令(ハードウェアにない場合)やその他のエキゾチックな命令だけでなく、オペレーティングシステムコールを実行する手段も含まれていました。i?86ファミリーにはint(割り込み)命令があり、あなたが言うように伝統的に使用されています。家族のより新しいメンバーは、監督者呼び出しをより効率的に行うためにSYSTENTを持っています。スーパーバイザモードに移行する手段には特権を与えることはできませんが、カーネルによって何らかの方法で厳密に制御する必要があります(カーネルを入力する場所、渡す引数など)。

カーネルモードからユーザーモード:「特権の削除」操作に特権を与える必要はありません。権限がない場合は、削除しても何も起こりません。しかし、正確なメカニズムは極端にアーキテクチャに依存しています。

カーネルで無効化された割り込み:割り込みは、できるだけ早く処理する必要があるいくつかの条件を示します(たとえば、ネット経由で到着したデータが、次の到着前にカードから保存されていない場合、上書きされます)。したがって、割り込みが無効になることはほとんどありません。元のUnixシステム(および同時代)では、CPUが1つあり、重要な領域(「データを変更している間、誰もデータを乱用しない」)を取得する最も簡単な方法は、割り込みを無効にすることでした。上記の理由から、「割り込み無効」ストレッチをできるだけ短くするために、痛みがとられました。現在のマルチCPUマシンでは、1つのCPUで割り込みを無効にしても、この方向ではあまり効果がありません。グローバル割り込みを無効にすることであるextremeñyそれが行われていないので、CPU間の連携でコストのかかる(または非常にまれ)。


「特権の削除」操作に特権を与える必要はありません。つまり、カーネルモードからユーザーモードに変更するには、非特権命令で実行できます。それが非特権命令である場合、ユーザーでもそれを実行してカーネルからユーザーモードに変更できますか?それとも私はそれを間違って解釈しましたか?
avi 2013

はい、「通常のユーザー」はカーネルモードに入ることができません。さらに、特権を削除しても害はないので、(それ自体で)特権を与える必要はありません。これを一部のマシンで実行すると、たとえば特権レジスタの盗用を意味する場合は、そこで特権が付与されます。ただし、特権を与える必要はありません。
フォンブランド2013

うまくいきません。あなた自身の以前のコメントとそれ自体と矛盾する答え。コメントで「「通常のユーザー」はカーネルモードに入ることができない」と述べましたが、答えは「特権の削除」操作に特権を与える必要がないことです。何が欠けていますか?:S簡単に言うと、カーネルをユーザーモードに変更するには、モードビットを変更する必要があります。ユーザーモードで正しく実行できないものはどれですか。したがって、非特権命令にすることはできません。
avi 2013

くそー、私はまた、ユーザーモードからカーネルモードへの間違った理由を理解していませんでしたか?あなたの説明では、最初の数行で、ユーザーがカーネルモードに入るとINT命令を使用して行うことができ、最後に「スーパーバイザモードに移行する手段には特権を与えることはできません」と述べました。これが私が言及したすべてではありませんか?H / W割り込み(I / O要求などの明らかなもの)、S / W割り込み(INT命令)、非特権命令。
avi 2013

それは可能割り込みで行われるが、他の可能性があります。特権を与えることはできません(特権がある場合、ユーザーはそれを実行できません;-)。
フォンブランド2013

0

カーネル(特権)モードからユーザー(非特権)モードに、RtI(割り込みからの戻り)を使用します。これは特権命令(https://www-01.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix)です。 .alangref / idalangref_rfi_retfinter_instrs.htm)。したがって、私によると、それはオプションCである必要があります。


3
使用する命令は完全にアーキテクチャに依存します。
David Richerby 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.