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

Chapter 4. 스레드와 병행성

by 조엘 2020. 9. 17.

안녕하세요 조엘입니다! 운영체제 4단원에 대해 공부해 보았습니다.

Abraham Silberschatz의 Operating System Concepts 10th edition과 학부 수업을 듣고 정리한 내용입니다. 오개념이 있다면 알려주세요~~

 

<스레드란?>

스레드는 CPU 이용의 기본 단위로 명령을 처리한다. 고유의 thread ID, PC, 레지스터 집합, 스택으로 구성이 된다. 

프로세스는 한번에 여러 개의 스레드들을 가질 수 있고, 한번에 한가지 이상의 일을 수행할 수 있게 된다. 

같은 프로세스에 속한 스레드들은 같은 코드/데이터 섹션, 열린 파일, 신호 등과 같은 OS자원들을 공유한다. 

 

<스레드의 장점>

응답성

단일 스레드 프로세스 같은 경우, 해당 연산이 완료될 때 까지 사용자에게 응답하지 않는다. 반면 다중 스레드 프로세스는 일부분이 긴 작업을 수행하더라도 프로그램이의 수행이 계속되어 사용자의 응답성을 증가시킨다. 

자원 공유

프로세스는 앞 포스팅에서 살펴본 공유 메모리/메시지 전달을 통해 통신한다. 스레드들은 하지만 자동으로 속한 프로세스의 자원들을 공유하게 된다. 이로써 같은 주소 공간 내에 여러 작업을 하는 스레드를 가질 수 있다. 

경제성
프로세스의 자원을 공유하는 스레드가 생성, 문맥 교환도 빠르게 이루어진다. 

(Solaris에서는 스레드가 프로세스에 비해 생성은 30배, 문맥 교환은 5배 빠르다고 한다)

규모 적응성

다중 처리기 구조에서 병렬로 수행될 수 있어, 성능 향상이 가능하다. 

 

<다중 코어 프로그래밍>

단일 코어 시스템에서 병행 실행이라 함은 빠른 문맥 교환을 통한 병렬성의 환상에 불과했다.

하지만 다중 코어 시스템에서는 실제로 다른 프로그램이 동시에 수행될 수 있다. 

단일 코어 시스템 vs 다중 코어 시스템

하지만 다중 코어 시스템을 구현하는데엔 다음과 같은 점을 고려해야 한다. 

 

태스크 인식

각 태스크가 독립적으로 개별 코어에서 병렬 실행될 수 있어야 한다. 

균형

별도의 코어를 사용하는게 아깝지 않도록, 균등한 기여도를 가지게 태스크를 분담해야 한다. 

Data 분리

데이터 또한 개별 코어에서 사용할 수 있게 나눠줘야 한다. 

Data 종속성

태스크 사이의 종속성이 (1번 태스크를 수행해야 2번을 정상처리 할 수 있는 등) 없는지 검토한다. 

시험 및 디버깅

디버깅이 단일 스레드보다 훨씬 힘들어진다!

 

<다중 스레드 모델>

 

 

우선 해당 동영상을 통해 커널 레벨 스레드와 유저 레벨 스레드를 이해할 수 있었다. 정리하자면,

 - 유저 레벨 스레드: 사용자 수준에서 개발자가 직접 코드로 작성한 스레드, 커널의 지원 없이 관리됨

 - 커널 레벨 스레드: 커널이 만들어 놔서 API 형태로 제공되는 스레드, OS에 의해 직접 지원되고 관리됨

 

Windows, Linux, macOS를 포함한 거의 모든 현대 OS는 커널 스레드를 지원한다고 한다. 

OS는 사용자 스레드와 커널 스레드 사이의 연관 관계를 확립시켜야 한다. 일반적으로 3가지 방법이 있다. 

 

다대일 모델

많은 사용자 수준 스레드를 하나의 커널 스레드로 사상한다. 

단점은 하나의 스레드가 봉쇄형(동기적) 시스템 콜을 한 경우, 전체 프로세스가 해당 스레드의 처리가 끝날 때 까지 기다려야한다. 또한 한 번에 하나의 스레드만이 커널에 접근함으로, 다중 스레드가 다중 코어 시스템에서 병렬로 실행할 수 없게 된다.

 

일대일 모델

각 사용자 스레드를 각각 하나의 커널 스레드로 사상한다. 

하나의 스레드가 봉쇄적 시스템 콜을 해도, 다른 스레드는 실행이 되어 다대일 모델보다 많은 병렬성이 제공된다. 또한 이 모델은 다중 처리기에서 다중 스레드가 병렬로 수행되는 것을 허용한다. 

단점은 사용자 스레드를 만들 때마다 커널 스레드가 필요해지는데, 너무 많은 커널 스레드는 시스템에 부담을 줄 수 있다. 

 

다대다 모델

여러 개의 사용자 수준 스레드를 그보다 작은, 혹은 같은 수의 커널 스레드로 사상한다. 커널 스레드의 수는 시스템 환경에 따라 결정된다. 

위의 두 모델을 혼합한 형태로, 둘의 단점을 극복할 수 있다. 하지만 구현이 힘들어서 대부분의 운영체제는 일대일 모델을 사용한다. 

 

 

 

반응형

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

Chapter 5. CPU 스케줄링 - 2부  (0) 2020.10.16
Chapter 5. CPU 스케줄링 - 1부  (0) 2020.10.16
Chapter 3. 프로세스 - 2부  (0) 2020.09.17
Chapter 3. 프로세스 - 1부  (0) 2020.09.17
Chapter 2. 운영체제 구조  (0) 2020.09.13

댓글