Runner in the High

技術のことをかくこころみ

OSカーネルのCコードにでてくるkmainとはなんなのか

ozkl/sosoという小さなオペレーティング・システムの実装を読んでいたのだが、そこで出てくるmain.cのエントリポイントがmain関数ではなくkmain関数であることに気がついた。昔々にCを書いていたときは問答無用でmain関数とした記憶があるので、一体コレはなんぞやということでググってみると、いい感じのstackoverflowが出てきた。

stackoverflow.com

You could probably run the tutorial renaming kmain to main, but note that it’s still void main(void*, unsigned int), not int main(int, char**); in fact that sort of confusion is likely part of the reason the writers chose to use a different name. But is is just a convention they’ve selected, not anything standardized.

要は、アセンブリから呼び出されるようなmain関数相当のものは命名自由だが、これはmainはmainでも実行形式バイナリで使われるint main(int, char**)みたいな関数シグニチャとは異なるんだぞ、ということを明示する際にkmainやらdmainみたいな命名をする慣習らしい。

作って理解するOS  x86系コンピュータを動かす理論と実装

作って理解するOS x86系コンピュータを動かす理論と実装