저는 Linux 공유 메모리를 연구하다가 우연히 이 ipcs
명령을 발견했습니다.
매뉴얼 페이지에서:
ipcs - provide information on ipc facilities
ipc
매뉴얼 페이지에는 설명이 없지만 프로세스 간 통신을 나타낼 가능성이 높습니다. 이는 공유 메모리 세그먼트, 메시지 대기열 및 세마포 배열과 같이 나열되는 정보의 맥락에서도 의미가 있습니다.
ipcs
linux/unix의 모든 것이 "파일"이거나 적어도 파일과 유사한 객체이기 때문에 ? 에 나열된 요소에서 "파일"은 어디에 있는지 궁금합니다.
내가 만든 명명된 파이프가 mkfifo
에 나열되지 않는 이유는 무엇입니까 ipcs
? 내가 이해하는 바에 따르면 fifo는 대기열입니다. Named Pipe 생성은 mkfifo
메시지 큐 생성과 어떻게 다릅니 까 ipcmk
?
답변1
여기에는 몇 가지 질문이 있습니다.
- ipcs에 나열된 요소에 대한 파일은 어디에 있습니까?
때에 따라 다르지. 대기열은 가상 파일 시스템에 표시됩니다. mq_overview(7)에서:
Mounting the message queue file system
On Linux, message queues are created in a virtual file system. (Other implementations may also provide such a feature, but
the details are likely to differ.) This file system can be mounted (by the superuser) using the following commands:
# mkdir /dev/mqueue
# mount -t mqueue none /dev/mqueue
공유 메모리(shm_overview(7))
Accessing shared memory objects via the file system
On Linux, shared memory objects are created in a (tmpfs) virtual file system, normally mounted under /dev/shm. Since kernel
2.6.19, Linux supports the use of access control lists (ACLs) to control the permissions of objects in the virtual file sys-
tem.
세마포어(sem_overview(7))
Accessing named semaphores via the file system
On Linux, named semaphores are created in a virtual file system, normally mounted under /dev/shm, with names of the form
sem.somename. (This is the reason that semaphore names are limited to NAME_MAX-4 rather than NAME_MAX characters.)
Since Linux 2.6.19, ACLs can be placed on files under this directory, to control object permissions on a per-user and per-
group basis.
- 내가 만든 명명된 파이프가
mkfifo
에 나열되지 않는 이유는 무엇입니까ipcs
?
이에 대해서는 잘 모르므로 답변이 아닌 제 의견을 말씀드리겠습니다. 내 가정은 소켓과 마찬가지로 실제 파일 시스템에 존재하기 때문에 커널이 공유 메모리 세그먼트 및 메시지 대기열을 관리하는 방법과 다르게 관리된다는 것입니다.
- mkfifo로 생성된 명명된 파이프와 ipcmk로 생성된 메시지 큐의 차이점은 무엇입니까?
파이프와 메시지 큐의 주요 차이점은 파이프가 두 프로세스 간의 통신 채널일 뿐이라는 것입니다. 바이트 수준에서 작동합니다. 원하는 방식으로 읽고 쓸 수 있으며, 통신 프로토콜을 설계해야 합니다. 이는 엄격한 FIFO입니다. 다른 바이트보다 먼저 작성된 바이트는 항상 다른 쪽 끝에서 먼저 읽혀집니다. 메시지 대기열은 바이트가 아닌 메시지를 처리합니다. 일반적으로 덜 엄격한 FIFO입니다. 구현에 따라 다르지만 메시지 간 우선 순위 메커니즘을 지원할 수 있습니다.
어떤 면에서는 메시지 대기열이 더 많은 기능을 제공하지만 원하는 경우 메시지 대기열을 사용하여 FIFO를 구현할 수도 있고 그 반대의 경우도 마찬가지입니다.
답변2
ipcs
"System V IPC"라는 프로세스 간 통신 방식에 대해 알려드립니다. System V IPC는 현재 널리 무시되고 있지만분명 예전엔 안 좋아했는데. 분명히 초기에는 다양한 그룹이 필요한 것을 구현했으며누군가는 메시지 큐, 공유 메모리, 세마포어가 필요합니다..
이러한 IPC 방법은 Unixy가 아니며 "파일"이 아니기 때문에 널리 비판을 받고 있습니다.
명명된 파이프와 메시지 큐가 통합되지 않은 이유에 대한 설명은 없지만 그 기원은 동일할 것으로 확신합니다. 한 그룹은 명명된 파이프를 원했기 때문에 이를 선택했습니다.