検索

9.2. mlock() システムコールを使用したページのロック

download PDF

リアルタイム mlock() システムコールは、addr パラメーターを使用してアドレス範囲の開始を指定し、len を使用してアドレス空間の長さをバイト単位で定義します。この alloc_workbuf() 関数はメモリーバッファーを動的に割り当ててロックします。メモリー割り当ては、posix_memalig() 関数によって行われ、メモリー領域がページに整列されます。free_workbuf() 関数は、メモリー領域のロックを解除します。

前提条件:

  • root 権限、または大きなバッファーで mlockall() または mlock() を使用するための CAP_IPC_LOCK 機能を持っている。

手順

  • mlock() システムコールでページをロックするには、次のコマンドを実行します。

    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/mman.h>
    
    void *alloc_workbuf(size_t size)
    {
      void ptr;
      int retval;
    
      // alloc memory aligned to a page, to prevent two mlock() in the same page.
      retval = posix_memalign(&ptr, (size_t) sysconf(_SC_PAGESIZE), size);
    
      // return NULL on failure
      if (retval)
        return NULL;
    
      // lock this buffer into RAM
      if (mlock(ptr, size)) {
        free(ptr);
        return NULL;
      }
        return ptr;
     }
    
    void free_workbuf(void *ptr, size_t size) {
      // unlock the address range
      munlock(ptr, size);
    
      // free the memory
      free(ptr);
    }

検証

リアルタイムの mlock() および munlock() 呼び出しは、成功すると 0 を返します。エラーの場合は、-1 を返し、エラーを示す errno を設定します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.