[운영체제] 프로세스와 스레드 - 스레드

HeeYeon Kim·2024년 1월 19일
0

STUDY

목록 보기
3/15
post-thumbnail

모의면접으로 학습하는 CS 스터디
- 운영체제 2주차


스레드

  • 스레드 정의

    • CPU 입장의 작업 단위
    • 여러 개의 스레드가 모여 프로세스를 이룸
    • CPU스케줄러가 CPU에 전달하는 일 하나가 스레드
    • 예시
      • 집짓기를 생각하면 토지구입, 토목공사 ← 스레드
      • 이 모든게 모여 집짓기 작업 ←프로세스

  • 스레드 구조

    • 스레드 ID , PC 포함한 레지스터값, 스택
    • 스레드는 프로세스의 자원(Code, Data, Heap)을 다른 스레드와 공유함
    • Stack만 각각의 스레드가 별도로 가지고 있음
      • Stack에는 함수 호출 시 전달되는 인자, 리턴할 주소값, 매개변수 등을 저장하는 공간
      • 이를 스레드가 가짐으로써 독립적인 함수호출이 가능함

  • 특징
    • 프로세스와 달리 스레드는 강하게 연결되어있음
    • 프로세스와 달리 스레드는 프로세스 내부에 존재하기에 데이터영역에 접근 가능
    • 스레드들끼리 서로의 데이터 접근 가능. IPC 필요없음
    • 하나의 프로세스 내 자원을 공유하기 때문에 문맥교환 비용도 적게 듦
    • 프로세스 종료되면 스레드도 강제종료

  • 장점
    • 응답성 향상
      • 스레드 간 작업 분할 + 병렬처리로 인해 빠른 응답성 제공

    • 자원 공유 효율성 향상
      • 하나의 프로세스 내에서 실행되기 때문에 프로세스 자원을 공유하여 접근할 수 있음
      • 별도의 메모리 공간을 할당할 필요 없이 내부에서 데이터 관리를 하면 됨

    • 동시성
      • 여러개의 스레드가 동시에 실행될 수 있어서 작업 병렬 처리 가능

    • 간결성
      • 작업을 분리할 수 있어 코드 간결해짐

  • 단점
    • 하나의 스레드에서 발생한 문제가 프로세스 전반에 영향을 줄 수 있음
    • 자원 공유하기 때문에 동기화 문제 발생


스레드 제어 블록(TCB)

  • TCB 정의

    • 스레드를 관리하는 자료구조
    • 스레드 정보의 단위
  • 특징

    • 각 스레드마다 존재함
  • TCB 구조

    • TID : 고유 ID
    • 스레드 상태 정보
    • 스레드 우선순위
    • 프로그램 카운터, 레지스터 값
    • 프로세스 포인터


사용자 수준 스레드 & 커널 수준 스레드

  • 사용자 수준 스레드

    • 정의
      • 사용자가 스레드 라이브러리를 사용하여 스레드를 구현
      • 여러 개의 스레드가 커널의 스레드 하나와 연결되기 때문에 1 to N 모델 이라고도 함

    • 특징
      • 사용자 스레드 라이브러리가 커널이 지원하는 스케줄링, 동기화 기능을 대신 구현
      • 커널 입장에서 사용자 스레드는 하나의 프로세스 처럼 보임

    • 장점
      • 문맥 교환이 필요없음 -> 속도가 빠름
        • 라이브러리가 직접 스케줄링하고 작업에 필요한 정보를 처리하기 때문

    • 단점
      • 스레드가 입출력 작업에 의해 대기 상태로 들어가면 모든 사용자 스레드가 같이 대기해야함
        • 하나의 커널 스레드에 연결되어 있어서 커널 입장에선 스레드가 여러개여도 하나의 프로세스로 인식되기 때문

      • 한 프로세스의 타임 슬라이스를 여러 스레드가 공유
        • 커널 입장에서 하나의 프로세스로 인식되어서 CPU가 여러개여도 동시에 사용할 수 없음

      • 보안에 취약함
        • 커널 레벨에 있는 공유 변수를 보호하는 서비스를 라이브러리에서 구현해야 하기 때문
  • 커널 수준 스레드

    • 정의

      • 커널이 멀티스레드를 지원하는 방식
      • 하나의 사용자 스레드가 하나의 커널 스레드와 연결되기 때문에 1 to 1 모델 이라고도 함

    • 특징

      • 독립적으로 스케줄링되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업 지속 가능
      • 커널이 제공하는 보호 기능 같은 모든 기능 사용 가능

    • 장점

      • 멀티 CPU 사용 가능
      • 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업할 수 있음

      • 보안에 강하고 안정적으로 작동


    • 단점

      • 문맥 교환할 때 오버헤드때문에 느리게 작동


멀티 스레드 프로그래밍

  • 멀티 스레드 정의

    • 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법

  • 장점

    • 응답성 향상
      • 한 스레드가 입출력으로 인해 작업이 진행되지 않아도 다른 스레드가 작업을 계속해서 작업 요구에 빨리 응답할 수 있음

    • 자원 공유
      • 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업 원할히 할 수 있음

    • 효율성 향상
      • 여러 개의 프로세스를 생성할 필요 없어 불필요한 자원의 중복을 막음

    • 비용 감소
      • 문맥 교환 시 스레드 간 공유 자원을 제외한 스레드 정보만 교체함

  • 단점

    • 안정성
      • 하나의 스레드가 문제 발생하면 다른 스레드들도 영향을 받음
      • 해결방안 : 예외처리, 스레드 풀에서 잔여 스레드를 가지고옴 등

    • 동기화로 인한 성능저하
      • 여러개의 스레드가 동시에 공유자원에 접근해서 동기화 문제 발생
      • 해결 방안 : 임계영역, 뮤텍스, 세마포어
        • 임계 영역 : 공유 자원을 접근하는 코드 영역
        • 뮤텍스 : 공유 자원에 대해 접근 제어를 위한 상호 배제 기법 중 하나
        • 세마포어 : 동시에 접근 가능한 스레드의 개수를 정하는 기법

    • 데드락
      • 다수의 프로세스나 스레드가 자원을 점유, 점유한 자원을 기다리는 상황에서 발생하는 교착 상태
      • 여러 개의 스레드가 서로 대기하면서 무한정 기다리게 되는 것
      • 해결 방안 : 상호배제, 점유와 대기, 비선점, 순환 대기 등의 알고리즘 이용


Thread-Safe

  • 정의

    • 멀티 스레드 프로그래밍에서 어떤 함수, 변수 등이 스레드로부터 동시에 접근이 이루어져도 문제가 생기지 않음
  • 설계 방법

    1. 재진입성

      • 어떤 함수가 한 스레드에 의해 호출되어 실행중일 때, 다른 스레드가 그 함수를 호출해도 결과는 각각 올바르게 주어져야 함
    2. 상호 배제

      • 공유 자원을 사용할 경우, 해당 자원에 대한 접근을 세마포어와 같은 Lock로 통제
    3. 임계 구역

      • 구역을 정의해 해당 구역에선 한번에 하나의 스레드만 접근할 수 있도록 함
    4. 스레드 지역 저장소

      • 공유 자원의 사용을 최대한 줄여 각각의 스레드에서만 접근 가능한 저장소를 사용 -> 동시 접근을 막음
      • 동기화 방법과 관련. 공유 상태 피할 수 없을 때 사용
    5. 원자 연산

      • 공유 자원에 접근할 때, 원자 연산 또는 원자적으로 정의된 접근 방법을 사용해 상호 배제를 구현
    6. 불변 객체

      • 객체 생성 이후 값을 변경할 수 없도록 함


0개의 댓글