프로세스와 스레드

Jun·2022년 5월 11일
0

네이버 부스트캠프

목록 보기
10/21

1. 프로세스와 스레드

1.1 프로세스


  • 프로세스란

    • OS에서 메모리 영역을 할당받아 실행되는 독립적인 프로그램 인스턴스
    • 하나의 프로세스는 별도의 메모리 공간을 할당 받아 사용
    • 즉, 동적인 개념으로는 실행된 프로그램을 의미
  • 할당 받는 메모리 공간

    • 프로세스는 각각 독립된 메모리 영역 (code, data, stack, heap)을 할당받는다.
    • 프로세스는 기본적으로 최소 1개의 스레드(메인 스레드)를 가지고 있다.
    • 서로 다른 프로세스의 메모리 영역은 접근할 수 없다.
    • 다른 프로세스의 메모리 영역에 접근하려면 통신을 사용해야한다.

1.2 스레드


  • 스레드란

    • 프로세스 내에서 실행되는 여러 흐름의 단위
    • 프로세스가 할당받은 자원을 이용하는 실행 단위
  • 특징

    • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 나머지 영역은 공유한다.
    • 스레드는 한 프로세스 내의 주소 공간이나 자원을 같은 프로세스 내의 스레드끼리 공유한다.

1.3 멀티 프로세스


  • 멀티 프로세싱이란

    • 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것이다
  • 장점

    • 멀티 프로세싱은 프로세스간 공유하는 자원이 없기 때문에, 동일한 자원에 동시에 접근해서 발생하는 critical section문제(dead lock)가 발생하지 않는다.
  • 단점

    • 프로세스를 번갈아가면서 실행시키기 때문에 context switch 과정에서 오버헤드가 발생한다.

1.4 멀티 스레딩


  • 멀티 스레딩이란

    • 하나의 응용 프로그램을 여러 개의 스레드로 구성하고, 각 스레드가 하나의 작업을 처리하는 것이다.
  • 장점

    • 시스템 자원 소모 감소

      • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
    • 시스템 처리량 증가

      • 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어들게 된다.
    • 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.

  • 단점

2. 스케줄링

2.1 프로세스 상태


  • 프로세스는 다음 5가지 상태 중 하나를 가진다.

    • 생성(create): 프로세스가 생성되는 중이다.
    • 실행(running): 프로세스가 자원을 할당받아 실행되는 중이다.
    • 준비(ready): 프로세스가 자원을 사용하고 있지 않지만, 언제든 자원을 받아 실행할 수 있는 상태
    • 대기(waiting): 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태 (인터럽트 발생)
    • 종료(terminated): 프로세스가 종료된 상태

2.2 스케줄링


OS는 준비 큐(Ready Queue), 대기 큐(Waiting Queue) 등의 자료구조를 두어 프로세스를 관리한다. 준비 큐는 ready상태에 있는 프로세스들을 모아놓은 큐이다. OS는 CPU 스케줄러를 통해 준비 큐에 있는 프로세스 중 한 프로세스를 골라 다음에 실행시킨다.

선점과 비선점


프로세스 스케줄링은 다음 네 가지 경우에 일어날 수 있다.

  • 프로세스가 실행 상태(running)에서 대기 상태(waiting)으로 전환될 때
  • 프로세스가 실행 상태(running)에서 준비 상태(ready)로 전환될 때
  • 프로세스가 대기 상태(waiting)에서 준비 상태(ready)로 전환될 때
  • 프로세스가 종료되었을 때(terminated)

만약 프로세스 스케줄링이 첫 번째와 네 번째 경우에만 일어난다면 이를 비선점 스케줄링이라 한다. 즉, 인터럽트나, 종료가 아니면 프로세스 전환이 일어나지 않는다.

그렇지 않고 일정 규칙을 두어 프로세스 전환이 일어난다면, 즉 위 네 가지의 모든 경우에서 스케줄링이 일어난다면 이를 선점형 스케줄링이라 한다.

FCFS (First Come First Served)


  • 선입선출
  • 비선점형 스케줄링
  • 응답시간이 길어질 수 있음
  • 다른 프로세스가 끝날 때까지 기다려야한다.

SJF(Shortest Job First)


  • CPU burst time이 짧은 프로세스를 우선으로 할당하는 방법
  • 일종의 우선순위 기법
  • 비선점형과 선점형 모두 존재
  • 최소 평균 대기 시간을 보장한다.
  • 기아 현상 발생 가능성이 있다. (원래있던 프로세스보다 burst time이 짧은 프로세스가 계속 들어오면, 원래 프로세스는 계속 실행되지 못함)

SRTF(Shortest Remaining Time First)


  • SJF의 선점형 스케줄링 방식
  • 남은 프로세스의 burst time 보다 더 짧은 프로세스가 도착하면 CPU를 빼앗음
  • 프로세스가 새로 들어올 때마다 갱신된다.
  • 스케줄링이 비규칙적으로 변경되어 cpu 사용시간을 정확히 예측하기 어렵다.

Priority Scheduling


  • Highest Priority를 가진 프로세스에게 CPU를 할당
  • 선점형 방식에서는 새로 도착한 프로세스의 우선순위가 현재 실행되는 프로세스보다 높으면 CPU를 선점한다.
  • 비선점 방식에서는 더 높은 우선순위의 프로세스가 들어오면 Ready queue의 head 부분에 넣는다.
  • 기아 현상 발생 ( 우선순위가 계속 낮을 경우 실행되지 못함 )
    • Aging 기법으로 해결 가능 ( 한번 실행된 프로세스는 우선순위가 조금씩 낮아지는 방법 )

RR(Round Robin)


  • 선점형 스케줄링 방식
  • 각 프로세스는 동일한 할당 시간을 가지고, 할당 시간이 지나면 다른 프로세스에게 자원을 선점 당한 뒤, Ready queue의 맨 위로 가게 된다.
  • 모든 프로세스에게 공정한 방식
  • 평균 대기 시간이 길어질 수 있으나, 응답 시간이 짧아 진다.
  • Context switching 오버헤드
profile
HiHi

0개의 댓글