- IPC 기법을 온전히 이해하기 위해서는 코드를 기반한 이해가 가장 적합하다.
- 이를 위해서는 C언어 기반의 지식을 알고 있어야 하고, 실제로 IPC 기법을 구현한 코드를 이해하기는 그 복잡성으로 인해 쉽지않다.
- 그러므로 이번 포스팅에서는 각 IPC 기법의 특징과 개념을 이해하는 것에 중점을 두자.
1. File 사용 기법
- shared.txt와 같은 파일에 현재 커널 영역의 상태 정보를 기입한다.
- 통신이 필요한 프로세스의 상태정보를 알기위해 shared.txt 파일을 읽고 확인하다.
- 이 과정을 반복한다.
a) File 사용기법을 잘 사용하지 않는 이유
- 프로세스에서 통신이 필요할 때마다 매번 shared.txt 파일을 읽어야 한다.
- 프로세스의 커널 영역의 상태정보가 변할 때마다 해당 파일을 update 해야한다.
- 그러므로 시간이 오래 걸린다.
2. 파이프 기법
- fork() 메소드를 이용해 자식 프로세스를 만들었을 때, 부모와 자식 프로세스 간의 통신을 위해 사용하는 기법
- 단방향 통신이 특징이다.
a) fork() 메소드란?
- 시스템 콜의 한 종류
- 어떤 프로세스를 복제하여 자식 프로세스를 만드는 기능
b) 파이프 통신의 예시
c) 파이프 코드 예제를 통한 이해
char * msg = "Hello Child Process!";
int main()
{
char buf[255];
// 아래에서 부모 프로세스에서 입력된 msg의 값이 buf라는 문자열에 넘어간다.
int fd[2], pid, nbytes;
// fd라는 배열의 크기를 반드시 2(= fd[0], fd[1])로 지정해야 한다.
if (pipe(fd) < 0) // pipe(fd)로 파이프를 생성한다.
exit(1);
pid = fork(); // 부모 프로세스를 기반으로 자식 프로세스 생성
if (pid > 0) { // pid = process id
// 부모 프로세스는 pid가 0보다 크고, 자식프로세스의 pid는 0이다.
write(fd[1], msg, MSGSIZE);
// write라는 시스템 콜을 이용한다.
// 부모 프로세스에서는 코드(=msg)를 작성(write)만 할 수 있다.
// 반드시 fd[1] 배열에 작성해야 한다.
exit(0);
}
else { // 자식 프로세스의 경우 = 자식프로세스의 pid는 0이기 때문
nbytes = read(fd[0], buf, MSGSIZE);
// read 라는 시스템 콜을 사용한다.
// 자식 프로세스에서는 부모 프로세스에 있는 코드를 읽기(read)만 가능하다.
// 반드시 fd[0]을 호출해야 부모 프로세스에서 작성된 코드를 읽을 수 있다.
// 부모 프로세스에서 fd[1]에 담긴 내용(= msg)을 자식 프로세스의 fd[0]에 buf를 통해 읽을 수 있다.
// 자식 프로세스가 부모 프로세스의 코드를 읽는 이 시점에서 통신이 구현되는 것이다.
printf("%d %s\n", nbytes, buf);
exit(0);
}
return 0;
}
d) 파이프 기법 요약
- 부모 프로세스는 fd[1]과 write()라는 시스템 콜을 이용하여 프로세스 내부의 코드를 작성할 수 있다.
- 자식 프로세스는 fd[0]과 read()라는 시스템 콜을 이용하여 부모 프로세스의 코드를 읽어올 수 있다.
- 자식 프로세스에서 부모 프로세스의 코드르 읽어오는 그 지점이 통신이 이루어지는 시점이다.
- 파이프 기법이 단방향 통신인 이유는 부모 프로세스는 작성(write)만, 자식 프로세스는 읽기(read)만 할 수 있기 때문이다.
- 부모 프로세스에서 자식 프로세스로 전달되는 내용 또는 데이터는 커널영역 어딘가에 존재한다.
'컴퓨터공학기초 개념 > 운영체제' 카테고리의 다른 글
21. 프로세스 - IPC기법(공유메모리) (0) | 2021.04.26 |
---|---|
20. 프로세스 - IPC 기법(메세지 큐) (0) | 2021.04.23 |
18. 프로세스 - IPC의 개념 (0) | 2021.04.21 |
17. 프로세스 구조 - 컨텍스트 스위칭(context switching) (0) | 2021.04.20 |
16. 프로세스 구조(4) - BSS와 Data (0) | 2021.04.15 |
댓글