第1回 initを置き換えるlaunchd【前編】Undocumented Mac OS X(1/3 ページ)

UNIX使いに真のMACPOWERを! 本連載では、UNIX使いに向け、UNIX系OSとしてのMac OS Xを解説していく。記念すべき第1回では、initに代わるものとしてMac OS X Tigerで採用された、launchdを紹介しよう。

» 2007年04月26日 08時00分 公開
[白山貴之,ITmedia]

 Mac OS XはMach*と*BSDをベースとしたOSで、その構造はUNIXそのものであると言える。しかし、その源流にはNeXTSTEPやMkLinux*といった「一味違った」UNIXがあり、そこからの影響を強く受けている。加えて、UNIXとは異なるMac OSというPCOSの後継でもあり、特にGUI面では、UNIX世界の標準といえるXウインドウシステムとまったく異なる機構が使用されている。こうしたことから、ほかのUNIXと同じようには扱えない部分、なぜそうなのか一見理解できない部分が多々存在する。

 さらに、アップル(以下、Apple)という企業は、コンピュータに詳しくない初心者や従来からのMacユーザーを主眼に置いて広告や解説を行いがちだ。それらはUNIX使いにとってかえって分かりにくいメッセージとなるために、戸惑いやすく、本当に知りたい情報がなかなか見つからない。

 UNIX系OSとしてMac OS Xを見ると、従来のUNIXと異なる部分には極めてAppleらしい示唆に富んだ機能が隠れている。しかし残念ながら、先に述べた事情からそれらが理解されることは少なく、Mac OS Xにとっても、従来からUNIXに慣れ親しんだ熟練者にとっても不幸な状態が続いている。本連載では、そうした、存在はするが表ではあまり語られることのないMac OS Xの諸機能を解説する。Mac OS XまたUNIX使いの不幸な状態を改善する一助になれば幸いである。

 記念すべき第1回は、Mac OS Xで最初に動作するプロセス*、launchdについて解説しよう。

launchdが生まれた背景

 一般的なUNIXならば、最初に起動されるPID 1のプロセスはinitと決まっている。一般にinitはシェルを1つ起動し、それに起動スクリプトrcを実行させシステムの起動処理を行う。システムが稼働状態になった後は、すべてのプロセスの親として、あるいは親が先に終了してしまったプロセスの仮の親となり終了を見とる役割を担う。 cronは指定時刻ごとにプロセスを立ち上げる。inetd/xinetdなどといったデーモン*はネットワークからの接続を監視し、接続に応じて適宜サービスを実行する。これらは実装レベルでの差違はあれ、その役割分担はVersion 7のUNIXから最新のSolarisやLinuxまで何も変わらない。これに加え、Panther*まではMach由来のmach_init*というプロセスがプロセスID 2で動作し、Mach IPC*というプロセス間通信においてinetdのような役割を果たしていた。

 UNIXでは、こういった仕組みを利用し、それぞれの設定ファイルに指定を追記するだけで、OSの起動処理に対する新たな処理の追加、一定時間おきのプログラム実行のほか、ネットワークを介して接続があるたびに自動的にサーバを立ち上げるなどの複雑な処理を簡単に行える。

 しかし、これらはUNIXに最初からすべてあったわけではなく、必要に応じて作成・改善を加えてきたものであり、仕組みごとに設定方法も違えば対象となる設定ファイルも書式も異なる。単なるUNIXであれば「それはそういうものだ」という言葉で済んだかもしれないが、冒頭で述べたように、Mac OS XはUNIX系OSである一方でMac OSの後継OSでもある。こうした過去の慣習を引きずった状況は、決してUNIXに詳しいわけではないMac OS X向けアプリケーションの開発者や、システム管理者にとって重い負担となっていた。

 この問題を解決すべくTiger*で新たに採用されたのが、launchdだ。

このページで出てきた専門用語

Mach

DARPA(米国防総省)の資金援助を受け、CMU(カーネギーメロン大学)のリチャード F.ラシッド博士(現在の米Microsoft Research担当副社長)らが「スーパーコンピュータワークベンチプロジェクト」として開発したマイクロカーネルOS。

MkLinux

Micro-kernel Linuxの略称。AppleとOSF(The Open Software Foundation。現The Open Group)によってPowerMacintosh向けに開発されていた、MachマイクロカーネルベースのLinux互換OS。

プロセス

プログラムを実行する際の処理単位をプロセスと呼ぶ。すべてのプロセスにはPID(プロセスID)と呼ばれる一意の値が割り当てられている。

デーモン

いったん起動すると、停止するまでメモリ中に存在するプロセスをデーモンプロセスと呼ぶ。

Panther

2003年10月に発売された Mac OS X 10.3のコードネームおよび製品名。また、10.2はJaguarと呼ばれていた。

mach_init

Machが提供するカーネル環境における資源は、仮想記憶機構を除き、すべて単一の機構を通して呼び出すようになっており、この機構をportと呼んでいる。mach_initはこのサービスを行うもので、mach_initは最終的にinitを起動する。

Mach IPC

IPCは、Inter Process Communication(プロセス間通信)の略称。Mach IPCは、ネットワーク透過通信、型付けされたメッセージ、また巨大なメッセージを効率良く転送できることが特徴とされている。

Tiger

2005年4月29日に発表、発売されたMac OS X 10.4のコードネームおよび製品名。2006年発売といわれている10.5にはLeopardという名称がアナウンスされている。


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ