これは非常に良い質問(あなたが知っているよりも良い)であり、学ぶことがたくさんあります。たくさん。
私はそれを省略しようとします。オペレーティングシステムは、ソフトウェアとハードウェアとの間の抽象化レベルとして作用:
Software
.
/|\
| communicates with
\|/
'
Operating System
.
/|\
| communicates with
\|/
'
Hardware
OSがドライバ(広く使われている用語)と呼ばれるプログラムを介してハードウェアと通信し、OSがシステムと呼ばれる手順を介してソフトウェアと通信(あまり広く使われていない用語)を呼び出します。
システムコールを行うときは、プログラムを終了し、オペレーティングシステムのコードを入力します。システムコールは、プログラマがリソースと通信するための唯一の方法です。今
私はそこに停止しますが、あなたはまた、言った:「私に
は、マシンコードが よりも低いレベルでオペレーティングシステムを実行すべきであると思われるので、私がすることができますOSがどのようにして がコンパイルされたアプリケーションと ハードウェアとの間の仲介役を果たすことができるかを理解する。
これはトリッキーですが、基本的なことを理解すれば簡単です。
まず、すべてのコードは、CPU上で実行されているマシンコードです。コードは他のコードよりも高いか低いです(特権付きカーネルモードでしか実行できないコマンドを除きます)。だから問題は、CPUがユーザーに制御されていなくても、OSがどう制御できるかということです。
コードがCPU上で実行されている場合、という割り込みがという概念があります。これはCPUに送信され、現在実行中のコードを停止させ、割り込みハンドラと呼ばれる別のコードで切り替える信号です。
割り込みの例には、キーボード、マウス、最も重要なのはクロックが含まれます。
定期的にクロック割り込みが発生すると、オペレーティングシステムのクロック割り込みハンドラが実行されます。このクロック割り込みハンドラ内では、現在実行中のコードを調べるオペレーティングシステムのコードが、次に実行するコードを決定します。これは、より多くのオペレーティングシステムコードまたはより多くのユーザーコードです。
クロックは常には刻々と過ぎ、およびオペレーティング・システムのため常には、CPU上で実行するには、この定期的な機会を得るであるので、それは同じセットのを使用して実行していても、コンピュータ内のすべてのオーケストレーションすることができますCPUコマンドは通常のプログラムと同じです。
コンパイルされたアプリケーションは、他のマシンコードの関数を含むDLL(Windowsのkernel32.dllなどのオペレーティングシステム)に対する関数呼び出しを行うだけです。他のマシンコードはハードウェアと連携するように特別に書かれているので、そうする必要はありません。 –
あなたの質問に対する答えは多少接線ではありませんが、言語とOSの境界に興味がある場合は、プロセスの多くのステップのいくつかで少し畏敬の念/恐怖/嫌悪感を与えます〜についての不思議...://http://stackoverflow.com/a/2444508/211160 – HostileFork