반응형
IPC 네임스페이스
- IPC 네임스페이스는 프로세스가 자신의 System V IPC 객체와 POSIX 메시지 큐 자원을 가질 수 있게 한다. 그리고 `clone()` 또는 `unshare()` 시스템 호출을 사용할 때 `CLONE_NEWIPC`플래그를 설정하여 생성한다.
- System V IPC 객체: 공유 메모리(shared memory), 세마포어(semaphore)
- 공유 메모리: 여러 프로세스가 동일한 메모리 영역에 연결하여 메모리 변경 사항에 액세스할 수 있다.
- 세마포어: 프로세스를 동기화하며 공유 메모리 영역에 대한 동시 액세스를 제어하는데 사용된다.
- POSIX 메시지 큐: System V 메시지 큐의 새로운 버전. 함수의 이름과 종류는 다르지만 하는 일은 비슷하고 비교적 최근의 표준인 만큼 System V 기반의 메시지 큐 함수보다, 더 직관적이고 쓰기 편함.
- 메시지 큐: 프로세스로 하여금 모든 프로세스가 메시지를 받을? 검색할(retrieve) 수 있는 큐에 메시지를 넣는데 사용된다.
- System V IPC 객체: 공유 메모리(shared memory), 세마포어(semaphore)
- A라는 IPC 네임스페이스에서 생성된 System V IPC 객체(공유 메모리, 세마포어, 메시지 큐)는 A 네임스페이스에 속한 프로세스들에게만 보인다. 다른 IPC 네임스페이스의 프로세스들은 A 네임스페이스 안에 있는 객체들을 볼 수 없다.
- 프로세스 간 데이터 교환을 격리하고 프로세스와 쓰레드 간에 작업을 동기화하는 기능을 제공
- IPC(Interprocess Communication): 프로세스간 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로
- IPC에는 두 가지 표준이 있는데, System V IPC는 오래된 버전이고 POSIX IPC는 최근에 개발됐다.
System V IPC vs POSIX IPC
Question
- System V IPC와 POSIX IPC의 차이점은 무엇인가?
- 왜 2개의 표준이 있나?
Answer
- 우선 모두 세마포어, 공유 메모리, 메시지 큐를 동일하게 가지고 있다. 한가지 주목할만한 차이점은 POSIX가 메시지 큐에 대해 일부 알림(notification) 기능을 제공한다는 것이다(System V는 알림 기능을 제공하지 않는다). 또 한가지, System V IPC는 완전히 구현되었지만 POSIX IPC는 완전하게 구현되지는 않았다.
- POSIX IPC는 System V IPC를 한동안 사용한 뒤 설계되었다. 간단히 말하자면, System V IPC를 개선하여 POSIX IPC를 만든 것이다. 그러나 주의해야 할 것은 무조건 POSIX IPC의 성능이 System V IPC의 성능보다 무조건 좋은 것은 아니다.
IPC
IPC의 기초 모델 2가지
- Shared memory
- 협력 프로세스(쓰레드)들에 의해 공유되는 메모리 영역이 구축된다(establish).
- 프로세스들은 공유 영역을 읽거나 씀으로써 정보들을 교환한다.
- `shared memory`는 `message passing`보다 빠를 수 있다. 왜냐하면 `message-passing`시스템은 전형적으로 시스템 콜을 사용하여 구현하고, 따라서 커널 개입이라는 더 많은 시간이 소요되는 작업이 필요하다.
- `shared memory`시스템에서, 시스템 콜은 단지 `shared memory`영역을 구축하는데만 필요하다. 일단 영역이 구축되면, 모든 접근은 일상적인 메모리 접근으로 취급되며, 커널의 도움은 필요하지 않다.
- Message passing
- 통신은 협력 프로세스들 사이에서 교환되는 메시지에 의해 이루어진다.
- 작은 양의 데이터를 교환할 때 유용하다. 왜냐하면 어떤 충돌도 피할 필요가 없기 때문이다.
- `message passing`은 `shared memory`보다 구현하기 쉽다.
반응형
'운영체제 > LINUX' 카테고리의 다른 글
[Linux] 사용자(User) 네임스페이스 (0) | 2019.12.16 |
---|---|
[Linux] PID 네임스페이스 (0) | 2019.12.14 |
[Linux] UTS 네임스페이스 (0) | 2019.12.13 |
[Linux] 마운트 네임스페이스 (Mount namespace) 2 (0) | 2019.10.24 |
[Linux] 마운트 네임스페이스(Mount namespace) 1 (0) | 2019.10.24 |