1. 스레드
- 프로세스의 실행 가능한 가장 작은 단위
- 프로세스는 여러 스레드를 가질 수 있다
- 코드, 데이터, 스택, 힙을 각각 생성하는 프로세스와는 달리 스레드는 코드, 데이터, 힙은 스레드 끼리
서로 공유하고 그 외의 영역은 각각 생성됨
2. 멀티스레딩
- 프로세스 내 작업을 여러개의 스레드, 멀티스레드로 처리하는 기법
- 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다
- 예) 웹 요청을 처리할 때 새 프로세스를 생성하는 대신 스레드를 사용하는웹 서버의 경우 훨씬 적은 리소스를
소비하며 한 스레드가 중단되더라도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리 가능
- 동시성에도 큰 장점이 있다
- 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 스레드로 이루어져있는 프로세스에 영향을
줄 수 있는 단점이 있다
* 동시성 : 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것
- 멀티스레드의 예로는 웹 브라우저의 렌더러 프로세스를 들 수 있다 이 프로세스 내에는 아래와 같은 스레드가 존재
* 메인 스레드 : 일당백 스레드
* 워커 스레드 : 조수 스레드
* 컴포지터 스레드 : 레이어를 합성하는 스레드
* 레스터 스레드 : 화면을 픽셀로 변환하는 스레드
3. 공유 자원 (shared resource)
- 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의
자원이나 변수등을 의미
- 공유 자원을 두개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁상태(race condition)라고 한다
- 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영항을 줄 수 있는 상태
- 예) 아래와 같이 종선코인 100개가 있다고 했을 때 프로세스 A 와 프로세스 B 가 동시에 접근하여 타이밍이
서로 꼬여 정상 결과값은 300인데 200이 출력됨
4. 임계 영역 (critical section)
- 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서등의 이유로 결과가 달라지는 코드 영역
- 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세가지고 있고 이 방법 모두 상호 배제, 한정 대기,
융통성이란 조건을 만족한다
- 토대가 되는 메커니즘은 잠금이다
- 예) 임계 영역을 화장실이라고 가정하면 화장실에 A 라는 사람이 들어간 다음 문을 잠급니다 그리고
다음 사람이 이를 기다리다 A 가 나오면 화장실을 쓰는 방법
* 상호 배제 : 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다
* 한정 대기 : 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안된다
* 융통성 : 한 프로세스가 다른 프로세스의 일을 방해해서는 안된다
1) 뮤텍스 (mutex)
- 프로세스나 스레드가 공유 자원을 lock( )을 통해 잠금 설정하고 사용한 후에는 unlock( )을 통해 잠금 해제하는 객체
- 잠금이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고 해제는 그와 반대
- 잠금 또는 잠금 해제라는 상태만을 가진다
2) 세마포어 (semaphore)
- 일반화된 뮤텍스
- 간단한 정수 값과 두가지 함수 wait (P 함수라고도 함) 및 signal (V 함수라고도 함)로 공유 자원에 대한 접근을 처리
- wait( )는 자신의 차례가 올 때까지 기다리는 함수, signal( ) 은 다음 프로세스로 순서를 넘겨주는 함수
- 프로세스나 스레드가 공유 자원에 접근하면 세마포어에서 wait( ) 작업을 수행하고 공유자원을 해제하면
세마포어에서 signal( ) 작업을 수행
- 세마포어에는 조건 변수가 없고 프로세스나 스레드가 세마포어 값을 수정할 때 다른 프로세스나 스레드는
동시에 세마포어 값을 수정할 수 없다
(1) 바이너리 세마포어
- 0과 1의 두가지 값만 기잘 수 있는 세마포어
- 구현의 유사성으로 인해 뮤텍스는 바이너리 세마포어라고 할 수 있지만 엄밀히 말하면 뮤텍스는
잠금을 기반으로 상호배제가 일어나는 잠금 메커니즘이고, 세마포어는 신호를 기반으로 상호배제가
일어나는 신호메커니즘
- 신호 메커니즘은 휴대폰에서 노래를 듣다가 친구로부터 전화가 오면 노래가 중지되고 통화처리 작업에
관한 인터페이스가 등장하는 것
(2) 카운팅 세마포어
- 여러개의 값을 가질 수 있는 세마포어
- 여러 자원에 대한 접근을 제어하는데 사용됨
3) 모니터
- 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유자원을 숨기고 해당 접근에 대해
인터페이스만 제공함
- 아래 그림처럼 모니터는 모니터큐를 통해 공유자원에 대한 작업들을 순차적으로 처리
- 모니터는 세마포어보다 구현하기 쉬우며 모니터에서 상호배제는 자동인 반면, 세마포어에서는
상호 배제를 명시적으로 구현해야 하는 차이점이 있다
'CS 전공지식' 카테고리의 다른 글
24.01.30 JVM 과 바이트 코드 (1) | 2024.01.30 |
---|---|
24.01.26 CPU 스케쥴링 알고리즘 (2) | 2024.01.26 |
24.01.24 프로세스 2 (1) | 2024.01.24 |
24.01.22 비선형 자료 구조 2 (0) | 2024.01.22 |
24.01.19 비선형 자료 구조 1 (0) | 2024.01.19 |