CH10) 프로세스와 스레드 - 3

Jobmania·2023년 6월 11일
1

운영체제

목록 보기
4/13
post-thumbnail

10-3) 스레드

스레드(Thread)는 실행의 단위이며, 프로세스를 구성하는 실행 흐름의 단위이다

  • 하나의 프로세스에 여러개의 스레드를 가질 수가 있다. -> 여러부분을 동시에 실행 가능
  • 프로세스의 각기 다른 부분을 수행

< 프로세스와 스레드 >

단일스레드 프로세스

멀티스레드 프로세스

  • 프로세스를 이루는 여러 명령어를 동시 실행가능
    ( ex) word에서는 각 스레드마다 1. 자동저장, 2. 사용자의 입력을 수신, 3.사용자의 출력을 담당)

스레드의 구성요소

스레드마다 실행에 필요한 최소한 값을 가지고 있다.

  • 스레드 ID
  • 프로그램 카운터 (레지스터 값)
  • 스택

😋 프로세스의 스레드들은 실행에 필요한 최소한의 정보만을 유지한 채 실행된다는 점인데, 프로세스의 자원의 공유한다는 점이 핵심이다!

위 그림에서 스레드 1만의 데이터, 힙영역이 있는 것이 아니라 스레드1,2,3 모두 같은 메모리 영역을 공유하고 있다는 점!!

정리하자면 프로세스가 실행되는 프로그램이라면 스레드는 프로세스를 구성하는 실행흐름의 단위이고, 최근의 운영체제의 CPU에 처리할 작업을 전달할 때 프로세스가 아닌 스레드 단위로 전달한다. 그리고 그 스레드는 프로세스 자원을 공유한 채 실행에 필요한 최소한의 정보만으로 실행된다!!

리눅스 운영체제에서의 프로세스와 스레드

  • 리눅스에서는 프로세스와 스레드를 구분하지 않는다.
  • 결국은 실행의 문맥일 뿐

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

  • 동일한 작업을 수행하는 단일 스레드 프로세스 여러개 실행
  • 하나의 프로세스를 여러 스레드로 실행

둘의 차이는 뭘까?????

둘의 큰 차이점은 프로세스끼리는 자원을 공유하지 않지만, 같은 프로세스끼리는 자원을 공유한다.

  1. 여러 프로세스 경우 fork하여 코드/데이터/힙 영역을 모든 자원이 복제되어 저장된다. -> 저장된 메모리 주소를 제외하고 모든것이 동일한 프로세스가 메모리에 적재

    참고로 ! 이렇게 메모리 낭비를 방지하기위해 fork 직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서 동시에 프로세스끼리 자원을 공유하지 않는 방법도 있다!
    이를 쓰기 시 복사(copy on write) 기법이라 한다.

  2. 스레드들은 각기 다른 스레드 ID를 가지고 실행에 필요한 정보들(프로그램 카운터값을 포함한 레지스터 값, 스택)만 가질뿐,
    프로세스가 가지는 자원을 공유

    이렇게 프로세스를 병행하는 것보다 메모리를 더 효율적으로 사용할 수 있다. 서로의 협력과 통신에 유리함! 하지만 공유한다는 것이 단점이 될 수도 있는데, 멀티스레드 환경에서 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있다. 왜냐! 프로세스 자원을 공유하여 다른 프로세스에 영향을 끼치기 때문이다.

프로세스끼리는 완전히 자원을 공유하지 않는 것은 아니다!!

  • 프로세스 간에도 자원을 공유할 순 있지만 스레드만큼 유리하진 않다
    -> 프로세스 간 통신 (IPC : Inter-Process-Communication)
  • 파일을 통한 프로세스 간 통신, 공유 메모리를 통한 프로세스 간 통신이 있다.

같은 컴퓨터이지만 통신을 주고 받는다.

텍스트.txt를 A 프로세스는 쓰는 프로세스, B 프로세스는 읽는 프로세스라면 두 프로세스는 파일을 통한 프로세스 간 통신이다.

공유메모리를 통한 통신은 말 그대로 메모리에 공유메모리 공간을 참조하는 것이다.

이외에도 프로세스들은 소켓, 파이프를 통해 통신할 수 있다.


프로그램 실행 시 프로세스 ID를 확인할 수 있다.!


profile
HelloWorld에서 RealWorld로

0개의 댓글