レベル デ ータ保 存 デー タ収集 デー タ解析
フ ァイルア クセ ス 割り 込み処 理、CAMACアクセス メモリ アク セス
要 求 I/O 割 り込み メ モリ
( システ ムコー ル)
カーネ ル レベル
遅 れ
割 り込み 処理 処理 実行
I/O アク セス 処 理実行
メ モリア クセス 処理実 行
ハード ウェア
レベル ハード ディス ク CAMACイ ンタフ ェイス メモリ
プロ セス A 処理実 行 処 理実行
プロ セス B 処理実 行 処理実行
プロ セス C 処理実 行 処 理実行
高 優先度
A B C A B C A B C A B C A B C A B C
図6.4: 標準UNIXのスケジューリング
その問題点は、UNIXのプロセススケジューリングに見られ、そのひとつに カーネルはプリエンプションを行わないというのがあげられる。標準のUNIXシ ステムは、大きく分けると3つの階層に分けることができる。UNIX最も基礎と なるカーネルが位置するカーネルレベル、各種プロセスの動作環境であるユーザー レベルそれからハードウェアレベルである[8]。
カーネルは、各種ハードウェアのドライバが実装されており、ユーザーレベルで 動作しているプロセスからのハードウェアに対する要求を処理する。カーネルの処 理は実行優先度が高く、実行中の処理を中断させることができない。データ収集を 行う上で、イベントからの割り込みに対する処理は即座に行いたい。しかし、割り
6.3. UNIXの問題点
プ ロ セ ス プ ロ セ ス プ ロ セ ス プ ロ セ ス
ス レ ッ ド ス レ ッ ド ス レ ッ ド ス レ ッ ド
カ ー ネ ル カ ー ネ ル
ス レ ッ ド ス レ ッ ド
割 り 込 み
タ ス ク Preemption
ス レ ッ ド A(優先度 : 高 ) Suspended Ready Executing Suspended 割 り 込 み 処 理 プ ロ セ ス
ス レ ッ ド B(優先度 : 中 ) Executing Ready Executing Dorment
ス レ ッ ド C(優先度 : 低 ) Ready Executing
ス レ ッ ド の 状 態 ( Ready:実行待ち Executing:実行 Suspended:中断 Dorment:休止)
図6.5: リアルタイムOS(Lynx01)のスケジューリング
込みはランダムに発生するため、カーネルが処理を実行しているときに、割り込み 要求が出される場合もある。このときカーネルは、実行中の処理が終了するまで、
割り込み要求の処理を行わない。つまり、カーネルはプリエンプション(先取り処 理)を行わない。そのため、割り込みに対する処理に遅れが生じ、これがデータ収 集を行う上で問題となる(図6.4上)。
問題はもう一つ考えられる。それは、プロセスが公平に扱われるという点であ る。標準のUNIXでは、タイムシェアリングと動的に変動する優先度をつけるこ とでプロセスの実行を管理している。タイムシェアリングによるスケジューリング 法は、ある一定間隔でタイマ割り込みを発生させ、そのタイミングでスケジューリ ングを行い、プロセスの優先度を決定し、最も高い優先度が与えられたプロセス が実行される。プロセスははじめ基礎となる優先度を持っており、そのプロセスの 実行履歴により変動する優先度が付けられる。つまり、スケジューリングの直前に 実行されていたプロセスは、優先度が下げられ、実行が待たされているプロセスの 優先度は上げられる。このようにしてプロセス同士の公正さが保たれている。よっ て、特定のプロセスに高い優先度を与え続けることができない。つまり、データ収 集を行う上でデータ収集プロセスの優先的な処理が期待できない(図6.4下)。
これらの問題を解決したのがリアルタイムUNIXであり、プリエンプションと 固定優先度を提供する。リアルタイムUNIX(lynxOS[5])では、ユーザーレベ ル、カーネルレベルの区別はなく、プロセスの処理を細分化したスレッドと呼ば れる単位でカーネルの処理も含め一元的に管理する。それぞれのスレッドには固
Chapter 6.考 察
定した優先度をつけ、タスクという基本的な処理単位でスケジューリングを管理す る。タスクは、実行待ち(Ready)、実行(Excuting)、中断(Susp ended)、休 止(Dormant)の4つのいずれかの状態にあり、実行状態にあるのは常に1つのス レッドだけである。その状態は、ある特定のイベント(割り込み)の発生や、実行 中のスレッドが中断、休止状態に遷移したとき、切替えられる。そして、実行待ち 状態のうち優先度の高いスレッドが実行状態になる(図6.5)[24]。また、スレッ ドを単位として処理を実行しているため、タスクの切替えが即座に行われ、標準の
UNIXより優れる高速性と即時応答性を実現している。しかし、スレッドの優先度 の管理や、表6.3に示すように、そのスピードには限界があり、実際のデータ収集 に必要な処理をリアルタイムに行おうとするときに問題となる場合がある。
InterruptLatency Min. 5sec, Max. 40sec
InterruptTask Resp once Max. 100sec
ContextSwitch Max. 50sec
表 6.5: リアルタイムUNIXの性能
そこで本システムではこのような問題に関して、データ収集機能を持った
CA-MAC ACCを用いることで処理を分散化し対応する。CAMAC ACCを用いるこ とで次のような効果が得られる。
1. データ収集はまずACCが行い、データをダブルバッファーの片方に貯める ので、ホストコンピュータはそのバッファーが満たされるまでの間に、もう 一方のバッファーデータを収集すれば良く、データ収集の時間的制限が軽く なる。また、バッファーデータを収集する際は、DMA機構を使ったブロッ ク転送により収集するので、システムに大きな負荷をかけることなく収集で きる。
2. CAMAC ACCはデータ収集を行う際、1つのプログラムだけしか動作させ ないので処理時間に変化はなく、ある一定時間内の処理時間を保証する。
また、CAMAC ACCはCAMAC Busに直接アクセスできるので高速な データ収集が行える。その結果、システム全体のリアルタイム性をCAMAC
ACCによって確保することができる。
これにより、非リアルタイムOSであるLinuxであってもリアルタイムなデータ収 集が可能となる。