|
HMDT - Back Number / September, 2002 |
September, 2002
今回は、組み込み機器に Linux を使うことの利点についてのお話。 Linux を組み込みに使う利点は何か?これは立場によって異なるんだ。もし、経営者やマネージャーに説明しなくちゃいけないなら、「Linux いいっすよ。ただっすよ、ただ!あと、こないだの日経でも特集あったじゃないすか!」というように、オープンソースであることと、トレンドである、ということを強調しよう。彼らが知りたいのは、そこだけだし。 そんなことはさておき、エンジニアから見ると何がうれしいのか?基本的には Linux は組み込みにはヘビーすぎる。だいたい、起動するのにファイルシステム用意しないといけないし。ファイルデスクリプタ使うから。組み込み機器は、あんまりファイルシステム使わないんだよ。 それでも使いたがるのは(使わないといけないのは)、ネットワーク化っていう大きな流れがあるからだ。これからの組み込み機器は、ほぼすべて IP をしゃべらないといけない。これ、時代の要請。そうじゃないと PC に飲み込まれる。でも、いざ IP しゃべるとなると、TCP/IP を実装して、DNS サーバ立てて、IPv6 も対応しないといけないし、セキュリティも考慮しないといけないし、http も ftp も対応するし、そうなると WebDAV もか?HTML のレンダリングもいるだろうし、これを全部一から組み立てるとなると、あーもう、やってらんねーぜ! そんなことだったら、すでにできあがってる PC 系の OS を使おうぜ、っていうの意見がとうぜん出てくる。要は Linux のネットワークスタックと、それに付随するアプリケーションを使いたいんだ。 もう一つ、ネットワーク化で変わるのは、、、以下続く。
各所でレポートされている通り、Rendezvous がオープンソースになったぜ。早速取りにいこう!ここから取るのが手っ取り早い(APSL に登録しておく必要あり)。公開されているコンポーネントは 3 つ。
中心になるのは mDNSResponder だ。あとの 2 つは、こいつに合わせるための修正。 で、mDNSResponder をダウンロードしてみると、この実装は 2 層に別れている。マルチキャスト DNS を処理するためのコア部分(mDNSCore)と、プラットフォーム依存部分。プラットフォーム依存部分は、もちろん MacOSX と MacOS9 用がある。が、それ以外にも Windows、POSIX(UNIX や Linux 用)、VxWorks(組み込み OS)がある。そして、Windows と POSIX には、ちゃんと実装も入っているじゃないか!(VxWorks はまだない) README を見ると、ちゃんと実装されているようなことが書いてあるので、Rendezvous for Windows はけっこう現実的なようだ。うーむ、Windows 環境でコンパイルして、Mac とランデブーさせてみたいぞ。
今回は、Linux とリアルタイム API の話。 前回、組み込み機器ではリアルタイム性が大事だぜ、っていう話をしたでしょ。で、Linux でリアルタイムを保証する API は、っていうと、、、無いよー!パイプにもソケットにもタイムアウト指定できいないし。そもそも、ファイルデスクリプタのアクセスにタイムアウト指定できないんだからな。 一応、リアルタイム対応の POSIX API (POSIX 1003.1b) は実装しているらしいけど、このカーネルでどの程度のリアルタイム性が保証されるんだ?組み込み機器では、数 msec のオーダーがよく要求されるけど、しかもチープな CPU で。とても応えられらないんじゃないか? ま、これはしょうがない、といえばしょうがない話だよ。もともとリアルタイム OS (RTOS) は、リアルタイム性を保証することを最優先にして、その代わり他の機能をざっくり削ってきた。メモリ保護とか仮想メモリとか。それに対して Linux というか UNIX はワークステーションや PC のような環境を前提にしていたから、カーネルの設計であまりリアルタイム性を考慮してないからね。 というわけで、Linux だけでは、ちと組み込み系には荷が重い。そこで最近の流行りは、コアカーネルに従来の RTOS(比較的小さい)を入れて、その上に Linux の皮(比較的大きい)をかぶせる、というものだ。リアルタイム性が要求される場合は、コアの RTOS の API を呼ぶことによって保証する。ユーザ(プログラマ)から見れば、Linux の API を使ってプログラミングができる、っていうものだ。 うまくやれば、これでリアルタイム性、っていう弱点がカバーされて、組み込みでの Linux の価値が上がることになる。でもねー、これって Linux というようりは、Linux + RTOS でしょ。それだったら RTOS だけでやっちゃった方が手っ取り早いんじゃないの?あと、RTOS の方はフリーでもないしオープンでもない。Linux の大きい利点が失われているような気がするぞ。 といったところで、以下続く。
前回の続きで、組み込み系の話だ。 組み込み系の OS っていう分野があるんだけど、これがPC 系の OS と違うのは、ずばりリアルタイム性ってやつだ。リアルタイム、っていうとちょっと誤解をまねきやすいんで、別の言葉でいうと実時間保証ってことになる。 これがなにかというと、すべての API の呼び出しが、指定した時間内に完了することを保証する、っていうことなんだ。たとえば、semTake() っていう API で、セマフォを取得しようとするとするでしょ。そうすると、普通はセマフォがとれるまでこの呼び出しはブロックされるんだ。 しかし、組み込み系だとそこでブロックされては困る。たとえば、テレビのチャンネルを変えるときに、セマフォを取得するのに失敗してずっと固まってたら困るでしょ。テレビには Ctrl+Alt+Delete はないしね。だから、セマフォを取得するときには、タイムアウトの時間を設定するんだ。セマフォが解放されるのをその時間だけ待って、とれないようだったら、エラーを返す。 というように、成功しようが失敗しようが、指定した時間内で API の呼び出しが返ってくる、っていうのを保証するのがリアルタイム性ってやつだ。これが組み込み OS の最も大きい特徴ね。 で、Linux だとこのリアルタイム性が、、、ということで、以下続く。
う〜ん、ちょっと最近、サイトが行き詰まっているような気がするなぁ。やりたいことはいっぱいあるんだけど、まとまった時間が取れないというか。本気でとりかかる土壌ができてないというか。どうしたものかね。 たまには Mac と関係ない話でもしてみますか。mkino は、Mac プログラミングは素人ですが、本職ではソフトウェアエンジニアってことになってるのでした。組み込み系の。組み込みの世界では、2、3 年前からトレンドの 1 つとして Linux が流行ってるんだよね。そんな時流に飲み込まれて、今度仕事で Linux ベースのシステムを作ることになったのでした。 組み込み機器っていっても、マイコン搭載炊飯ジャーみたいなものから、とりあえず目に付く技術全部突っ込んでみましたって感じの携帯電話まで、いろいろあるわけで。単純なものは OS なんかいらなくて、メモリ管理もプロセス管理(そもそもプロセスがない)も自分でやるよー、って感じなんだよ。それがどんどん複雑になっていくと、メモリ保護がないとやってらんないし、プロトコルスタックを自分で作るのはめんどくせーよ、ってことになるんだ。そうすると、リッチな OS の出番だ。 OS っていっても、Mac や Windows 以外の PC 用 OS 以外にもいろんな種類がある。当然、組み込み機器には、組み込み OS だ。前に使ってたのは Wind River の VxWorks。いま、Wind River のページを見にいったら、本田の ASIMO って VxWorks 使ってたんだ。知らなんだ。 で、今度やることになったシステムは、ま、従来の組み込み OS でやってやれないことはないけど、そこそこ複雑だし、Linux ブームだし、この辺で移行しちゃった方がいいんじゃない?っていう流れになんたんだろう、と勝手に想像してる。真相は知らんけどね。 で、組み込み機器と Linux の相性なんだけど、、、以下続く。
Cocoa 1001、きょうはNSTextStorage の話。 Cocoa 1001 NSTextStorage
Cocoa 1001、NSTextView の話です。NSTextView の後ろにある構造と、それを動的に作る、っていう話。 Cocoa 1001 NSTextView
仕事で出張に行ってきました。飛行機乗りまくって、疲れました。ふー。もう国際線乗りたくない。乗ってる時間長過ぎ。おしり痛い。機内食おいしくない。 ということはさておいて、Objective-C 最適化の続き。ハッシュの話の後編だ。 今回は、実際に Mac OS X でのハッシュを最適化する話だぜ。はっきりいって、かなり面白いよ。Mac OS X では、NSObject の hash メソッドと、CoreFoundation の CFHash とがあるけど、どちらも最適化の余地があるらしい。こいつらって、さんざんいろんなところで使われているだろうから、ここが速くなれば、全体的にスピードが上がるのだ。 ソフトウェアをチューニングして、パフォーマンスを上げる、ってのがソフト屋さんにはたまらないね。あと、もっときちんと最適化してくれ、Apple。 Objective-C 最適化 - Mac OS X でのハッシュを最適化する
ひっさびさの Objective-C 最適化。今回はハッシュの話だ。 ハッシュっていうのは、もちろん、全プログラマ必須の技術。あるオブジェクトとかから、ある値を作り出して、辞書とかの検索とかを高速化する技術だ。って書くと偉そうだけど、とっても単純な仕組みになってるのは、ご承知のとおり。 Mac OS X でも、もちろんハッシュは使われていて、Foundation の場合、NSObject の hash メソッドが入り口になる。じゃ、その実装はどうなっているのか?ってのがこの章のお話。 まず今回は、ハッシュのことをあまり知らない、駆け出しプログラマのためのイントロです。 Objective-C 最適化 - Mac OS X でのハッシュを最適化する
Jaguar から NSProgressIndicator に、スピニングスタイルが追加された。Finder のウィンドウの右上で、くるくる回っているあれね。こんな感じで並べてみた。
下のラジオボタンを選択すると、動いたり止まったりするよ。うーむ、わざわざ作るようなものか? サンプル .nib 上からダウンロードできるのは .nib だけです。そいつを Interface Builder で開いて、"Test Interface" してやれば、試すことができるよ。 ついでに、ほんのちょっとした Tips。スピニングスタイルは 10.2 から追加されたスタイル。だけど、Interface Builder はデフォルトでは 10.1 のフォーマットで .nib を保存するようになっているんだ。だから、そのままでは保存されない。Interface Builder の Preferences を開いて、10.2 用の .nib フォーマットで保存するようにしないといけないのだ。
|
|
Home | Link | Download | Back Number | Speciall Issue
|