オブジェクト指向においては、個々のカプセル化された
オブジェクトは寿命を持つのが一般的である。実世界の組込みオブジェクトは、実際に寿命がある。オブジェクト指向では、この寿命をクラスから生成されるインスタンスの生成時点から消滅までの期間とみなす。この期間を寿命もしくは、ライフタイムと呼ぶ。
オブジェクトの中には、ソフトウェアの開発時点から生存してソフト実行時には生成も消滅もしない場合もある。このような永続的なオブジェクトはパーシスタントなライフタイムを持つという。
様々な機能を実現した関数を再利用しやすい形にするためにパッケージ化したものを指す。代表的なライブラリは、例えばC言語で用いられるC言語標準ライブラリが挙げられる。入出力関係の関数をまとめたstdioライブラリ、文字列操作関数をまとめたstringライブラリ、数学関数をまとめたmathライブラリ等である。このような標準的なライブラリ以外にも、自分で作成した関数で、再利用するものもライブラリすることも多い。
基板(PCB)に形成された同心円になった銅箔のこと。同心円の中央には基板を通るたて穴が開いていて電子部品の接続端子を差し込めるようになっている。多層基板では、層間の導通のためにスルーホールというたて穴を通す場合もある。このスルーホールの周囲も直径は小さいがランド状の同心円の銅箔がついている。
ソフトウェアによってシステムテストを行うと運転開始から数時間後に障害が出るというケースがある。このような場合に、ランドとランドの間に極めてわずかなハンダや線材の接触点があって、それが運転による熱膨張で接触/乖離してトラブルを引き起こしている場合がある。こうした問題が生じた場合は、まずトラブルとなる異常データのビット位置や制御信号をソフトウェアから特定する。次にソフトウェアに対応しているハードウェアのバス、ランド、スルーホールなどを顕微鏡、ルーペなどで精密に検査すると発見できる。
【リエントラント性(再入可能性)】《SW全般》
非同期または同時に呼び出した場合にも正しく動作するように設計されたプログラムの性質。
マルチタスク環境では複数のプ ログラムがタイムスライスや割り込みの単位ごとにプロセスやスレッドを切り替えることで非同期にプログラムを実行します。また、並列処理環境でメモリを共有する複数のCPUが同時に同じプログラムを実行することがあります。そのような場合にプログラムが使用するデータやオブジェクトを呼び出しコンテキスト側で用意するように設計すれば、プログラムが安全に動作するようにできます。
そのように設計されたプログラムをリエントラントであると言います。リエントラントでないプログラムを適切なロックを使わずに非同期または同時に呼び出すと、予期しないデータの書き換えが発生する場合があります。リエントラント性はスレッドについてのthread-safeと同じ概念です。
【リスク分析】《SW全般》
リスクとは、将来発生するかもしれない危険、恐れ、問題のことを言います。リスクを分析する意味は、ある問題が取り返しのつかないくらいに大きくなる前に、その問題をリスクとして事前に認識し、あらかじめ対策をすることにあります。
ソフトウェア開発プロジェクトにおいては、いろいろなリスク発生源が考えれられます。例えば、要件(要件は変更の可能性はないか、など)、設計(難易度の高い設計はないか、など)、テスト(十分なテストが計画されているか、など)、開発環境(ハードウェアは適切な時期に提供されるか、デバッガの機能、操作性は十分か、など)、調達(購入して組み込むソフトや制御対象ハード部品の信頼性に問題はないか、納期遅延の可能性はないか、受け入れテストの準備は十分か、保証期間は十分か、など)、要員(スキルレベルは十分か、他のプロジェクトとの競合は発生しないか、など)などが主なリスク発生原因となる場合が多いでしょう。
これらのリスクは、プロジェクトの計画立案時のみならずプロジェクト実行中も、その発生源を常にモニターし、リスクを分析しつづける必要があります。それは、プロジェクトマネージャだけの役割ではなく、プロジェクトに参加している人全員がリスク分析に参加する必要があります。
【リソース管理】《SW全般》
リソースとは資源のことです。
リソース管理とは、ソフトウェア開発にかかわる共有の資源をマネージャ、リーダやそれらと同等の権限を持つグループ(場合によっては個人)が適切に確保・配分し、常に状況を把握しながら、変更を制御していくことです。
ひとくちに、リソースといってもソフトウェア開発にはいろいろなリソースが存在します。
まず、ソフトウェア開発を行うプロジェクトの代表的なリソースとしては人員があげられます。人員を確保する場合、単に人数だけでなく個々の資質や過去の経験、受講した教育など、さまざまな要素を考慮することが必要です。
また、開発環境にかかわるリソースとしてはワークステーションやパソコン、ICE、ターゲットマシンなどがあります。
プログラムを記述する時に必要なリソースとしては、メモリ、バッファ、入出力ポートの数などがあります。また、ウインドウ、ダイアログボックス、アイコン、ボタンなど、あらかじめ準備しておいて、後でプログラムと組み合わせて利用するものをリソースという場合もあります。
【リトルエンディアン(Little Endian)】《プロセッサ》 → エンディアン
電気信号回路を開閉する素子のこと。継電器ともいう。
低電圧の電流をリレーに内蔵されたコイルに流すことで接点スイッチのついた金属片を電磁誘導によって吸い寄せて接点を閉じる/開くことができる。コイル電流を切れば、接点の状態を反転できる。
リレーは、金属の接点の導通を制御するだけなので、高圧電力を安全に管理する装置、初期の電話交換装置などでは電力や音声信号を通すために用いられた。また、接点の開閉は論理回路素子としても使うことができるのでトランジスタ、真空管以前の電子計算機の回路素子としても利用された。今日ではそのような利用はされないが、半導体による電流制御に比べて少ない発熱で電流制御ができることや遮断性能が良いことからファクトリオートメションの分野では活用が続いている。
最近では機械接点を持つリレーではなく、半導体によるオン/オフを行う半導体リレーも特に小電力用途では良く使用されるようになっている。
組込みコンピュータからリレーを介して電力を制御するには、コンピュータの論理出力ポートに駆動トランジスタを付加してリレーに必要なドライブ電流を得るようにする。この駆動トランジスタをフォトカプラにしてターゲットの電力系とコンピュータの回路的な絶縁を確保しておくと動作の信頼性が高くなる。先の半導体リレーは小電力で駆動することができ、外部の駆動トランジスタが不要であるなど電気回路が簡潔になるというメリットもある。
参照: a接点、b接点
あるクラスのインスタンスが他のインスタンスの(内部)属性にアクセスしたりインスタンス自体を生成する場合に、操作を行うインスタンスは操作されるインスタンスと関係(Relation)を持つと言う。その他、リレーションは、データを操作するための手がかり、排他制御のためのキーデータなど、あるいはデータベースの構造定義の用語として使用される。
リンカは複数のソース・ファイルに分けて記述したコードをつなぎ合わせてひとつの実行形式を作成するソフトウェアで、複数のソースファイルをアセンブルまたはコンパイルして生成したオブジェクトをつなぎ合わせ、未解決な外部参照があった場合は指定されたアーカイブ・ファイル(ライブラリ・ファイル)を検索して必要なオブジェクトを参照し、アドレスを解決します。
【リンク(Link)】《ツール》 → リンカ
無限に入力されるデータを有限のメモリで受け取るためのバッファ構造と操作のこと。
コンソール入力のように不特定長さのデータが区切り子を付けて入力されるような場合には、有限長さの受信バッファを用意したうえでそれをリング状の記憶域とみなして書き込みを行う。書き込むポインタは、バッファ域の物理アドレス上限に達すると次には物理アドレスの下限にセットされる。これによって見かけ上は無限の入力域が確保されたことになる。この方式では、一回のデータ入力がリングの全体長さを越えないこととデータのリングへの流入量よりもデータを取り出す側の能率(流出量)の方が大きいことが保証されないと入力オーバフローとなるので設計上の考慮が必要である。
【リングオシレータ(Ring Oscillator)】《HW》
水晶発振子、セラミック発振子などの固有振動する素子が不要な発振回路のこと。ロジック素子のNOTを奇数個リング状に接続すると、不安定になり発振をする。発振周波数はNOT回路の周波数特性によって決まる。
発振素子が不要なので簡単だが、発振周波数が素子の特性に依存するのでクロックの精度が求められる場合には使用できない。
【類似システムの調査】《SW全般》
執筆募集中!
プログラムで実現する一連の作業をルーチンと呼ぶ。プログラミング言語の登場した初期の頃から使用されている用語で、メインルーチン、サブルーチン、割込みルーチン、リエントラントルーチンというように、一連の作業で果たすべき機能と合わせて使用することが多い。C言語でいう関数やアセンブリ言語で記述した特定の機能を実現したモジュール等を想像するとよい。
【ループ(Loop)】《SW全般》
プログラミングで用いる基本的な構造の1つで、プログラム中で繰り返し実行することを指す。C言語ではwhile/for/do文という繰り返しを実現する制御文を用いて、アセンブリ言語では分岐命令を用いることで実現する。ループを用いる際は、意図的に無限ループにする場合を除きループからの脱出条件を十分検討することが重要である。
【例外(Exception)】《SW全般》
プログラムが想定している実行手順を強制的に止め、他の処理に制御を渡すような事象を例外(エクセプション)といいます。
割り込みも同様にプログラムの通常の実行手順を変える働きがありますが、一般に、割り込みはプロセッサの外部からの事象により引き起こされるものをいいます。
「例外」「割り込み」の用語の使い方は、各プラットフォームのアーキテクチャにより異なりますが、本項では、ハードウェアからの割り込み以外の例外について説明します。
まず、CPUレベルで発生する例外としては、書き込み保護された記憶装置上の領域を更新時に発生する(記憶)保護例外、定義されていない命令を実施したときに発生する命令例外などがあります。多くのOS、言語では、例外を無視したり、例外時に特定の処理を実行することが可能です。また、自分で定義した例外を発生させる仕掛けを持っています。
アセンブリ言語、C言語ではハンドラを登録することにより、特定の例外が発生時の処理を記述することが可能になります。この場合、機械語レベルであらゆる場所からハンドラに制御が渡ることの考慮が必要です。特にハンドラ内で発行する関数、例外発生した時点で確保しているリソースの後始末を考慮する必要があります。
ANSI-C++、Javaといったオブジェクト指向言語では、言語文法として構造的な例外処理(try,catch等)を規定しています。この場合も、C言語などと同様にリソースの後始末に対する考慮は必要です。また、これらの言語では、継承を用いた例外クラス(構造)の実装も可能ですが、この機構は使用ライブラリ群も含めたプログラム全体で入念に設計すべきもので、プログラマのレベルでの局所的な使用は避けるべきです。
【レスポンスタイム】《SW全般》
応答時間、つまりソフトウェアを起動し結果が返ってくるまでの時間のことをレスポンスタイムと呼びます。
レスポンスタイムに対する要求は設計の各フェーズから出てきます。
例えば、ユーザI/F系のソフトウェアの場合はユーザつまり人間が不快感を持たないように設計される場合が多く、この時は製品仕様や要求仕様としてレスポンスタイムに対する要求がでてきます。この外部から与えられた制約をソフトウェア設計で考慮して設計することになります。またソフトウェア設計段階でも、システムの動作タイミングの問題からモジュールのレスポンスタイムに制約が必要になることも多いです。
レスポンスタイムに関連して考慮すべきこととして、以下ではマルチタスク環境下のレスポンスタイムと使用マイコンがキャッシュを内蔵している場合のレスポンスタイムについて述べます
先ずマルチタスク環境のシステムの場合、対象となる機能を実現するモジュールだけを考えていても要求されているレスポンスタイムを実現できない場合があります。つまり、該当するモジュールの実行中に他のタスクに実行権が移ることで該当するモジュールの終了が遅くなる場合があるからです。
ですから、タスクのプライオリティなども考えながら全体的な視野でレスポンスタイムを考える必要があります。
一方、使用しているマイコンがキャッシュを内蔵している場合はキャッシュ・ミスのペナルティも考慮に入れてレスポンスタイムを考える必要があります。
つまり、内蔵キャッシュを有効にした状態でプログラムを実行させると、プログラム実行に必要な命令コードやデータがキャッシュからread/writeできる場合(キャッシュ・ヒットした場合)とキャッシュにはなく外部メモリからread/writeしなければいけない場合とでは、その実行サイクルに大きな差があります。そのため悪い条件下では、内蔵キャッシュを無効にして実行する場合よりも、内蔵キャッシュを有効にした場合の方がレスポンスタイムが遅くなる場合も発生します。特にレスポンスタイムの条件が厳しい場合は、キャッシュを考慮に入れておく必要があります。
成果物の検証手段のひとつである。レビュー方法としては、インスペクション、ウォークスルー、ピアレビューなど、様々な方法が知られている。レビューの対象となる成果物としては、設計書、仕様書、計画書などのドキュメントや、コーディングの成果物であるソフトウェアソースコードがある。レビューを効果的なものにするためには、レビューによって指摘された項目に対し、対処されるまでを監視する方法がある。
【レベルセンス】《HW》 → 信号検出方式
機器やプログラムの動作を記録することをロギング、取った記録をログと呼ぶ。ロギングは、何らかの証拠として機器やプログラムの動作状況やそれらの使われ方を保存するため、トラブル時の解析の手がかりを得るため、あるいは一時的にデータを保存するため等、様々な用途に使用される。
ロギングを「ログを録る」と表現することもある。
電気信号を利用して表現する論理のこと。
一般の論理は、有限な値の組みで表現する。2つの値のみで表現する論理を2値論理またはブーリアンロジックなどと呼ぶ。この2値を論理学では“真”と“偽”と呼び代数的には1と0に対応させる。デジタルコンピュータでは、真と偽を電気信号のある連続領域に対応させている。例えば、20mAの電流が流れている状態を真、100μA以下の電流しか流れていない状態を偽とする。あるいは、0〜1Vまでの電圧ならば偽、2.7〜3.2Vの電圧ならば真などである。電流や電圧の範囲は、ロジックを実現する半導体や設計方式に依存する(3Vロジック、3.3Vロジック、5Vロジック、ア12Vロジック、20mA電流ループロジックなど)。しかし、ほとんどの論理設計は2値論理に基づいている。このため論理設計の表現は、1/0、真/偽、Hi/Loなどの2値表現で行われている。そして具体的な電気信号に対応させる際には、1→Hi、0→Loの対応方法を正論理、1→Lo、0→Hiの対応方法を負論理とよぶ。
【ロジックアナライザ(Logic Analyzer)】《HW》
デジタル回路の多数の電気信号を正確な時間タイミングで測定し記録する計測器のこと。
マイクロプロセッサの外部バス上のデータ信号とコントロール信号を観測してソフト・ハードのデバッグや設計検証を行う際に使う。
信号線の引き回しによっては伝達遅延やノイズ、サージ障害などによりデバイスからデバイスへ意図したデータが伝わらないといったトラブルの原因解析が行える。
バスの全信号をサンプリングして解析すれば、CPUのインストラクションが記録されるのでソフトウェアの実行をトレースできる。このために、バス信号からリバースして特定プロセッサのアセンブリ言語表現を生成するロジックアナライザもある。
あるタスクがデバイス、プロセッサや特定のメモリ領域、特殊なレジスタなどを含めてタスク共有資源を占有すること。通常は、資源をロックするシステムコールがOSに用意されているので、その呼び出しを行うことでロックが完了する。資源をロックする場合には、複数タスクの関係においてデッドロックのような状態に陥らないように注意する必要がある。また、ロックした資源が不要になった場合には、資源を開放するアンロックを実行しておかないと他のタスクが資源を利用することができない。