728x90
프로세스 간 통신
: 프로세스는 시스템 내에서 독립적으로 실행되기도 하고 데이터를 주고받으며 협업하기도 함
- 프로세스 내부 데이터 통신 : 하나의 프로세스에 2개 이상의 스레드가 존재하는 경우의 통신, 전역변수, 파일 이용
- 프로세스 간 데이터 통신 : 같은 컴퓨터에 있는 여러 프로세스끼리 통신, 공용파일, 파이프 이용
- 네트워크를 이용한 데이터 통신 (= 네트워킹) : 여러 컴퓨터가 네트워크로 연결된 경우, 소켓 이용
- 프로세스 간 통신 분류
분류 방식 | 종류 | 설명 | 예 |
통신 방향 | 양방향 통신 | 데이터를 동시에 양방향으로 전송할 수 있는 구조 | 소켓 |
반양방향 통신 | 데이터를 양방향으로 전송할 수 있지만 동시 전송은 불가 | 무전기 | |
단방향 통신 | 데이터를 한쪽 방향으로만 전송할 수 있는 구조 | 전역 변수, 파일, 파이프 | |
통신 구현 방식 | 대기가 있는 통신 | 동기화 지원, 데이터를 받는 쪽은 대기 상태에 머물러 있음 | 파이프, 소켓 |
대기가 없는 통신 | 동지화 미지원, 바쁜 대기 사용하여 데이터 도착 여부 확인 | 전역 변수, 파일 |
* 바쁜 대기 (busy waiting) : 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것 (데이터를 받는 쪽에서 데이터가 입력 되었는지 계속 확인해야 하는 상황 등)
* 동기화 (synchronization) : 바쁜 대기 문제를 해결하기 위해 데이터가 도착했음을 알려줌
프로세스 간 통신의 종류
- 전역 변수를 이용한 통신
- 공동으로 관리하는 메모리를 사용하여 데이터를 주고 받음
- 직접적으로 관련이 있는 프로세스 간 사용
- 동기화 문제 : 전역 변수의 값이 변할 때까지 바쁜 대기를 돌면서 계속 주시해야 함
- 파일을 이용한 통신
- 파일 열기 : open("com.txt", O_RDWR)
- 사용하고자 하는 파일이 있는지, 파일이 있다면 쓰기 권한이 있는지 확인
- 정상적으로 파일을 사용할 수 있다면 fd를 반환
- fd (file descriptor, 파일 기술자) : 해당 파일에 접근할 수 있는 일종의 열쇠
- O_RDWR : 읽기, 쓰기 작업을 하겠다는 표시
- O_RDONLY : 읽기 전용으로 파일을 열겠다는 표시
- 쓰기 연산 : write(fd, "Test", 5)
- com.txt 파일에 Test라는 문자열을 씀
- Test의 크기가 5B(문자열 끝을 알리는 null 포함)이기 때문에 5라고 명시
- 읽기 연산 : read(fd, buf, 5)
- com.txt 파일에서 5B를 읽어 변수 buf에 저장
- 파일 닫기 : close(fd)
- 부모-자식 관계 프로세스 간 통신에 많이 사용
- 운영체제가 동기화 제공x : 부모 프로세스가 wait() 함수 이용하여 자식 프로세스의 작업이 끝날 때까지 기다렸다가 작업 시작
- 파이프를 이용한 통신
- 운영체제가 제공하는 동기화 통신 방식
- open() 함수로 기술자를 얻고 작업한 후 close() 함수로 마무리
- 단방향통신이기 때문에 양방향 통신을 하려면 파이프가 2개 필요
- 이름 없는 파이프 : 일반적인 파이프, 서로 관련 있는 프로세스 간 통신에 사용
- 이름 있는 파이프 : FIFO라 불리는 특수 파일을 이용하여 서로 관련 없는 프로세스 간 통신에 사용
- 소켓을 이용한 통신
- 네트워킹 상황에서의 통신은 원격 프로시저 호출이나 소켓을 사용
- 프로시저 호출 : 한 컴퓨터에 있는 함수 호출하는 것
- 원격 프로시저 호출 : 다른 컴퓨터에 있는 함수를 호출하는 것, 소켓을 이용하여 구현
- 소켓을 프로세스 동기화를 지원하므로 바쁜 대기를 하지 않아도 됨
- 양방향 통신 가능
* 정리
부모-자식 관계로 연결된 프로세스 | 전역 변수, 파일, 이름 없는 파이프 |
서로 독립적인 프로세스 | 이름 있는 파이프 |
서로 다른 시스템에 있는 프로세스 | 소켓 |
- 프로세스 간 통신은 읽기와 쓰기 연산으로 구현할 수 있음
728x90
'CS > Operating System' 카테고리의 다른 글
[OS] 교착 상태 (0) | 2021.12.09 |
---|---|
[OS] 임계구역, 임계구역 해결 (0) | 2021.12.06 |
[OS]CPU 스케줄링 알고리즘 (0) | 2021.12.02 |
[OS] CPU 스케줄링 (0) | 2021.12.02 |
[OS] 스레드 (0) | 2021.11.02 |
댓글