[운영체제] 3. 스레드

H.J.SHIN·2024년 10월 20일
0

운영체제

목록 보기
3/8

스레드


1. 스레드(thread)

스레드는 실행의 단위이다. 조금 더 정확하게 표현하자면, 스레드란 프로세스를 구성하는 실행의 흐름 단위이다.

  • 하나의 프로세스는 여러 개의 스레드를 가질 수 있다.

1.1. 프로세스와 스레드

  • 스레드는 프로세스 내에서 각기 다른 스레드ID, 프로그램 카운터 값, 레지스터 값, 스텍으로 구성되어 있기 때문에 스레드마다 각기 다른 코드를 실행할 수 있다.

  • 그와 동시에 한 프로세스 내의 스레드들은 같은 프로세스의 자원을 공유한다.

프로세스가 실행되는 프로그램이라면 스레드는 프로세스를 구성하는 실행의 흐름 단위이다. 대부분의 운영체제에서 CPU에 처리할 작업을 전달하는 단위를 스레드로 하고 있다.

주의) 리눅스 운영체제에서는 프로세스와 스레드 간에 명확한 구분을 짓지 않는다. 리눅스에서는 프로세스와 스레드라는 말 대신 태스크(task)라는 이름으로 통일하여 명명한다.



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

  • 멀티프로세스: 여러 프로세스를 동시에 실행하는 것

  • 멀티스레드: 여러 스레드로 프로세스를 동시에 실행하는 것


1.2.1. 멀티프로세스 VS 멀티스레드

1.2.1.1. 멀티프로세스

  • 프로세스끼리는 기본적으로 메모리를 공유하지 않는다.
프로세스끼리도 자원을 공유하고 데이터를 주고받을 수는 있는데 이를 프로세스 간 통신(IPC)라고 한다. 이때 프로세스간 공유하는 메모리 영역을 공유메모리(shared memory)라고 한다.


1.2.1.2. 멀티 스레드

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

  • 코드 영역, 데이터 영역, 힙 영역, 파일 영역 같은 메모리를 공유한다.

  • 레지스터, 스텍, 프로그램 카운터를 스레드마다 따로 갖기 때문에 다른 실행의 흐름을 가져갈 수 있다.

장점

  • 여러 프로세스를 병행 실행하는 것보다 메모리를 더 효율적으로 사용할 수 있다.

  • 스레드간 자원을 공유하기 때문에 협력과 통신에 유리하다.

단점

  • 멀티스레드 환경에서 하나의 스레드에 문제가 생기면 프로세스 전체에 영향을 줄 수 있다.
레지스터: CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 다목적 공간이다. CPU 내부에 존재하며 연산제어 및 디버깅 목적으로 사용된다.

0개의 댓글