差分

ナビゲーションに移動 検索に移動

RAIDコントローラー

473 バイト除去, 2014年2月4日 (火) 01:28
編集の要約なし
'''関数ポインターRAIDコントローラー'''とは、(英語:RAID Controller、読み:れいどこんとろーらー)とは、[[関数RAID]]を実現する[[ポインタープログラム]]である。 == 英語読みについて ==日本語でいう「、または[[関数プログラム]]」はを焼き付けた[[プログラミング言語ASIC]]によって「ファンクション(function)」だったり「メソッド(method)」だったりと曖昧なので、英語での呼び方も「function pointers」だったり「method pointers」だったり「functors」だったりと様々である。よって名称・呼称の細かい違いは気にしてはならない。時間の無駄である。、またはその[[ASIC]]を搭載した[[RAIDカード]]、またはその[[ASIC]]を搭載した[[RAIDケース]]のことである。
== 概要 ==
関数ポインタはRAIDコントローラーは複数の[[関数HDD]][[変数SSD]]のように扱えてうれしいという物である。 主に絶望的なほど巨大な分岐処理を、関数ポインタのなどの[[LUT物理ディスク]]に置き換えてることでを1つの[[ソースコード論理ディスク]]を単純化するなどという場面で使われる。にまとめ上げる[[ゲームディスクアレイコントローラー]]などではよく多用される技法である。 また、[[コールバック関数]]と呼ばれる使われ方もある。たとえば[[Windows]]などのいわゆる[[イベントドリブン]]な[[実装]]では、何かしらの[[イベント]]発生時に関数ポインタ変数が[[NULL]]ではなかったら[[関数]]([[コールバック関数]])を実行する、などという使われ方をしている。 == 記述例 ===== C言語 ===[[C言語]]系の[[プログラミング言語]]では[[実引数]]の[[型]]が一致していなくても怒られないことが多い。そのため、その扱いには注意を要し、一歩間違えれば[[バグ]]の温床となる。<source lang="c">#include <stdio.h> static int func(int a){ printf("func: %d\n", a); return 2 * a + 3;} int main(void){ int (*f1)(int a) = func; int result = (*f1)(10);  printf("main: %d\n", result); return 0;}</source> === Pascal ===元祖[[Pascal]]にはそもそも[[ポインタ]]自体がない。よって関数ポインタもない。 === Turbo Pascal ===[[Turbo Pascal]]にはPointer型という名の[[ポインタ]]が追加されている。<source lang="delphi">program Test; uses Classes; type TFuncPointer = function(a : Integer):Integer; function Func(a : Integer):Integer;begin WriteLn('Func: ', a); Func := 2 * a + 3;end;の一種である。
var ptr : Pointer; ret : Integer;begin ptr := @Func; ret := TFuncPointer(ptr)(10); WriteLn('Main: ', ret);end.</source>[[ディスクアレイコントローラー]]という場合は[[RAID]]に該当しない謎の処理方式により複数の物理ディスクを理論ディスク化する場合も含まれるが、ディスクアレイコントローラー製品の9割方がRAIDコントローラーであるため、ほぼイコールで語られることが多い。なお、[[RAID]]以外の方式としては[[コンバインモード]]などが巷では有名である。
=== C# ===RAIDコントローラーを[[C Sharp|C#ASIC]]は見た目こそ[[C言語PLD]]似だが、その実態はなどの[[Turbo Pascal集積回路]]の方言であるため、基本はとして[[Turbo Pascal実装]]に右に倣えである。したものを搭載した[[拡張カード]]を「[[RAIDカード]]」という。最近の[[マザーボード]]は[[ファームウェア]]にRAIDコントローラーを搭載している製品も多い。
== 分類 ==RAIDコントローラーは大きくわけてハードウェア方式とソフトウェア方式ある。* [[C Sharp|C#ハードウェアRAID]]では関数ポインタは- 名前の通り[[オブジェクト指向プログラミング言語RAIDカード]]として、同一などの[[インスタンスハードウェア]]内の[[フィールド変数]]や[[プロパティ]]を* [[参照ソフトウェアRAID]]できるなど、若干の改良が加えられており、その名称も「[[デリゲート]]」と改名されている。名称と微妙な機能の差はあるが基本は同じである。<source lang="csharp">using System;- OSなどで実現している方式
class App{ delegate int FuncDelegate(int a);なお、[[RAIDカード]]であれば全てハードウェア方式というわけでもなく、一見するとハードウェア方式風であっても、実は[[拡張カード]]自体はただの[[SATAカード]]などであり、RAIDコントローラーとしての機能は[[デバイスドライバ]]でソフトウェア的に実装している製品も多々ある。
static int Func(int a) { Console.WriteLine("func: {0}", a); return 2 * a + 3; }一昔前に[[家電量販店]]などで売られていた安物[[RAIDカード]]といえば大体これであり、同一メーカーの安価な[[SATAカード]]を買ってきて、公式サイトから[[ドライバ]]を[[ダウンロード]]して入れると、あれ不思議、[[RAIDカード]]になりました、ということも多々あった。
static void Main() { var f1 = new FuncDelegate(Func); int result = f1(10);なお、[[サーバー]]などで使われている[[RAIDカード]]では[[ホストバスアダプター]]に[[ファームウェア]]として[[実装]]されているのが一般的である。さらに上のクラスの製品になると専用筐体に専用OSのようなかたちで実装されているものもある。
Console.WriteLine("main: {0}", result);== その他 == }}</source>自由気ままな[[プログラマー]]たちをRAIDコントローラーに相当する[[中間管理職]]がまとめあげることを[[ペアプログラミング]]という。
== 関連項目 ==
* [[第一級関数冗長化]]* [[高階関数RAID]]* [[クロージャー]]* [[ラムダ式ペアプログラミング]]
== 参考文献 ==
匿名利用者

案内メニュー