본문 바로가기
CS/운영체제

[스레드] 스레드의 개념 및 멀티스레드

by DI_Lee 2021. 10. 2.

 

 

스레드의 개념과 예를 다양한 각도로 살펴보자


(1) 스레드의 개념

 

  • 정의

ex) 안심스테이크를 만드는 과정에서 프로세스는 전체 요리 작업과 같고 스레드는 요리를 완성하기 위해 수행하는 각각의 조리.

→ 요리를 할 때 한 요리사가 모든 일을 맡아 함 = 1개의 프로세스에 1개의 스레드

→ 고기굽기는 A 요리사가 하는 동시에 채소 굽기와 소스뿌리기는 B 요리사가 함 = 1개의 프로세스에 2개의 스레드를 가진 멀티 스레드

 

[프로세스 생성 과정]

프로세스가 생성 -> CPU 스케줄러가 프로세스가 해야할 일을 CPU에 전달하고 실제 작업은 CPU가 수행

→ 이때 CPU 스케줄러가 CPU에 전달하는 일 하나가 스레드.

→ 즉, 운영체제 입장에서의 작업 단위는 프로세스이고 CPU 입장에서의 작업 단위는 스레드 (= 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위)

 

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

프로세스끼리는 약하게 연결 BUT 스레드끼리는 강하게 연결

 

[주문서를 통한 이해]

[응용프로그램을 통한 이해]

(a) 멀티태스크

워드 프로세서와 스풀러는 서로 독립적 으로 작동. (= 워드프로세서가 비정상적으로 종료되어도 프린터 스풀러는 정상 작동) 이렇게 서로 독립적인 프로세스는 데이터를 주고받을 때 프로세스 간 통신(IPC) 을 이용

(b) 멀티 스레드

워드 프로세서 프로세스 내의 문서 편집/입출력/맞춤법 검사/그림판 같은 스레드들이 동시에 작업을 하는 멀티스레드. 멀티스레드는 변수나 파일 등을 공유하고 전역 변수나 함수 호출 등의 방법으로 스레드 간 통신 을 함.

 

  • 스레드 관련 용어

 

 

멀티스레드 프로세스 내 작업을 여러 개의 스레드로 분할 함으로써 작업의 부담을 줄이는 프로세스 운영 기법
멀티태스킹 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법으로 이렇게 여러 스레드에 시간을 잘게 나누어 주는 시스템을 시분할 시스템이라고 함
멀티프로세싱 CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업환경 으로 병렬처리에서의 슈퍼스칼라 기법 과 같음. 하나의 컴퓨터에 여러 개의 CPU 혹은 하나의 CPU 내 여러 개의 코어에 스레드를 배정하여 동시에 작동하는 것
CPU 멀티스레드 한 번에 하나씩 처리해야하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법

 


(2) 멀티스레드의 구조와 예

 

→ fork() 시스템 호출로 프로세스를 복사하면 코드 영역과 데이터 영역의 일부가 메모리에 중복되어 존재 하며 부모/자식 관계이지만 서로 독립적인 프로세스이므로 ‘낭비’가 발생.

스레드는 이러한 멀티태스킹의 낭비요소를 제거하기 위해 사용하며, 비슷한 일을 하는 2개의 프로세스를 만드는 대신 코드, 데이터 등을 공유하면서 여러 개의 일을 하나의 프로세스 내에서 함

 

 

위의 그림처럼 fork()를 사용하면 필요 없는 정적 영역이 여러 개가 되고 이를 막기 위해 멀티스레드는 코드, 파일 등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상

⇒ 스레드 = 가벼운 프로세스/ 1개의 스레드를 가진 일반 프로세스 = 무거운 프로세스

 


(3) 멀티스레드의 장단점

  • 장점

1. 응답성 향상

한 스레드가 입출력으로 인해 작업이 진행되지 않아도 다른 스레드가 작업 계속 진행.

ex ) 비디오 플레이어

 

2. 자원 공유

한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업 원활해짐

 

3. 효율성 향상

불필요한 자원의 중복을 막음으로써 시스템 효율 향상

 

4. 다중 CPU 지원

2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 이용하면 다중 CPU가 멀티스레드를 동시에 처리해 CPU사용량이 증가하고 프로세스의 처리 시간이 단축

 

  • 단점

모든 스레드가 자원을 공유하기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향

 

ex ) 인터넷 익스플로러와 크롬

-> 인터넷 익스플로러 프로세스는 하나의 프로세스에 멀티스레드를 사용하고 크롬은 여러개의 프로세스를 사용. 따라서 서 여러개의 화면 중 하나에 문제가 생겼을 때, 그 문제가 있는 화면을 강제 종료하면 인터넷 익스플로러의 경우 전체가 종료되지만, 크롬은 다른 화면에 미치는 영향이 작음

 


(4) 멀티스레드 모델

 

스레드는 '커널 스레드'와 '사용자 스레드'로 나뉨

  • 커널 스레드 : 커널이 직접 생성하고 관리하는 스레드
  • 사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드

→ 사용자 스레드가 커널 스레드를 사용하려면 시스템 호출로 커널 기능을 이용해야 함.

 

[사용자 스레드]

  • 사용자 스레드는 운영체제가 멀티스레드를 지원하지 않던 초기의 스레드 시스템에서 이용
  • 사용자 레벨에서 스레드를 구현하기 때문에 관련 라이브러리를 사용해 구현하며, 라이브러리는 커널이 지원하는 스케줄링이나 동기화 같은 기능을 대신 구현 → 커널입장에서 이 스레드는 하나의 프로세스처럼 보임

 

  • 사용자 프로세스 내에 여러 개의 스레드가 존재하지만 커널의 스레드 하나와 연결되기 때문에 1 to N 모델 이라고 부름
  • [장점] 라이브러리가 직접 스케줄링을 하고 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요없어서 속도가 빠름
  • [단점] 여러 개의 스레드가 하나의 커널 스레드와 연결되어 커널 스레드가 입출력 작접을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기해야하며, 한 프로세스의 타임 슬라이스를 여러 슬레드가 공유해 여러개의 CPU를 동시에 사용할 수 X. 또한 보안에 취약하다는 단점도 있음

 

[커널 스레드]

  • 커널이 멀티스레드를 지원하는 방식으로 하나의 사용자 스레드가 하나의 커널 스레드와 연결되기 때문에 1 to 1 모델 이라고 부름. 즉 독립적으로 스케줄링이 가능

 

  • 커널스레드의 장단점은 사용자 스레드의 장단점과 반대

 

[멀티레벨 스레드]

  • 사용자 스레드와 커널 스레드를 혼합한 방식으로 M to N 모델

  • 사용자 스레드, 커널 스레드의 장단점을 모두 가짐

 

 

 


 

자료 출처 : [쉽게 배우는 운영체제], 저자 조성호

책을 읽고 직접 정리한 내용입니다.

'CS > 운영체제' 카테고리의 다른 글

[프로세스] 프로세스 연산  (0) 2021.10.02