%EA%B0%80%20ipcs%EC%97%90%20%EB%82%98%EC%97%B4%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
저는 Linux 공유 메모리에 대해 조사하던 중 우연히 이 명령을 발견했습니다 ipcs
.
매뉴얼 페이지에서:
ipcs - provide information on ipc facilities
ipc
매뉴얼 페이지에는 설명되어 있지 않지만 프로세스 간 통신을 의미할 가능성이 높습니다. 이는 공유 메모리 세그먼트, 메시지 대기열 및 세마포어 배열과 같이 나열되는 정보의 맥락에서도 의미가 있습니다.
ipcs
linux/unix의 모든 것이 "파일"이거나 적어도 파일과 유사한 객체이기 때문에 ? 에 나열된 요소의 "파일"은 어디에 있는지 궁금합니다.
mkfifo
에 나열되지 않은 이름의 파이프가 생성되는 이유는 무엇입니까 ipcs
? 내가 이해하는 한 fifo는 대기열입니다. 에 의해 생성된 명명된 파이프는 에 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가 아니며 "파일"이 아니라는 이유로 널리 비판을 받았습니다.
명명된 파이프와 메시지 큐가 통합되지 않은 이유에 대한 설명은 없지만 동일한 방식으로 시작되었을 것이라고 확신합니다. 한 그룹은 명명된 파이프를 원했기 때문에 그냥 가서 그렇게 했습니다.