[운영체제] IPC(Inter Process Communication)
2022. 10. 7. 21:29ㆍCS/운영체제(OS)
메모리는 두 가지 영역, user space 와 kernel space 로 이루어져 있다.
user space
일반 프로세스들이 동작하는 공간, user space에 있는 일반 프로세스들은 kernel space에 접근하지 못한다. (system call을 통해 software interrupt를 일으키는 경우 제외)
kernel space
커널이 수행하는 코드가 있는 공간, 운영체제가 cpu를 잡고 작업할 때, kernel space에서 작업이 이루어짐
IPC(Inter Process Communication)
- 프로세스 간의 커뮤니케이션을 지원하기 위한 기법, 크게 두 가지가 있다.
- 굳이 IPC가 필요한 이유? 도입된 이유? 그냥 다른 process의 주소 공간에 접근하면 되잖아?
- → 프로세스 A가 프로세스 B의 스택 공간에 접근해 임의로 값을 바꾸는 경우가 생길 수 있음 → 따라서, OS에서는 다른 프로세스로의 접근을 막아두고 있음 → 결과적으로, 프로세스간 통신을 위해서는 직접 접근하는 것 외의 다른 방법이 필요함
- 인터넷에서 클라이언트와 서버의 통신을 IPC의 확장이라고 볼 수 있음
- 동기화 문제가 생길 수 있음
Message Passing
커널을 통해 메세지를 주고받는 방법
- direct communication: 통신하려는 프로세스의 이름을 명시적으로 표시 - 프로세스 a가 프로세스 b에게 보내는 메세지
- indirect communication: mailbox나 port를 통해서 메세지를 간접 전달 - 프로세스 a가 메세지를 mailbox에 넣어두면, 다른 프로세스가 그 메세지를 가져감 - 어떤 프로세스가 메세지를 가져갈지는 모름 → 1:N 커뮤니케이션에 유용
Shared Memory
프로세스 간에 일부 주소 공간을 공유
ipc 기법중 가장 속도가 빠르다 → 중개자가 없기 때문!
공유 메모리 공간을 만들기 위해서는, system call을 통해서, 커널의 도움을 받아야 한다.
Shared Memory는 어디에 생기는 것인가?
→ 여러 프로세스가 공유하는 shared memory는 물리적으로 같은 주소를 가진다. 하지만 논리적 주소는 각 프로세스마다 다를 수 있다.
위 그림에서는 PFN 4 블럭을 shared memory로 가진다.
Pipe
- 파이프 = 통신을 위한 메모리 버퍼
- 하나의 프로세스가 다른 프로세스로 직접 데이터를 전달하는 방식
- 데이터는 한 방향으로만 이동하기 때문에 양방향 통신을 위해선 파이프 두개를 사용해야 함
- 통신하려는 프로세스의 수가 많은 경우, 굉장히 많은 자원이 필요하다는 문제가 있음
파이프의 종류
- 익명 파이프
- 외부 프로세스에서 사용 불가능. 부모 - 자식 간에만 사용 가능. 왜? 이름을 모르기 때문에 외부에서 사용할 수 없음
- 서로의 존재를 모르는 프로세스들 사이에서 사용 불가능
- named pipe
- 외부 프로세스와의 통신을 위한 파이프
- 파이프에 이름이 있음
- 서로의 존재를 모르는 프로세스들 사이에서 사용 가능
그 외에도 소켓 방식이 있다.
'CS > 운영체제(OS)' 카테고리의 다른 글
[운영체제] 뮤텍스와 세마포어 (0) | 2022.10.07 |
---|---|
[OS] PCB와 Context Switching (0) | 2022.08.20 |
[OS] 프로세스와 스레드의 차이? (0) | 2022.08.20 |
[OS] 운영체제란? (0) | 2022.08.20 |
[운영체제] 가상메모리 (0) | 2022.08.07 |