IT/OS

[OS] Thread & Process - 2

wakelight23 2025. 1. 15. 21:24

프로세스 & 스레드의 생명 주기

각각의 생명 주기를 가지고 있으며, 운영체제(OS)는 이러한 생명 주기를 관리하고, 프로세스와 스레드를
   조정하여 시스템 자원을 효율적으로 사용

 

● 프로세스 스케줄링 (Process Scheduling)

  - 운영체제에서 CPU를 사용할 수 있는 프로세스를 선택하고, CPU를 할당하는 작업

  - 프로세스의 우선순위, 작업량 등을 고려하여 효율적으로 배치

   → 운영체제가 CPU를 효율적으로 사용하며 시스템 전반적인 성능을 향상

  

  ○ 스케줄링(Scheduling)

    - 운영채제의 특징과 시스템 요구사항에 따라 알고리즘이 다름

    - 알고리즘 종류 :
       FCFS(First-Come, First-Served)

       SJF(Shortest-Job-First)

       Priority
       RR(Round-Robin)

       Multildevel Queue

 


● 프로세스 상태

  - 프로세스가 실행되는 동안 변경되는 고유 상태

프로세스 상태 설명
생성 (new) 프로세스가 생성되고 아직 준비가 되지 않은 상태
준비 (ready) - 프로세스가 실행을 위해 기다리는 상태
- CPU를 할당받을 수 있는 상태이며, 언제든지 실행될 준비 되어 있음.
실행 (running) - 프로세스가 CPU를 할당받아 실행되는 상태
대기 (waiting) - 프로세스가 특정 이벤트(입출력 요청 등)가 발생하여 대기하는 상태
- CPU를 할당받지 못하며, 이벤트가 발생하여 다시 ready 상태로 전환까지 대기
종료 (terminated) - 프로세스가 실행을 완료하고 종료된 상태
- 더 이상 실행될 수 없으며, 메모리에서 제거

 

  ○ 프로세스 상태 전이

    - 프로세스가 실행되는 동안 상태가 OS에 의해 변경되는 것

    - 운영체제는 프로세스의 상태를 감시하고,
      프로세스 상태를 기반으로 프로세스 스케줄링을 통해 프로세스 관리, 제어

프로세스 상태

   1) Admitted (new → ready) : 프로세스 생성 승인받음

   2) Dispatch (ready → running) : 준비 상태 여러 프로세스들 중 하나가 스케줄러 의해 실행

   3) Interrupt (running → ready) : Timeout, 예기치 않은 이벤트 발생
                                                      → 현재 실행 중인 프로세스 준비 상태로 전환, 해당 작업 먼저 처리

   4) I/O or event wait (running → waiting) :
      - 실행 중인 프로세스가 입출력이나 이벤트 처리해야 하는 경우,
        입출력이나 이벤트가 끝날 때까지 대기 상태로 전환

   5) I/O or event completion (waiting → ready) :
      - 입출력이나 이벤트가 모두 끝난 프로세스를 다시 준비 상태로 전환

       → 스케줄러에 의해 선택될 수 있는 상태로 전환

 

 

프로세스 컨텍스트 스위칭

● Context Switching은 CPU가 한 프로세스에서 다른 프로세스로 전환할 때 발생하는 일련의 과정

 

● 프로세스 컨텍스트 스위칭 동작 원리

  1) 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(context)를 보관

  2) 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태 복구

 

● 컨텍스트 스위칭을 하는 주체는 스케줄러


● PCB (Process Contorl Block)

  - 프로세스 제어 블록, 운영체제에서 프로세스를 관리하기 위해
    해당 프로세스의 상태 정보를 담고 있는 자료구조

  - 왜 필요한가?

 → 컨텍스트 스위칭 할 때 기존 프로세스의 상태를 어딘가에 저장해둬야 다음에 똑같은 작업을
     이어서 할 수 있는 것과 새로 해야 할 작업의 상태를 알아야 하기 때문에

  - 즉, PCB는 임시 저장소

  - 프로세스가 생성되면 메모리에 해당 프로세스의 PCB 함께 생성, 종료 시 삭제

 

● 프로세스 Context Switching 과정

두 개의 프로세스의 Context Switching 과정

 

 

스레드 스케줄링 & 스레드 컨텍스트 스위칭

● Thread Scheduling, 운영체제에서 다중 스레드를 관리하며, CPU를 사용할 수 있는 스레드를 선택하고
    CPU를 할당하는 작업

  - 스레드의 우선순위, 실행 시간, 입출력 요청 등의 정보들을 고려하여 CPU를 사용할 수 있는 스레드를 선택

  - Process 스케줄링과 유사한 알고리즘으로 동작 RR, Proirity-based scheduling, Multi-level Queue 등...

  - 프로세스 스케줄링과는 다르게, 하나의 프로세스 내에서 다수의 스레드가 동작.

   → 즉, 스레드 간의 상호작용과 동기화 문제를 고려해야 한다.

 

● 스레드 상태

  - 프로세스와 마찬가지로 상태가 존재함

스레드 상태 설명
NEW - 스레드가 생성되고 아직 호출되지 않은 상태
RUNNABLE - 스레드가 실행되기 위해 기다리는 상태 (feat. 실행준비가 된)
- CPU를 할당받을 수 있는 상태이며, 언제든지 실행될 준비 완료
BLOCKED - 스레드가 일정 이벤트(입출력 요청 등)가 발생하여 대기하는 상태
- CPU를 할당받지 못하며, 이벤트가 발생하여 다시 RUNNABLE 상태로 전환 될 때까지 대기
TERMINATED - 스레드가 실행을 완료하고 종료된 상태
- 더 이상 실행 되지 않으며, 메모리에서 제거

 

● Thread Context Switching

  - 멀티 스레딩 환경에서 스레드 간의 실행을 전환하는 기술

  - 하나의 프로세스 내의 스레드들을 교환한다.

스레드의 Context Switching

 

● TCB (Thread Control Block)

  - PCB와 비슷하며 각 스레드마다 운영 체제에서 유지하는 스레드에 대한 정보를 담고 있는 자료구조

  - TCB는 PCB 안에서 실행된다.

  - 스레드의 상태 정보, 스레드 ID, 스레드 우선순위, 스케줄링 정보 등 다양 정보 저장

  - 스레드가 생성될 때 운영 체제에 의해 생성, 스레드가 실행을 마치면 소멸될 때 함께 소멸

  - 스레드 간의 자원 공유와 동기화가 TCB를 사용하여 관리

  - TCB에서 해당 스레드의 뮤텍스(Mutex)세마포어(Semaphore) 정보를 관리

  - 스레드가 해당 자원에 대한 접근 권한을 획득하거나 반납할 때 TCB 정보를 업데이트

    ▷ 뮤텍스(MUTual EXclusion, Mutex) :
            - 임계 구역에 1개의 스레드만 들어갈 수 있는 동기화 기법

 

    ▷ 세마포어(Semaphore) :

            - 임계 구역에 여러 스레드 들어갈 수 있고, counter를 두어서 허용 가능한 스레드 제한하는 기법

 

Process Context Switching VS Thread Context Switching

● 두 기술 모두 멀티태스킹 환경에서 여러 프로세스, 스레드를 동시에 실행하기 위한 기술이다

 

● 차이점

  ○ TCB가 PCB보다 가볍다

     - 프로세스 내의 스레드들은 text, data, heap 영역 메모리만 공유하기에
       TCB에는 stack 및 register 포인터 정보만 저장하기 때문에 가볍고 더 빨리 읽고 쓰기 가능

 

  ○ 캐시 메모리 초기화 여부

     - 프로세스 컨텍스트 스위칭의 경우

      → 다른 프로세스 실행으로 인해 CPU가 새로운 명령어와 데이터를 로드해야 하기 때문에
           CPU 캐시 메모리를 초기화해야 함.

 

    - 스레드 컨텍스트 스위칭의 경우

      → 프로세스 내 스레드 간에 stack과 register 값 등 일부 컨텍스트 정보만 변경되므로

           CPU 캐시 메모리는 초기화되지 않음.

           단, 스레드가 다른 CPU 코어에서 실행될 때는 해당 코어의 캐시 메모리에
           컨텍스트 정보가 로드되어야 하므로 초기화될 수 있음.

 

  ○ 자원 동기화 문제

    - 스레드 컨텍스트 스위칭이 발생하여 다른 스레드가 heap 영역 공유 데이터에 접근할 때
      이전 스레드가 이미 공유 자원을 사용하고 있는 경우 동기화 문제 발생

 

    - 두 개의 스레드가 동시에 하나의 변수를 수정하려고 할 때, 스레드 컨텍스트 스위칭 발생하면
      변수의 값을 잘못된 값으로 업데이트할 수 있다.
       = 스레드 간에 경쟁 조건 (race condition) 

   

    - 프로세스도 기본적으로는 독립된 공간이지만 IPC(프로세스 간 통신 Inter-Process Communication)
      같은 공유 자원을 사용하는 경우 race condition 발생

 

 

# 다음 정리할 것

스레드 개념
프로세스, 프로그램 차이

스레드의 자원 공유

프로세스, 스레드의 생명 주기

컨텍스트 스위칭

스레드 스케줄링

멀티 스레드