C ++などのソースコードがコンパイルされると、コンパイラからの出力はCPUへの直接の命令だと思ったマシンコード(実行可能ファイル)になることを知っています。最近、カーネルについて調べていたところ、プログラムはハードウェアに直接アクセスできず、カーネルを経由する必要があることがわかりました。
したがって、たとえばprintf()
関数だけでいくつかの単純なソースコードをコンパイルし、コンパイルによって実行可能なマシンコードが生成されると、このマシンコードの各命令はメモリから直接実行されます(コードがOSによってメモリにロードされると)マシンコードの各コマンドは、OS(カーネル)を通過して実行する必要がありますか?
私は同様の質問を読みました。コンパイル後に生成されるマシンコードがCPUへの直接の命令であるか、CPUの正しい命令を作成するためにカーネルを再度通過する必要があるかについては説明しませんでした。すなわち、マシンコードがメモリにロードされた後はどうなりますか?カーネルを経由するか、プロセッサと直接通信しますか?
printf
良い例ではありません。C仕様では、「ホスト型」実装でのみ使用可能な関数として明示的に定義されています(「自立型」ではなく、カーネル上で実行されることを意味します)。また、ほとんどのプラットフォームでprintf
は、ユーザーlibc
が提供する単なる機能であり、ユーザーに代わって一連の処理を行います(最終的には、stdoutに出力するsyscallが含まれます)。一部の実装は、追加の非標準s を追加せずにリンク可能であることが保証されていることを除き、libvlc_media_list_add_media
orの呼び出しと実際には違いはありません。PyObject_GetAttr
printf
-l