[운영체제] 스레드

su_y2on·2022년 9월 9일
0

CS

목록 보기
3/9
post-thumbnail

1일차 : 스레드

스레드

스레드는 하나의 프로세스 안에서 자원을 공유하며 존재하며 프로세서할당의 단위이다. 스레드는 제어요소와 그 외의 요소로 나뉘는데 이중 제어요소는 스레드별로 가지고있는 것이다.. 스레드의 환경정보와 지역데이터, 스택이 제어요소이다.

프로세스에 할당된 메모리 영역중에는 스택을 제외한 코드, 데이터, 힙 부분은 공유한다.




스레드의 장점

일부 스레드가 지연되어도 다른 스레드는 작업을 이어할 수 있기 때문에 응답성이 좋다. 프로세스와 다르게 스레드는 자원을 공유하기 때문에 커널의 개입을 피해 효율성이 증가한다. 또한 프로세스에 비해 생성과 context switch에서 적은 비용이 든다. 게다가 멀티 프로세서환경에서는 병렬처리가 가능하다.

병렬 vs 병행

병행처리는 왼쪽 그림처럼 하나의 코어가 여러 스레드를 번갈아 가면서 처리해주는 것이다. 이는 마치 동시에 처리되는 것처럼 느끼게 해준다.

병렬처리는 오른쪽 그림처럼 여러 코어가 각각의 스레드의 일을 맡아 정말 동시에 여러 스레드가 실행되는 것이다.




스레드의 구현

사용자 수준 스레드(N:1)

사용자 영역에서 스레드가 구현되고 관리된다. 따라서 커널은 스레드의 존재를 모르고 프로세스별로 관리를 한다. 따라서 커널의 개입없이 유연하게 관리가 가능하지만 하나의 스레드가 block되면 해당 프로세스의 나머지 스레드도 대기를 해야한다.

커널 수준 스레드(1:1)

커널에서 스레드를 생성하고 관리한다. 따라서 커널이 개입하기 때문에 비용이 크다. 하지만 스레드 별로 프로세서를 할당할 수 있기 때문에 다른 스레드의 block여부와 상관없이 다른 스레드들이 돌아갈 수 있다.(병행처리불가)

혼합형 스레드(N:M)

n개의 사용자 수준 스레드와 m개의 커널 수준 스레드를 사용하는 모델로 커널스레드는 자신에게 할당된 사용자 스레드가 block되어도 다른 스레드를 수행하게 할 수 있다. (병행처리가능)

0개의 댓글