OS ch5

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

임계구역으로 지정되어야할 코드 영역이 임계구역으로 지정되지 않아서 발생 ⇒ 한번에 한쓰레드만 업데이트하는 프로세스 동기화가 제대로 이루어지지 않는 경우

해결책

  1. Mutual exclusion (상호 배타): 데이터에 대한 업데이트는 오직 한 쓰레드만 진행 할 수 있도록

    ex) 부모가 입금을 하는 경우 자식은 출금하지 못함

  2. Progress (진행): 두 쓰레드에서 누가 먼저 들어갈 것인가에 대한 결정이 유한 시간내에 일어나야함

    ex) 부모님과 자식 중 누가 먼저 접근 할것인지

  3. Bounded Wating (유한대기): 쓰레드가 임계구역에 유한 시간내에 접근을 해야함 → 무한한 시간동안 아무도 접근하지 못하면 안됨!

프로세스/쓰레드 동기화

  • 임계구역 문제 해결
  • 프로세스 실행 순서 제어