티스토리 뷰

CS/운영체제 공부

스레드

on1ystar 2019. 3. 26. 21:21
728x90
반응형

본 내용은 학교 강의를 통해 개인적으로 공부한 내용입니다. 책은 쉽게 배우는 운영체제(한빛아카데미)를 참고했습니다. 조언은 언제든지 감사합니다 !


스레드프로세스의 코드에 정의된 절차에 따라 CPU에 작업을 요청하는 실행 단위, 흐름의 단위다.

그렇다면 프로세스와 스레드의 차이는 무엇일까?

운영체제 입장에서의 작업 단위는 프로세스이고 CPU 입장에서의 작업 단위는 스레드다.



작업 관리자를 열어 성능 탭을 눌러보면 CPU의 처리 현황을 알 수 있는데, 프로세스는 161개인 반면 스레드는 2228개나 된다.

즉, 하나의 프로세스에 여러 개의 스레드 흐름이 진행되고 있다는 것이다.



멀티태스크멀티스레드



멀티태스크 CPU가 시분할 시스템으로 작업을 처리하는 것으로, 이때 전달받은 프로세스는 하나의 스레드로 이루어진 프로세스다. 따라서 사실상 하나의 스레드를 전달받은 것이고, 이 스레드를 시분할 시스템(각각 처리하는 시간을 잘게 쪼개서)으로 처리한다. 때문에 여러 흐름이 동시에 진행되는 것처럼 처리된다.

하지만 프로세스를 여러 개 만들어 처리하는 방법은 코드 영역과 데이터 영역의 중복이 발생해 메모리 낭비를 발생시키게 된다.

하지만 멀티스레드를 사용할 경우 이 문제를 해결할 수 있다.

멀티스레드는 하나의 프로세스 안에서 작업을 여러 개의 스레드로 분할하는 방법이다. , 절차지향의 프로그램보단 객체지향적인 프로그램에 어울리는 방식이라고 할 수 있다.



이 멀티스레드 방식은 스레드들이 프로세스의 정적 영역인 코드나 정적 데이터들을 공유하게 된다. 스레드에 의해 바뀌는 부분은 프로세스의 동적 영역(레지스터 값, , 스택 등)이다. 따라서 중복되는 데이터들을 줄여 메모리 낭비를 최소화할 수 있다.

게다가 속도 면에서도 여러 개의 프로세스를 시분할 방식으로 처리하는 것 보다 멀테스레드를 처리하는 것이 효율적이고 훨씬 빠르다.

또한 멀티태스크의 경우 각각의 프로세스가 독립적인 성향이 강한 반면 멀티스레드는 서로 끈끈하게 이어져 있다.



멀티스레드의 장단점



위에서 멀티스레드의 장점을 몇 가지 말하긴 했지만 다시 정리해보자.


장점

응답성 향상 - 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작업을 계속할 수 있다.


자원 공유 - 한 프로세스 내에서 독립적인 스레드를 생성해도 프로세스가 가진 자원을 공유한다. 


효율성 향상 - 여러 개의 프로세스를 생성하는 것과 달리 불필요한 자원의 중복을 막음으로써 시스템의 효율 향상


다중 CPU 지원  - 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하여 CPU사용량이 증가하고 프로세스의 처리 시간이 단축된다.


단점

멀티스레드의 경우 모든 자원을 공유하기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미칠 수 있다.

여러 개의 브라우저 창을 띄웠을 시에 만약 멀티스레드라면 한 화면에 문제가 생기게 될 경우 브라우저 프로세스 전체가 종료될 수도 있다. 이 때문에 크롬은 멀티태스킹을 이용한다.

요즘은 메모리가 넉넉하고 멀티코어 CPU가 대중화되어 여러 개의 프로세스를 여러 개의 CPU에 동시에 실행할 수 있게 되기도 했다.



멀티스레드 모델



커널 스레드 : 커널이 직접 생성하고 관리하는 스레드

사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드


사용자 레벨 스레드

라이브러리에서 커널이 지원하는 스케줄링, 동기화, 정보처리 등을 구현하여 처리한다. 사용자 프로세스 내에는 여러 개의 스레드가 존재하지만, 커널의 입장에서는 이를 하나의 프로세스로 인식하기 때문에 커널의 스레드 하나와 연결된다. 

때문에 1 to N 모델 이라고도 한다.


장점

라이브러리 내에서 스레드를 직접 스케줄링하고 제어하기 때문에 커널 모드로의 문맥 교환(context switching)을 할 필요가 없어지게 되어 처리 속도가 빨라진다.

커널 모드에서 스레드를 스케줄링하는 것이 아니기 때문에 라이브러리만 있으면 어떠한 운영체제에서도 커널에 종속되지 않고 프로세스를 실행할 수 있다. = 이식성이 좋다.


단점

이 모델에는 치명적인 단점이 있다. 커널이 프로세스의 멀티 스레드를 인식하지 못하고 하나의 프로세스로 인식하기 때문에 여러 개의 CPU를 가지고 있는 커널이더라도 스레드를 나누어 처리하지 못한다. 즉 멀티 프로세싱이 불가하다.

또한 여러 개의 스레드를 커널이 하나의 스레드처럼 처리하기 때문에 사용자 스레드 하나가 I/O 처리를 위한 블록상태에 들어가면 나머지 모든 사용자 스레드들도 블록된다.

보안에 있어서도 커널 모드보다 유저 모드의 라이브러리에서 구현되는 것이 더 취약하다.


커널 레벨 스레드

커널이 멀티스레드를 지원하므로 하나의 사용자 스레드가 하나의 커널 스레드와 연결되는 1 to 1 모델이다.


각각의 사용자 스레드를 커널 스레드가 맡아 직접 스케줄링하고 제어하기 때문에 병렬적인 처리가 가능하다.

현재 대부분의 운영체제에서 지원하고 사용하는 모델이다.


장점

특정 스레드가 블록상태에 들어가더라도 다른 작업을 계속할 수 있다.

멀티 프로세싱이 가능하다.

커널이 제공하는 보안 서비스를 받을 수 있다.


단점

유저 모드와 커널 모드를 왔다갔다 하면서 문맥 교환을 해야하기 때문에 오버헤드가 발생한다. 

또한 상대적으로 커널이 하는 일이 많아져 부담을 주기 때문에 시스템 성능이 떨어질 수 있다. (하지만 지금의 컴퓨터 성능으로는 이러한 단점을 충분히 커버할 만큼이기 때문에 커널 스레드를 선호한다)


멀티 레벨 스레드

사용자 레벨 스레드와 커널 레벨 스레드 방식을 혼합한 M to N 모델이다.


두 모델의 장단점을 모두 가지고 있는 모델로 여전히 오버헤드의 문제는 있지만, 상황에 맞게 사용자 레벨 스레드와 커널 레벨 스레드로 작동하는 유연함을 가질 수 있다.




728x90
반응형

'CS > 운영체제 공부' 카테고리의 다른 글

물리 메모리 관리 (Physical Memory Management) 개요  (0) 2019.05.14
CPU 스케줄링  (1) 2019.03.30
프로세스 메모리 구조, 시스템 호출  (0) 2019.03.24
프로세스  (0) 2019.03.22
Kernel (커널)  (0) 2019.03.10
댓글