[컴퓨터과학] 운영체제(OS) - Thread(스레드) & Synchronization(동기화)

Kyung Jae, Cheong·2024년 11월 2일
post-thumbnail

운영체제(OS) - Thread & Synchronization

1. Thread란?

스레드(Thread)경량 프로세스(Light Weight Process)라고도 불리며, 프로세스 내에서 실행되는 작은 단위입니다.

  • 하나의 프로세스 내에서 여러 스레드를 생성할 수 있으며, 각 스레드는 독립적으로 실행됩니다.
  • 스레드들은 프로세스의 자원(메모리 등)을 공유하기 때문에, 서로의 데이터에 접근이 가능합니다.
  • 멀티 스레드 프로그래밍은 시스템의 성능을 향상시키기 위해 많이 사용되며, 현대의 대부분의 프로그래밍 언어에서 필수적인 기술로 다루어집니다.

1.1 스레드와 프로세스의 차이

  • 프로세스는 서로 독립적이며, 각자 고유의 메모리 영역을 가집니다. 프로세스 간 데이터 공유가 어려우므로 IPC(Inter-Process Communication)를 통해 데이터를 주고받아야 합니다.
  • 스레드프로세스 내에서 실행되는 작업 단위로, 같은 프로세스 내에서 메모리와 자원을 공유합니다. 따라서 스레드 간 통신이 용이하며, 별도의 IPC 없이 데이터에 접근할 수 있습니다.

구분프로세스(Process)스레드(Thread)
독립성프로세스 간 독립적프로세스 내에서 실행, 자원 공유
자원각 프로세스가 별도의 자원 할당자원을 공유하여 효율적 사용
통신IPC 기법 필요IPC 필요 없이 직접 데이터 접근 가능
오류프로세스가 중단되어도
다른 프로세스에 영향 없음
하나의 스레드 오류가 전체에 영향 미침

1.2 멀티 스레딩(Multi-Threading)

멀티 스레드 프로그래밍은 하나의 프로그램 내에서 여러 스레드를 생성하여 병행 작업을 수행하는 방식입니다.

  • 멀티 스레딩의 장점:
    • 응답성 향상: 하나의 스레드가 대기 상태에 있을 때, 다른 스레드가 작업을 계속 수행하여 프로그램의 응답성을 유지할 수 있습니다.
    • 자원 효율성: 스레드는 메모리와 자원을 공유하므로, 프로세스에 비해 자원 소모가 적고 오버헤드가 낮습니다.
    • 병렬 처리: 멀티 코어 CPU를 활용하여 여러 스레드가 동시에 실행될 수 있습니다.
  • 멀티 스레딩의 단점:
    • 동기화 문제: 여러 스레드가 공유 자원에 접근하면서 데이터 일관성 문제가 발생할 수 있습니다.
    • 디버깅 어려움: 스레드 간 상호작용이 복잡해져 디버깅과 문제 해결이 어려워질 수 있습니다.
    • 하나의 스레드 오류 영향: 하나의 스레드가 오류로 종료되면, 전체 프로세스에 영향을 미칠 수 있습니다.

2. 스레드 동기화(Synchronization)

동기화(Synchronization)는 여러 스레드가 공유 자원에 접근할 때 발생할 수 있는 충돌을 방지하고, 작업의 실행 순서를 제어하는 기법입니다.

  • 여러 스레드가 동일한 데이터에 접근하거나 수정할 때 데이터 불일치경쟁 조건(Race Condition)이 발생할 수 있습니다.
  • 이러한 문제를 해결하기 위해 동기화 기법이 필요하며, 특히 임계 구역(Critical Section)을 설정하여 한 번에 하나의 스레드만 접근할 수 있도록 제어합니다.

동기화 문제 해결 방안: 상호 배제(Mutual Exclusion)

  • 상호 배제는 여러 스레드가 동시에 공유 자원에 접근하지 못하도록 하는 기법입니다.
  • 동기화 기법으로는 뮤텍스(Mutex)세마포어(Semaphore)가 주로 사용됩니다.

뮤텍스(Mutex)

  • Mutex하나의 스레드만 임계 구역에 들어갈 수 있도록 잠금을 설정하여, 동시 접근을 방지합니다.
  • 일반적으로 Binary Semaphore라고도 불리며, 임계 구역에서 하나의 스레드만 작업할 수 있습니다.
  • 즉, 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근하지 못하도록 막는 방식입니다.

세마포어(Semaphore)

  • Semaphore는 여러 스레드가 특정 자원에 접근할 수 있는 최대 허용 수를 설정하여 제어합니다.
  • 예를 들어, 자원 접근을 동시에 두 개의 스레드에 허용하려면 세마포어 값2로 설정됩니다.
  • 다만, 간혹 동기화 문제가 발생할 수는 있습니다.

3. 교착 상태(Deadlock)와 기아 상태(Starvation)

3.1 교착 상태(Deadlock)

  • 교착 상태는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기를 기다리며 무한 대기에 빠지는 상태입니다.
  • 교착 상태가 발생하면, 시스템은 더 이상 진행되지 않으며 자원 할당이 불가능해집니다.

3.2 기아 상태(Starvation)

  • 기아 상태는 특정 프로세스가 자원 할당 우선순위가 낮아 계속 자원을 할당받지 못하고 대기하는 상태입니다.
  • 오래 대기한 프로세스의 우선순위를 점진적으로 높이는 에이징(Aging) 기법을 통해 해결할 수 있습니다.

마무리

이번 포스팅에서는 스레드와 멀티스레딩, 동기화의 필요성, 그리고 교착 상태와 기아 상태에 대해 살펴보았습니다.

  • 스레드는 현대 운영체제에서 자원을 효율적으로 사용하고 응답성을 향상시키기 위해 필수적인 요소이며, 동기화와 상호 배제 기법을 통해 안정성을 보장할 수 있습니다.

다음 포스팅에서는 가상 메모리와 페이징 시스템에 대해서 다루어 보도록 하겠습니다.

profile
일 때문에 포스팅은 잠시 쉬어요 ㅠ 바쁘다 바빠 모두들 화이팅! // Machine Learning (AI) Engineer & BackEnd Engineer (Entry)

0개의 댓글