2.10 쓰레드
Threds
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스의 특정한 수행 경로
- 프로세스가 할당받은 자원을 이용하여 실행하는 단위
Multithreds
- 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것
-
쓰레드가 빠른 시간 간격으로 switching 된다. → 여러 프로세스가 동시에 실행되는 것 처럼 보임
ex) 웹 브라우져 = 화면 출력하는 쓰레드 + 데이터 읽어오는 쓰레드
쓰레드 특징
- 단일 쓰레드 프로그램: 한 프로세스에 기본 1개의 쓰레드가 존재
- 다중 쓰레드 프로그램: 한 프로세스에 여러개의 쓰레드
쓰레드 구조
- 프로세스의 메모리 공간을 공유 (code, data)
- 프로세스의 자원 공유 (file, i/o)
- 공유하지 않는 것들: PC, SP, register, stack
- 프로세스의 스위칭 vs 쓰레드의 스위칭
- Ready 상태 B 프로세스가 존재, A 프로세스가 존재하는데 인터럽트 요청에 의해 서로 상태가 전이되는 상황
- CPU 내의 레지스터들에는 현재 실행중인 프로세스 관련 데이터가 들어가는데 B 프로세스가 Reday 상태가 되면 현재 레지스터에 저장된 A 프로세스의 데이터들을 메모리 공간에 저장하고 B 프로세스의 레지스터 값을 메모리에서 CPU 로 적재 → 프로세스의 컨텍스트 스위칭이 일어나는 동안 CPU 는 아무런 일을 할 수 없으며 CPU 에 많은 부하를 줌 = 멀티 프로세스 운영체제 단점
- 스레드가 프로세스보다 전환이 빠른 이유 → 컨텍스트 정보가 프로세스보다 작기 때문
- 참고: https://atin.tistory.com/618
3. 프로세스 동기화 (Process Synchronization)
3.1 Cooperation Process
프로세스
- independent: 다른 프로세스의 실행에 영향을 주거나 받을 수 없다.
- cooperating: 다른 프로세스의 실행에 영향을 주거나 받을 수 있다.
- 프로세스간의 통신: 전자우편, 파일 전송
- 자원공유: 메모리상의 자료, 데이터베이스 등
Process Synchronization
- Concurrent access to shared data my result in data inconsistency → 여러개의 프로세스가 동시에 접근하여 결과가 불일치하는 경우
- Orderly executing of cooperating processes so that data consistency is maintained → 데이터 일괄성을 유지하기 위해 프로세스를 순서대로 실행해야함
예제
부모님은 은행계좌에 입금; 자녀는 출금
입출금 동작은 독립적으로 발생함
void deposit(int amount) {
// 변경된 값을 임시변수에 저장하고
int temp = balance + amount;
System.out.print("+");// 시간 지연 후 balance = temp;// 잔액 업데이트
}
void withdraw(int amount) {
// 변경된 값을 임시변수에 저장하고
int temp = balance - amount;
System.out.print("-"); // 시간 지연 후
balance = temp;// 잔액 업데이트
}
- 잘못된 결과값이 나옴
-
이유
공통변수(=balance) 에 대한 동시 업데이트를 진행했기 때문
-
해결
한 번에 한 쓰레드만 업데이트하도록 수정 → 임계구역 문제
-
3.2 임계구역 문제
Critical section
- 둘이상의 쓰레드가 동시에 접근해서는 안되는 공유자원을 접근하는 코드의 일부를 말함
- 파일, 입출력, 공유 데이터 등 원자적으로 실행할 필요가 있는 명령문 또는 코드의 일부
Critical section problem
임계구역으로 지정되어야할 코드 영역이 임계구역으로 지정되지 않아서 발생 ⇒ 한번에 한쓰레드만 업데이트하는 프로세스 동기화가 제대로 이루어지지 않는 경우
해결책
-
Mutual exclusion (상호 배타): 데이터에 대한 업데이트는 오직 한 쓰레드만 진행 할 수 있도록
ex) 부모가 입금을 하는 경우 자식은 출금하지 못함
-
Progress (진행): 두 쓰레드에서 누가 먼저 들어갈 것인가에 대한 결정이 유한 시간내에 일어나야함
ex) 부모님과 자식 중 누가 먼저 접근 할것인지
-
Bounded Wating (유한대기): 쓰레드가 임계구역에 유한 시간내에 접근을 해야함 → 무한한 시간동안 아무도 접근하지 못하면 안됨!
프로세스/쓰레드 동기화
- 임계구역 문제 해결
- 프로세스 실행 순서 제어