3-4.[os] 스레드

스레드의 개념

  • 프로세스의 코드에 정의된 절차에 따라 CPU에작업 요청을하는 실행 단위이다.

  • 처리(job)>프로세스(task)>스레드(operation)

  • 프로세스끼리는 약하게 연결되어 있고 스레드끼리는 강하게 연결되어 있다

프로세스

  • 코스 요리에서 개별 요리 (죽, 안심 스테이크)

스레드

  • 요리 시 작업 (고기굽기, 소스 뿌리기)

멀티태스크

  • 독립적으로 작동하다가 필요할 때 프로세스 간 통신해서 데이터를 주고받는다

멀티스레드

  • 프로세스 내의 문서 편집, 문서 입출력 같은 스레드들이 동시에 작업을 한다
  • 워드프로세서가 종료되면 프로세스 내의 스레드도 강제 종료됨
  • 멀티스레드는 변수나 파일 등을 공유하고 전역 변수나 함수 호출 등의 방법으로 스레드 간 통신

image.png

멀티스레드

  • 스레드가 여러개
  • 운영체제가 소프트웨어적으로 프로세스를 작은단위의 스레드로 분할하여 운영하는 기법
  • 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄이는 프로세스 운영 기법이다

멀티태스킹

  • 프로세스가 여러개
  • CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법
  • 시분할 시스템
    • 여러 스레드에 시간을 잘게 나누어주는 시스템
    • 운영체제가 CPU에 전달하는 작업

멀티프로세싱

  • CPU가 여러개
  • CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경
  • = 병렬 처리에서의 슈퍼스칼라 기법
  • 여러 개의 CPU 혹은 하나의 CPU 내 여러 개의 코어에 스레드를 배정하여 동시에 작동

CPU 멀티스레드

  • 하드웨어적인 방법으로 하나의 CPU에서 여러 스레드를 동시에 처리하는 병렬 처리 기법
  • 동시에 여러 스레드를 처리
  • = 병렬 처리에서의 파이프라인 기법

멀티스레드의 구조와 예

  • 초기의 프로그래밍:
    • 순차적으로 실행되기 때문에 프로세스로 여러 개의 작업을 동시에 처리하기가 불편했다
    • fork(), exec(): 멀티태스킹
    • fork() 시스템 호출로 프로세스를 복사하면 코드 영역과 데이터 영역의 일부가 메모리에 중복
    • 스레드는 이러한 멀티태스킹의 낭비 요소를 제거하기 위해 사용
    • 비슷한 일을 하는 2개의 프로세스를 만드는 대신 코드, 데이터 등을 공유하면서 여러 개의 일을 하나의 프로세스 내에서 한다

image.png

프로세스

  • 정적:
    • 프로세스가 실행되는동안 바뀌지 않는 영역
    • 레지스터 값, 스택, 힙
  • 동적:
    • 스레드가 작업을 하면서 값이 바뀌거나 새로 만들어지거나 사라지는 영역
    • 코드, 전역 데이터, 파일
  • fork() 시스템 호출로 여러 개의 프로세스를 만들면 필요 없는 정적 영역이 여러 개가 된다
  • 프로세스 내에 여러 개의 스레드를 생성하는 멀티스레드는 코드, 파일 등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상 image.png
  • 무거운 프로세스 (Heavy Weight Process, HWP): 스레드가 1개인 일반 프로세스
  • 가벼운 프로세스 (Light Weight Process, LWP): 스레드가 여러개인 프로세스
  • 프로세스 내 공유가 가능한 부분을 제외하고 실행과 관련된 부분을 스레드로 나누어 관리

멀티스레드의 장점

  • 응답성 향상: 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작업을계속하여 사용자의 작업 요구에 빨리 응답할 수 있다.

  • 자원 공유: 한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행할 수 있다.

  • 효율성 향상: 여러 개의 프로세스를 생성하는 것과 달리 멀티스레드는 불필요한 자원의 중복을 막음으로써 시스템의 효율이 향상된다.
  • 다중 CPU 지원: 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하여 CPU사용량이 증가하고 프로세스의 처리 시간이 단축된다.

image.png

멀티스레드 단점

  • 모든 스레드가 자원을 공유하기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다
  • 프로세스를 여러 개 만드는 방식의 경우 각 프로세스가 독립적이기 때문에 한 프로세스의 문제가 다른 프로세스로 전달되지 않는다

image.png

  • ex) 인터넷 익스플로러 프로세스는 하나이고 그 안에 여러 개의 스레드를 사용하므로 스레드만 종료되는 것이 아니라 프로세스 전체가 종료됨
  • ex) 크롬은 각 화면이 독립적인 프로세스이므로 그중 하나에 문제가 생겨서 종료해도 다른 화면에 미치는 영향이 작음

Did you find this article valuable?

Support Software Engineer at Your Service by becoming a sponsor. Any amount is appreciated!