2 분 소요

1. Thread 란?

Process 안에 있는 실행흐름 중에 하나
모든 Process는 한 개 이상의 Thread를 가진다

  • Process : Data, Heap, Code, Stack 공간
  • Thread : Stack 공간만 별도고 나머지 공간은 공유 한 프로세스 안에서 공유하는 공간이 많기 때문에
    Thread가 바뀌어도 Context Switching이 최소한으로 일어나서 성능에 좋다

PCB?

프로세스가 Context Switching이 일어날때 과부하가 걸리는 원인 중 하나는 PCB(Process Control Block)때문이다.
PCB란 운영체제가 프로세스를 제어하기 위해 프로세스의 상태정보를 저장하는 구조체이다.
Context Swithing을 하기 위해서 필요하고 다음과 같은 정보가 담겨져있다.

  • PID
  • 현재 프로세스 상태(Ready, Running, Blocking)
  • 다음 실행될 프로세스의 포인터
  • 스케쥴링 및 프로세스 우선순위

여러 Thread를 만드는 기법을 Multi Threading 기법이라고 한다.

       

2. Thread 동기화

Multi Thread를 사용하게 되면 공유메모리/자원을 사용하기 때문에 동기화가 필요    

2-1. 동기화를 하지 않을 경우 문제점

  • 경쟁상태(Race Condition) : 여러 프로세스/쓰레드가 공유자원에 동시 접근해서 결과값이 보장될 수 없는 상태
  • 교착상태(Deadlock) : 서로 상대방의 자원 또는 작업이 끝나기를 기다리고 있어서 무한으로 대기하는 상태
  • SpinLock : 임계영역에 lock이 걸려서 못들어가고 있는 상태로 루프를 반복하며 CPU를 점유하고 있는 상태
  • 기아상태 : 특정 프로세스의 우선순위가 낮아서 CPU에 올라가지 못하는 상태    

    2-2. 교착상태(Deadlock) 발생조건 및 해결방법

발생조건

4가지를 다 만족해야 발생

  1. 상호배제 : 한 Thread만 점유가능
  2. 점유대기 : 한 Thread가 점유한 상태면 다른 Thread는 대기해야 함
  3. 비선점 : 다른 Thread가 사용중이라면 해당 자원을 가져올 수 없음
  4. 순환대기 : 대기중인 Thread가 필요로 하는 자원이 Cycle 형태

   

해결

  1. 무시 : 아무조치 않함(발생확률이 적기 때문)
  2. 예방 : 4가지중 하나를 예방. 근데 비용이 비싸서 불가능
  3. 회피 : 자원이 모자라지 않도록 충분한 자원을 가진상태에서 자원을 할당해주는 은행원 알고리즘 활용
  4. 회복 : 데드락이 발생하면 OS가 주기적으로 검사 후 프로세스를 종료

   

2-2. 동기화 방식

  • 유저모드동기화 : 성능 이점, 기능 제한
    • 임계구역(critical section)
  • 커널모드동기화 : 기능 이점, 성능 저하
    • 뮤텍스기반, 세마포어 기반

> 임계구역

한번에 하나의 프로세스만 이용하도록 다른 프로세스의 접근을 제한하는 영역

> 뮤텍스

lock과 unlock을 통해서 한개의 Thread만이 임계영역에 들어가는 것을 허용

> 세마포어

임계영역에 들어갈 수 있는 Thread가 1개 이상

       

3. 프로세스 스케쥴링 기법

3-1. FCFS

First Come First Served의 약자로 CPU에 먼저 도착하는 순서대로 프로세스를 할당
큐와 비슷하게 FIFO 방식이다
처리가 긴 프로세스가 있다면 다른 프로세스들의 대기시간이 길어지는 단점    

3-2. SJF

Shortest Job First의 약자로 프로세스의 수행 시간이 짧은 프로세스 순서대로 CPU에 할당
짧은 것부터 들어가기 떄문에 최소의 평균대기 시간
하지만 수행시간이 긴 프로세스들은 기아현상이 발생할 수 있다.    

3-3. Round Robin

모든 프로세스들을 동일한 시간으로 쪼개서 돌아가면서 할당하는 방식.
할당시간이 끝나면 프로세스는 자동으로 선점당하고 Queue에 가장 뒤로 이동
SJF보다 평균소요시간이 길다    

3-4. Priority

우선순위 스케쥴링으로 특정 기준으로 프로세스에 우선순위를 부여해 CPU에 할당하는 방식
기아현상이 발생해서 에이징 기법으로 해결

에이징 기법이란 시간이 오래 지날수록 우선순위가 높아지는 방식

   

3-5. Multiple-Processor

CPU가 여러개 있을 때 어느 CPU에 할당할지 결정하는 스케쥴링

       

4. 비동기 vs Multi Thread

4-1. 동기와 비동기 프로그래밍

Synchronous 프로그래밍이란 함수가 순서대로 진행되는 것이다.
A함수의 처리가 끝나야 B함수가 시작된다.
Asynchrounous 프로그래밍이란 각 함수가 동시에 실행되는 것이다.
A함수의 처리가 오래 걸리면 A함수의 처리를 시켜놓음과 동시에 B함수의 처리도 동시에 한다.
non-blocking 방식이라고도 함    

4-2. 비동기 vs Multi Thread

멀티쓰레드는 비동기 프로그래밍을 하기 위한 수단이다
단일쓰레드로도 비동기 프로그래밍을 할 수 있다.
결론적으로 멀티쓰레딩은 작업자에 관한 것
비동기는 작업에 관한 것

       

5. Blocking vs Non-Blocking

코드의 실행 흐름 자체를 막을지 막지 않을지에 관한 것 어떤 함수를 들어갔을 때 해당 함수의 결과값을 기다리고 다음 함수가 시작되면 Blocking 기다리지 않고 바로 다음 함수가 시작되고 나중에 결과값을 받는 것이 Non-Blocking이다        

태그: ,

카테고리:

업데이트:

댓글남기기