본문 바로가기

CS

[CS] 스레드

스레드

스레드(thread)는 프로세스를 구성하는 실행 흐름의 단위

하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.

 

 

실행 흐름이 하나인 프로세스 (단일 스레드 프로세스)

 

 

 

실행 흐름이 여러 개인 프로세스 (멀티 스레드 프로세스)

프로세스를 이루는 여러 명령어 동시 실행 가능

 

그렇다면 스레드에는 뭐가 있길래 하나의 프로세스에 스레드가 별도로 실행될 수 있을까?

 

스레드의 구성요소

 

하나의 스레드마다 스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등

프로그램을 실행하기에 필요한 최소한의 정보를 가지고 있다.

리눅스나 최신 운영체제에서는 "프로그램의 흐름" 이라는 뜻에서 구분하여 사용하진 않는다.

 

 

프로세스를 이루는 스레드들은 프로세스의 자원을 공유하면서 실행이 된다!

즉, 스레드 1, 2, 3이 병행 실행되고 있다고 하지만 스레드 1, 2, 3은

모두 똑같은 코드 영역, 데이터 영역을 공유하고 있다.

 

 

정리

한 프로세스의 각기 다른 부분을 실행하기 위해서 각기 다른 스레드 정보들을 가지고 있지만

모든 스레드들은 프로세스의 자원을 공유하면서 실행이 된다.

 

 

멀티 프로세스와 멀티 스레드

"동일한 작업을 수행하는 단일 스레드 프로세스 여러 개 실행".

"하나의 프로세스를 여러 스레드로 실행"

어떤 차이점이 있을까요?

 

프로세스 끼리는 기본적으로 자원을 공유하지 않지만

스레드 끼리는 같은 프로세스 내의 자원을 공유한다!

 

멀티 프로세스

  • 프로세스를 fork하면 코드/데이터/힙 영역 등 모든 자원이 자식 프로세스로서 복제되어 저장된다.
  • 저장된 메모리 주소를 제외하면 모든 것이 동일한 프로세스 두 개가 통째로 메모리에 적재된다는 것
  • fork를 세번, 네 번하면 메모리에는 같은 프로세스가 통째로 세 개, 네 개 적재

 

참고

fork 직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서 

동시에 프로세스끼리 자원을 공유하지 않는 방법도 있다.

이를 쓰기 시 복사(copy on write)기법이라 한다.

 

 

멀티 스레드

스레드들은 각기 다른 스레드 ID, (별도의 실행을 위해 꼭 필요한)

프로그램 카운터 값을 포함한 레지스터 값, 스택을 가질 뿐

"프로세스가 가지는 자원을 공유"

 

  • 프로세스끼리는 자원을 공유하지 않는다 => 남남처럼 독립적으로 실행된다.
    • 프로세스 간에도 자원을 주고받는게 불가능하진 않다 : 프로세스 간 통신(PIC)
    • 파일을 통한 프로세스 간 통신, 공유 메모리를 통한 프로세스 간 통신
  • 스레드끼리는 프로세스의 자원을 공유한다 => 협력과 통신에 유리, 때로는 문제가 될 수도

해당 포스팅에 나온 글과 이미지들은 강민철 저자님의 혼자 공부하는 컴퓨터 구조 + 운영체제의 책과 강의를 참고하여 만들어졌습니다.

책에서 보다 깊게 나오는 내용이 있으므로 한번 구매하고 보셔도 좋을 것 같습니다.

 

[한빛미디어] 혼자 공부하는 컴퓨터 구조+운영체제

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr

 

 

 

 

 

'CS' 카테고리의 다른 글

[CS] 동기화  (0) 2024.05.26
[CS] CPU 스케줄링 알고리즘  (0) 2024.05.25
[CS] 프로세스  (0) 2024.05.24
[CS] 운영체제의 핵심 서비스  (0) 2024.05.24
[CS] 운영체제란?  (0) 2024.05.24