쓰레드 이슈

라마·2023년 7월 16일

운영체제

목록 보기
14/32

※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.

멀티쓰레드와 fork() 와 exec()

만약 멀티쓰레드 환경에서 fork() 시스템콜을 실행한다면..

  • 여러 쓰레드 중 한 쓰레드가 fork() 호출
  • 새로운 프로세스는 fork() 를 호출한 쓰레드만 복제
  • 한 쓰레드가 exec() 를 호출 → 프로세스 전체가 사라짐

그러면 fork() 가 모든 쓰레드를 복제한다면?

  • 몇몇 시스템은 전체 쓰레드를 복제하는 fork() 도 지원함

하지만.. fork() 이후 exec() 를 호출하면 결국 모든 쓰레드를 복제할 이유가 없습니다.

( 왜냐하면 exec() 를 호출하면, 프로세스 자체가 바뀌어버리니 )

  • fork() 이후 exec() 호출 → 모든 쓰레드를 복제할 이유 X
  • fork() 이후 exec() 호출 X → 모든 쓰레드 복제에 의미 O

자원 동기화 문제 : Thread-Safe

하나의 자원에 대해 여러 쓰레드가 동시에 접근하게 되면, 공유자원이 훼손됩니다.

공유자원을 어떻게 하면 훼손하지 않고 프로그램을 실행시킬 수 있을지에 대한 개념이 Thread - Safe 개념입니다.

Thread - Safe 를 지키기 위해선..

  1. Re-entrancy
    1. 어떤 함수가 한 쓰레드에 의해 호출되어 실행 중일 때, 다른 쓰레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바르게 주어져야 함
  2. Thread - Local Storage
    1. 공유 자원의 사용을 최대한 줄여 각각의 쓰레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막음
    2. 동기화 방법과 관련되어 있고, 공유상태를 피할 수 없을 때 사용
  3. Mutual Exclusion
    1. 공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 락으로 통제
  4. Atomic Operations
    1. 공유 자원에 접근할 때 원자 연산을 이용하거나
    2. 원자적으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현

쓰레드 정리

프로세스와 쓰레드

  • 프로세스는 쓰레드들의 공유 공간
    • 쓰레드의 주소 공간이 형성되고 공유됨
  • 프로세스는 운영체제가 응용프로그램을 적재하는 단위이고, 쓰레드는 실행 단위
    • PCB 에 저장된 정보는 환경 컨텍스트
    • TCB 에 저장된 정보는 실행 컨텍스트
  • 동일한 프로세스에 속한 쓰레드 스위칭이 다른 프로세스에 속한 쓰레드로의 스위칭보다 속도가 더 빠름
  • 프로세스에 속한 모든 쓰레드 종료 → 프로세스 종료

쓰레드로 프로그램 작성시

  • 병렬 실행 → 성능 ↑
  • 우수한 응답성
    • 한 쓰레드가 블록되어도 다른 쓰레드를 통해 사용자 인터페이스 가능
  • 시스템 자원 사용의 효율성 ↑
    • 쓰레드는 프로세스에 비해 생성 유지 시 메모리나 자원을 적게 사용
  • 응용프로그램 구조의 단순화
    • 응용프로그램을 작업 기준으로 여러 함수로 분할
    • 각 함수별로 쓰레드를 만들어서 동시 실행 가능
  • 작성이 쉽고 효율적인 통신

0개의 댓글