spu_create - 新しい SPU
  コンテキストを生成する
#include <sys/types.h>
#include <sys/spu.h>
int spu_create(const char *pathname, int flags, mode_t mode);
int spu_create(const char *pathname, int flags, mode_t mode,
               int neighbor_fd);
注:
  このシステムコールには
  glibc
  のラッパー関数は存在しない。「注意」の節を参照。
spu_create()
  システムコールは、Cell
  Broadband Engine
  アーキテクチャーを実装した
  PowerPC
  マシンにおいて、Synergistic
  Processor Unit (SPU)
  にアクセスするために使用される。
  このシステムコールは、
  SPU
  に対する新しい論理コンテキストを
  
pathname に生成し、
  そのコンテキストに関連付けられたファイルディスクリプターを返す。
  
pathname は SPU
  ファイルシステム (
  
spufs)
  のマウントポイント内の存在しないディレクトリを指していなければならない。
  
spu_create() が成功すると、
  
pathname
  にディレクトリが生成され、
  そのディレクトリに
  
spufs(7)
  で説明されているファイル群が配置される。
コンテキストを作成した際、返されたファイルディスクリプターは、
  
spu_run(2) に渡すか、 
*at
  系のシステムコール (
  
openat(2) など) の 
dirfd
  引き数として使用するか、
  クローズするか、しかできない。
  他の操作は定義されていない。
  そのコンテキストへの最後の参照がなくなった際に、
  論理 SPU
  コンテキストは破棄される
  (そのコンテキストの
  
pathname
  ディレクトリに作成されたファイルもすべて破棄される)。
  通常は 
spu_create()
  が返したファイルディスクリプターがクローズされた際に発生する。
flags 引き数には 0
  か以下の定数の組み合わせ
  (ビット単位の論理和)
  を指定できる。
  - SPU_CREATE_EVENTS_ENABLED
 
  - DMA
      エラーを通知するのにシグナルを使うのではなく、
      spu_run(2) の event
      引き数を使用する。
 
  - SPU_CREATE_GANG
 
  - コンテキストの代わりに
      SPU gang を作成する。 (gang
      は、機能的に互いに関係していて、スケジューリングパラメーター
      (優先度とポリシー)
      を共有する SPU
      コンテキストのグループである。
      将来、
      グループ全体が一つの単位としてスイッチイン/スイッチアウトされる
      gang
      スケジューリングが実装されるかもしれない。)
    
     pathname
      引き数で指定された場所に新しいディレクトリが作成される。
      この gang を使って他の SPU
      コンテキストを保持することができる。
      それには、それ以降の
      spu_create() に gang
      ディレクトリ内のパス名を渡す。
 
  - SPU_CREATE_NOSCHED
 
  - SPU
      スケジューラーの影響を受けないコンテキストを作成する。
      一度実行されると、
      呼び出したプロセスが破棄されるまでこのコンテキストがスケジューリングで追い出されることはない。
    
    このコンテキストは SPU
      から削除されることはないので、
      SPU_CREATE_NOSCHED
      コンテキストではいくつかの機能は無効にされる。
      spufs
      のこのコンテキストのディレクトリでは一部のファイルだけができる。
      また、 SPU_CREATE_NOSCHED
      コンテキストはクラッシュした際にコアファイルをダンプできない。
    
     SPU_CREATE_NOSCHED
      コンテキストを作成するには
      CAP_SYS_NICE
      ケーパビリティが必要である。
 
  - SPU_CREATE_ISOLATE
 
  - 隔離された SPU
      コンテキストを作成する。
      隔離されたコンテキストはいくつかの
      PPE (PowerPC Processing Element)
      命令から保護される。
      SPU ローカルストアや NPC
      レジスターへのアクセスなどである。
    
     SPU_CREATE_ISOLATE
      コンテキストを作成するには
      SPU_CREATE_NOSCHED
      フラグも指定する必要がある。
 
  - SPU_CREATE_AFFINITY_SPU
 
  - 別の SPU
      コンテキストと affinity
      (親和性)
      を持ったコンテキストを作成する。
      この affinity 情報は SPU
      スケジューリングアルゴリズムで使用される。
      このフラグを使う際には、
      他の SPU
      コンテキストを指すファイルディスクリプターを
      neighbor_fd
      引き数を渡す必要がある。
 
  - SPU_CREATE_AFFINITY_MEM
 
  - システムメモリーと
      affinity (親和性)
      を持ったコンテキストを作成する。
      この affinity 情報は SPU
      スケジューリングアルゴリズムで使用される。
 
mode 引き数
  (からプロセスの 
umask(2)
  でセットされたビットを除いたもの)
  により、 
spufs
  に作られる新しいディレクトリで使用されるアクセス許可が決まる。
  利用できる 
mode
  値の完全なリストについては
  
stat(2) を参照。
返り値¶
成功すると、 
spu_create()
  は新しいファイルディスクリプターを返す。
  エラーの場合、-1
  を返し、 
errno
  に以下のリストに記載のエラーコードのいずれかを設定する。
エラー¶
  - EACCES
 
  - 現在のユーザーが
      spufs(7)
      のマウントポイントへの書き込み許可を持って
      いない。
 
  - EEXIST
 
  - 指定されたパス名で
      SPU
      コンテキストがすでに生成されている。
 
  - EFAULT
 
  - pathname
      が呼び出し元のプロセスのアドレス空間で有効な文字列ポインターではない。
 
  - EINVAL
 
  - pathname が SPUFS
      マウントポイント内のディレクトリではない。
      または、無効なフラグが指定された。
 
  - ELOOP
 
  - pathname
      を解決するまでに辿ったシンボリックリンクが多過ぎた。
 
  - EMFILE
 
  - そのプロセスがオープンできるファイル数の上限に達していた。
 
  - ENAMETOOLONG
 
  - pathname が長過ぎる。
 
  - ENFILE
 
  - システム全体でオープンできるファイル数の上限に達していた。
 
  - ENODEV
 
  - 隔離されたコンテキストが要求されたが、
      ハードウェアが SPU
      アイソレーションをサポートしていない。
 
  - ENOENT
 
  - pathname
      の一部が解決できなかった。
 
  - ENOMEM
 
  - カーネルが必要なリソースの全てを割り当てることができなかった。
 
  - ENOSPC
 
  - 新しいコンテキストを生成するのに十分な
      SPU
      リソースがなかった、
      または SPU
      コンテキスト数がそのユーザーの特定の上限に達していた。
 
  - ENOSYS
 
  - 機能が動作中のシステムで提供されていない。理由は、
      ハードウェアで SPU
      が提供されていないか、
      spufs
      モジュールがロードされていないか、のどちらかである。
 
  - ENOTDIR
 
  - pathname
      の一部がディレクトリではない。
 
  - EPERM
 
  - SPU_CREATE_NOSCHED
      フラグが指定されたが、ユーザーが
      CAP_SYS_NICE
      ケーパビリティを持っていない。
 
ファイル¶
pathname は 
spufs
  のマウントポイントの配下の場所を指して
  いなければならない。
  慣例では 
/spu
  にマウントされる。
バージョン¶
spu_create()
  システムコールはカーネル
  2.6.16 で Linux に追加された。
このシステムコールは
  Linux 固有であり、 PowerPC
  アーキテクチャーでのみ実装されている。
  このシステムコールを使ったプログラムは移植性がない。
glibc
  はこのシステムコールに対するラッパー関数を提供していない。
  
syscall(2)
  を使うこと。ただし、
  
spu_create() は
  より抽象度の高い SPU
  へのインターフェースを実装するライブラリから
  利用されることを意図したものであり、通常のアプリケーションから
  使用は意図されていない。推奨のライブラリについては
  
http://www.bsc.es/projects/deepcomputing/linuxoncell/
  を参照のこと。
spu_create()
  の利用例については
  
spu_run(2) を参照。
関連項目¶
close(2), 
spu_run(2), 
capabilities(7), 
spufs(7)
この文書について¶
この man ページは Linux 
man-pages
  プロジェクトのリリース
  3.65 の一部
  である。プロジェクトの説明とバグ報告に関する情報は
  
http://www.kernel.org/doc/man-pages/
  に書かれている。