OSの仕組みを覚えましょう@阿部

前回、PHPでのバックグラウンド処理について書きました。
今回は、バックグラウンド処理で使用する「プロセス」などを含めた、OSの仕組みを知っておきましょう、という内容です。


ただ、本気でOSの仕組みを書き始めたら、ブログの1エントリーだけでは全然書ききれませんので、さらっとだけ触れることにします(苦笑)。


APIから知るWindowsの仕組み(ITPro 連載記事)
http://itpro.nikkeibp.co.jp/article/COLUMN/20070129/259838/


前回のバックグラウンド処理では、上記記事にもある「CreateProcess」というWindowsAPI
Application Programming Interface)を紹介しました。
CreateProcess関数により、アプリケーション本体とは別途に動作する「プロセス」を作ることで、並列処理のような動作を実現できるというわけです。


「プロセス」とは、大雑把に言ってしまうと「実行プログラム」です。
ただ、その役割や動作によって、

  • カーネル(Kernel)
  • サービス(Service。Windowsでよく使われる)
  • デーモン(DaemonUNIXLinuxでよく使われる)
  • ドライバ(Driver)
  • アプリケーション

のように呼び方が変わるだけです。


Windowsでは「スレッド(Thread)」というものもありますが、これもプロセスの一種です。


 ※スレッドと言っても、2ちゃんねるの「スレ」とは違いますよ :-)


PHPASPJavaアプレットサーブレット、アプリ)なども、それぞれの言語を解析・実行してくれる「プロセス」が動いているので、いろいろな事が出来るわけです。


ごく小さい規模のWebアプリであれば、OSの仕組みまでは知らなくても事は足ります。


ですが、少し規模が大きくなったりして、言語仕様だけではサポートしきれない仕様が策定されたり、処理スピードの改善要求を満たす必要がある場合に、OSの仕組みを知っているかどうかで、実装能力の差が出てきます。


ソフトウェアは、基本的に「時間がいくら掛かってもよければ、絶対に実現不可能といえるものは少ない」です。
(そこがソフトウェアの良い点でもあり、問題点でもあります)


しかしながら、時間(納期)は限られていますし、CPUの処理速度やメモリ容量により、出来ることの制限はありますので、そこをやりくりするのもソフトウェア技術者の能力と言えるでしょう。
そういう意味では、実現したいシステムに対して一番適している言語を選定するのも、良いシステム作りには欠かせない点です。


無理やり例えるならば、C++の生産効率が良いからといって「初代ファミコンのゲームをC++で作る」なんて事は、メモリ容量やCPU(MOSテクノロジー社製6502のカスタムチップ)性能を考えると、あきらかに無理なのは判っていただけると思います。


ちょっと話が横道にそれましたが、何らかの言語を使ってシステムを構築する際には、システムが動いているOSの仕組みも覚えておくと、少々理不尽(苦笑)な仕様であっても何とか実装出来てしまうわけです。


ソフトウェア技術者であるならば、


「機能が無ければ、自分で作る」


ぐらいの気持ちを持っているのが良いでしょうね。