본문 바로가기
컴퓨터공학/운영체제

쓰레드

by Daniel.kwak 2018. 10. 24.

목표

1.쓰레드에 대해서 이해한다.

2.쓰레드의 이점과 단점에 대해서 알아본다.

3.다중 쓰레드와 단일 쓰레드의 차이에 대해서 이해한다.

4.쓰레드 용법에 대해서 알아본다.

5.쓰레드의 상태변환에 대해서 파악한다.



쓰레드란

프로세스가 실행중인 프로그램이라면, 쓰레드는 프로세스를 이루는 CPU의 작업 단위 중 하나이다.(경량화 프로세스라고도 한다.light Process)

따라서 프로세스는 하나 이상의 쓰레드(작업 쓰레드)를 가지며, 쓰레드는 쓰레드ID(식별자), 프로그램 카운터, 레지스터 집합, 스택으로 구성된다. 




<쓰레드의 메모리 구조>


쓰레드를 사용함으로써 얻는 이점

1.사용자 응답성 증가:응용 프로그램의 일부 기능이 서버 통신이나 다소 긴 처리를 요구하더라도, 쓰레드로 구현함으로써 다른 기능들은 block되지 않고 계속 실행 가능하다.

2.자원공유: 하나의 프로세스에서 생성된 복수의 쓰레드는 프로세스의 자원(코드, 데이터, 힙 영역)을 공유함으로써, 별도의 IPC같은 통신장치가 없어도 통신이 가능하여 편리하다.

3.경제성: 프로세스를 생성하는것과 쓰레드를 생성하는 것을 비교하면 쓰레드가 훨씬 경제적이다. (프로세스를 지속적으로 생성하면 컴퓨터에 따라 overhead가능성이 있다.) 또한 CPU의 Context Switching또한 프로세스에 비해 훨씬 속도가 빠르기 때문에 경제적이다.



다중 쓰레드와 단일 쓰레드

OS는 하나의 프로세스에서 단일 쓰레드와 다중 쓰레드를 지원한다.

단일 쓰레드란 <쓰레드의 메모리 구조> 그림에서와 같이 하나의 프로세스에 하나의 작업 쓰레드만 할당된 경우이다. MS-DOS같이, 한번에 하나의 명령만 실행하는 경우이다.

다중 쓰레드는 그에 비해 활용도가 높다. kernel의 개입 없이 각 쓰레드는 독립적으로 실행되고 프로세스 데이터를 공유함으로써 서로 통신이 가능하며, 많은 요청이 들어오는 서버도 다중 쓰레드 프로그래밍을 통해 문제를 해결할 수 있다. 예를 들어, 하나의 쓰레드가 어떤 파일을 읽어들여 메모리에 적재하였으면, 다른 쓰레드 또한 메모리에 접근하여 해당 파일을 읽을 수 있게되는 것이다. <이점> 파트에서 살펴봤듯이, 프로세스에 비해 Context Switching이 빠르고, 생성도 빠르다.



쓰레드 용법

그럼 쓰레드를 쓰는 환경은 어떤게 있을까?

1.사용자 수준에서 쓰레드 제공: 시스템 콜이 아니기 때문에 OS에 관여하지 않으므로 속도가 매우 빠른 처리가 가능하다. 하나의 쓰레드는 자료 입력 메뉴표시, 다른 쓰레드는 사용자 명령을 실행함으로써, 명령이 완료되기 전 다음 명령 준비로 응용의 속도 증가를 기대할 수 있다.

2.프로그램 내의 비동기적 실행 구현: 지정된 시간마다 업데이트, 혹은 백업을 해야한다면 해당 시간마다 해당 작업을 조용히 수행하는 백업 쓰레드를 생성하여 처리할 수 있다.

3.불리한 점도 있는데, 사용자 수준에서의 쓰레드 환경에서 커널 자체가 쓰레드 하나로 구성되어 있다보니, 하나의 쓰레드가 시스템 콜을 진행하면 결과를 리턴받을때 까지 대기해야 한다는 단점도 있다.



쓰레드의 상태 변환

프로세스와 비슷하게 준비,실행,대기,종료의 상태를 가진다. processor를 같이 사용하며, 한 순간에는 하나의 쓰레드만 사용이 가능하다. 다중 쓰레드 환경에서는 순차적으로 쓰레드가 실행된다.



<쓰레드의 상태변환>

대기:이벤트를 기다리고 있는 상태이다. 자신의 프로그램 카운터와 스택 정보를 저장한다.
준비:processor에 의해 쓰레드가 실행 될 수 있는 상태이며 대기시킨 이벤트가 발생하면 '준비 리스트'에 들어간다.
실행:쓰레드가 현재 processor를 점유하며 실행중인 상태이다.
종료:쓰레드가 작업을 수행하고 나면 레지스터 문맥과 스택 할당이 제거된다.





참고

http://brownbears.tistory.com/39

https://mooneegee.blogspot.com/2015/01/os-thread.html

https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)

http://boanin.tistory.com/84

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

메모리 관리 전략(1)  (0) 2018.10.27
프로세스 동기화(뮤텍스,세마포어,임계구역)  (0) 2018.10.26
DeadLock(교착상태)  (0) 2018.10.25
CPU 스케쥴링 알고리즘  (0) 2018.10.24
프로세스와 쓰레드의 차이점  (0) 2018.10.24
프로세스(Process)  (0) 2018.10.24