排他制御


Linux(vfs)

*** 排他制御 ***

スピンロック関数

    spin_lock(&val)
        変数valのロックを行う。 ロック出来ない場合は、成功するまで
        ビジーウェイトする。
    spin_unlock(&val)
        変数valのロック解除を行う。
    spin_trylock(&val)
        変数valのロックを行う。 即ロック出来ない場合は、エラーとなる。


    spin_lock_irq(&val)
        ローカルCPUの割り込みを禁止した上で、変数valのロックを行う。
        ロック出来ない場合は、成功するまでビジーウェイトする。
    spin_unlock_irq(&val)
        変数valのロック解除と、ローカルCPUの割り込み禁止解除を行う。


readロック/writeロック
参照頻度の高く、かつ更新を伴わない参照が多い資源用。
複数のプロセスからの同時アクセスを許す。

    read_lock(&val)
        資源のreadロックを行う。もし既に資源がwriteロックされている場合は、
        writeロックが解除されるまでビジーウェイトする。
        複数のプロセスから多重にロックすることが可能。
    write_lock(&val)
        資源のwriteロックを行う。もし既に資源がreadロックまたはwriteロック
        されている場合は、ロックが解除されるまで ビジーウェイトする。
    write_trylock(&val)
        資源のwriteロックを行う。もし既に資源がreadロックまたはwriteロック
        されているされている場合はエラーとなる。
    read_unlock(&val) write_unlock(&val)
        readロックまたはwriteロックの解除を行う。


カーネルロック
v2.4では、カーネルロック(lock_kernel関数)が大幅に スピンロック(spin_lock関数)を用いるように変更されているが、カーネルロックで保護されている資源は多数残されている。
複数のプロセスが同時にカーネルロック(lock_kernel関数)行うと
そのうちの一つのプロセスのみがカーネルロックに成功し、他のプロセスは
カーネルロックが終了するのをカーネルロック関数 (lock_kernel関数)内で
ビジーウェイトして待ち続ける。
#たぶん2重ロックしてもよい

最新の20件

2006-12-20 2005-11-17 2005-11-09 2005-10-28 2005-10-24 2005-10-13

  • counter: 1604
  • today: 1
  • yesterday: 0
  • online: 1