-
통신
프로세스 간 통신의 종류는 다음과 같다
- 프로세스 내부 데이터 통신
2개 이상의 스레드가 존재하는 경우 스레드 간의 통신을 의미한다.
전역 변수나 파일을 이용하여 데이터를 주고 받는다. - 프로세스 간 데이터 통신
공용 파일 또는 운영체제가 제공하는 파이프를 사용하여 데이터를 주고 받는다. - 네트워크를 이용한 데이터 통신
컴퓨터 간의 통신을 의미한다.
소켓을 이용하여 데이터를 주고 받는다.
통신 방향에 따른 분류는 다음과 같다
- 양방향 통신
데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조.
소켓 통신이 이에 해당. - 단양방향 통신
데이터를 양쪽 방향으로 전송할 수 있지만, 동시에 양쪽 방향으로 전송은 불가능한 구조.
무전기가 이에 해당. - 단방향 통신
데이터를 한 쪽 방향으로만 전송할 수 있는 구조.
프로세스 간 통신에서 전역 변수와 파이프가 이에 해당.
- 전역 변수를 이용한 통신
fork() 시스템 콜로 프로세스를 복제한 뒤,
한 프로세스에서 전역 변수에 데이터를 쓰면, 다른 프로세스에서 데이터를 읽는 통신 방법.
운영체제가 동기화를 따로 제공하지 않는다.
- 파일을 이용한 통신
open() 시스템 콜로 파일을 생성하고 파일 지시자(fd)를 받는다.
이후, 한 프로세스에서 write(fd)로 데이터를 쓰면, 다른 프로세스에서 read(fd)로 데이터를 읽는 통신 방법.
통신을 마친 후에는 close(fd)로 파일 지시자가 가리키는 파일을 닫아준다.
운영체제가 따로 동기화를 제공하지 않는다. 대신 wait() 시스템 콜 등을 사용해야 한다.
- 파이프를 이용한 통신
파일을 이용한 통신과 비슷하게 open()로 파이프를 열고, write(), read()로 데이터를 전송한다.
이 때, 파이프는 단방향으로만 데이터를 보낼 수 있기 때문에,
양방향 통신을 위해서는 2개 이상의 파이프를 열어야 한다. (하나는 읽기 전용, 하나는 쓰기 전용)
- 소켓을 이용한 통신
각 프로세스에서 소켓을 만들고, 연결 하고자 하는 소켓을 바인딩하면,
연결된 소켓끼리 데이터를 주고 받을 수 있다.
공유 자원
여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다.
공유 자원을 2개 이상의 프로세스가 동시에 접근하려고 하는 경우를 Race condition(경쟁 조건) 라고 한다.
공유 자원을 동시에 접근하는 것을 막고자 임계 구역을 설정하도록 프로그래밍 해야 한다.
임계 구역은 다음과 같은 조건이 반드시 지켜져야 한다.
- 상호 배제
한 프로세스가 임계 구역에 들어가면 다른 프로세스는 임계 구역에 들어갈 수 없다. - 한정 대기
어떤 프로세스라도 무한히 대기해서는 안 된다. - 진행의 융통성
한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다.
이 조건이 지켜지지 않을 경우 프로세스가 무한히 정지하는 Deadlock 상황이 발생할 수 있다.
임계 구역을 구현하기 위한 알고리즘으로는 피터슨 알고리즘, 데커 알고리즘이 있지만,
위 알고리즘은 2개의 프로세스만 적용할 수 있기에,
안정적이고, 여러 프로세스도 적용할 수 있는 세마포어 기법을 주로 사용한다.
세마포어
Semaphore(n) P(); // Critical section V();
n개의 프로세스만이 동시에 임계 영역에 접근을 가능하게 해준다.
모니터
작동원리는 세마포어와 비슷하나 결정적으로 다른 점은, 세마포어는 자원의 접근을 통제하는 것이고,
모니터는 공유 자원, 작업을 은닉화 하고, 해당 작업을 수행하게 해주는 메서드를 제공하는 식으로 제공한다.
즉, 객체지향적으로 임계 영역을 제공하는 것이다.
'대학 > 운영체제' 카테고리의 다른 글
물리 메모리 관리 (0) 2023.06.04 교착 상태 (Deadlock) (0) 2023.06.04 CPU 스케줄링 (0) 2023.04.16 프로세스와 스레드 (0) 2023.04.16 컴퓨터의 구조와 성능 향상 (0) 2023.04.16 - 프로세스 내부 데이터 통신