프로세스
-
메모리에 올라와 실행되고 있는 프로그램의 인스턴스
-
운영체제로부터 시스템 자원을 할당받는 작업의 단위
시스템 자원
- CPU 시간
- 실행되기 위해 필요한 주소 공간
- 독립된 메모리 영역 (Code, Data, Stack, Heap)
-
각 프로세스는 최소 1개의 스레드를 가지며, 다른 프로세스의 자원에 접근할 수 없다.
프로세스간 통신을 사용 (Pipe, File, Socket..)
멀티 프로세스
하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
하나의 운영체제 안에서 여러 프로세스가 실행되는 것
-
장점
여러 자식 프로세스 중 하나에 문제가 생기면 해당 프로세스만 죽는다.
-
단점
Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되면서 오버헤드가 발생한다.
스레드
- 프로세스 내에서 실행되는 흐름의 단위
- 프로세스가 할당받은 자원을 사용
- 스레드는 프로세스에게 Stack을 할당받고 Code, Data, Heap 영역은 서로 공유한다.
멀티 스레드
하나의 응용프로그램을 여러 스레드로 구성하여 각 스레드가 각각 하나의 작업을 처리하는 것
-
장점
시스템 자원 효율성 증가
프로세스를 생성하면서 발생되는 자원을 할당하는 시스템 콜이 줄어들다.
시스템 처리량 증가
스레드 간 데이터를 주고 받는 것이 간단하고 작업량이 작어 Context Switching이 빠르다.
스레드는 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.
-
단점
주의 깊은 설계가 필요
디버깅이 어려움
공유 자원으로 인한 동기화 문제가 발생
하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
세마포어, 뮤텍스
여러 프로세스나 스레드가 공유 자원에 접근하는 것을 제어하기 위한 방법.
뮤텍스
하나의 스레드, 프로세스에 의해 소유될 수 있는 Key 기반으로 한 상호배제기법
뮤텍스는 임계영역에 들어갈 때 lock을 걸어 다른 프로세스와 스레드가 접근하지 못하도록 하고 임계영역에서 나와 해당 lock을 해제 한다.
lock을 건 스레드만이 lock 해제 가능
세마포어
현재 공유자원에 접근할 수 있는 스레드, 프로세스 수를 나타내는 값을 사용하는 상호배제기법
세마포어는 접근할 수 있는 최대 허용치만큼 스레드와 프로세스가 접근할 수 있다.
semWait : 세마포어의 값을 감소. 값이 음수가 되면 semWait을 호출한 대상은 블로킹 됨.
semSignal : 세마포어의 값을 증가. 값이 양수가 아니면 semWait에 의해 블로킹된 대상을 깨움.
락을 걸지 않은 스레드도 락을 해제 가능