[운영체제] Chapter 4. Treads & Concurrency

강현주·2025년 2월 20일

4.1 Overview

스레드는 CPU 활용의 기본 단위로, 스레드 ID, 프로그램 카운터(PC), 레지스터 세트, 스택으로 구성된다. 스레드는 동일한 프로세스에 속한 다른 스레드와 코드 섹션, 데이터 섹션, 열린 파일 및 신호와 같은 기타 운영 체제 리소스를 공유한다. 기존 프로세스에는 싱글 제어 스레드가 있다. 프로세스에 여러 개의 제어 스레드가 있는 경우 한 번에 두 개 이상의 작업을 수행할 수 있다. 그림 4.1은 기존 싱글 스레드 프로세스멀티 스레드 프로세스의 차이점을 보여준다.

4.1.1 Motivation

최신 컴퓨터와 모바일 장치에서 실행되는 대부분의 소프트웨어 애플리케이션은 멀티스레드이다. 애플리케이션은 일반적으로 여러 개의 스레드로 제어되는 별도의 프로세스로 구현된다.

멀티 스레드 애플리케이션 예:

  • 이미지 모음에서 사진 썸네일을 만드는 애플리케이션은 별도의 스레드를 사용하여 각각의 개별 이미지에서 썸네일을 생성할 수 있다.
  • 웹 브라우저에서는 한 스레드가 이미지나 텍스트를 표시하는 동한 다른 스레드가 네트워크에서 데이터를 검색할 수 있다.
  • 워드 프로세서에는 그래픽을 표시하는 스레드, 사용자의 키 입력에 응답하는 다른 스레드, 백그라운드에서 맞춤법 및 문법 검사를 수행하는 세 번째 스레드가 있을 수 있다.

특정 상황에서 여러 유사한 task를 수행하는 데 싱글 애플리케이션이 필요할 수 있다. 예를 들어, 웹 서버는 웹 페이지, 이미지, 사운드 등에 대한 클라이언트 요청을 수락한다. 바쁜 웹 서버는 여러(아마 수천 개)의 클라이언트가 동시에 액세스하고 있을 수 있다. 웹 서버가 기존의 싱글 스레드 프로세스로 실행되면 한 번에 한 클라이언트만 서비스할 수 있으며 클라이언트는 요청이 서비스될 때까지 매우 오랜 시간을 기다려야 할 수 있다.

한 가지 해결책은 요청을 수락하는 싱글 프로세스로 서버를 실행하는 것이다. 서버가 요청을 받으면 해당 요청을 처리하기 위해 별도의 프로세스를 만든다. 그러나 프로세스 생성은 시간이 많이 걸리고 많은 리소스가 필요하다. 일반적으로 여러 스레드가 포함된 하나의 프로세스를 사용하는 것이 더 효율적이다. 웹 서버 프로세스가 멀티 스레드인 경우 서버는 클라이언트 요청을 수신하는 별도의 스레드를 만든다. 요청이 이루어지면 다른 프로세스를 만드는 대신 서버는 요청을 처리하기 위해 새 스레드를 만들고 추가 요청을 수신하기 시작한다. 이는 그림 4.2에 나와 있다.

대부분의 운영 체제 커널도 일반적으로 멀티 스레드이다. 예를 들어, Linux 시스템에서 시스템 부팅 시간 동안 여러 스레드가 생성된다. 각 스레드는 장치 관리, 메모리 관리 또는 인터럽트 처리와 같은 특정 작업을 수행한다.

많은 애플리케이션은 기본 정렬, 트리, 그래프 알고리즘을 포함하여 멀티 스레드를 활용할 수도 있다. 또한 데이터 마이닝, 그래픽, 인공 지능에서 현대의 CPU 집약적 문제를 해결해야하는 프로그래머는 병렬로 실행되는 솔루션을 설계하여 현대의 멀티코어 시스템의 힘을 활용할 수 있다.

4.1.2 Benefits

  1. Responsiveness(반응성)
    interactive 애플리케이션을 멀티스레딩하면 프로그램의 일부가 차단되거나 긴 작업을 수행하더라도 프로그램이 계속 실행될 수 있으므로 사용자에 대한 반응성이 향상된다. 이 특성은 특히 사용자 인터페이스를 설계하는 데 유용하다. 싱글 스레드 애플리케이션은 작업이 완료될 때까지 사용자에게 응답하지 않는 반면, 시간이 많이 걸리는 작업이 별도의 비동기 스레드에서 수행되는 경우 애플리케이션은 사용자에게 응답한다.

  2. Resource sharing(리소스 공유)
    프로세스는 공유 메모리 및 메시지 전달과 같은 기술을 통해서만 리소스를 공유할 수 있다. 그러나 스레드는 기본적으로 자신이 속한 프로세스의 메모리와 리소스를 공유한다. 코드와 데이터를 공유하는 이점은 애플리케이션이 동일한 주소 공간 내에서 여러 개의 서로 다른 활동 스레드를 가질 수 있다는 것이다.

  3. Economy(경제성)
    프로세스 생성을 위해 메모리와 리소스를 할당하는 것은 비용이 많이 든다. 스레드는 자신이 속한 프로세스의 리소스를 공유하기 때문에 스레드를 생성하고 컨텍스트 스위칭하는 것이 더 경제적이다. 일반적으로 스레드 생성은 프로세스 생성보다 시간과 메모리를 덜 소모하고, 컨텍스트 스위칭은 프로세스 간보다 스레드 간에 더 빠르다.

    Context Switch
    컨텍스트 스위칭이란, CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것이다. 컨텍스트란 프로세스/스레드의 상태를 의마한다.

  4. Scalability(확장성)
    멀티스레딩의 이점은 여러 스레드가 서로 다른 프로세싱 코어에서 병렬로 실행될 수 있는 멀티프로세서 아키텍처에서 훨씬 더 클 수 있다. 싱글 스레드 프로세스는 사용 가능한 프로세서 수에 관계없이 하나의 프로세서에서만 실행될 수 있다.

0개의 댓글