학교/운영체제

[운영체제] 4. 스레드와 병행성 (Threads and Concurrency)

daykim 2023. 1. 18. 16:31
도서 기반 내용 정리
 

운영체제 | Abraham Silberschatz - 교보문고

운영체제 | ▶ 이 책은 운영체제론을 다룬 이론서입니다. 운영체제론의 기초적이고 전반적인 내용을 학습할 수 있습니다.

product.kyobobook.co.kr

 

목차

  • 개요
  • 다중 코어 프로그래밍
  • 다중 스레드 모델
  • 스레드 라이브러리
  • 암묵적 스레딩
  • 스레드와 관련된 문제들

 

Threads


Threads

프로세스의 작업 흐름 이다.

프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
스레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • CPU 이용의 기본 단위
  • 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린 파일이나 신호와 같은 운영체제 자원을 공유한다.
  • 프로세스가 다수의 제어 스레드를 가진다면, 프로세스는 동시에 하나 이상의 작업을 수행할 수 있다.

싱글 스레드 (Single-thread)

프로세스가 한 번에 하나의 작업만 수행하는 스레드

멀티 스레드 (Multi-thread)

프로세스가 동시에 여러 작업을 수행하는 스레드

Multi-thread 서버 구조

  • 단일 프로세스로 한 번에 하나의 요청만 처리하면, 클라이언트는 자신의 요구가 서비스되기까지 대기를 많이한다.
    따라서 클라이언트로부터 요청이 들어올 때 요청을 수행할 프로세스를 생성한다.
  • 그러나 프로세스 생성 작업은 많은 시간과 자원을 필요로한다.
  • 굳이 새 프로세스를 생성해 오버헤드를 감수하지 않고 스레드를 이용한다.
  • 또한 스레드를 생성하는 것이 더 빠르다.

 

멀티 스레드 장점

  • 응답성 (Responsiveness)
    : 대화형(interactive) 응용을 멀티 스레드화 하면, 응용 프로그램 일부분이 봉쇄되거나, 긴 작업을 수행하더라도 프로그램 수행이 계속되는 것을 허용함으로써, 사용자에 대한 응답성을 증가시킨다.
  • 자원 공유 (Resource sharing)
    : 두 프로세스가 하나의 데이터를 공유하려면 IPC 기법을 사용해야한다. 때문에 효율 떨어지고, 구현, 관리가 힘들다. 스레드는 자동으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다.
  • 경제성 (Economy) : 프로세스 생성을 위해 메모리와 자원을 할당하는 것은 많은 비용이 든다. 스레드는 자신이 속한 프로세스의 자원들을 공유하기 대문에, 스레드를 생성하고 context switch 하는 것이 더욱 경제정이다.
  • 확장성 (Scalability) : 스레드들은 멀티 프로세서에서 분산 할당되어 병렬 처리도 가능한다. -> 프로세스의 처리 성능이 빨라진다. but Single thread는 항상 속도 같다.

 

멀티 코어 프로그래밍 (Multicore Programming)


멀티 스레드 프로그래밍

컴퓨팅 코어를 보다 효율적으로 사용하고, 병행성(동시성)을 향상시키는 기법

동시성(Concurrency)

  • 싱글 프로세서가 여러 스레드를 번갈아 수행함으로써,
    빠르게 진행시 여러 스레드가 동시에 실행되는 것 처럼 보이는 방식
  • 스레드마다 정해진 시간만큼 돌아가며 CPU 자원을 할당받는다. like 멀티태스킹
  • 하나의 시점에서 한 번에 하나의 작업만 처리한다.

병렬성(Parallelism)

  • 멀티 코어가 각 스레드를 동시에 수행하는 방식
  • 멀티 코어 위에서만 구현 가능
  • 각 코어가 독립적으로 연산작업을 시행한다.

병렬 실행의 유형

  • 테스크 병렬 실행 (Task Parallelism)
    여러 코어에 테스크(스레드)를 분배해 각 스레드가 고유의 연산을 실행하는 것
  • 데이터 병렬 실행 (Data Parallelism)
    동일한 데이터의 부분집합을 여러 코어에 분배한 뒤 각 코어에서 동일한 연산을 실행하는 것

 

멀티 스레드 모델 (Multithreading Models)


사용자 스레드 (User Threads)

  • 사용자 응용 프로그램에서 생성하는 스레드
  • 이 스레드는 궁극적으로 CPU에서 실행되도록 커널 스레드에 매핑되어야 한다.

커널 스레드 (Kernel Threads)

  • 운영체제가 직접 관리, 처리하는 스레드

 

다대일 모델 (Many-to-One Model)

많은 사용자 스레드를 하나의 커널 스레드가 대응한다.

  • 한번에 하나의 스레드만 커널에 접근할 수 있다.
  • 다중 스레드가 다중 코어 시스템에서 병렬로 실행될 수 없다.

일대일 모델 (One-to-One Model)

각 사용자 스레드를 각각 하나의 커널 스레드가 대응한다.

  • 다중 처리기에서 다중 스레드가 병렬로 수행되는 것을 허용한다.
  • 사용자 스레드를 만들려면 해당 커널스레드를 만들어야 한다.
  • 많은 수의 커널 스레드가 시스템 성능에 부담을 줄 수 있다.

다대다 모델 (Many-to-Many Model)

여러 개의 사용자 스레드를 그보다 작은 수, 혹은 같은 수의 커널 스레드가 대응한다.

  • 필요한 만큼 많은 사용자 스레드를 생성할 수 있고,
    그에 상응하는 커널 스레드가 멀티 프로세서에서 병렬로 수행될 수 있다.

두 수준 모델 (Two-level model)

다대다 모델과 유사하다.
한 사용자 스레드가 하나의 커널 스레드에만 연관되는 것을 허용하는 모델이다.

  • 가장 융통성 있어보이지만, 실제로 구현하기 어렵다.
  • 점유율이 높아야하는 유저 스레드를 빠르게 처리할 수 있다.

 

스레드 라이브러리


스레드를 만들고 관리하기위한 API를 제공한다.

 

암묵적 스레딩 (Implicit Threading)


수백 수천개의 스레드를 가진 응용을 설계하는 어려움을 극복하고, 병행 및 병렬 응용의 설계를 도와주는 방법으로
스레딩의 생성과 관리 책임을 응용 개발자로부터 컴파일러와 실행시간 라이브러리에게 넘기는 것이다.

 

스레드 풀 (Thread Pools)

스레드 요청때마다 새로운 스레드를 생성, 수행, 삭제를 반복하면 성능이 저하된다.
따라서 미리 스레드 풀에 여러개의 스레드를 만들어두고 요청이 오면 스레드 풀에서 할당해주는 방법

 

스레드와 관련된 문제들 (Threading Issues)


스레드 취소

스레드가 끝나기 전에 그것을 강제 종료 시키는 작업이다.

  • 목적 스레드 : 취소되어야 할 스레드

 

비동기식 취소

한 스레드가 즉시 목적 스레드를 강제 종료 시킨다.

  • 다른 스레드와 공유하는 자료구조를 갱신중 취소 요청이 오면 문제가 된다.

 

지연 취소

목적 스레드가 주기적으로 자신이 강제 종료 되어야 할지 점검한다.
이 경우 목적 스레드가 질서정연하게 강제 종료될 수 있다.

  • 스레드는 자신이 취소되어도 안전하다고 판단되는 시점에 취소 여부를 검사할 수 있다.

'학교 > 운영체제' 카테고리의 다른 글

[운영체제] 6. 동기화 도구들  (0) 2023.01.29
[운영체제] 5. CPU 스케줄링  (0) 2023.01.18
[운영체제] 3. 프로세스 관리  (0) 2023.01.16
[운영체제] 2. 운영체제 구조  (0) 2023.01.09
[운영체제] 1. 서론  (0) 2023.01.07