티스토리 뷰
프로세스와 스레드 차이에 대해 간단히 알아보고 나서 IPC에 대해서 깊게 알아봐야겠다고 느꼈습니다.
Process와 Thread의 차이는 무엇일까?
Process 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미합니다. 메모리에 올라와 실행되고 있는 프로그램의 독립적인 개체인 셈입니다. 운영체제로부터 시스템 자원을 할당받는
kkoon9.tistory.com
먼저 IPC에 대한 내용입니다.
IPC란?
프로세스들은 서로 독립되어 있지만 경우에 따라서는 서로 협력할 때 업무의 효율성이 증진될 수 있습니다.
따라서, OS는 프로세스 간의 협력 메커니즘을 제공하는데, 대표적인 메커니즘이 바로 IPC입니다.
IPC는 Inter-Process Communication의 약자로, 말 그대로 프로세스 간에 발생하는 통신을 의미합니다.
이러한 통신에서는 의사소통 기능과 함께 동기화를 보장해 주어야 하는데, 대표적인 방법으로는 메시지 패싱 방식과 공유 메모리 방식이 있다고 이전 포스팅에서 언급했습니다.
IPC를 공부하면서 생긴 의문을 답하는 형식으로 정리해봤습니다.
🤔 왜 동기화를 보장해줘야 하지?
공유 데이터를 다른 여러 프로세스들이 사용하면 데이터의 불일치가 발생할 수 있기 때문입니다.
🤔 메시지 패싱과 공유 메모리 방식의 차이점은?
프로세스 사이에 공유 변수를 사용 여부에 있습니다.
🤔 메시지 패싱 방식이 뭐야?
메시지 전달 방식은 공유 변수 없이 메시지를 주고받으면서 통신하고, 커널이 그 매개체가 됩니다.
메시지 통신하는 시스템은 커널에 의해 send(message)와 receive(message)라는 두 가지 연산을 제공받습니다.
이 두 연산을 통해 프로세스는 전달할 메시지를 OS에게 시스템 콜 방식으로 요청해 전달할 수 있습니다.
메시징 패싱 방식은 직접 통신과 간접 통신으로 이루어져 있습니다.
🤔 직접 통신과 간접 통신 차이점은?
메시지의 전송 대상이 다릅니다.
- 직접 통신의 전송 대상 : 다른 프로세스
- 간접 통신의 전송 대상 : 메일 박스
전송 대상이 다르다는 것을 제외하면 실제 메시지 전송이 이루어지는 내부적인 구현 방식은 동일한 방식으로 이루어집니다.
직접 통신에서의 커뮤니케이션 링크는 자동적으로 생성되고, 하나의 링크는 정확히 한쌍의 프로세스에게 할당됩니다.
간접 통신에서는 메시지를 메일 박스 또는 포트로부터 전달받습니다.
각 메일 박스에는 고유의 ID가 있고 메일 박스를 공유하는 프로세스들만 서로 통신하게 됩니다.
간접 통신에서의 커뮤니케이션 링크는 프로세스 간에 메일 박스를 공유하는 경우에만 생성됩니다.
하나의 링크가 여러 프로세스들에게 할당될 수 있으며 각 프로세스의 쌍은 여러 링크를 서로 공유할 수 있습니다.
🤔 P1, P2, P3가 메일 박스 A를 공유하는 경우 P1이 메시지를 보냈다면 어느 프로세스가 메시지를 받게 되는가?
이러한 의문 사항을 해결하기 위한 방법 3가지가 존재합니다.
- 2개의 프로세스에게만 링크를 할당하는 방법
- 링크에 대한 receive() 연산을 매 시점 하나의 프로세스만이 수행할 수 있는 방법
- 시스템이 메시지 수신자를 임의로 결정해 누가 메시지를 받았는지 송신자에게 통신해주는 방법
🤔 공유 메모리 방식이란?
프로세스들이 주소 공간의 일부를 공유하는 방식입니다.
공유 메모리를 사용하는 시스템 콜을 지원해, 서로 다른 프로세스들이 그들의 주소 공간 중 일부를 공유할 수 있도록 합니다.
이 공유된 주소 공간은 커널이 책임지지 않기 때문에 데이터 일관성 문제가 유발될 수 있습니다.
즉, 프로세스들끼리 직접 공유 메모리 접근에 대한 동기화 문제를 책임져야 합니다.
프로세스의 동기화 관련해서는 다른 포스팅에서 자세히 다루겠습니다.
'Computer Science > OS' 카테고리의 다른 글
프로세스 심화 - 스케줄러 (0) | 2022.12.30 |
---|---|
프로세스 심화 - 프로세스의 상태 (0) | 2022.12.29 |
프로세스 심화 - 컨텍스트 스위치(문맥 교환) (0) | 2022.12.28 |
운영체제란 무엇일까? (0) | 2019.09.26 |
Process와 Thread의 차이는 무엇일까? (0) | 2019.09.26 |
- Total
- Today
- Yesterday
- Olympiad
- 이팩티브 자바
- Kotlin
- 백준
- C++
- 이펙티브 자바
- AWS
- Spring Boot
- 프로그래머스
- Algorithm
- 알고리즘
- 테라폼
- JPA
- 정규표현식
- 디자인 패턴
- 클린 코드
- Effective Java
- 코테
- programmers
- node.js
- Java
- 객체지향
- Spring
- BAEKJOON
- MSA
- 디자인패턴
- BOJ
- kkoon9
- 클린 아키텍처
- kotest
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |