ページ「関数ポインタ」と「RAIDコントローラー」の間の差分

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

2014年2月4日 (火) 01:28時点における最新版

RAIDコントローラー(英語:RAID Controller、読み:れいどこんとろーらー)とは、RAIDを実現するプログラム、またはプログラムを焼き付けたASIC、またはそのASICを搭載したRAIDカード、またはそのASICを搭載したRAIDケースのことである。

概要[編集 | ソースを編集]

RAIDコントローラーは複数のHDDSSDなどの物理ディスクを1つの論理ディスクにまとめ上げるディスクアレイコントローラーの一種である。

ディスクアレイコントローラーという場合はRAIDに該当しない謎の処理方式により複数の物理ディスクを理論ディスク化する場合も含まれるが、ディスクアレイコントローラー製品の9割方がRAIDコントローラーであるため、ほぼイコールで語られることが多い。なお、RAID以外の方式としてはコンバインモードなどが巷では有名である。

RAIDコントローラーをASICPLDなどの集積回路として実装したものを搭載した拡張カードを「RAIDカード」という。最近のマザーボードファームウェアにRAIDコントローラーを搭載している製品も多い。

分類[編集 | ソースを編集]

RAIDコントローラーは大きくわけてハードウェア方式とソフトウェア方式ある。

なお、RAIDカードであれば全てハードウェア方式というわけでもなく、一見するとハードウェア方式風であっても、実は拡張カード自体はただのSATAカードなどであり、RAIDコントローラーとしての機能はデバイスドライバでソフトウェア的に実装している製品も多々ある。

一昔前に家電量販店などで売られていた安物RAIDカードといえば大体これであり、同一メーカーの安価なSATAカードを買ってきて、公式サイトからドライバダウンロードして入れると、あれ不思議、RAIDカードになりました、ということも多々あった。

なお、サーバーなどで使われているRAIDカードではホストバスアダプターファームウェアとして実装されているのが一般的である。さらに上のクラスの製品になると専用筐体に専用OSのようなかたちで実装されているものもある。

その他[編集 | ソースを編集]

自由気ままなプログラマーたちをRAIDコントローラーに相当する中間管理職がまとめあげることをペアプログラミングという。

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]