쉽게 배우는 OS Chapter03_Thread
4. 스레드
4.1 스레드의 개념
- 프로세스(heavy-weight process) : 운영체가 자원을 할당한 작업의 단위. 메모리에 올라가서 동작하고 있는 프로그램.
- 스레드(light-weight process) : CPU가 처리하는 작업의 단위. 프로세스는 하나 이상의 스레드를 가지고 있다. 스레드는 프로세스를 완성하는 여러 흐름…
- 태스크 : 관념적인 프로세스..? 프로세스는 메모리에 올라간 실제하는 것이지만, 태스크는 프로세스를 부르는? 관념적, 개념적인 느낌인거같다…
용어 정리
- 멀티 태스킹 : 시분할 시스템에서 CPU가 작업을 잘 나누어 배분하는 기법. 정해진 시간(타입슬라이스)씩 번갈아가면서 task들을 수행하여 여러 작업을 동시에 실행하는것 처럼 보이게 한다.
- 멀티 스레드 : 프로세스 내부의 작업 흐름을 여러개의 스래드로 분할하여 작업의 부담을
- 멀티 프로세싱 : 여러 CPU를 사용해 여러 스레드를 동시에 처리하는 작업 환경.
- CPU 멀티 스레드 : HW적인 방법을 사용해 하나의 CPU에서 여러 스레드를 동시에 처리하는 병렬처리 기법
4.2 멀티 스레드의 구조와 예
4.2.1 멀티 스레드의 구조
만약 클라우드와 동기화 되는 워드 파일 작업을 한다고 했을때, 멀티스레드 없이 멀티 태스킹 방식을 사용한다고 한다고 가정을 해보자. 그렇다면 작업중인 워드의 프로세스를 그대로 fork해서 클라우드 연결 기능만 사용해야할 것이다. 그렇게되면 code, 입력중인 data, 열린 file등등을 그대로 복사하는게 너무 아까워진다. 이러한 낭비를 해결할수 있는게 멀티 스레드이다.
이미지 오른쪽의 멀티스레드 방식에서는 프로세스 내부에 파일을 작성하는 스레드(작업 단위)와 클라우드와 통신하는 스레드가 병렬 동작된다. 그리고 프로세스의 code, data, file등등을 공유하기 때문에 낭비되는 자원이 더욱 줄어든다.
4.2.2 멀티스레드의 장점
- 응답성 향상 : 프로세스의 특정 부분 오래 대기/작업하여도 다른 부분이 동작하고 있으므로 응답성이 향상한다.
- 자원 공유 : 스레드를 이용하면 IPC같은 통신 없이 자동적으로 그들이 속한 프로세스내에서 자원을 공유한다.
- 경제성 : 프로세스를 생성하거나, 문맥전환을 하는것은 많은 자원을 필요로 한다. 스레드에서는 훨신 더 적은 비용으로 문맥전환이 가능하다. 등등…
4.2.3 멀티스레드의 단점
모든 스레드가 프로세스 내의 공통 자원을 공유하므로, 한 스레드라도 문제가 생기면 프로세스 전체에 영향을 미친다.
4.2.4 멀티스레드 모델
이미지 출처 : Uday Kiran Jonnala의 글
- 사용자 레벨 스레드 - 1 to N : 라이브러리를 통해 구현되는 스레드이며, 커널 대신 라이브러리가 스케줄링, 동기화 등등의 기능을 대신 수행한다. 시스템 호출을 통해 커널 기능을 수행해야한다. 이때, 라이브러리는 여러개의 스레드를 만들었지만 이를 실제로 실행하는 커널의 입장에서는 하나의 스레드만 처리하기 때문에 1 to N 모델이라고 한다. 단점으로는 하나의 스레드가 대기상태에 들어가면 모든 스레드가 대기상태가 된다(이를 실제로 수행하는 커널 입장에서는 하나의 프로세스이므로).
- 커널 스레드 - 1 to 1: 커널 자체에서 멀티 스레드를 수행하는 방식. 커널이 관리 및 보호를 알아서 해준다. 커널의 스레드당 하나의 사용자 스레드가 사상되므로 1 to 1모델이라고 한다.
추가 공부 내용 : PCB와 TCB(Thread Control Block)