Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux上的mlock()与shmctl(SHM_LOCK)?_Linux_Memory - Fatal编程技术网

Linux上的mlock()与shmctl(SHM_LOCK)?

Linux上的mlock()与shmctl(SHM_LOCK)?,linux,memory,Linux,Memory,在某些内存上调用mlock()与在同一内存上调用shmctl(SHM\u LOCK)有什么区别 以下是我能确定的唯一区别: mlock()保证返回时加载所有锁定的页面shmctl(SHM_LOCK)防止交换,但不会主动加载非驻留页面 shmctl(SHM\u锁)只能在共享内存段上使用 shmctl(SHM_LOCK)在共享内存段的权限上设置一个额外的标志(SHM_LOCK) 还有其他区别吗?特别是,有什么理由不在共享内存段上使用mlock()?首先,mlock()是锁定RAM中进程内存的系统

在某些内存上调用
mlock()
与在同一内存上调用
shmctl(SHM\u LOCK)
有什么区别

以下是我能确定的唯一区别:

  • mlock()
    保证返回时加载所有锁定的页面<代码>shmctl(SHM_LOCK)防止交换,但不会主动加载非驻留页面
  • shmctl(SHM\u锁)
    只能在共享内存段上使用
  • shmctl(SHM_LOCK)
    在共享内存段的权限上设置一个额外的标志(
    SHM_LOCK
还有其他区别吗?特别是,有什么理由不在共享内存段上使用
mlock()

首先,mlock()是锁定RAM中进程内存的系统调用,而shmctl(X,SHM_lock,Y)用于执行共享(IPC)内存,这需要所有生产者和消费者的更多控制,因此,这就是mlock()的原因系统调用更容易,因为:

     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 */
           ...
       };

我不确定,但似乎
mlock
shmctl
更严格。因此,它可能会施加降低效率的约束。