[Os] 쓰레드

수박·2020년 11월 4일
0

Operation System

목록 보기
3/3

쓰레드

프로세스는 프로그램을 메모리에 올려 실행중인 것을 의미한다.

프로세스는 프로그램에서 사용되는 데이터, 메모리 등의 자원과 쓰레드로 구성된다.

쓰레드란 뭘까?

1. 쓰레드란?

  • 프로세스 내에서 실제적으로 작업을 수행하는 주체.

  • 프로그램(프로세스)의 실행 단위

  • 쓰레드는 쓰레드간 ps에 할당된 메모리, 자원을 공유한다

  • 프로세스와 같이 실행, 준비, 대기 등의 실행상태를 가지며 이 실행상태가 변할 때 마다 쓰레드 문맥교환을 수행한다.

  • 쓰레드 별로 자신만의 스택, 레지스터를 가진다.

  • 한 순간에 하나의 쓰레드만 실행 가능하다.

두개 이상의 쓰레드를 갖는 프로세스를 멀티 쓰레드 프로세스라고 한다.

1.1 왜 쓰레드?

이전에 웹 서버는 클라이언트로부터 요청을 받을 때 한번에 하나에 대해 응답했다고 한다. (동기방식)

그러면 사용자는 요청한 작업이 마무리될 때까지 아무것도 할 수 없는 상태가 되는데, 서버 자체를 프로세스로 동작하게 해서 요청이 들어왔을 때 이를 수행할 수 있는 프로세스를 계속 생성하는 것 방식이 대중화되었었다.

그러나 프로세스를 생성하는 과정은 많은 시간과 자원을 소비한다 요청마다 프로세스를 생성하고 작업이 완료되면 다른 프로세스에게 cpu이양을 하고,, 오버헤드가 엄청나게 생기게 된다. 그래서 프로세스 내에 같은 일을 하는 여러 쓰레드를 만들어서 프로세스간 문맥교환을 하지 않고, 프로세스는 새로운 요청을 받으면 이를 서비스할 새로운 스레드를 만들고 다시 요청을 listen하는 작업을 재개하는 방식을 사용한다.

image

이를 다중 쓰레드 서버라고 한다.

다시말해 기존에 프로세스가 하던 일을 쓰레드가 대신하여 오버헤드를 감소시켰다고 이해할 수 있다.

대부분 OS 커널은 다중 스레드로 이루어져있다.

1.2 다중 쓰레드의 장점

  • 응답성: 긴 작업을 수행하더라도 프로그램 수행이 계속될 수 있다(ex . 게임 다운로드시 아무것도 못하는게 아니라 다른 것 할 수 있음)

  • 자원공유: ps의 메모리, 자원을 공유하므로 커널도움없이 상호간 통신가능하다.

  • 경제성 : 프로세스보다 생성, 종료시간, 그리고 문맥교환시간이 짧다.

  • scalability : 다중 처리기 구조에서 이점이 더욱 증가. -> 각 스레드가 다른 처리기에서 병렬로 수행될 수 있음. (단일 스레드는 오직 한 처리기에서만 수행)

2. 다중 쓰레드 모델

쓰레드도 종류가 있는데 사용자레벨쓰레드와 커널레벨쓰레드가 있다.

2.1 사용자 레벨 쓰레드

사용자가 import, include <thread>로 쓰레드를 이용하는 것을 의미한다.

2.2 커널 레벨 쓰레드

커널 내에 있는 쓰레드를 의미하고 사용자쓰레드와의 연관관계를 표현한 모델의 3가지 종류는 다음과 같다.

다대일, 일대일, 다대다 모델.

2.2.1 다대일 모델

image

많은 사용자 쓰레드를 하나의 커널 쓰레드로 매핑한다.

한 쓰레드가 봉쇄형 시스템 콜을 할 경우 전체 프로세스가 봉쇄된다.

다시말해 커널프로세스가 다수의 사용자쓰레드를 매핑하고 있기에 커널스레드가 봉쇄형시스템콜을 할 경우 다수의 사용자쓰레드도 같이 봉쇄된다는 의미.

이 모델을 사용중인 시스템은 거의 존재하지 않는다 ㅋㅋ;

2.2.2 일대일 모델

image

하나당 하나의 커널 스레드가 매핑하고 있어서 다대일 모델보다 더 많은 병렬 성을 제공

단점은 사용자 스레드를 만들려면 해당 커널 스레들을 만들어야하고, 많은 수의 커널 스레드가 시스템 성능에 부담을 줄 수 있다

2.2.3 다대다 모델

다수 사용자 스레드 수>= 다수 커널 스레드 수만큼 멀티플렉스한다 (;; 다대다 연결인듯)

커널 스레드 수는 프로그램이나 기계에 따라 결정됨

코어가 높을수록더 많은 커널 스레드를 할당받을 수 있음.

다대일과 일대일의 변형이라서 two-level-model이라 함. 다대다도되고 일대일도 되기 때문.

구현이 어렵다

대부분 일대일모델을 사용하고 있음..

보충1.3 :fallen_leaf: 다중 스레드 모델 secho

1번.

쓰레드의 종류 2가지에는 뭐가 있을까요?


2번

특정 기계나 응용프로그램에 따라 할당되는 수가 달라지는 __스레드와 import, #include 를 이용해 사용하는 ___쓰레드간의 연관관계를 표현한 모델의 종류에는 ___, ___, ___모델이 있다. 이 중에 ___모델은 ___모델이라고도 불리우며 ___모델과 ___모델의 변형이다. 대부분 운영체제는 ___모델을 사용하고 있다

:page_facing_up: 답지

1번.

쓰레드의 종류 2가지에는 뭐가 있을까요?

  • 사용자쓰레드, 커널 쓰레드

2번

특정 기계나 응용프로그램에 따라 할당되는 수가 달라지는 커널스레드와 import, #include 를 이용해 사용하는 사용자쓰레드간의 연관관계를 표현한 모델의 종류에는 다대다, 다대일, 일대일모델이 있다. 이 중에 다대다모델은 two-level모델이라고도 불리우며 다대일모델과 일대일모델의 변형이다. 대부분 운영체제는 일대일모델을 사용하고 있다



문제4 🏃‍프로세스와 스레드의 차이점을 설명해보세요

프로세스
  • 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.
  • 프로세스는 운영체제로부터 메모리, 주소공간등을 할당받고 쓰레드는 할당받은 자원들을 내부 스레드끼리 공유하면서 실행됩니다.
쓰레드
  • 쓰레드를 사용하는 이유는 운영체제에서 더 효율적으로 시스템 자원을 관리하기 위해 사용된다고 할 수 있습니다.

  • 멀티 프로세스로 진행되는 작업을 멀티 쓰레드로 수행하게 되면 시스템 콜이 줄어들기 때문에 자원을 효율적으로 관리 할 수 있고 프로세스의 통신비용보다 쓰레드간의 통신 비용이 적다는 이점도 있습니다.

  • 단 쓰레드간의 자원공유는 전역변수를 이용하므로 동기화 문제에 신경을 써야하며 멀티스레드 프로그래밍은 프로그래머의 주의를 요구합니다.

    출처

0개의 댓글