CPUがユーザーモードの場合、CPUは特権コマンドを実行できず、カーネルスペースメモリにアクセスできません。
そして、CPUがカーネルモードにあるとき、CPUはすべての命令を実行し、すべてのメモリにアクセスできます。
Linuxでは、ユーザーモードプログラムはすべてのメモリにアクセスでき、(使用して)特権コマンドと(使用しているようです)の両方を/dev/mem
実行できるようになりました。IN
OUT
iopl()
したがって、Linuxのユーザーモードプログラムは、カーネルモードができるほとんどのタスクを実行できます(私が考えるほとんどのタスク)。
ユーザーモードプログラムがこれらすべての機能を持つことを許可すると、CPUモードを持つ目的は無効になりますか?
ベストアンサー1
したがって、Linuxのユーザーモードプログラムは、カーネルモードができるほとんどのタスクを実行できます(私が考えるほとんどのタスク)。
まあ、すべてのユーザーモードプログラムは可能ではなく、適切な権限を持つプログラムのみが可能です。これはカーネルによって決まります。
/dev/mem
一般的なファイルシステムのアクセス権とCAP_SYS_RAWIO
機能で保護されています。iopl()
また、ioperm()
同じ能力によって制限されます。
/dev/mem
カーネル(CONFIG_DEVMEM
)で完全にコンパイルすることもできます。
ユーザーモードプログラムがこれらすべての機能を持つことを許可すると、CPUモードを持つ目的は無効になりますか?
おそらく。これは、特権ユーザースペースプロセスで実行できる操作によって異なります。ユーザースペースプロセスは、/dev/sda
アクセス権(またはそれに対応する権限)がある場合、ハードドライブ全体を損傷する可能性があります。これは、ストレージアクセスを処理するファイルシステムドライバの目的を喪失しても同様です。
iopl()
(i386でCPUの特権モードを活用して動作するという事実もあるので、彼らの目的を崩すとは言えません。)