Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

4.1 Thread & Concurrency Overview 본문

OS/OS Design

4.1 Thread & Concurrency Overview

알 수 없는 사용자 2024. 4. 13. 16:49

 프로세스는 하나의 실행 프로그램과 하나의 제어 스레드를 가진 것으로 가정했다. 하지만 현재는 대부분 프로세스 하나에 여러 개의 제어 스레드를 포함할 수 있는 기능을 제공한다. 스레드를 사용하여 병렬성의 기회를 식별하는 것은 여러 CPU를제공하는 현대의 다중 코어 시스템에서 점점 더 중요해지고 있다. 여기서는 Pthreads, Windows 및 Java 스레드 라이브러리의 API에 대한 개념과 도전 과제를 비롯한 여러 가지 개념을 보고, 개발자가 병렬성의 기회를 식별하는 데 집중하고 언어 기능 및 API 프레임워크가 스레드 생성 및 관리의 세부 사항을 처리하도록 하는 스레드 생성 개념을 추상화하는 여러 가지 새로운 기능을 볼 수 있다.

 스레드는 CPU 활용의 기본 단위이며, 스레드 ID, 프로그램 카운터 PC, 레지스터 세트, 스택으로 구성된다. 이는 동일한 프로세스에 속하는 다른 스레드와 코드 섹션, 데이터 섹션 및 열린 파일 및 시그널과 같은 다른 운영체제 리소스를 공유한다. 전통적인 프로세스는 single-threaded process의 형태이며, 여러 개의 스레드를 가지고 있다면 multithreaded process이다.

 

4.1.1 Motivation

 현대 컴퓨터 및 모바일 장치에서 실행되늩 대부분의 소프트웨어 응용프로그램은 다중 스레드이며, 응용 프로그램은 일반적으로 여러 스레드의 제어를 가진 별도의 프로세스로 구현된다.

  • 이미지 컬렉션에서 사진 섬네일을 생성하는 프로그램은 각 이미지마다 별도의 스레드를 사용하여 섬네일을 생성할 수 있다.
  • 웹 브라우저는 이미지나 텍스트를 표시하는 스레드와 동시에 네트워크에서 데이터를 가져오는 스레드를 가질 수 있다.
  • 워드 프로세서는 그래픽을 표시하는 스레드, 사용자로부터 키 입력을 처리하는 스레드백그라운드에서 맞춤법 및 문법 검사를 수행하는 스레드를 가질 수 있다.

 응용 프로그램은 다중 코어 시스템의 처리 능력을 활용되도록 설계되며, 이러한 응용 프로그램은 여러 컴퓨팅 코어에 걸쳐 병렬로 여러 CPU 집약적인 작업을 수행할 수 있다. 특정 상황에서는 단일 응용 프로그램이 위처럼 여러 유사한 작업을 수행해야 할 수 있다. 활발한 웹서버가 1000개의 고객을 동시에 서버에 액세스하도록 할 수도 있다.

 해결책으로는 서버가 요청을 수락하는 것은 단일 프로세스에게 맡기고, 요청을 받으면 해당 요청을 처리하기 위해 별도의 프로세스를 생성하는 것이다. 실제로 이 프로세스 생성 방법은 스레드가 인기를 얻기 전에 흔히 사용되었다. 하지만 프로세스 생성은 시간이 많이 소요되고 자원을 많이 사용한다. 따라서 기존 프로세스와 동일한 작업을 처리하는 것에 대한 해결법으로는 여러 스레드를 포함하는 하나의 프로세스를 사용하는 것이 더 효율적이다.

 대부분의 운영체제 커널도 일반적으로 멀티스레드이다. 각 스레드는 장치 관리, 메모리 관리, 인터럽트 처리와 같은 특정 작업을 수행한다. 실행중인 리눅스 시스템에서는 ps -ef 명령을 사용하여, 커널 스레드를 표시할 수 있다. 이 명령의 출력을 살펴보면 모든 다른 커널 스레드의 부모로 작동하는 커널 스레드 kthreadd(pid = 2) 가 표시된다.

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

 

4.1.2 Benefits

  • Responsiveness - 프로그램의 일부가 차단되거나 긴 작업을 수행하는 동안에도 프로그램이 계속 실행될 수 있으며, 시간이 오래 걸리는 작업이 별도의 비동기 스레드에서 수행되면 응용 프로그램은 사용자에게 반응적으로 유지되기 때문에 사용자 인터페이스를 설계할 때 유용하게 된다.
  • Resource Sharing - 프로세스는 Shared-Memory와 Message-Passing 과 같은 기술을 통해서만 리소스를 공유할 수 있고, 명시적으로 프로그래머에 의해 프로세스, 자원들이 정리되어야 한다. 하지만 thread는 기본적으로 자신이 속한 프로세스의 메모리와 리소스를 공유합니다. 코드와 데이터를 공유하는 이점은 응용 프로그램이 동일한 주소 공간 내에서 여러 가지 활동 스레드를 가질 수 있게 한다.
  • Economy - 프로세스 생성을 위해 메모리와 리소스를 할당하는 것은 비용이 많이 들기 때문에 thread는 속한 프로세스의 리소스를 공유하여 스레드를 생성하고 context switching 이 더 경제적이다. 오버헤드의 차이를 정량적으로 측정하는 것은 어려울 수 있지만, 일반적으로 스레드 생성은 프로세스 생성보다 시간과 메모리를 덜 소비합니다. 게다가 스레드 간의 컨텍스트 전환은 일반적으로 프로세스 간의 컨텍스트 전환보다 빠릅니다.
  • Scalability - 멀티스레딩의 이점은 멀티프로세서 아키텍처에서 더욱 커질 수 있다. 여러 스레드가 서로 다른 처리 코어에서 병렬로 실행될 수 있는 경우이다. 단일 스레드 프로세스는 사용 가능한 프로세서가 몇 개이든 하나의 프로세서에서만 실행될 수 있다.

 

'OS > OS Design' 카테고리의 다른 글

4.3 Multithreading Models  (0) 2024.04.13
4.2 Multicore Programming  (0) 2024.04.13
3.7 Examples of IPC Systems  (1) 2024.04.13
3.6 IPC in Message-Passing Systems  (0) 2024.04.13
3.5 IPC in Shared-Memory Systems  (0) 2024.04.12
Comments