オペレーティングシステムは、管理対象の同じチップ上でどのように実行できますか?


17

オペレーティングシステムに関する私の読み物(ウィキペディア、技術サイトなどの基本資料を読む)から、オペレーティングシステムは、プログラムとアプリケーションが効率的かつ安全な方法でハードウェアと対話できるようにするプログラムであることを学びました。

ただし、オペレーティングシステム自体を操作する必要があるときに、オペレーティングシステムがコンピューターの操作を監視する方法について混乱しています。

どういう意味ですか?オペレーティングシステムが動作すると想像する方法は、コンピューター上に2つのCPUがあるということです。1つは常にOSを実行し、もう1つはOSがコンピューターを実行するために使用します。ただし、OSは他のプロセスと同じCPUで実行されていることがわかります。これは、マネージャーが従業員と同じ生産ラインで作業しなければならないようなもので、別の従業員が作業ツールを使い終わったときにのみ電動工具を使用できるようになります。彼は、従業員が少しでも規律を欠いている場合、注文を発行することができないため、あまり効果的なマネージャーではありません。

それでは、他のすべてのプロセス間で共有する必要がある同じCPU上で、OSが一部の時間しか実行されないのはどうしてでしょうか。これはどのように解決するのですか?


1
マネージャーは従業員の電動工具を使用しないでください!代わりに、彼は従業員が作業用電動工具を持っていることを確認する必要があります。
–MSalters

回答:


15

最近のCPUは、ある程度までOSを認識しています。彼らは彼らを主張する最初の人にいくつかの「パワーツール」を提供します。通常、これはブートローダーで、OSに制御を渡します。通常、「カーネルモード」と「ユーザーモード」、または「リング0」と「リング3」について話し、余分な特権を持つプロセスとそれ以外のプロセスを区別します。

これらの「パワーツール」は、リソース管理のための特定の特権です。メモリ、ハードウェアへのアクセス、およびユーザーレベルのコードを中断なしで実行できる期間を制御します。

CPUは、次のいずれかのイベントが発生すると、特別な特権でOSを実行します。

  1. ユーザーモードプロセスは、コントロールをカーネルモードプロセスに明示的に渡します。これはsyscallと呼ばれます
  2. カーネルモードプロセスは、特定のイベントに登録するために特別な特権を使用できます(たとえば、外部ハードウェアがCPUに特別な信号を送信したり、ユーザースペースプロセスが予約済みリソースにアクセスしようとしたりします)。このようなイベントが発生すると、CPUはユーザーモードプロセスを直ちに停止し、カーネルモードプロセスに制御を渡します。通常、人は割り込みから話します。

したがって、チップはこのために構築されているため、OSは同じチップ上で実行できます。それ自体に特別な特権を予約できます。CPUは、いつでもこれらの特別な特権なしで他のすべてのコードを中断し、OSに制御を渡すことができます。

サポートが非常に限られている一部のチップ(マイクロコントローラーなど)は、特別な特権コードをサポートしていません。これらのチップは通常、OSなしで実行されます。ハードウェアに直接アクセスでき、ハードウェア割り込みに応答する必要があり、いつでもリソースにアクセスできる大きなプログラムが1つだけ実行されています。そのプログラムが1つの間違いを犯した場合、通常はすべてがクラッシュします。


17

最も原始的な形式では、オペレーティングシステムは、適切に動作し、時々オペレーティングシステムに制御を戻すプロセスに依存しています。プロセスが正常に動作しない場合、実際にオペレーティングシステムがフリーズする可能性があります。

ただし、ほとんどのCPUには割り込みがあります。割り込みは、現在のプロセスを一時停止し(プリエンプション)、オペレーティングシステムに制御を戻します。割り込みを特定の間隔で発生するようにスケジュールすることも、外部でトリガーすることもできます(たとえば、リセットボタンを押す)。

基本的に、CPUは、OSの実行とプロセスの実行速度を非常に高速に切り替えます。さらに、CPUには「ユーザーモード」と「カーネルモード」があります。プロセスはユーザーモードで実行され、OSはカーネルモードで実行されます。ユーザーモードで実行すると、プロセスが制限されたコマンド(IOなど)を実行できなくなります。プロセスがディスクに書き込みたい場合は、OSに書き込みを依頼する必要があります。OSはカーネルモードに切り替わり、プロセスに代わって書き込みを行います(プロセスに必要な権限があることを確認した後)。


7
@Imray実際には、CPUにとってOSはコードのほんの一部です。ただし、CPUには、OSの作成者が使用するために設計された多くの機能があります。
トム・ファン・デル・ザンデン

3
「知っている」という用語が正しいかどうかはわかりませんが、CPUにはOSを実行する以外に存在する理由はありません。完全に独立しているわけではありません。実際、CPUはOSに完全に依存してさまざまなモードを管理し、そうでなければ何をすべきかを指示します。
モヘア

2
@Mohair OSなしで実行される多くのマイクロコントローラーがありますが、それらはCPUとしてカウントされますか?
トム・ファン・デル・ザンデン

2
「それらはCPUとしてカウントされますか?」もちろんそうです。6502は、ユーザーとカーネルの個別のリングがなくても、私の最初のコンピューターに搭載されていましpokeた。コマンドラインからあらゆる種類のいたずらを行うことができました。
dmckee

2
@TomvanderZandenどのように正確にthe CPU switches back and forth between running the OS and running processes?何がスイッチをトリガーしますか?
jnovacho

1

マイクロプロセッサがユーザー空間とカーネル空間のコードを実行するために2つの異なるプロセッサは必要ありません。基本的には、BIOSでコンピューターをオンにすると、RAMにブートローダー(55aaブートローダー署名を終了するディスク上の512kbコード)が読み込まれ、このブートローダーを介してカーネルがRAMに読み込まれ、コンピューターをシャットダウンするまで永遠に実行されます。また、カーネルはメモリを管理し、RAM上にあるカーネルコードがユーザースペースコードによって上書きされることを許可しません。この目的のために、これらのシステムコールを使用してユーザースペースコードを呼び出し、RAMにユーザースペースコードを追加して実行を開始するシステムコールがあります。オペレーティングシステムでは、この概念はメモリ管理として研究されています。読むことができるリンクはここにあります https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf


0

他の答えに基づいて、カーネル自体がプロセスではなく管理コードであると考えると理解しやすくなります。すべてのユーザープロセスは、ユーザーモードからカーネルモードに移行し、カーネルスペースの一部を使用してカーネルコード(特権命令)を実行できます。その後、プロセスはユーザーモードに戻り、ユーザー空間で再度実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.