5

mlock()あるメモリを呼び出すshmctl(SHM_LOCK)ことと同じメモリを呼び出すことの違いは何ですか?

これらは私が確認できる唯一の違いです:

  • mlock()ロックされたすべてのページが戻ったときに読み込まれることを保証します。 shmctl(SHM_LOCK)スワップを防ぎますが、非常駐ページをプロアクティブにロードしません。
  • shmctl(SHM_LOCK)共有メモリセグメントでのみ使用できます。
  • shmctl(SHM_LOCK)SHM_LOCKED共有メモリセグメントのアクセス許可に追加のフラグ()を設定します。

他に違いはありますか?mlock()特に、共有メモリセグメントで使用しない理由はありますか?

4

1 に答える 1

2

まず、mlock()はRAM内のプロセスメモリをロックするためのシステムコールであり、shmctl(X、SHM_LOCK、Y)は共有(IPC)メモリを実行するために使用されます。これには、すべてのプロデューサーとコンシューマーからのより多くの制御が必要です。そのため、mlock()syscallは次のようにはるかに簡単です。

     int mlock(const void *addr, size_t len);

shmctlの操作ははるかに複雑ですが、次のようになります。

   int shmctl(int shmid, SHM_LOCK, struct shmid_ds *buf);

ここで、buf引数は、次のように定義されているshmid_ds構造体へのポインターです。

       struct shmid_ds {
           struct ipc_perm shm_perm;    /* Ownership and permissions */
           size_t          shm_segsz;   /* Size of segment (bytes) */
           time_t          shm_atime;   /* Last attach time */
           time_t          shm_dtime;   /* Last detach time */
           time_t          shm_ctime;   /* Last change time */
           pid_t           shm_cpid;    /* PID of creator */
           pid_t           shm_lpid;    /* PID of last shmat(2)/shmdt(2) */
           shmatt_t        shm_nattch;  /* No. of current attaches */
           ...
       };
于 2014-12-05T13:31:32.970 に答える