[TIL/크래프톤 정글9기] 60일차 (Week 09 키워드 정리)

blueprint·2025년 7월 10일

크래프톤정글9기

목록 보기
50/55

프로세스와 스레드 (Process and Thread)

프로세스 (Process)

프로세스실행 중인 프로그램을 의미

  • 운영체제로부터 시스템 자원(메모리, CPU 시간 등)을 할당받는 작업의 단위

  • 각 프로세스는 자신만의 고유한 메모리 공간을 가짐

  • 따라서 한 프로세스가 다른 프로세스의 메모리 영역에 직접 접근할 수 없음

  • 독립성: 각 프로세스는 독립적인 메모리 공간(Code, Data, Stack, Heap)을 가짐

  • 자원 할당의 단위: 운영체제는 프로세스 단위로 자원을 할당

  • 프로세스 간 통신 (IPC, Inter-Process Communication): 독립된 메모리 공간 때문에, 프로세스 간 데이터 교환을 위해서는 별도의 통신 방법이 필요

스레드 (Thread)

  • 스레드프로세스 내에서 실행되는 흐름의 단위

  • 하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 같은 프로세스에 속한 스레드들은 프로세스의 자원(메모리, 파일 등)을 공유

  • 경량 프로세스 (Lightweight Process): 생성 및 컨텍스트 스위칭 비용이 프로세스보다 작음

  • 자원 공유: Code, Data, Heap 영역을 다른 스레드와 공유하고, Stack 영역만 독립적으로 가짐

  • 응답성 향상: 여러 스레드를 사용하면 사용자와의 상호작용을 유지하면서 시간이 오래 걸리는 작업을 동시에 처리 가능

구분프로세스 (Process)스레드 (Thread)
정의실행 중인 프로그램프로세스 내 실행 흐름의 단위
메모리독립적인 메모리 공간Stack을 제외한 메모리 공유
자원자원 할당의 단위프로세스의 자원 공유
통신IPC 필요메모리 공유로 통신 용이
오버헤드생성 및 전환 비용이 큼생성 및 전환 비용이 작음

CPU 스케줄링 알고리즘

CPU 스케줄링은 여러 프로세스가 CPU를 효율적으로 사용할 수 있도록 순서를 정하는 방법

1. FCFS (First Come First Served)

먼저 온 순서대로 처리하는 가장 간단한 비선점형 스케줄링 알고리즘

  • 장점: 구현이 매우 간단합니다.
  • 단점: 호위 효과(Convoy Effect)가 발생 가능. 실행 시간이 긴 프로세스가 먼저 도착하면 뒤따르는 짧은 프로세스들이 오래 기다려야 하므로 평균 대기 시간이 길어질 수 있음

2. SJF (Shortest Job First)

실행 시간이 가장 짧은 프로세스에게 CPU를 먼저 할당하는 비선점형 스케줄링 알고리즘

  • 장점: 평균 대기 시간을 최소화하여 시스템 처리율을 향상
  • 단점: 기아 현상(Starvation)이 발생. 실행 시간이 긴 프로세스는 계속해서 짧은 프로세스들에게 순위가 밀려 영원히 실행되지 못할 수 있음. 또한, 프로세스의 실제 실행 시간을 미리 정확히 알기 어려움.

3. SRTF (Shortest Remaining Time First)

SJF의 선점형 버전입니다. 현재 실행 중인 프로세스의 남은 시간보다 더 짧은 프로세스가 도착하면 CPU를 빼앗아 그 프로세스에게 할당

  • 장점: SJF의 장점을 가지면서도 더 빠른 응답이 가능
  • 단점: SJF와 마찬가지로 기아 현상이 발생할 수 있고, 잦은 선점으로 인해 컨텍스트 스위칭 오버헤드가 커질 수 있음

4. 라운드 로빈 (Round Robin)

각 프로세스가 CPU를 사용할 수 있는 일정한 시간 할당량(Time Quantum)을 정하고, 그 시간만큼만 실행한 뒤 준비 큐(Ready Queue)의 맨 뒤로 갑니다. 시분할 시스템에 적합한 선점형 스케줄링

  • 장점: 모든 프로세스가 공평하게 CPU 시간을 할당받아 응답 시간이 빠릅니다. 기아 현상이 발생하지 않음
  • 단점: 시간 할당량을 너무 크게 설정하면 FCFS처럼 되고, 너무 작게 설정하면 잦은 컨텍스트 스위칭으로 오버헤드가 커짐

5. 다단계 큐 스케줄링 (Multilevel Queue Scheduling)

프로세스를 여러 그룹으로 나누어 각 그룹마다 다른 큐를 할당
각 큐는 자신만의 스케줄링 알고리즘을 가질 수 있음(예: 전위(Foreground) 큐는 라운드 로빈, 후위(Background) 큐는 FCFS)

  • 장점: 프로세스의 특성에 따라 유연한 스케줄링이 가능
  • 단점: 프로세스가 한번 큐에 할당되면 다른 큐로 이동할 수 없어 유연성이 떨어지고, 낮은 우선순위 큐에서 기아 현상이 발생

세마포어와 뮤텍스 (Semaphore and Mutex)


세마포어뮤텍스는 여러 프로세스나 스레드가 공유 자원에 동시에 접근하는 것을 제어하기 위한 동기화 도구

  • 뮤텍스 (Mutex, MUTual EXclusion): 오직 하나의 스레드/프로세스만이 공유 자원에 접근할 수 있도록 하는 잠금(Locking) 메커니즘. 자원을 사용하려는 스레드는 뮤텍스를 획득(acquire)해야 하고, 사용이 끝나면 반드시 반환(release)해야 함

  • 세마포어 (Semaphore): 지정된 개수(S)의 스레드/프로세스가 공유 자원에 접근할 수 있도록 함. S개의 허용치를 가진 카운터로 생각할 수 있으며, 자원을 사용하려면 카운터를 감소시키고, 반납하면 증가 카운터가 0이면 자원을 사용할 수 없음

구분뮤텍스 (Mutex)세마포어 (Semaphore)
접근 허용1개S개 (S >= 1)
목적상호 배제 (Mutual Exclusion)자원의 개수를 세어 접근 제어
소유권락을 획득한 스레드만 해제 가능다른 스레드도 락 해제 가능

경쟁 상태 (Race Condition)

경쟁 상태두 개 이상의 프로세스나 스레드가 공유 자원에 동시에 접근하고, 그 실행 순서에 따라 결과가 달라지는 상황을 말합니다. 동기화 메커니즘이 없다면 데이터의 일관성을 해칠 수 있는 심각한 문제입니다.

예시: 두 스레드가 공유 변수 balance를 동시에 100씩 증가시키는 경우, 한 스레드가 읽은 값을 기반으로 계산하는 동안 다른 스레드가 값을 변경하면 예상치 못한 결과(200이 아닌 100이 될 수 있음)가 발생할 수 있습니다.


교착 상태 (Deadlock)

교착 상태두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 블록된 상태로, 무한정 대기하게 되는 상황을 의미

교착 상태 발생 조건 (4가지)

아래 4가지 조건이 모두 충족될 때 교착 상태가 발생 가능

  1. 상호 배제 (Mutual Exclusion): 한 번에 한 프로세스만 자원을 사용 가능
  2. 점유와 대기 (Hold and Wait): 자원을 최소 하나 보유한 상태에서 다른 프로세스가 사용 중인 자원을 추가로 대기
  3. 비선점 (No Preemption): 다른 프로세스에 할당된 자원을 강제로 빼앗을 수 없음
  4. 순환 대기 (Circular Wait): 프로세스들이 꼬리에 꼬리를 무는 형태로 서로의 자원을 기다립니다. (예: P1은 P2의 자원을, P2는 P1의 자원을 기다림)

컨텍스트 스위칭 (Context Switching)

컨텍스트 스위칭CPU가 현재 실행하고 있는 프로세스(또는 스레드)의 상태를 저장하고, 다음 실행할 프로세스의 상태를 불러오는 과정. 이 과정 덕분에 여러 프로세스가 하나의 CPU에서 번갈아 가며 실행될 수 있어 멀티태스킹이 가능

  • 컨텍스트(Context): 특정 시점의 프로세스 상태 정보. 주로 프로세스 제어 블록(PCB, Process Control Block)에 저장. (예: 프로그램 카운터, 레지스터 값)
  • 오버헤드: 컨텍스트를 저장하고 불러오는 데 시간이 소요되므로, 잦은 컨텍스트 스위칭은 시스템 성능 저하의 원인이 될 수 있음. 스레드는 프로세스보다 컨텍스트 스위칭 오버헤드가 작음

다단계 피드백 큐 스케줄러 (MLFQS, Multi-Level Feedback Queue Scheduler)

다단계 피드백 큐 스케줄러는 다단계 큐 스케줄링을 개선한 방식으로, 프로세스가 큐 사이를 이동할 수 있게 하여 유연성을 높인 알고리즘

  • 동작 방식:

    1. 프로세스는 우선순위가 가장 높은 큐에 들어감
    2. 자신에게 주어진 시간 할당량을 다 사용하면 우선순위가 한 단계 낮은 큐로 이동
    3. I/O 작업 등으로 대기 상태에 있다가 다시 준비 상태로 돌아오면 우선순위가 높은 큐로 이동할 수 있음
    4. 낮은 우선순위 큐에서 너무 오래 대기하면 노화(Aging) 기법을 통해 우선순위를 높여 기아 현상을 방지
  • 목표: 짧은 작업과 I/O 중심 작업에 높은 우선순위를 부여하여 응답 시간을 줄이고, 실행 시간이 긴 작업은 낮은 우선순위 큐로 보내 시스템 처리율을 높이는 균형을 맞춤

4BSD (Berkeley Software Distribution)

유닉스 계열 운영체제인 4BSD에서 사용된 MLFQS는 이 알고리즘의 고전적인 구현 예시. CPU 사용량에 따라 동적으로 우선순위를 조정하여 대화형 프로세스의 응답성을 보장하고, CPU 중심 프로세스도 공정하게 처리하도록 설계

nice

nice는 유닉스 계열 시스템에서 프로세스의 우선순위를 사용자가 수동으로 조정할 수 있게 하는 명령어입니다.

  • nice: -20 (가장 높음) 부터 19 (가장 낮음) 까지의 값을 가집니다. 기본값은 0
  • 역할: nice 값을 낮추면(음수 방향) 프로세스의 우선순위가 높아져 더 많은 CPU 시간을 할당받고, 값을 높이면(양수 방향) 우선순위가 낮아져 다른 프로세스에 CPU 시간을 양보하게 됨. 시스템 관리자가 중요한 백그라운드 작업의 우선순위를 낮추는 등의 용도로 사용

0개의 댓글