суббота, 11 октября 2008 г.

Что такое /dev/shm?

Если в своей Linux системе вы посмотрите на вывод команды mount, то в одной из строк скорее всего вы увидите что-то вроде:
tmpfs on /dev/shm type tmpfs (rw)

Многие знают, что такое tmpfs, и даже используют эту файловую систему размещающую данные в памяти (например, монтируя ее в /tmp), но наверняка не многие знают зачем она смонтирована именно в /dev/shm? Что за странное место для временного хранилища?

Название /dev/shm наводит на мысль о механизме межпроцессного взаимодействия IPC shared memory. Но нетрудно убедиться, что для привычного System V IPC эта файловая система не требуется. Вызов shmget, например, не обращается к файловой системе, пространство имен поддерживается ядром. Так зачем /dev/shm? Оказывается, в glibc, кроме System V shared memory IPC есть реализация POSIX IPC. И вот эта реализация и использует /dev/shm. Убеждаемся в этом:

peter@crashed:/tmp$ vim test.c

#include
int main(int argc, char **argv)
{
shm_open("xxx", 0, 0);
}

peter@crashed:/tmp$ gcc test.c -lrt
peter@crashed:/tmp$ strace -e open ./a.out
...
open("/dev/shm/xxx", O_RDONLY|O_NOFOLLOW|O_CLOEXEC) = -1 ENOENT (No such file or directory)

4 комментария:

Анонимный комментирует...

почему нет ни одного коммента? отличный пост, спасибо!

**некрокомментер**

Анонимный комментирует...

Спасибо! Коротко и ясно.

Анонимный комментирует...

Зачем пустой #include? Если не нужен, то можно его вообще опустить. Без инклудинга компилит нормально.
PS: Считаю, что критика это хорошо - она помогает достичь совершенства :)

Анонимный комментирует...

Ой, а у нас на /dev/shm 16 гиг свободно! Можно я туда бекапы положу?

//bash

Архив блога