Linux Gazette 2004年12月投稿記事
目次
投稿者 tojileon:12/01/2004 - 22:25. 共同体|一般|興味
今日私はDia を使ってプロジェクトに関するハイレベルの決断をした。Diaはベクトルグラフィックに使用されるプログラムである。フローチャート、UMLダイアグラム(その他多数)などに使用される。インターフェイスは極めて簡単だ。ダイアグラムはpng、jpgなどを含む各種フォーマットでエキスポートすることが出来る。私はjpgフォーマットでエキスポートするため最新のDia, バージョン0.94をダウンロードした。私のFedora Core 2には、Dia 0.92だけが付いて来た。最新版をhttp://rpm.pbone.netからダウンロードしたが、単なる'rpm -Uvh'で十分だった。ソースtar ballのrpm構築も使うことが出来る。Diaのこの最新版は、K Menuのグラフィック部分に示される。以前はK Menu -> Officeであった。
私は何年もWindowsユーザであった。Windowsでおこなった最近の環境は、MS Wordで図表を描くことだった。悪夢だった。大袈裟に言っているのではない。Windowsで他にベクトルグラフィックを描く方法があるだろうか?('MS Paint'などと言うな。あれは子供用だ)。"Visio"は聞いたことがある。Diaは、市販Windowsプログラム'Visio'に似ていると、Dia homeが言う。
Diaを楽しんだのがこれを書いた理由だ。
ハウツー:LinuxGazette.comへのBlogging
投稿者、
Taran :12/04/2004 - 04:56. 記事| ハウツー
本稿執筆時、Linux Gazetteの 'blog' 能力を探求している人は少なく、これがあることを知らない人もいる。これはFAQ(質疑応答)の一部になるだろう。
Blogging
blog. をしたいとき、又は
Weblogがあるとき、極めて容易におこなう事が出来る。Weblogの初心者でも構わない。最初から解説する。
blogをするポイントは書くことだ。オンライン・ジャーナル、共同体と情報を共有する方法、として用いる事が出来る。これは、何か良い事をしたり見付けたりして、それを共有したいが、記事にするには小さ過ぎると思うとき特に有用だ。weblog は、自分を表現する個人用の余地を与える。
Linux Gazette上でBlogをするための指針
Linux Gazette上でBlogをするための指針は極めて分かり易い。先ず登録ユーザになる必要がある。次に、PG-13に保つ必要がある(そこには可愛いペンギンがいる)、最後に、だが特に、Linux、コンピュータ・ハードウエア、又は無料ソフトウエア・オープンソースで為すべきことがなければならない。
人様の著作権を尊重しなければならない。著作権に抵触する入力があるときは、削除を期待することが出来る。そのときは貴方に連絡するので、Linux Gazetteが「俺のblogは?」と言っても心配することはない。
Linux Gazetteでblogする機構
blogエントリを作る方法は簡単だ。LinuxGazette.comにログした後、自分の名前が載っている領域が見つかる。その領域内でリンクとして 'create content' があるので、それをクリックする。
一番上に 'personal blog entry'(個人登録)とあるペイジに運ばれる。
ここに自分のweblogの題名を書き込み、'Linux Gazette Blogpage'のヘディングの下で、'community'を選ぶ。それが君で、我々全部だ。望みなら物事を分類する。しないのも随意だ。
ここから、 Body (本文)ボックスの中に自分のエントリをタイプするか貼り付ける。ここでは、リンクなどの作成に自分のHTML技術が物を言う。2005年には働く筈だが、画像はない。
終わったら、'Preview' ボタンをクリックしてエントリを校正すると良い。リンクなどを点検して、自分のblogエントリが自慢するに足るものであることを確かめる。満足なら、'Submit' (送信)ボタンを押す。素晴らしい、公開された。しかし、プロンプトされるまで、表紙に載ると期待してはいけない。このシステムは試験中のものだが、将来のコミニュティでは表紙に載せるものと載せないものを投票する考えだ。今は、表紙に関連blogエントリを出来るだけ多く載せる積もりだ。
今は、trackbackを自動的におこなう。
blogエントリの編集/削除
自分の名前のある領域で 'my blog' リンクをクリックすると、個人blogを見る事が出来る。そこから、特定のエントリを見る事が出来る。そこから、エントリの一番上にタブがある。そのうち一つに'Edit'(編集)の文字があるのでクリックする。
これで、あらゆる編集をすることが出来る。 'body'(本文)領域の下の 'delete' (削除)ボタンをクリックして削除することが出来る。
Linux プラットホームへの Klez ウィルス感染とともに、主要アンチウィルス会社がウィルスに弱いのはマイクロソフトOSだけではないと言い始めた。Linuxその他の一般的UNIXプラットホームのユーザは、ウィルスを運ぶマイクロソフト束縛アプリケーションの大きいユーザではないけれども、Linux とUNIXには、一目では分からない独自の弱さがある。
Klezの他に、Linux/UNIXプラットホームが感染する主な脅威は、一寸数えただけでも、Lion.worm、OSF.8759 ウィルス、Slapper、Scalper、Linux.Svat、BoxPoison ウィルスがある。
約二年前に、ヨーロッパ最大の金融機関の一つがおこなったセキュリティ監査に参加して、有名なセキュリティ専門家が監査役に、UNIXシステムはウィルスに弱くないと言ったのを思い出す。監査役は単に「分かった」とだけ言ったので、UNIXはウィルスに対して安全だと覚えた。これらの日々は去った。監査役とITセキュリティチームがまとまって、UNIXプラットホームのためのウィルス製作を求めるのを期待することが出来るであろう。
Linux Kernel v2.6におけるスケジュール作成方針
この記事で、タスク・スケジューラに付いての一般的なことと、 linux kernelスケジューラに関する詳細をv2.4とv2.6に関して述べる。
1. スケジューラの一般的説明
タスク・スケジューラは、OSの最も重要な部分の一つである。メモリ管理とハードウエアの取扱を別にして、タスク・スケジュールの作成は、どのOSでも核心部分を形成する。スケジューラは、その最も裸の形では、システム内で活動中のタスク全部を、プロセスの優先値と呼ばれる尺度(通常は整数値)に基づいて、リストの形で配置する。その後、最高優先度のタスクを選んで、CPUその他の関連リソースそれに割り当てる。
プロセスは、その割当時間が経過するか又は、何かの入力/出力又は信号を呼出した後待ち状態に入るまで、若しくはプロセスが終わるか完了するまで走る。これら各々の場合に、このプロセスは活動中のリストから外され−終了又は完了していない場合は、
何か別の待ち行列に移される。このプロセスでは、タスクの優先度がそれなりに変更されるので、リスト内の位置が変わる。何時どのようにこれが為されるかの問題は、OSの設計方針に左右される。
あらゆるタスク・スケジューリング・アルゴリズムにおける錯綜度の主な領域を下記に示す。
1.その優先度にしたがうタスクの配列。
2.その優先度の再計算。
3.最高優先度タスクの取り出し
上の各ステップの時間的錯綜度は、タスクの記憶方法と作業の進め方に左右される。どんなアルゴリズムでも設計の前に、目的をハッキリしないといけない。あらゆるソフトウエアの設計は、何かをするためには何かを犠牲にしなければならない妥協の産物だからだ。スケジューラを書くについての重要問題は「良いスケジューラを書くため何をすべきか?」ではなく、「スケジュールすべきタスクは何かでなければならない。スケジューラはどんなリアルタイム埋込システムのためのものであっても、(システムをどんどん検定論的にして)重要タスクに対する応答時間を最小にすることを考えている。したがって、デスクトップ用を目指すスケジューラは、割込を最小にしてCPU利用度を最高にすることに集中する。主たる目的は、一つの事を正しくすることではなく、すべてのことを同時に達成することだ。
2. Linux Kernel v2.4用スケジューラ
kernelv2.4 スケジューラは、基本的にタイムスライス最高優先、非優先スケジューラである。タスクは、優先度にしたがって、二重リンクリスト(活動キューと言う)の形で配置される。このスケジューラは最高優先度を持つタスクを取り上げ、それを実行して終了キューと言う別のキュー(別のリンク・リスト)に入れる。時期が来ると活動リストが空になって、終了キューが一杯になる。そこでスケジューラは各タスクに新たな優先度を割当てて、活動キューを再構築する。したがってスケジュール作成アルゴリズムは、nをタスク数とするとき、n次即ちO(n)の時間的錯綜度を有する。線型因子は、リンクリストが線型アクセスを提供するので、最終要素を処理する最後まで順に動いて行かなければならないとの事実から来る。
SMP と単一プロセッサ・システム双方にのため、単一のグローバル活動キューがある。したがって、それにアクセスする必要のある各プロセッサは、GLOBAL BIG KERNEL LOCKと言うスピンロックを先ず呼出して、それからタスクリストを修正しなければならない。このロックは後で解除される。
これとは別に、SMP に基づくシステムのため、スケジューラはシステムが提供している空間的平衡性を損なわない。ここでは、タスクとプロセッサの間の結合が極めて緩い。タスクTがプロセッサPI上で実行されているとしよう。関係する計算と前後関係は全部PIのローカル・キャッシュにある。ここでTが何かI/O活動に入ると、スケジュールから出る。次回にはTがPIにスケジュールされる保証はない。新たなプロセッサに割当てられると、新たなプロセッサのキャッシュをロードし直さなければならない。これにより、遅くなる上システムは冗長を生じる。特にSMPシステムにおいては、待機プロセッサが、未だタイムスライス無効にがなっていない待ちプロセスの実行を開始して、プロセスが、プロセッサの間で「跳ね返り」始める。
これはシステム全体の性能に影響する。これら要因の全部がシステムの応答を悪くする。
その上、2.4 kernelは非先取得権である。タスクがシステム呼出をしてkernelモードでコードを走らせているとき、そのkernelコードが完了するまで割込みされることは出来ない。走っている問題のタスクの優先度が低いとき、2.6 kerne以前の非先取得権の性質により、このタスクに事実上の優先権を与え、優先度の高いタスクに関する応答を妨害する。
これら全部の要因が、高度に敏感で決定論的なスケジューラを作る上での障碍である。これらの要因はkernel v2.6に関する設計で改善された。
3. Linux Kernel v2.6のスケジューラ
上述の三つの性能制約、即ち、スケジュール作成アルゴリズムの線型時間錯雑性、単一走行キューに関するロック競争及びCPU親和性の欠如は、2.6より古いkernelのスケジューラにおける拡張性に対する重大な障害をあらわす。
v2.6における重要な変更は、先取得権、即ち優先度の高いタスクが低い優先度のタスクのシステム呼出処理中であっても割込をすることが出来ることである。優先度の高いタスクは、したがって、以前可能であったより迅速にCPUの制御を獲得して、時間が重要なタスクに対しもっと敏感なサービスを引き渡すことが出来る。勿論、タスクが非先取得権であるkernelコードの領域も未だ存在する。
タスク前後関係の記憶方法に重大な変更がある。スケジューラは、広くO(1)と呼ばれるスケジュール作成アルゴリズムにしたがう。新しいスケジューラは、単一のグローバル走行キューの代わりに、プロセッサ毎に一つのキューを展開する。この変更は、最後の負たるの問題、即ち多重プロセッサ拡張性とCPU親和性を改善する。プロセッサ毎のベースで利用することの出来る走行キューがある能力により、一つの全体キューに順序を付ける必要がなくなり、それにより、多数のプロセッサが、それぞれ自分自身のローカル・キュー上で、スケジューラに競合してアクセスすることが出来る。
CPU親和性は、この仕組みで自動的に解決される。走行キューが各プロセッサに対しローカルなので、割込を受けたタスクは、割込を受ける前に走っていたのと同じプロセッサ上で再開するので、ローカル・プロセッサとメモリ・キャッシュにより実現される性能改善はいずれも維持されるからである。しかし、CPU親和性全体の維持は、プロセッサ間で作業を均等に分配するとの目標に反するので、余り良い考えではない。これはまた、キャッシュ干渉性に関するもっと微妙な問題を導き出す。
別の顕著な変更は、タスク前後関係の記憶方法になされた。複数キュー(二重リンク・リスト)を用いてさえも、各プロセッサにあるキューは、システム内のタスク数と共に線型で成長するので、最後のタスクを処理するには、n個のエントリ全部を走査する必要があるので、未だO(n)挙動が起こる。これを改善するため、新しいスケジューラは、優先権に基づくタスクエントリのアレーを実行する(Heapを通じて実行)。これにより、最高優先度タスクを迅速に見出すことが出来る。これはまた、二つのキュー、活動キューと終了キューを保持することにより、優先度とタイムスライスのの再計算を不要にする。
この仕組みでスケジューラは、終了タスクが終了キューに入れられる前に終了タスクのタイムスライス再計算おこなう。すべてのタスクが終了したとき、次のタスクをスケジュールするため、スケジューラは、単に活動キューと終了キューのポインタを交換することだけをを必要とする。走行キューの長いスキャンはこうして排除される。このプロセスでは、システム内のタスク数に関係なく、処理の量は同じである。最早nの値に依存しないで、固定定数となる。同一表記で、この定数挙動を0(1)と表すので、新しいスケジューラは「0(1)スケジューラ」と呼ばれる。
4. まとめ
どんなアルゴリズムでも、達成すべき目的が明白ならば、効率良く最適化することが出来る。、データの記憶方法もまた問題である。kernel v2.6のためのスケジューラは、優先権取扱、拡張性、CPU親和性に関する明らかな理由と同時に処理が少ないとの理由で、v2.4のスケジューラより良い。しかし、SMPシステムに関する分野と同時にハード・リアルタイムOSの分野においても、為すべきことは多い。
Linux Power Tools−システム管理用ツール
第一次世界大戦でドイツはポーランドを攻撃した。ポーランドには大勢の兵士がいた。全員がドイツと戦う覚悟でいた。最良の鎧と、調教の良い最良の軍馬と、勿論武器、剣、槍なども、備えていた。ポーランド国民は祖国のため命を捧げる覚悟でいた。だが、それまで・・・命を捧げただけ・・・だった。ドイツには戦車があった・・・。戦をするには、正しい武器を持つことが極めて重要だ。
同様に、システム管理には、上手く働くツールを持つことが極めて重要だ。Linux は開発者と同時にシステム管理のための素晴らしいデスクトップOSである。これをシステム管理者や開発者のため素晴らし環境にするユティリティを幾つか見てみよう。以下の内容の殆どは、三つのアプリケーションのホームペイジから採用したもので、私の創作ではない。私の目的は、Linux/BSDデスクトップ環境内で利用することの出来る素晴らしいツールを読者に紹介することにある。
Konsole
テキストベースのシェルから出発しよう。Konsole はXターミナル・エミュレータとして知られ、多くの場合にターミナル又はシェルと呼ばれるものだ。これはデスクトップに古典的なテキスト画面の環境を与えるが、グラフィックのアプリケーションと画面を容易に共有することが出来るものだ。
Konsole が専門でおこなうことは? Konsoleの進んだ特徴には、構成が簡単なことと、デスクトップを乱雑にしないで、単一ウインドウ内で複数のターミナルシェルを使用する能力が含まれる。Konsole はまた、kpart aとして利用することも出来るので、KateやKonquerorなどのアプリケーションに容易に埋め込むことが出来る。
Konqueror.
殆どのシステム管理者は、定期的にサーバにログインする必要があるので、konsoleはWindoze コマンドプロンプトを超える利点を与える。Windoze では、SSHを用いてログインするのにPutty などのプログラムを使用する必要がある。またLinuxはデスクトップOSなので、技術者はローカルシステム上でマニュアルを使用することが出来る。
また、各種コマンドをローカルに試すことも出来る。簡単な例を考える:
Is it
$ ln sourcefile destinationfile
or is it
$ ln destinationfile sourcefile
?
このようなことは、サーバ上で実験しなくともローカルに見出すことが出来る。多くの技術者は、サーバを実験の場と考えている。しかし、このような実験は、小さいエラーのためカスタマに多大の損失を与えることがある。システム管理者は、人々がデータ全部を渡すとき絶大な信頼を置いており、サーバ上で簡単な実験をする危険を冒すことは出来ないことを理解しなければならない。
個人情報マネージャ/グループウエア
Kontact は、基本的に正規のKDE PIM部品で、kmail, korganizer, knotes などに入れられて来た。安定な素晴らしいパケージで然も軽い。これら両方は機能性に富み、多くのグループウエア・サーバに接続することが出来る。
Klipper
Klipper は、KDEクリップボード。ユティリティである。これはクリップボード履歴を記憶するので、クリップボード内容をアプリケーション作用にリンクすることが出来る。Klipper は、特定正規表現に一致しているか否かに基づいて、クリップボードの内容上で作用を実行することが出来る。“http://”で始まるクリップボード内容はどれでも、URLが飛来地いるときのようにウェブ・ブラウザに渡すことが出来る。
テキストのコピイは、テキストの強調と同じく簡単である。テキストの貼り付けには、中央マウスボタンをクリックするだけで良い。これは、システム管理者が一連のコマンドを時々使用するとき、特に役立つ。これらをクリップボードに入れておいて、時々利用すると、作業が大変楽になる。
Gaim / Kopete
インスタント・メッセンジャ(IM)を経由する連絡は、今日、不可欠である。Linux には、これに対する明快な解決策がある。
Kopete と
Gaimには、複数のIMプロトコルを扱う能力があり、AIM、ICQ、MSN、Yahoo、Jabber、IRC、Novell GroupWise Messenger、Lotus SameTimeなどをサポートする。Gaimは、Linux, BSD, MacOS X, Windowsのための多重プロトコルIMクライアントである。これは、AIM 及びICQ (Oscar プロトコル), MSN メッセンジャ、Yahoo!、 IRC、 Jabber、Gadu-Gadu、SILC、GroupWise Messenger、Zephyr networksと互換性がある。
Kjots
KJots は、短い覚書を書いてそれらを組織立てるのに役立つ小型プログラムである。覚書を組織化するのに使用する基本項目−“Books”と“Pages”−がある。これは、早見のため定型返信その他重要な覚書に書き込むための軽いツールである。
Kwallet
可愛らしいパスワード・マネージャで、kopeteとウェブサイトのものを含むログイン全部のためのパスワードを記憶することが出来る。
Tea Cooker
KTeaTimeは、喫茶のための小型タイマである。茶の準備にどの位長く掛かるか予想する必要はない。茶の型を選ぶと、お茶が入ったとき知らせて呉れる。技術者は問題解決に没頭していて、進行状態をクライアントに知らせるのを忘れることが多い。クライアントに連絡しないと、クライアントは誰も自分の問題の面倒を見ていないと思っていらいらし、努力全部が無駄になることがある。技術者がtea cookerを使用して通知を受けると、進行状態を知らせることが出来る。
Koffice/ Open Office
M$ Office は、最も良く使用されるソフトウエアの一つで、カスタマが別のOSに移行しない主な理由でもある。何にでもWordとExcel を使用している。K-OfficeとOpen Officeは、二つの素晴らしい解決策である。Open OfficeはM$ Officeファイルを開いて、ファイルをM$ Officeフォーマットでセーブすることさえ出来るので、M$ 製品を使用する人々との連絡が楽になる。
Lyx
性能でウィンドウズword製品を複製するoffice一式のほかに、Linux にはまた、素晴らしい代案がある。
LyX は、素晴らしい文書プロセッサの一例である。
何がLyXか? LyX は、初めての WYSIWYM (見たままの意味)文書プロセッサである。
LyXとは?! LyX は、オープンソース文書プロセッサで、文書の見掛けでなく、その構造に基づいて書く方法を奨励する。LyXは、ソフトウエアに対する視覚的詳細を離れて、書くことに専念させる。LyXは、背景にLaTeX、工業的強度植字エンジン、を用いて高品質専門出力を作成する。しかしLyXは、LaTeXに対する前線を遙かに超える。ユーザに大きい力を与えるけれども、LyXを使用するのにLaTeXの知識は要らない。 LyXは、安定で、機能を完全に装備している。これは論文など大きいものから、商業文など小さいものまで、使用されて来た。GUI インターフェイス(多数の言語で使用することが出来る)は簡単だが、表、図面、ハイパーリンク相互参照をサポートし、完熟した数式エディタでもある。
Dia
Dia は、ダイアグラム作成用ツールである。多数の埋込ライブラリがある。これはソフトウエア技術者に特に利用価値がある。
コンピュータ・ネットワークのダイアグラムを作るには、数個のコンピュータとスイッチを利用可のオフジェクトのリストからドラッグするだけで、容易だ。現在、実体関係ダイアグラム、URLダイアグラム、流れ図、ネットワーク・ダイアグラム、簡単な回路図を描くのに役立つ特殊オブジェクトがある。形状を書くのにSVGのサブセットを使用して、簡単なXMLファイルを書くことにより、新しい形状を追加することも出来る。
Gnucash
平均的な技術者は、結構な俸給を稼いで費消する。これら個人消費の追跡を保つのに最も良いのは、素晴らしいソフトウエアを持つことである。Gnucashは、個人経済管理の理想的方法である。使用が簡単、強力で融通性に富む設計になっているGnuCashにより、銀行口座、株式、収入及び支出を常に追跡することが出来る。小切手帳記録として用いるのに素早く直観的なので、個人勘定原理に基づいて平衡の取れた正確な記録を確実にする。
KTuberling 最後は、サーバが最良に保たれているので、他に作業も懸案もないが、突発事項のため当直しなければならない技術者のための製品だ。
KTuberling は、元々、子供用ゲームであった。勿論、若い頃を思い出す大人にも適している。ほとんどの技術者はこのソフトウエアを好む。これは「じゃがいもエディタ」である。その意味は、じゃがいものような奴の上に、目、口、ひげその他顔の部分と、食べ物をドラッグアンドドロップすることが出来る。
同様に、別のものをドロップすることの出来るペンギンと水槽がある。ゲームの勝者はいない。目的は出来るだけ妙な顔を作ることだ。これは、飾られたじゃがいも、ペンギンと水草のある(タッソー夫人の館のような)
博物館 だ。
この二、三年でLinuxは、サーバ市場で地位を確立した。しかし、これがデスクトップとなると、別のOSの方をLinuxより好んでいる。この記事は、デスクトップとしてのLinux の利点について述べ、特に開発者及びシステム管理者用のLinuxとして述べる。他の広告的な記事と異なり、Linuxが無料である事実は強調しない。M$ Windozeのような他のOSを非難することもしない。あらゆるOSにはそのと点があるので、OS全体を開発した人を尊敬しなければならない。OSの開発は容易な仕事ではない。すべての開発者には自分が為した仕事に関し金銭を要求する権利がある。彼らには、コードを自分のものにする権利がある。
資源利用が少ない
ハードウエア価格が安価になりつつある今日、これを気にする人が多くなくなった特徴の一つである。10-12 ヶ月毎にコンピュータを交換するのは珍しくない。多数のボックスが大型である企業においては、これが膨大な費用負担になることがある。。同一ボックスを長く使うだけ節約が大きくなる。我が社では、コンピュータの平均寿命を 9-10 ヶ月から14-18 ヶ月に伸ばすことが出来た。
Linuxはどのようにしてコンピュータの寿命を延ばすのだろうか?ほとんどのOSは2年ごとに重要な更新をおこなう。新たな更新と共に新たな特徴が増え、残念乍ら価値が膨れ上がる。この膨張により、OSは現在のハードウエア上で速度が遅くなり、ハードウエアの更新を促す。Linuxでも同じだ。ほとんどの主要配布業者は定期的に更新して、ハードウエアを膨れ上がらせる。しかし、ここでオープンソースの特徴が生きる。我々はコードに対するアクセスを持っている。
一つのデスクトップについて、kernel、X-windows及びデスクトップ環境(KDE, Gnome)をコンパイルし直すと、驚異的なことが出来る。我々は固有のプロセッサ、ビデオカードなどのため、コードをコンパイルし直すことが出来る。これは特有ハードウエア上で走らせるためOSを最適化する。これはまた、持っていないハードウエアすべてに関するサポートを削除することが出来る。これで膨張が大幅に軽減される。
Windowsが無料コードであったら、同じ利点がある筈だ。残念乍らその利点はないので、持っていないハードウエアをサポートするWindowsを走らせ続けなければならない。
ほとんどのOSは 80386 以降から働く。これは、システムに後ろ向き互換性を持たせなければならないので、新たなプロセッサ固有の利点を利用しないことを意味する。したがって、新しいハードウエアとは 386 命令を速い速度で実行するだけであることを意味する。プロセッサ専用にプログラムをコンパイルするとき、それを速くするプロセッサの命令のほとんどを使用する。例えば、新しいプロセッサがマルチメディア・アプリケーション (MMX)などのための命令をもって出現する。これは、マルチメディア・アプリケーションの処理速度を著しく増加する。
Linux もまた、頑丈で、安定で、信頼性があり確実なOSであることが、明らかになっている。これは、今日企業世界のWindoze ユーザほとんどを悩ませている、
スパイウェア、ウィルスなどにLinuxが感染しないことを意味する。最悪の場合にはウィルスに感染したOSの再インストールにほとんどの時間を取られてしまう。有用な人力と費用が修復だけに費やされる。Linuxにもウィルスはあるが、これはシステム全体でなくユーザのファイルに影響するだけだ。下に
wonderful blog on this subject. [
編集者注:リンクは、近代的な記事の感覚では本当の 'blog' ではない]の一部を示す。
Linux ボックス上のウィルスに感染したプログラムはいずれも、それを走らせるユーザが出来ることをするだけだ。本当のユーザは、システムを損なうのを許されていないので(出来るのはルートユーザだけ)その人が走らせるプログラムにも許されない。
優先(ルートラン)プロセスとユーザ所有プロセスとの間の差別のため、ルートでないユーザが受け取って(又は作作って)実行する(走らせる)「敵対」エクゼクタブルは、「感染させ」又は別途システムを全体として操作することは出来ない。自分のファイル(即ち、「書込」許可のあるもの)だけを削除することが出来るのと同じく、自分が走らせるエクゼクタブルは、他のユーザ(又はルート)のファイルに影響を与えることは出来ない。したがって、ウィルス、ワーム、トロージャン、ホースなどを作る(又は復元する)ことは出来るけれども、「ルート」としておこなうのでない限り、大したことは出来ない。これをしないのは簡単だ。
Linuxで最も膾炙している利点の一つはLINUXは無料である。多くの人がLinuxに転向する最大の理由だ。無料であることは、ソフトウエア全部についてもユーザ当たり免許料が要らないことを意味する。例えば、windowsではターミナルサーバを獲得する。しかし、これには5名のユーザ免許の制限がある。これは、費用がOSだけのものでなく、それと一緒にアプリケーション毎の費用が掛かることを意味する。作業環境を別のマシンにコピイする毎に、同額を費消しなければならない。時間とともにソフトウエアが更新されると、新しいアプリケーションからのファイルは古いバージョンの上では働かない。ユーザは更新を強制される。この過程により、企業が負担しなければならない全体費用は常に増加する。したがって、ほとんどの商業OSを用いると費用は一時費用だけではなくなる。
Linux により、ユーザは管理の楽なネットワークを作ることが出来る。これをFS (ネットワーク・ファイル・システム)、 NIS (ネットワーク情報システム) 及びDHCP (動的ホスト構成プロトコル) と一緒に考えると、素晴らしいローミング・プロファイル・システムを設定することが出来る。ここではユーザ情報全部がデスクトップを含めてサーバ上に記憶される。ユーザは便利になる。管理者の立場からはデータ全部のバックアップ、維持などの制御にはサーバ管理が必要なだけだ。Linuxはまた、リモートアクセスの出来るシステムを有する。テキストベースの確実なシェルを経由してシステム全体にアクセスするのにSSHを用いることが出来るし、またシステムに遠隔からアクセスするのにGUIの好きな人はX-Windows を用いることも出来る。
Xandrosデスクトップ・バージョン3.0−デラックス版概観
投稿者、
sde 12/16/2004 - 09:29. 記事| 一般
本日Xandros Desktop OS Version 3.0 Deluxeを発行した。
Xandros Desktop OS Version 3.0は、直感的なグラフィック環境でボックス上で働きマイクロソフトWindows" に対し比類のない互換性を発揮する。したがって製品の市場は明らかだ。不安定なOSを供給された何百万のWindowsユーザが、e-メールとブラウザに使えて、Word、Excel、Visioファイルを作成し、編集し上司に送付する何かを求めている。
概略はRead the review
ここを見られたい。
(訳者注:配布はCD二枚。案内書10頁。サポート60日。ユーザ案内(PDF)360頁。
価格49.95ドル:OpenOffice 1.1.2, Mozila1.7.3, xine, kernel2.6.9, K.D.E.3.3.0,
Xandros File Manager, Xandros Network 3.0を含む。
RealPlayer 10, CrossOver Office4.1など市販ソフトを含めて89.95ドル)
投稿者:bobcares12/21/2004 - 08:16. 記事| ハウツー
一人がリンゴ一つを持っておりもう一人もリンゴ一つを持っているとき、お互いに交換したら、二人とも相変わらずリンゴ一つを持っているだけだが、一人にある考えがあり、もう一人に別の考えがあるとき、これを交換すると、各々が二つの考えを持つことになる。 −バーナード・ショー−
コンピュータの世界は、少し前までそれぞれがリンゴ一つを持っているだけだった。それから、産業の賢い人がネットワークを作った。考えが流通し始めて、インターネットになった。インターネットは、これまでコンピュータ世界で生じた最良の出来事だ。それは、考えを共有する場を作った。
インターネットは、小さいネットワークから構成される大きいネットワークなので、アドレス空間を小さい塊に分ける意味が分かっている。ネットワーク・クラスはこのアドレス空間を分解することを可能にする。IPv4 にある各種のクラスは−
クラスAネットワークは、1.0.0.1 から126.255.255.254迄のアドレス範囲を有し、それぞれに127ネットワークのある1600万のホストをサポートする。
クラスBネットワークは、128.1.0.1から191.255.255.254迄のアドレス範囲を有し、それぞれに1万6000ネットワークのある65,000のホストをサポートする。
クラスCネットワークは、192.0.1.1から223.255.254.254迄のアドレス範囲を有し、それぞれに2百万ネットワークのある254のホストをサポートする。
クラスDネットワークは、224.0.0.0から239.255.255.255迄のアドレス範囲を有し、マルチキャスト・グループ用に保留されている。
クラスEネットワークは、244.0.0.0から254.255.255.254迄のアドレス範囲を有し、将来のため保留されている。
このようなシステムは、物事を簡単にするのでネットワークを管理することが出来る。しかし、互いに連絡することは出来ない。筋書きは世界中で共同体が成長する方法に良く似ている。時間と共に、異なる共同体からの人々が互いに連絡する必要を生じるが、言語が障害になる。彼らが見付ける解決策は、両方の言語を理解する人、つまり通訳である。フランス美人と話したければ、フランス語が分かって英語に翻訳する人を見付ければ良い。ルータ/ゲートウエィが通訳と同じことをする。異なるネットワークはルータを用いて互いに連絡する。
ルータにより、IPサブネットなど同一論理ネットワークにいないホストが、互いに連絡することが可能になる。ルータは、パケット(データの塊)をインターフェイス上で受け取り、ルート決定テーブルに基づいて必要な場所に送り出す。このテーブルにより、ルータは示された論理ネットワークがある場所に関する知識を得ることが出来る。
ほとんどのオフィスとホームには小さいクラスC私有ネットワークがある。ネットワークはインターネット内のサーバと連絡する必要がある。それらのための唯一の論理的方法は、ゲートウェイ/ルータを使用することだ。Linuxはkernel自体の中にルート作成機能を有しており、これがルート作成ボックスのため理想的な選択をおこなう。
Linuxを用いてインターネット接続を共有する最も簡単な方法は、kernelのIP送出機能とネットワークアドレス翻訳(NAT)を用いることだ。NATするのに、ipchain又はiptableを利用することが出来る。私有ネットワークは192.168.1.0-255 範囲にあると想定される。
簡単なネットワークの例を取り上げよう。インターネットへの接続にはサーバを用いる。そのIPアドレスは192.168.1.1である。四つのワークステーション192.168.1.2-5がある。これらは交換機を通じてサーバに接続されている。ワークステーション全部が192.168.1.1を経由してインターネットを共有している。
最初のステップはサーバ(192.168.1.1)のkernel内でIP送出を可能にすることだ。
$ vi /etc/sysctl.conf
net.ipv4.ip_forward = 0
の行を
net.ipv4.ip_forward = 1
に変更する。
これでIP送出が可能になる。
次に、サーバにNATさせる必要があるが、これはipchain又はiptableを通じておこうことが出来る。
ipchainを用いるときは、rc.fw と言う名のファイルを作り、次の行を追加する:
$ vi /etc/rc.d/init.d/rc.fw
#!/bin/bash
# 先ず ipchains kernelモジュールをロードする。ipchainsがモジュールをしてコンパイルされていることだけが必要
/sbin/modprobe ipchains
insmod ipchains
# 192.168.1.0/24 ネットワーク全体をMASQ する
/sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ
# ルールをリストする
/sbin/ipchains -L -n
ipchainの代わりにiptableを用いるときは、rc.fw と言う名のファイルを作り、次の行を追加する:
$ vi /etc/rc.d/init.d/rc.fw
#!/bin/bash
# 先ず iptables kernelモジュールをロードする。iptablesがモジュールをしてコンパイルされていることだけが必要
/sbin/modprobe iptables
insmod iptables
# ネットワーク全体をMASQ する
/sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
# ルールをリストする
/sbin/iptables -L
これは、ローカル・ネットワークからインターネットまでのデータ交信量全部の面倒を見る。
最後に、次をstartup - に追加する
$ vi /etc/rc.local
/etc/rc.d/init.d/rc.fw
の行を追加する。
これが、再ブートの後にも設定が保持されることを確実にする。
再ブートの後、ネットワーク全部についてルート作成機能全具をおこなう。
クライアント側で必要なことのすべては、規定値ルータ/ゲートウエイをサーバのIP、つまり192.168.1.1に設定することである。これでネットワーク全体がインターネット接続を共有する設定となる。
投稿者、poornam :12/23/2004 - 07:33. 記事|一般
ERP (
企業資源計画)ソフトウエアは、伝統的に企業内各種部門を統合し自動化するため大企業が使用して来た。長い間、小企業は個別の会計、給与計算パケージを購入し、次いで、企業の成長にしたがって、高価なERPに移行した。ERPには費用が掛かるため、その使用を納得させるには雇用員が多いことが必要なので、沢山の選択肢がある。
今は、多数のオープンソース・ソフトウエア・パケージが出ているので、SMEに取って、もっと速い段階でERPに入ることが可能になった。市場には、
Compiere、
ERP5 、
Fisterraなど幾つかがある。会社は個別の要件を慎重に検討して、これらソフトウエアの適正を判定した。
この記事は、
SMEが使用するのに理想的なオープンソースERP/
CRMシステム、
CK-ERPの概観である。これには、元帳、支払勘定、受取勘定、仕入れ注文書、売上げ注文請書、見積書、POS、人的資源、給与支払い、予定管理など、全部で17個のモジュールがある。これは一番上で働くモジュールとして
phpGroupWareを走らせる。これにより、雇用員が色々な場所にいるか又はもっと確実な処理のためインターネット上にいるときは、ソフトウエアをインターネットに容易にインストールすることが出来る。
その優れた特性を概観する。
顧客請求書作成の処理
10人以上の顧客が発生する企業はいずれも、支払いの追跡、作業命令、関連会計などのためERP(ck-ERPなど)の使用を真剣に考慮しなければならない。ck-erpにはck-Quote (見積書モジュール)、ck-so(売上げ注文請モジュール)、ck-ar (受取勘定モジュール)があって、以下を維持している:
・販売員は顧客のため見積書作成をキイ入力することが出来る。CK-Quoteモジュールにより見積書テンプレートを容易に作ることが出来るし、これを容易にプリント又は顧客にe-メールすることが出来る。
・販売員は作業を開始するとき見積書を容易に注文請書に変換することが出来る。注文請書は作業命令の書式記録として役立つので、作業実行の条件を顧客に送ることが出来る。見積書から注文請書への直接変換は、多数の文書作成労務を削減する。しかし、人手を用いて注文請書を作成することも出来る。
・請求時、注文請書を請求書に転換する。内税又は外税の請求書を作成することが出来る。ここでも、丁寧な公式請求書をプリントしe-メールすることが出来る。請求書を一時にまとめて送ることも出来る。
・顧客の支払い状況を点検するには、請求書送付時期と支払い時期とを示す請求履歴を点検するだけで済む。注文請書毎の請求履歴を点検することも出来る。
・顧客に請求書を送ったら、支払い受領の記録は簡単だ。一つの請求書が、分割払いで多数の支払いになることがある。任意の請求書には簡単に分割払いを入力することができる。未払いも−請求書、顧客、会社などの名目で点検することが出来る。経過報告で未払い金総額を知ることが出来る。
・請求書の支払いは自動的に総勘定元帳に積算され、会計を極めて簡単にする。請求書毎に関連仕訳/元帳入力を見ることも出来る。
顧客記録を入力して色々な型の税金を構成することも容易である。受取勘定には、受取勘定経過報告、顧客請求書経過報告、税金徴収額詳細が含まれる。
顧客が数千の製造業者であるときは、代理店などの仲介業者を顧客と見なして同一ソフトウエアでそれらの支払いを追跡することが出来る。
システムは、複数通貨、複数ユーザで、各モジュールに複数アクセスレベルを設けることが出来る。
在庫と仕入れの処理
多くの会社、特に販売業者と製造業者は、普通、仕入れ在庫と小売業者情報に忙殺される。小売業者支払い状況の把握と、売掛集金代理人が催促する前に支払い小切手を切るのが主な仕事だ。これをck-erpの購買モジュール - ck-po(仕入れ注文モジュール), ck-ap(支払い勘定モジュール)、ck-inv(在庫モジュール)がおこなってくれる。仕入れ処理の方法を見よう。
・仕入れ役務契約と仕入れ製品の追跡を維持するには仕入れ注文を入力する。
・仕入れ製品又は役務を受領したとき、ck-在庫モジュールを用いてそれを在庫に追加することが出来る。受領書を作成し在庫を更新する。在庫製品毎に在庫バランスと出入庫履歴を見ることが出来る。この機能は、卸売りと製造業に大変役立つ。在庫は総勘定元帳に統合されるので、在庫の増加は、会社の資産価格をもまた増加する。
・小売業者から納品書を受領したときは、仕入れ注文を小売請求書に変換することが出来る。小売り納品書をシステムに保持することにより、小売業者が当方宛に送るe-メールや紙の納品書に依存しなくて済む。システムを用いて、小売りの支払いと支払期日を容易に管理することが出来る。
・支払いをおこなうときは、小売り送り状に対して一括払い又は分割払いの記録がおこなわれる。
・任意の時期に、未払い請求書報告及び期日到来全額に関する経過期間報告を、小売業者毎又は仕入れ注文毎に、点検することが出来る。
・小売業者データベースを維持し、また各種税金を構成することが出来る。
・在庫目録により、製品名と番号、在庫位置情報、写真、再注文水準、単位及び重量情報、及び三つの異なる価格情報を維持する。
・在庫調整、組立情報及び代替部品/役務情報は、 ck-inventoryの別の機能である。
会計Accounts
会計部門には事実上、入用なあらゆるものが入っている。
核心の総勘定元帳モジュールには、元帳と仕訳帳のある複式会計システムがある。総勘定元帳の面白いところは、これが受取勘定、支払勘定、在庫目録、銀行及び給料支払いモジュールの基礎になっていることである。これらモジュール全部からの入力は最後に総勘定元帳に反映される。
会計システムには複数通貨サポートがある。管理者は、納品書、仕入れ注文書、見積書などに標準の備考を設定することが出来る。管理者は、各種部門のため複数の元帳を設定することも出来る。
銀行残高調整モジュールにより、元帳入力を用いて銀行取引明細書を調整することが出来る。
反面では、会計モジュールに年度毎の繰越、締切残高がない。このため年度会計の調整が難しくなる。大きい欠点なので、近いうちに修正されることを望む。
POS
沢山の現金出納機があって、現金取引の多いスーパーマーケットを持っているときは、このモジュールを使うことが出来る。このPOSモジュールも総勘定元帳に統合される。
ck-pos モジュールは、現金販売を外税又は内税で出納機に入力させる。POSシステムの良い機能は、クレジット販売も出来ることである。高額製品などをクレジットで買いたい顧客の役に立つ。出納機に入力するクレジット販売は管理者の許可を要する。
管理者はposと会話する。ck-pos-m により管理者は、自分の事務所から遠隔で出納員の操作全部を制御することが出来る。
・現金箱は、POSカウンタ毎及び当番毎に現金箱を設定することが出来る。管理者は各カウンタで働く職員を設定することが出来る。
・管理者は、カウンタ毎、当番毎に当番終了時現金残高を見ることが出来る。管理者は、昨日の朝晩終了時2番カウンタの現金残高などを見ることが出来る。
・管理者は特別価格計画を設定することが出来る。
・管理者は、学生割引、老人割引などの割引、日曜割増、などの割増を設定することが出来る。
・管理者は、現金クーポン、交換クーポン、小切手、クレジットカードなどの非現金オプションによる各種支払を構成することが出来る。
・消費税などの税金を設定することが出来る。
・売上報告書
人事管理(HR管理)
10人以上の社員がおり、給与支払が総勘定元帳に総合されているときは尚更、ある種のHR管理ソフトウエアが必要である。CK-ERPには、優れたHR管理機能がある。
・氏名、職階、職務、写真、住所、e-メール、電話番号、緊急連絡先を含む社員データベースを管理する。人事管理ソフトウエアの良い機能は、電話フィールドの数に制限されないことである。一人当たり無限の記録を入力することが出来る。
・社員は、「自己勘定」のような自分の社員セルフサービスを持つ。これを、休暇届、出勤簿、残業記録の他、経費補填請求にも使用することが出来る。休暇又は経費補填を届け出ると同時に、監督者から認証の通知をe-メールで受け取る。
・出勤簿と残業管理。出勤簿は業績評価に連動する。PC組立の組にいるとすると、職員は1日当たり、又は1時間当たり自分が組立てたPCの数を記録することが出来る。営業部員は、達成した販売目標を入力することが出来る。
・複数部門のサポート。
・社員毎の成績評価を記録。
・経費補填管理。
・休暇届と休暇の管理
・給与支払管理。e-メールによる給与明細書。給与支払に関する銀行明細書。
CRMと交渉管理
CRM パケージの中の最後の追加はこのCK-ERPである。
・CK-CRMは、すべて中央クラスタ・データベースに統合される素晴らしいパケージの中で、ヘルプデスク管理と交渉管理(販売前)を提供する。販売代理人は販売呼出を追跡して販売交渉をおこなうことが出来る。顧客関係幹部社員がヘルプ呼出を点検して各顧客とヘルプデスク高所をおこなう。
・HelpDesk システムは特に美しい。顧客関係幹部社員は、HelpDesk呼出毎の呼出案件履歴記録、顧客の状態(激怒、腹立ち、感謝、感激)の記録、メディア(e-メール、電話、会見)及び交渉状態(研究、解決策、続報、完了)の全部を見ることが出来る。各カードに監視員を設定することが出来る。各呼出に優先度(高、中、低)及び案件種別(苦情、提案、バグ報告)を設定することが出来る。
・CRMは、見積、売上げ注文及び納品モジュールと統合されている。これにより大変強力になる。顧客関係幹部社員と販売代理人は、顧客の信用供与度合い、見積もり回数、請求と支払済みの履歴などを点検することが出来る。
・顧客交渉を記録することが出来る。
・顧客毎に信用供与限度を設定することが出来る。
CK-CRM は、組織的交渉と個人的交渉に関する交渉モジュールもまた含む。
投稿者、
poornam:12/23/2004 - 07:39. 記事|開発者
ソフトウエア製品を開発使用とするとき、プロジェクト管理者の計画書の最初の問題は、
要件解析である。
簡単に言うと、要件解析手順は、提案システムに関する顧客の要望を見極めて文書にすることを目的とする。
要件解析者(RA)と言われるソフトウエア熟練者は、有識のユーザと連絡して要望は何かを理解する。多くの場合、顧客は提案システムに必要なものについて簡単な考えを持っている。
手順の最後に、SRSは製品の青写真となる。顧客、プロジェクト管理者、試験員及び設計者の基準点だ。SRSは、プロジェクトがそれを行う方法でなく、為すべきことを規定しなければならない。データベース構造、アーキテクチャなどの実行細目は絶対に含まない。
Software Requirement Specification (ソフトウエア要件仕様書)に含むべきもの
理想的には、SRSには最低下記を含まなければならない。
機能的要件
機能的要件は、ソフトウエアが持つ機能である。買い物カートを例にすると、店を見て回る、製品の外観詳細、勘定、カートの外観である。
解析者はまた、顧客が見逃した要件又は主要機能を維持するのに必要な要件を見定めなければならない。これらの要件を暗黙の要件と言う。例えば、顧客が買い物場所を頼んだ時は、解析者がカートの外観、勘定、カートからの削除など、買い物カートに関する要件を含める。
非機能的要件
ソフトウエア製品はどれ程効率が良いか?これは高性能だ、信頼性がある、速度は速いか、システム資源を沢山消費するか?非機能的要件で扱う問題がある。プログラマ初心者はこれらの要件を見落とし勝ちだ。これらの要件は製品の品質に直接影響する。
規制的要件
多くの産業には、ソフトウエア製品が合致しなければならない規則がある。例えば、会計製品を展開する国の税制である。言語性能、パスワード暗号化法、URL基準、電子メール基準などである。これらは、顧客が気付いていない規制要件の幾つかである。解析者は、ソフトウエア製品を展開する産業又は国の適用されるこれら要件を含めなければならない。
外部インターフェイス要件
このソフトウエアは他のソフトウエやハードウエアと相互作用をするか?解析者はこれら相互作用の最低要件を記載する必要がある。
認容基準
最後に認容基準を述べなければならない。ソフトウエアが顧客仕様に従って確実に働くのに合致する基準は何か。通常、試験済み仕様書がSRSに述べられる機能的及び非機能的要件である。
要件すべてに「機能番号」を付けるのが重要である。これにより、プロジェクト存続期間全体に渡る各機能の追跡可能性が改善される。設計、構成及び試験の段階で、機能番号FE-2.FE-45などの設計、コード作成、試験をおこなっていることが分かる。
優先度決定要件
SRS には各機能の優先度を含まなければならない。顧客は、特定の機能を早く完成することを要求することがある。優先度を慎重に決定した文書により、重要機能が早めに開発される。
ソフトウエア要件仕様書(SRS) は時間の無駄か、誰の為か?
これは間違いだ。SRSは、プロジェクトで働く全員の役に立つ。プロジェクト・マネージャは計画すべきものを、設計者は設計すべきものを、試験員は製品の働きを知る。これら全部にSRSを用いる。
最後に、SRSは最も顧客に役立つ。顧客は、最後に何を手に入れるかが分かる。一般的に、開発は顧客がSRSを読んで了承した後に始まる。ショッピングサイト・システムの欲しい顧客がウィッシュリストを含めたいと思っているとき、SRCを見て、なければそれを追加するよう要求するなどである。顧客要求を早めにプロジェクトに含めると、なにを開発し、何を最初に開発すべきかを衆知することが出来る。
ソフトウエア要件の吟味
最初に要件を正すことは、後でコードを修正するより、50から200倍コストが少ない。次のステップに入る前にSRSを見直すことが重要である。
一般的に、吟味会議は最低3-4名の熟練者がおこない、一会議に最大2時間を掛ける。参加者は予め文書を読んでおく。良い会議では製品不具合の60-90%が見つかる。
この重要な会議を無視して破滅的な結果を導いたソフトウエア開発会社がある。簡単な要件吟味により全体日程が、10-30%短くなる。この検査は、試験の約20倍効率が良い。一回の吟味毎に平均で33時間の保守時間が節減されると言うのも驚くには当たらない。
管理要件の変更
安定なプロジェクトはない。要件が変わることがあり、良いプロジェクトリーダーはそれを予想している。しかし、要件の変更には時間と費用が掛かる。C-コード作成中や試験中の変更は特にその通りで、開発後の変更は最悪である。
解析者は、出来るだけ変更を少なくしなければならない。最良の方法は、小さい見本とSRCを用いて、これから何をするかを顧客に示すことである。顧客は、何をするかを容易に理解して、開発が始まる遙か前に変更を申し出ることが出来る。このようにして、解析者は顧客に関する費用を軽減する。
コード作成中又は後に、変更がある場合は、プロジェクトリーダーはこれらの変更が管理されることを確認しなければならない。仕様書の変更は顧客の承認を得て、チーム全員に見直させなければならない。チーム全員に最新仕様書を渡す。
ほとんどのプロジェクトで要件に25%の変更を経験している。要件作成方法が良いと、変更の数と、変更後の費用が軽減される。変更数が10%、変更毎の費用が5又は10の係数で軽減されると、効果は絶大である。
要件解析無しではコード作成が出来ない
解析無しでも、設計や試験は出来る。ほとんどのプログラマはそうしている。
顧客、プロジェクトリーダー及びコード作成者は、良い要件解析の価値を見くびって、ソフトウエア製品の開発が「出来る」との理由で、正しい要件、設計、試験なしで進みはじめる。
だが、無関係の事柄のため問題が発生する。
例えば、試験員が試験を完了したとしてプロジェクトを顧客に提出する。顧客は「欲しいのはこれではない。購買客が二日後に注文手続き決める場合に保管する買い物カートが欲しいのだ」と言うことがある。プロジェクトリーダーは知っていても、試験員もコード作成者もこれを知らない。結局全員が、この新しい機能のため時間外で働くことになる。コード作成者は、現存設計ではこの機能を開発するのは不可能だと言うだろう。設計者は新機能が入るように設計をいじらなければならない。それで最適設計になるだろうか?誰にも分からない。誰にもそれを見出す時間はない。あらゆる混乱の後、顧客は余り満足でない設計で実行される新機能を与えられる。
小さいプロジェクトでも要件解析は必要
小さいプロジェクトでは、同一人が、解析、設計、コード作成をおこなう。プロジェクトが大きくなるにつれ、役割を分担する。小さいプロジェクトとは、要件解析を含めて二週間で仕上がるものを指す。
Linuxシステム呼出の実行とLinux にシステム呼出を追加する方法の指導書
1.緒言
1.1この文書について
この文書では、システム呼出は何かについてと、Linuxにシステム呼出を追加する方法を理解して頂く。linux2.4/2.6 kernelとIntel x86アーキテクチャを用いてシステム呼出を追加する手順を説明する。
1.2 前提条件
C-プログラム作成につき多少の経験があること。Linux kernelのコンパイル法を知っていること。Linux kernel コンパイルに関する指導書はインターネットで入手出来る。
1.3予想読者
この指導書は、新たなシステム呼出を書くことに興味のある人のためのものである。Linux kernel を扱うのに興味のある人に役立つ。
2.実行
2.1システム呼出とは
システム呼出とは、ソフトウエア割込を経由しておこなうkernelに対する明確な要求である。Linux には、Kernelモードとユーザ・モードの二つの演算モードがある。システム呼出は、kernel又はデバイス固有データにアクセスするユーザ・モード処理に与えられるインターフェイスとして取上げることが出来る。Linux は、ユーザ・プロセスとハードウエアデバイスとの間のほとんどのインターフェイスを、システム呼出により実行する。
システム呼出の典型的な例は、ファイル固有のデータをファイル・デスクリプタを通じて読め取るのに使用される "read()" システム呼出である。データはハードディスク(我々の言い方ではハードドライブ)に記憶され、ユーザ・プロセスはreadシステム呼出を通じてデバイス又はファイル内のデータを読み取る。
2.2システム呼出の働き
ユーザ・プロセスがシステム呼出を呼び出すと、CPUがユーザ・モードからkernelモードに切り替わり、ファンクションを実行する。Linux では、システム呼出は "int 0x80" アセンブリ言語命令を用いて呼び出される。 "int 0x80" は、Linux kernelが実行するシステム呼出全部の入口となる。
Kernelは多数のシステム呼出を実行する。パラメータが渡されてシステム呼出に対するシステム呼出番号と引数を識別する。これは"int 0x80" 命令を呼び出す前に値をプロセスレジスタに記憶することにより行われる。
システム呼出毎に独特の番号があってシステム呼出を識別する。システム呼出番号はファイル /usr/include/asm/unistd.hの中にある。例えばforkシステム呼出は2番である。システム呼出番号はLinux kernel ソースディレクトリの asm/unistd.h ファイルにもある。
3.システム呼出の各種の型
システム呼出にある引数の数によりシステム呼出を七つの型に分けることが出来る。一つのシステム呼出は六つまでの引数を渡すことが出来る。これら七つのシステム呼出それぞれは、ユーザincludeディレクトリの中のunistd.h にあるマクロにより定義される。これは /usr/include/asm/unistd.h.で見出すことが出来る。
これらのマクロは、独特のシステム呼出番号レジスタ「ゼロ」に、システム呼出に対するパラメータ全部を一般目的レジスタに、登録する方法で拡張される。次に"int 0x80" 命令を呼び出す。これがユーザモードからkernelモードへの切換を始動する。
システム呼出定義マクロは、"_syscall0" から"_syscall6"までの名称を与える。
4.一例
ここで、 "read()" システム呼出の働きの詳細を説明する。
ユーザプロセスがハードディスクに記憶されるファイルを読み取るとする。ファイルに結合するファイル記述子を 'fd' とする。そこでこれは、'fd' と 'buffer' とバッファの大きさ 'size' を引数としてreadシステム呼出を呼び出す。読み取るデータはバッファに入る。つまり、read呼出は次のようになる。
"read(fd,buffer,size);"
これは引数三つのシステム呼出に相当する。
そこで、これは_syscall3 マクロが拡張する。マクロ拡張を起こすため、ステートメント“static inline syscall3(int,read,int,fd,char *,buf,off_t,len)”がヘッダファイルに追加されている。上のステートメントの必要性は、この文書の後の方で、新たなシステム呼出追加の説明のとき説明する。 拡張の後、システム呼出番号は、プロセッサ、ここではx86、のレジスタ「ゼロ」に入り、システム呼出に対する引数は一般目的レジスタに入る。またマクロはレジスタにロードした後 "int 0x80" 命令を呼び出す。したがって、kernelモードが始動されて、システム呼出を始動したプロセスの代わりにkernelが実行する。
"int 0x80"命令はシステム呼出ハンドラを呼び出す。システム呼出をれぞれはkernelで定義されるルーチン即ちプログラムを持っている。これらルーチンそれぞれのアドレスは"sys_call_table"と言う名のアレーに記憶されている。システム呼出ハンドラに相当するコードと sys_call_table は、ファイル“/usr/src/linux-/arch/i386/kernel/entry.S”の中にある。別のkernelバージョンでは、このパス名は相応に変更される。システム呼出ハンドラは、レジスタ「ゼロ」にロードされているシステム呼出番号を見て、システム呼出に相当するサービスルーチンを呼び出す。したがって読み取られたシステム呼出に相当するサービスルーチンが実行される。サービスルーチン実行の後、制御はシステム呼出ハンドラの戻り、これが制御をユーザプロセスに返して、演算モードもまたユーザモードに変更される。システム呼出ハンドラが行うことは、この外にも沢山あるが、ここでは述べない。
システム呼出の働きを理解されたと思う。そこで、システム呼出追加の方法を述べる。
5.自分のシステム呼出の追加
myroutineと言う名のシステム呼出を追加する方法を説明する。
kernelにはシステム呼出の数に制限がある。2.4 kernel はこれを271に、2.6 kernelは274に設定している。その前のバージョンはもっと少ない。この値は"__NR_syscalls" 変数に記憶されている。
entry.Sファイル又はunistd.h ファイルも見ると使用しているシステム呼出数が分かる。entry.Sファイルには次のような記入がある。
.long SYMBOL_NAME(sys_unlink) /*10*/
またunistd.h ファイルには次のような記入がある。
"#define __NR_unlink 10"
ulinkと言う名のシステム呼出は、システム呼出番号10を持つとの意味である。
システム呼出は二つの方法で追加することが出来る。一つはシステム呼出に未割当の番号を使うことで、他はシステム呼出番号限界を一つ増やして、新しい限界を番号として使うことである。
名称がmyroutineで、整数二つを引数とし、数の和を戻すシステム呼出を追加する。2.4 kernelと2.6 kernelの両方で実施する。2.4 kernelには、システム呼出に利用することの出来る未割当の番号があるので、これを使用する。2.6 kernelでは275個(0から274)のシステム呼出が実行されているので、システム呼出の全数を276個("__NR_syscalls" 変数は値275を持つ)に増やし、myroutine システム呼出を276番システム呼出として追加する。両方を説明する。kernelコードから開始する。
5.1システム呼出の宣言
5.1.未割当番号の使用
これは、2.4 kernelで使用した方法である。先ず、entry.S ファイルに登録を追加する。
最後のシステム呼出登録".long SYMBOLE_NAME(sys_.....)"の後で、".rept NR_syscalls " ステートメントの前に
".long SYMBOL_NAME (sys_myroutine)"
のステートメントの行を追加する。
kernelとユーザディレクトリ両方の下の unistd.hファイルに行を追加しなければならない。追加する行は
"__NR_myroutine number"
である。ここで、numberは、"myroutine"システム呼出に割り当てる番号に相当する。選ぶ番号は未割当番号でなければならない。安易な方法は、最後に使用した番号の一つ後の番号を使用することである。ユーザ空間ヘッダファイルは通常 /usr/include/asm に記憶されており、kernel空間ではkernelディレクトリの下の include/asmディレクトリに記憶されている。
5.1.2システム呼出全数の増加
2.6 kernelでは、システム呼出の "NR_sycalls" 番号全部が実施されているので、この方法を用いた。未割当システム呼出番号がないときは、NR_sycalls変数を一つ増やさなければならない。2.6 kernelでこの変数はentry.S ファイルにある。そこでentry.S ファイルに一行追加して新しいシステム呼出が最後の番号になるようにする。"__NR_myroutine 275" の行を、kernelとユーザ空間の双方でunistd ファイルの、最後のシステム呼出に番号を割り当てるステートメントの後に、追加する。
5.2システム呼出の定義
残りの部分は、上述の二つの場合(二つのkernel)について共通である。組織的に進む。つまり、ヘッダ・ファイルとソース・ファイルを作る。ヘッダ・ファイルをmyroutine.hと名付ける。ヘッダ・ファイルに次の行を追加する。
#ifndef __LINUX_MYROUTINE_H
#define __LINUX_MYROUTINE_H
#include <linux/linkage.h>
#endif
また、ヘッダ・ファイルをkernel IncludeディレクトリのLinuxディレクトリに入れる。何処に入れても良いが、ヘッダ・ファイルをソース・ファイルに含まなければならない。linkage.hが “asmlinkage”キイワードを、システム呼出ソース・ファイルに用いることを解決する。
ここで、システム呼出を定義しなければならない。システム呼出のためキイワード asmlinkageを追加しなければならない。
myroutine.c ファイルに定義する。このときファイルが次のようになる。
#include <linux/myroutine.h>
asmlinkage int sys_myroutine(int arg1,int arg2){
return arg1+arg2;
}
システム呼出は、引数として受け取る二つの数字の和を戻す。
システム呼出ファイルは任意のディレクトリに置いても良いが、そのディレクトリに相当するline makefileをおこなって、myroutineファイルがコンパイルされるようにすることである。これは make fileにline O_OBJS += myoroutine.oを追加しておこなう。
私は、このファイルを、fsディレクトリの下でmakefileにO_OBJS ストリングを含む行にあるmyroutine.oに追加するfsディレクトリの中のファイルに記憶した。
kernelの変更を完了したら、Linux kernelをコンパイルして新たにコンパイルされたkernelをkernelブートイ・メージとする。
6.ユーザ空間
ここで、システム呼出のためのヘッダ・ファイルをユーザincludeディレクトリの中に作る。これをユーザincludeディレクトリの中のsysディレクトリに作ろう。ヘッダ・ファイルに次の行を含めなければならない。
#include <linux/unistd.h>
_syscall2(int, myroutine, int, arg1, int , arg2);
このファイルをmyroutine.hと名付ける。このファイルをユーザincludeディレクトリの下のLinuxディレクトリに記憶しよう。引数の数が2我々は"_syscall2" マクロを用いる。このマクロは、実際に我々のユーザ空間myroutineファンクションを定義する。ユーザ空間のasm/unistd.hファイルを見ると良く分かる。“__NR_myroutine number” の行がkernelとユーザの両空間に加わっていると良い。
これでシステム呼出登録のコード作成は終わりだ。ここでkernelをコンパイルし直さなければならない。すると、Cプログラムでシステム呼出を利用し結果を点検することが出来る。
システム呼出が働くか否かを点検する簡単なプログラムを示す。
#include <linux/myroutine.h>
main(){
int sum;
sum=myroutine(10,10);
printf(“%d”,sum);(
}
上のプログラムを実行する間に20がプリントされる筈だ。
7.ソースコード
7.1KERNEL 空間ヘッダ
#ifndef __LINUX_MYROUTINE_H
#define __LINUX_MYROUTINE_H
#include <linux/linkage.h>
#endif/***store it in linux directory under kernel include directory****/
7.2KERNEL 空間ソース
#include <linux/myroutine.h>
asmlinkage int sys_myroutine(int arg1,int arg2){
return arg1+arg2;
}/***store under fs directory of kernel sourse and change make file under fs to add myroutine.c compiled***/
7.3ユーザ空間ヘッダ
#include <linux/unistd.h>
_syscall2(int, myroutine, int, arg1, int , arg2)
/***store it under linux directory of user space include directory***/
7.4サンプル・プログラム
#include <linux/myroutine.h>
main(){
int sum;
sum=myroutine(10,10);
printf(“%d”,sum);
}/**you should get 20 printed**/
システム呼出を働かせるには、kernelとユーザ両方のincludeディレクトリの entry.S ファイルとunistd.hファイルに変更を加えなければならない。サンプル・プログラムを走らせる前にkernelをコンパイルしコンパイル済み用いてシステムをブートしなければならない。
Xscale mainstoneボードへのLinux 2.4.21移植
この記事には何らの保証もないので、自己責任で使用されたい。
この記事には次の章がある:
1)インテル PXA27x プロセッサ開発者キットへのBlobの構築とロード
2)インテル PXA27x プロセッサ開発者キットのためのLinux 2.4.21 コンパイル
3)ルート・ファイルシステムの作成と搭載(NFS)
4)NFS及びDHCP サーバのコンフィギュア
5)ターゲットに対するイメージのダウンロード
1)インテル PXA27x プロセッサ開発者キットへのBlobの構築とロード
以下のファイルが必要:
・Jflash -- Intel® で配布
JFlashMM は純正JTAGフラッシュメモリ・プログラマで、コンフィギュレーション・データファイルを用いてターゲット開発プラットホームを記述する。JFlashMM はWindows* コンソール・アプリケーションで、各種ケーブルを用いて開発システム上のJTAG TAPに対する並列ポートにインターフェイスする。サポートするケーブル型は次の通り:
・Insight* IJC-1 コネクタと IJC-2 ケーブル
・Intel® JTAG ケーブル
blob はLART ハードウエア・プロジェクトのためのブート・ローダとして導入された。同入以来blobは他の多くのARMベースシステムに移植された。blobはモニタ能力をサポートしないが、フラッシュの再プログラムに使用することが出来、JFFS2 MTD パーティションからkernelディレクトリにロードすることが出来る。
Jflashのインストレーション
Jflashユティリティをインストールするには setupをクリックする。ここで、Jflashユティリティを使用するようにハードウエアをコンフィギュアしなければならない。
参考資料:リリースノートの4章にインストレーション・パケージがある。Windows 2000 に関する4章は次の通りである:
GIVEIO.SYS ドライバの Windows* NT 及び Windows* 2000へのインストール
f) 含まれるGIVEIO.SYSのファイルをC:\WINNT\system32\driversディレクトリにコピイする
g) Control Panelを開いて Add/Remove Hardware Wizardを選ぶ
h) 新規デバイス追加の指示にしたがう
i) ”Select hardware from list”を選んで、次にNEXTを選ぶ
j) hardware list から”Ports"を選んで、次にNEXTを選ぶ
k) ”Have Disk"を選んで、giveio.inf file.0)に目を通す
l) NEXT 次いでFINISHを選んでインストレーション完了を確認する.
これで Jflashのインストレーションは完了。
フラッシュに blob をロード
並列ポートコネクタをコンピュータのMAIN JTAG (J4)と並列ポートに接続する。二番目に、bulbcx.dat 及び blob-smc ファイルを、jflashがインストールされているフォルダにコピイする。
Ex: C:\Program Files\Intel Corporation\JFlash_MM\
Bulbcx.dat: プロセッサとボードに関する情報がある。ボード製造者が作成する。
Blob-smc:このブートローダは上述のサイトからダウンロードする
ここで、jflashユティリティが与えるコマンドプロンプトに行く。
Ex: C:\Program Files\Intel Corporation\JFlash_MM>
次のコマンドを入力する:
>jflashmm bulbcx blob-smc
Ex: C:\Program Files\Intel Corporation\JFlash_MM>jflashmm bulbcx blob-smc
出力:
JFLASH Version 5.01.007
COPYRIGHT (C) 2000 - 2003 Intel Corporation
PLATFORM SELECTION:
Processor= PXA27x
Development System= Mainstone
Data Version= 1.00.002
PXA27x revision C0
Found flash type: 28F128L18B
Unlocking block at address 0
Erasing block at address 0
Unlocking block at address 10000
Erasing block at address 10000
Starting programming
Using BUFFER programming mode...
Writing flash at hex address 111c0, 99.95% done
Programming done
Starting Verify
Verifying flash at hex address 108f0, 96.74% done
Verification successful!
This completes the Building and Loading Blob on Intel PXA27x Processors developer's kit.2) Compiling Linux 2.4.21 for Intel PXA27x Processors develope's kit.
2)インテル PXA27x プロセッサ開発者キットのためのLinux 2.4.21 コンパイル
blob がロードされたので、システムはkernelイメージのダウンロードの準備が出来た。
Kernelイメージ (zImage)の構築:
m) 要件:
* linux-2.4.21.tar.gz
* patch-2.4.21-rmk1.gz
* diff-2.4.21-rmk1-pxa1.gz
- Nicolas Pitreのパッチはftp://source.mvista.com/pub/xscale/pxaから
* diff-2.4.21-rmk1-pxa1-intc3.gz
- Intel ICG CHG Platform Enabling Linux Teamがパッチ
* arm-linux-toolchain-bin-03-10-04.tar.bz2
n) arm用クロスコンパイラ
又はこれらのファイルを下記から入手:
以下の手順をもおこなう:
Kernel 構築のステップ:
1.Linux kernel sources (ftp.kernel.orgからダウンロード)をuntar:
$ tar xvzf linux-2.4.21.tar.gz
Linux sources がbzip2で圧縮されているときは、次のコマンドを用いる:
$ bzip2 -dc linux-2.4.21.tar.bz2 | tar xvf -
2.ツールチェイン(arm-linux-toolchain-bin-03-10-04.tar.bz2)をuntar
$ bzip2 -dc linux-2.4.21.tar.bz2 | tar xvf -
Linux ソース・ディレクトリに入れる
$ cd linux-2.4.21
3. Russellの arm-linux パッチを適用:
:
$ gzip -dc /(my-dir)/patch-2.4.21-rmk1.gz | patch -p1
又は、
$ bzip2-dc /(my-dir)/ patch-2.4.21-rmk1.bz2 | patch -p1
4.NicolasのLinux パッチを適用:
$ gzip -dc /(my-dir)/ diff-2.4.21-rmk1-pxa1.gz | patch -p1
5.Intel ICG PCG/SE Linux Teamのパッチを適用:
$ gzip -dc /(my-dir)/diff-2.4.21-rmk1-pxa1-intc3.gz | patch -p1
o) ツールチェインのパスを規定
任意のエディタで Makefileを開く。
CROSS_COMPLIE のための規定行は:
CROSS_COMPILE = arm-linux-
Change it to
CROSS_COMPILE = /{my dir}/arm-linux/bin/arm-linux-
p)kernelの構築:
$ make mainstone_config
$ make oldconfig
$ make dep
これでzImage構築の準備がほとんど整ったが、ファイルシステムをNFS (ネットワーク・ファイルシステム) 又はMTD (独立型)いずれかに決めなければならない。進む前に(必ず)3章を参照のこと。
$ make zImage
これで2章を終わる。
3)ルート・ファイルシステムの作成と搭載(NFS)
基本的motファイルシステムは下記から入手することが出来る:
これをuntarする( / が好ましい、そうすれば /rootfsになる)
ファイルシステムをネットワークから(開発目的)か又は独立型か決める必要がある。
q)ネットワーク・ファイルシステムの作成:
kernelにファイルシステムがNFS型であることを告げなければならない。それには、“filesystemtype = nfs”を用いてkernelをコンパイルし、NFSサーバとDHCPサーバをコンフィギュアしなければならない。
$ make menuconfig
又は
$ make xconfig
ここでmenuconfigを考察する:矢印キイを用いて“General Setup”を選びenterを押す。次のメニューで“Default kernel command string”を選びenterを押す。前の行を削除して次の行を入力する:
"rootfs=nfs root=/dev/nfs ip=bootp console=ttyS0,115200n8”
escapeを二度叩いてメインメニューに戻る。 “Networking options”を選んでenterを押す。次のメニューで “IP: BOOTP Support”を選び、メインメニューに戻る。もう一度“File system”を選び次のメニューで“Network file system”選び、“NFS file system support” が選ばれていることを確認する。そうでなければ、これを選ぶ。
これでkernelをコンパイルする準備が整った。ホストマシンをNFSサーバ及びDHCPサーバとしてコンフィギュアしなければならない。
4)NFS及びDHCP サーバのコンフィギュア
r) NFS サーバのコンフィギュア:
ファイル /etc/exports を編集してrootfsを共有:
$ vi /etc/exports
次の行を入れる:
/rootfs (rw,sync,no_root_squash)
Client IP は通常192.168.1.101(ボードのip )である。ifconfig rwによりホストipを192.168.1.100 に設定:読取/書込パーミッション
no_root_squash : リモートユーザをローカルユーザとして扱う
$ exportfs -rav
$ service nfs start
又は
$ service nfs restart
これが NFS サーバをコンフィギュアする。
s)DHCPサーバのコンフィギュア:
$vi /etc/dhcp.config
以下の行を追加する:
ddns-update-style ad-hoc;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0{
option routers 192.168.1.1;
default-lease-time 1209600;
max-lease-time 31557600;
group{
host innovator.mist.com{
hardware Ethernet ;
fixed address 192.168.1.101;
option root-path "rootfs" ;
}
}
}
$ service dhcpd start
又は
$ service dhcpd restart
これでrootfs (即ちボード用ルートファイルシステム)の準備が整ったので、サーバNFS及びDHCPがホストマシン上で走る。
5)ターゲットに対するイメージのダウンロードと起動
ターゲットマシンにイメージをダウンロードするには、次が必要である:
t)シリアルケーブル F2FC (雌-雌コネクタ).
u)クロスケーブル
最初にTFTPサーバをコンフィギュアする必要がある:
RedHat v6.1上でTFTPを有効にするには:
- /etc/inetd.conf を編集して次の行をコメントアウトする:
tftp dgram udp wait root /usr/sbin/tcpd in.tftpd
RedHat v7.2 上でTFTP を有効にするには '/etc/xinetd.d/tftp' を編集する:
service tftp
{
# enable , yes => no
disable = no
socket_type = dgram
...
# set root directory for tftp you like,here is /tftproot/
server_args = -s /tftproot/
}
- TFTP 規定値ディレクトリを作成
% mkdir /tftpboot
- 次いで、ネットワークサービスを再開するか又はシステムを再起動する:
ここでケーブルを接続する:
シェルを開いて次のコマンドをタイプする
$ minicom
これはWindowsのハイパーターミナルと同様である。これはエミュレータとして働く。これをttyS0 / ttyS1、ボーレート、パリティなどについて正しくコンフィギュアする。通常115200,8N1にコンフィギュアする。
Intel PXA27xプロセッサ開発者プラットホームをリセットして、BLOB が "Autoboot in progess, press any key to stop.."を示したとき、任意のキイを押す。BLOBコマンドコンソールに入る筈だ。またボード上の7分割ディスプレイ上にblobを見ることが出来る。
コマンドリストを見るには "help" を用いる。
blob> help
以下のコマンドをサポートしている:
* reset
* reboot
* arp
* autoip
* setip
* tdownload
* tftp
* flash
* lock
* unlock
* erase
* boot
* status
* reload
* ptprint
* reblob
* fwrite
* ferase
* tftp
* clockinfo
* help
特定のコマンドのヘルプを見るには "help command" を用いる
ここで前に/{your dir}/linux-2.4.21/arch/arm/bootから /tftpbootに作った zImageをコピイする。
次に zImageをターゲットのRAMにダウンロードする
blob> tftp zImage.vga
TFTPing zImage.vga........OK
...
tftp_cmd: file 'zImage.vga' loaded via TFTP to address 0xa1000000
blob>
イメージをイーサネット(LAN91c111)経由でダウンロードするときは、"smc_send: memory alloc time out" の警告を無視する。
イメージをRAMからフラッシュに焼き付けるには
blob> fwrite 0xa1000000 0x40000 0x200000
Erasing 8 blocks at 0x00040000:....
Flash 0x00200000 bytes at 0x00040000:....
blob>
注記:RESETしないでブートしたいときは、次を用いる
blob> reload kernel
blob> boot
四つのMTDパーティションは
0x00000000 - 0x00040000 : ブートローダr
0x00040000 - 0x00240000 : Kernel
0x00240000 - 0x01240000 : ファイルシステム
0x01240000 - 0x02000000 : 廃棄物
blob> boot
kernelの起動 ...
Uncompressing Linux....................................................................... done, booting the kernel.
Linux version 2.4.21-rmk1-pxa1-intc2 (root@linux) (gcc version 3.3.2) #11 Wed Nov 24 11:34:38 IST 2004
CPU: XScale-Bulverde revision 4
Machine: Intel DBBVA0 Development Platform
Ignoring unrecognised tag 0x00000000
Run Mode clock: 208.00MHz (*16)
Turbo Mode clock: 520.00MHz (*2.5, active)
Memory clock: 208.00MHz (Alt=1, SDCLK[0]=/4, SDCLK[1]=/2)
System bus clock: 208.00MHz
On node 0 totalpages: 16384
zone(0): 16384 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: roottype=nfs root=/dev/nfs ip=bootp console=ttyS0,115200n8
Console: colour dummy device 80x30
Calibrating delay loop... 519.37 BogoMIPS
Memory: 64MB = 64MB total
Memory: 62420KB available (1939K code, 341K data, 84K init)
Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Init freq:520000kHz.
Registering CPU frequency change support.
CPU clock: 520.000 MHz (13.000-520.000 MHz)
CPU voltage: 1.400 mV (0.650-1.400 mV)
Register device ipmc successgul.
Starting kswapd
JFFS2 version 2.1. (C) 2001, 2002 Red Hat, Inc., designed by Axis Communications AB.
I2C: PXA algorithm module loaded.
enable_irq(18) unbalanced from c00b033c
I2C: Adding PXA-I2C-Adapter.
I2C: Scanning bus
I2C: Successfully added bus
Console: switching to colour frame buffer device 80x30
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with no serial options enabled
ttyS00 at 0x0000 (irq = 22) is a PXA UART
ttyS01 at 0x0000 (irq = 21) is a PXA UART
ttyS02 at 0x0000 (irq = 20) is a PXA UART
SA1100 Real Time Clock driver v1.00
ac97_codec: AC97 Audio codec, id: PSC4 (Philips UCB1400)
smc91x.c: v1.0, mar 07 2003 by Nicolas Pitre
eth0: SMC91C11xFD (rev 1) at 0xf1000300 IRQ 194 [nowait]
eth0: Ethernet addr: 00:02:b3:00:ce:92
Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
SCSI subsystem driver Revision: 1.00
In file pxa-ac97.c, pm_registered.
Probing Mainstone flash at physical address 0x00000000 (32-bit buswidth)
Using buffer write method
RedBoot partition parsing not available
cmdlinepart partition parsing not available
Creating 4 MTD partitions on "Mainstone flash":
0x00000000-0x00040000 : "Bootloader"
0x00040000-0x00240000 : "Kernel"
0x00240000-0x01240000 : "Filesystem"
0x01240000-0x02000000 : "Junk"
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
host/usb-ohci.c: USB OHCI at membase 0xfe000000, IRQ 3
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
hub.c: 2 ports detected
Setting port 3 power failed.
usb.c: registered new driver hiddev
usb.c: registered new driver hid
hid-core.c: v1.8.1 Andreas Gal, Vojtech Pavlik
hid-core.c: USB HID support drivers
usb.c: registered new driver acm
acm.c: v0.21:USB Abstract Control Model driver for USB modems and ISDN adapters
usb.c: registered new driver audio
audio.c: v1.0.0:USB Audio Class driver
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
USB Mass Storage support registered.
vendorID: dead productID: beef
Linux video capture interface: v1.00
PXA_CAMERA: pxa_camera_video_init
PXA_CAMERA: video_register_device successfully. /dev/video0
mice: PS/2 mouse device common for all mice
pxa_ir: irda driver inited
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 8192)
Sending BOOTP requests . OK
IP-Config: Got BOOTP answer from 192.168.1.100, my address is 192.168.1.101
IP-Config: Complete:
device=eth0, addr=192.168.1.101, mask=255.255.255.0, gw=192.168.1.1,
host=192.168.1.101, domain=, nis-domain=(none),
bootserver=192.168.1.100, rootserver=192.168.1.100, rootpath=/rootfs
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
Looking up port of RPC 100003/2 on 192.168.1.100
Looking up port of RPC 100005/1 on 192.168.1.100
VFS: Mounted root (nfs filesystem).
Freeing init memory: 84K
init started: BusyBox v1.00-pre5 (2004.03.09-09:55+0000) multi-call binary
mount: Mounting /dev/root on / failed: No such device
BusyBox v1.00-pre5 (2004.03.09-09:55+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
Processing /etc/profile... Done
[root@Linux /]#
これでLinuxはボード上に上手く移植された。
投稿者、
majidku:12/30/2004 - 02:20. 記事| 開発者| 一般| ディストリビューション
Linuxクラスタを15分以内でMPIと平行計算が出来るようにするKnoppixベースのライブCD。
要約
ParallelKnoppixはKnoppixに基づくCDで、Debian Linuxにもまた基づく。ParallelKnoppixにより数分でMPIなどの平行プログラム作成ツール/ライブラリを装備するLinuxクラスタを作ることが出来る。コンピュータ環境のコンフィギュレーションに費やす時間を大いに節減することが出来る。ライブCDなので既存環境は乱されない。マスターノードだけにディレクトリが作られるが、希望なら再ブートの後削除することが出来る。
緒言
「ParallelKnoppixにより、MPIのLAM-MPIや MPICH実施を用いる平行処理のためのマシンのクラスタを設定することが出来る。マシンにPXEネットワークカードがあると、15分以内でクラスタが立ち上がる」
背景
クラスタ分けは平行性を達成する最も安価な方法である。Linuxを用いるクラスタ分けはLinuxの力の一つである。大学や企業はLinux の下でイーサネットを通じてPCを接続することによりスーパー・コンピュータを模擬する。Linuxは科学分野に採用され、LAM, PI, PVMなどなど、多数の科学ツールをロードして研究をおこなっている。Linuxは平行計算に最も適している。だが、問題は、科学者やプログラマがLinux環境の予備コンフィギュレーションを沢山しなければならないことである。このため、この仕事が低速で複雑になる。コンフィギュレーションの問題は、既存環境がLinuxでないとさらに悪くなる。
Linuxの権威者が開発したライブCDがこの問題を解決した。研究者はライブCDを選んで、長い長いコンフィギュレーションをおこなうことなく平行プログラム作成を行うことが出来る。クラスタは数分(7-8分)で作られる。
平行プログラム作成ようライブCDの一つがParallelKnoppixである。
その他の平行計算用ライブCDにはe BCCD とClusterKnoppixがある。
説明
先祖(これはKnoppix)と同じく、ParallelKnoppixはハードウエアと周辺機器全部を自動的に検出する。筆者はこれをPIV用のD865GBFインテルボードとPIIIのインテル810でテストしたが、ParallelKnoppixは何もする必要がなくてハードウエア全部を自動的にコンフィギュアした。コンフィギュアにParallelKnoppixを用いたコンピュータは、NFS(ネットワークファイルシステム)によりマスター・ノードに作られる共通ディレクトリを共有する。マスター・ノードは、CDを用いて立ち上げられ、スレーブはネットワーク(真下ー・ノード上でDHCPを走らせる)を用いて立ち上げられる。スレーブは、PXE互換NICを用いてPXEが起動するbiosを有する。
DHCP, NFS, SSH (パスワード無しのログイン)など、LAM/MPIに必要なサービスはすべて自動的にコンフィギュアされるので、MPIプログラムに加えてその他の平行アプリケーションも実験することが出来る。
ParallelKnoppixの設定は余り安全ではない、ユーザ及びスーパーユーザ(ルート)のためのライブCDパスワードは公知でParallelKnoppixの知識がある者は誰でもParallelKnoppixクラスタにアクセスすることが出来るからである。設定が楽なだけ安全で妥協している。
PXE ブートとは?
PXEはPreboot Execution Environment(予備ブート実行環境)の頭文字である。
PXE は、ネットワークを通じてPCを遠隔からブートする技術である。PXEはシステムBIOSによりサポートされるので、ネットワーク・インターフェイスはPXE適合でなければならない。
NIC が PXE 適合でないときなすべきこと
ether boot imageを置くか又は、mages.ROM-o-matic.netを用いてEtherboot ROM imageを動的に発生するCDを焼付なければならない。
http://rom-o-matic.net/
ParrallelKnoppixのダウンロード
ISO ファイルのダウンロード
FTP強要リンク
HTTP 強要リンク
MD5SUM ダウンロード
ISOイメージをダウンロード下の地、ISOイメージのMD5チェックサムを点検して、ダウンロードの成功を確認する。これはおこなうには、シェルプロンプトからISOイメージに対しmd5sumプログラムを走らせて、戻り値をmd5ファイルを比較する(ダウンロードのリンクは下記)。以下に、md5sumに関する正しい構文を示す(このコマンドをLinux/UNIX/Solarisの端末でタイプする)
md5sum "isofilename"
上のコマンドで "isofilename" を正しいファイル名で置き換える。
何かの理由でLinux を使っていないときは、Windows MD5sumジェネエレータmd5Summer を用いる。下記がリンクである。
ここにはDOS用md5加算器もある。これを使っても良いがWindowsが使い易い。筆者は上の二つを使った。MD5サムが一致したら、ISOイメージをCD又はCDRWに焼き付ける。
注記: ISOs を CD に書込無には cdrecord などのプログラムが必要である。
その働き
コンフィギュレーション手順の画面光景のステップ・バイ・ステップ指導書がある。下記が指導書のリンクである。
Parallel Knoppix 指導書 html 版
Parallel Knoppix 指導書 pdf 版
CD Rom をノードにエキスポートすると、容易に50ノードに適応するが、50ノード以上もテストされている。筆者は5ノードまでテストした。
。
複数のDHCP が走っているとき
「(筆者のように)大学で使用するとき、公式DHCPサーバと、多分PXEサーバの存在に遭遇することがある。端末サーバを用いて立ち上げようとすると、ノードは前から存在するPXEサーバで立ち上がり、ParallelKnoppix CDから立ち上がるコンピュータ上で走るDHCPでなく公式サーバから自分のIPアドレスを獲得することが多い。筆者の解決策は、ノードとして使用するコンピュータの接続を既存のPXEやDHCP サーバから物理的に切断するか又は、これらサーバを一時的に無効にするよう管理者の援助を求めることである。もっと良い解決策をご存じの方があればご教示頂きたい。miniroot.gzの周りの混乱が関係しているので、rom-o-matic を用いてPXEツーとROMを作ってはと思う。私にはそれ以外考えられない」
From http://pareto.uab.es/mcreel/ParallelKnoppix/
その働き(要約):
ParrallelKnoppix ライブ CDは、マスター・ノードの立ち上げに使用される。一度マスター・ノード立ち上げると、DHCPサーバを設定するスクリプトが実行され、NFSを使用するノード全部が、共通作業ディレクトリを共有、LAMに必要なSSHを正しく働かせるため公開キイが作られる(パスワード無しのログイン)する。DHCPマスター・ノードが走った後、スレーブであるクライアントがPXEブートを用いて立ち上がる。上手く立ち上がった後、プログラムのサンプル・ディレクトリがNFS共有共通ディレクトリに貼り付けられて、平行プログラムが複数のPC上で平行して実行される。
結言:
「ParallelKnoppix CDは、IA-32アーキテクチャの不均質PCのクラスタの極めて簡単で迅速な設定手段を提供する。複数ユーザ用の安定クラスタの提供は意図しておらず、個別使用のための迅速なクラスタ作成用ツールである。CD自体は独自のものとすることが出来るので、コンフィギュレーションと作業ファイルを、長時間使用することが出来る。したがって、個別ユーザのため長期の解決策を提供することが出来る。」
Michael Creel著ParallelKnoppix 指導書から
参考資料
ParallelKnoppixのホームペイジ
High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI By Joseph D. Sloan
(Joseph D. Sloan著:OSCAR, Rocks, OpenMosix, MPIを有する高性能Linux クラスタ)
出版社: O'Reilly 、出版日: 2004年11月
K N O P P I X
ホームペイジ
公式ウェブサイトe
ParallelKnoppixのホームペイジ
ROM-o-matic.net が Etherboot ROM イメージを動的に作成する.
平行Knoppixに関する論文:Michael Creel (14th October 2004年10月14日)
多数の画面を用いてParallelKnoppix使用法を示す詳細な指導書:Michael Creel (2004年12月15日)
Windows MD5sum generator
LAM/MPI 平行計算
LAM/MPI ユーザーズガイド
LAM/MPIに関する完全なユーザーズガイド。LAM/MPIの全ユーザ必読の書。
この記事は、Linuxのユーザモードとkernelモード双方のメモリ使用問題を述べる。すべてのプログラムは何らかの形でメモリを用いる。これらは、メモリ使用についてOSに依存する。つまり、メモリ供給はユーザ・プログラムに対するOSサービスである。
Linuxには、ほとんどのOSと同様に二つの演算モードがある。一つはユーザモードで、ほとんどのアプリケーションとユーザプロセスがほとんどの時間この中で走る。別のモードはkernelモードと呼ばれる。ほとんどのOSとシステム・ソフトウエアはこのモードで走る。ほとんどのユーザ・プログラムで、そのコードの小部分(即ちシステム呼出と優先命令)がkernelモードで走る。
1. ユーザモードでのメモリ問題
ユーザメモリ割当はほとんどシステム呼出でおこなうか、又はコンパイル時にプログラムが統計的に留保する。プログラム毎に変数及びその他のデータに割当てるためスタックとヒープの形で幾らかのメモリが指定される。ほとんどメモリの動的割当に使用されるシステム呼出は、malloc(), calloc(), realloc(),brk() などである。これらは要求メモリを割り当てるか又はゼロポインタを返すかいずれかである。ユーザモードメモリ割当の良いところは、メモリチェックの時のエラーチェックが、プログラムを殺すとの最悪の結果をを持つとの理由で、回避されることである。メモリ衝突又は分割不具合の際に、プログラマは信号をマスクして、プログラムが停止する前に、最低のハウスキーピング活動をおこなうことが出来る。メモリ割当と割当解除は、このレベルが簡単なので、プログラマは呼出の結果を心配する必要がない。
2. kernel モードでのメモリ問題
kernelモードでのメモリ割当は極めて微妙で、一寸したエラーがシステムマップ全体を壊してシステムを破壊するので、慎重におこなう必要がある。kernelモードで、メモリは(実際に)二つの方法で動的に割り当てられる。
kmalloc()
kmalloc() ファンクションはメモリを二つのレベルで割り当てる:1ペイジ(i86で4Kb)近くまでのメモリを装置内で割り当てるには "bucket" システムを用い、長さが(i86上で)128Kb までのメモリを割り当てるには各種の大きさで隣接するメモリの塊のリスト上で "buddy" システムを用いる。最近、基本ペイジサイズ以上のメモリ割当をすすることが出来るようになったけれども、サイズが小さいと大きい塊を見付ける機会は少ない。kmalloc() システム呼出は、動的メモリ割当に広く使用されている。構文を下記に説明する。
void * kmalloc(unsigned int size, int priority);
ここで size は要求ブロックの実際のサイズを指し、priority は相対的緊急度又は割当にどのキャッシュテーブル(一つはDMA/ISA用で、他はKERNEL用)を用いるかを決定する。さらに、これは最適アルゴリズムにしたがい、要求ブロックに適合する最小サイズを検索する。
kmalloc() は、メモリをkernelから割り当て、割当に当たってはメモリブロックの内容を変更しない。kmalloc() はあらゆる型のLKM専門に使用されに使用される。特にTCP IP プロトコルでは、プロトコル・バッファ(sk_buff)に使用される。kmalloc() を用いて割り当てられるメモリは、kfree() で解放される。
get_free_pages()
これは動的メモリ割当の最低レベルで、四分の一ペイジ又は半ペイジ分の範囲のメモリが必要な場合に使用される。このような場合にメモリは、kmalloc により割り当てられ内部の断片が大きくなる。構文を下記に示す:
void* get_free_page(int priority);
このAPIは通常 vmalloc() が可変長ペイジを割り当てるのに用いられる。
get_free_page(priority) は、GFP_* 値(優先度として渡される)のうち一つに基づいて単一メモリペイジを割り当てる。しかしペイジの内容は消去されないので、プログラムでその内容に割り込んではいけない。一ペイジ以上を割り当てるには、優先度が前のものと同様であるとしてfree_pages(priority, order) を用いる。ここでorder引数は、以下のフォーマットにしたがうサイズを示す:
size=PAGE_SIZE*(2^order)
しかし、この式はバイナリの冪でペイジを作る。get_free_page()を用いて割り当てるペイジはにより解放される。
エラー取扱問題
一般規則として、プログラマは更新毎にと同じくメモリ割当の後にエラーをチェックしなければならない。ここではエラーをマスクすることもリダイレクトすることも出来ないからである。これを最小にする最良の方法は、集中バッファマネージャを使用することである。このとき、主要部分実行の前にメモリの大きい塊をkernelに要求し、次に自分のプログラムに好みの通りメモリを配分させる。この方法は、kernelに最小のメモリ割当を要求し、不具合の機会を少なくする。勿論、プログラマは、各種サブモジュールに配分するメモリブロックの詳細を整備しなければならない。別の普通の方法は、不具合があるとき安全にexit出来るようファンクションを入力するだけでメモリを割り当てることである。メモリは、最も普通に利用され保証しなければならない希少な資源の一つで、そのメモリを保証する唯一の方法は、実行の前に割り当てることである。