일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 백트래킹
- 프로세스
- 스케줄링
- dfs
- 운영체제
- BOJ
- Brute Force
- 가상메모리
- Memory Management
- 구현
- 삼성기출
- segmentation
- higunnew
- ascii_easy
- samsung research
- 삼성리서치
- 백준
- 김건우
- exec
- 완전탐색
- 컴공복전
- Deadlock
- 시뮬레이션
- 동기화문제
- 데드락
- pwnable.kr
- paging
- fork
- 알고리즘
- BFS
- Today
- Total
gunnew의 잡설
5-3강. 프로세스 간의 협력 본문
프로세스 간 협력 |
원칙적으로 프로세스는 매우 독립적이다. 자식이 하나 생성되더라도 부모가 자식 프로세스를 먹여 살리는 것이 아니라 일단 생성만 되면 나머지 일은 자식 프로세스가 알아서 실행한다. 그러나 경우에 따라서는 프로세스가 협력을 해야만 효율적으로 실행되는 경우도 있을 것이다. 따라서 프로세스 간 협력 메커니즘이 존재한다. 그것을 IPC(Interprocess Communication)이라 한다. IPC에는 크게 두 가지 방법이 있다. 첫 번째는 message passing, 두 번째는 shared memory이다.
Message passing |
먼저 message passing은 프로세스 A가 프로세스 B와 서로 메시지를 주고받으며 실행되는 것이다. 그러나 프로세스는 원래 서로 독립적이기 때문에 자기 메모리 주소 공간만 볼 수 있으며 어떤 사용자 프로세스가 다른 사용자 프로세스에게 직접 메시지를 전달하는 방법은 원칙적으로는 존재하지 않는다. 따라서 커널을 통해 메시지를 전달한다. 프로세스 사이에 공유되는 변수를 사용하는 것도 아니기 때문에 메시지를 전달하는 것인데 이 마저도 커널을 통해야 한다는 것이다. 이 message passing은 전달받을 프로세스의 이름을 명시하느냐 않느냐에 따라서 또 두 가지 방법으로 나뉜다. 첫 번째는 Direct communication으로 이름을 명시하는 방법이며 두 번째는 Indirect communication으로 명시하지 않고 mailbox 혹은 port를 통해 간접적으로 전달하는 방법이다.
Shared Memory |
Message passing 외에도 shared memory라는 방법을 통해서도 프로세스의 협력이 이루어질 수 있다. 원칙적으로 프로세스는 독자적이기 때문에 메모리 주소 공간에서 공유하는 부분은 없으나 특별한 경우(이 경우에서는 프로세스 협력)를 위해 shared memory를 두어 일부 영역은 물리적으로 매핑이 되도록 겹쳐 놓은 것이다. 밑그림을 살펴보면 이해가 쉬울 것이다. 아, 물론 프로세스 생성 시 기본적으로 주소 공간은 서로 겹치지 않기 때문에 커널에게 shared memory를 사용하겠다는 system call을 해야 한다.
추가적으로 지난 4강에서 스레드에 대해 설명했었다. 스레드는 프로세스가 여러 개인 것이 아니라 프로세스 내의 CPU 수행 단위가 여러 개이다. 따라서 스레드들 간의 협력은 프로세스 간 협력은 아니지만, 스레드는 동일한 프로세스 내에 있기 때문에 협력이 쉽다.
본 글들은 이화여대 반효경 교수님 2014학년도 1학기 운영체제 강의를 기반으로 작성됩니다.
링크 : http://www.kocw.net/home/search/kemView.do?kemId=1046323
'Operating System' 카테고리의 다른 글
6-2강. CPU 스케줄링 알고리즘 (1) | 2020.01.26 |
---|---|
6-1강. CPU 스케줄링 (0) | 2020.01.24 |
5-2강. 프로세스와 관련한 시스템 콜 (2) | 2020.01.24 |
5-1강. 프로세스 관리(Process Management) (0) | 2020.01.23 |
4강. 스레드(Thread) (0) | 2020.01.22 |