- アメリカだと「Good question!」って言われそうな質問だ、しらんけど。
- GUIでテキストファイルをクリックしてエディタでテキストが表示される流れは、LinuxでもWindowsでも基本的には動きは変わらない気がして、超ざっくりだけど、親プロセス(Windowsならエクスプローラー)から子プロセスが作られてから、例えばnotepad.exeが実行されて、ファイルをメモリに展開して・・・っていう流れだと思う。テキストファイルをクリックしたら、どのアプリが起動するかは、ファイルの拡張子とアプリケーションのヒモ付である関連付けという仕組みが働いてるはず。
- めちゃくちゃ解像度の荒い流れだけど、この中で、Linuxではfork(2)やexecve(2)っていうシステムコールが働くこと、ユーザ空間とカーネル空間でコンテキストスイッチしながら動くこと、コンテキストスイッチでOSとCPUで何が起こっているのか、とかを知っていくと良さそう。
- Windowsでのそのあたりの処理について詳しく知りたいのであれば、『インサイドWindows』が適切だと思うし、もっと気軽に実行ファイルがクリックされた時の動きをサクッと概要を知りたいのであれば、次の同人誌が適度にまとめてくれていて良いと思う。
- 南関東開発機構 : 同人誌『exeファイルをダブルクリックすると何が起こるか』を公開しました
- あと、大まかにプログラムが動く仕組みを知りたいのであれば、回答の中に出て来てる『プログラムがなぜ動くか』が良いように思う。この本もWindowsをベースに解説してくれている。
- プログラムを実行するにあたってLinuxのカーネルが何を提供しているか知るには『Linuxのしくみ』が良い気がする。
- より深くOSを知るためには、OSを作ってみるのが手っ取り早い気がするし、みかん本と呼ばれる『ゼロからのOS自作入門』、もしくは『作って理解するOS』などがあって、みかん本は使用する言語がC++だったし、内容もぼくには難しかった。でも、OS自作を始めるにあたってまず当たるべき令和時代での教科書的位置づけな本と思ってる。
- CPUでプログラムが処理される部分を知りたい場合は、最近発売された『プログラマーのためのCPU入門』、または『CPUの作り方10講』のようなCPU自作本でも良いと思う。
- CPUまではいかずとも、もうちょっと手前でプログラム実行について知りたいときは『ハロー“Hello,World"OSと標準ライブラリのシゴトとしくみ』も、結構面白くて良いかもしれない。この本は、大抵みんなはじめに作るHello Worldを表示させるだけのC言語で書いたプログラムに着目して、標準ライブラリのstdio.hが何をしているかニーモニックを読みながら理解していくという面白いスタイルの本。
- 最初の質問に戻って「コンピュータの仕組みを知りたい」っていう観点だと、コンピュータアーキテクチャという分野の話になるだろうし、分かりやすい本ではgihyoから出てる『コンピュータアーキテクチャ技術入門』がある。もっと理論的な本だと『コンピュータアーキテクチャのエッセンス』っていう本があるけど、これは情報系大学でテキストになってそうな本格的な理論本な雰囲気だったから、ぼくは読んでない。
- ファイルをクリックして表示させるってだけのことだけど、その処理の流れをしっかり知ろうとすると、1冊の本ではカバーしきれないほどの領域を知る必要があって結構根気がいる気がする。