운영체제 CHATER4 - 스레드(Threads) (1)

LYN L·2022년 8월 25일
0

Operating-System

목록 보기
4/5

CHATER4 미리보기

  • CPU 이용의 기본 단위인 threads에 대해 알 수 있다.
  • Pthreads API로 대표되는 Thread Library에 대해 알 수 있다.
  • Multi-Threaded Programming에 관련된 issue에 대해 알 수 있다.

4.1 개요 (Overview)

  • Thread는 CPU 이용의 기본 단위이다. 프로세스의 작업 흐름을 말한다.
  • Thread는 Thread ID, Program Counter, Register set, stack으로 구성된다.
  • Thread는 같은 프로세스에 속한 다른 Thread와 Code, Data Section 등을 공유한다.
  • Single Threaded Process와 Multi-threaded Process가 있다.
  • 프로세서와 메모리가 발전하며 가능해진 기술이다.

(1) 동기 Motivation

  • 현대의 컴퓨터에서 동작하는 거의 모든 software application들은 Multi-threaded이다.
  • 한 Application이 여러 개의 similar한 task를 처리해야 할 때도 존재한다. 예를들어, web server는 client로부터 web page, image 등에 대한 요청을 받는다. 만일 웹 서버가 single-threaded한다면, 한 번에 하나의 클라이언트만 서비스할 수 있게 되어 클라이언트는 자신의 요구가 서비스 되기까지 매우 긴 시간을 기다려야 한다. 한 해결책은 서버에게 서비스 요청이 들어오면, 프로세스는 그 요청을 수행할 별도의 프로세스를 생성하는 것이 있다. 하지만 프로세스 생성 작업은 매우 많은 시간과 자원을 소비해야 하기 때문에 오버헤드가 많아지게 된다. 따라서 이보다는 프로세스 안에서 여러 Thread를 만들어 나가는 것이 더 효율적이다.
  • 많은 운영체제 kernel 들은 현재 multi-threaded의 형태를 갖춘다.
  • kernel 안에서 다수의 Thread들이 동작하고, 각 thread는 인터럽트 처리 등 특정 작업을 수행한다.

(2) 장점 Benefits

a. 응답성 (Responsiveness)

  • interacitve application을 multithreading 하면, 일부분이 blocking 되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되도록 하여, user에 대한 Responsiveness를 향상시킨다.
  • 이 특성은 user interface를 설계하는 데 유용하다.

b. 자원 공유 (Resource Sharing)

  • 프로세스는 공유 메모리 (Shared Memory)와 메시지 전달(Message Passing) 기법을 통하여 자원을 공유할 수 있다.
  • Thread는 자동적으로 그들이 속한 프로세스의 resource들과 memory를 공유한다.
  • Code와 Data 공유의 이점은 한 applicaton이 같은 address space 내에 여러 개의 다른 작업을 하는 Thread를 가질 수 있다는 점이다.

c. 경제성 (Economy)

  • 프로세스 생성을 위해 memory와 resource를 할당하는 것은 비용이 많이 든다.
  • Thread는 자신이 속한 process의 자원들을 공유하기에 Thread를 생성하여 Context-Switch를 하는 것이 경제적이다.
  • 일반적으로 thread를 사용하는 것보다 새로운 process를 생성하고 관리하는 것이 훨씬 더 많은 시간을 소모한다.

    Context Switching?

    작업의 주체가 현재 Context를 잠시 중단하고, 다른 Context를 실행하는 것.

    CPU의 코어가 1개라면, 동시에 단 하나의 프로세스만 실행이 가능하다. CPU scheduling을 통해 하나의 CPU를 여러 작업들이 공유할 수 있게 CPU 시간을 나누어 작업을 수행한다. 이 때 프로세서가 지금까지 실행되던 프로세스(A)를 중지하고 다른 프로세스(B)의 PCB 정보를 바탕으로 프로세스(B)를 실행하는 것을 Process Context Switching이라고 한다. 동일한 프로세스 속에서 하나의 쓰레드(a)를 중지하고 다른 쓰레드(b)의 TCB 정보를 바탕으로 쓰레드(b)를 실행하는 것을 Thread Context Switching이라고 한다.

d. 규모 적응성 (Scalability)

  • multithreading의 이점은 Multi-processor 구조에서 더욱 증가할 수 있다.
  • 해당 구조에서는 각각의 thread가 다른 processor에서 parrallel하게 수행할 수 있기 때문이다.

(Q) multiprogramming system이니 프로세스를 여러개 돌려도 되는데 굳이 스레드를 나누는 이유?

  • 두 프로세스가 하나의 데이터를 공유하려면 메시지 패싱이나 공유 메모리 또는 파이프를 사용해야 하는데, 효율도 떨어지고 개발자가 구현, 관리하기도 번거롭다.
  • 프로세스 사이 컨텍스트 스위치가 계속 일어나면 성능 저하가 발생한다. 스레드 전환에도 컨텍스트 스위치가 일어나지만 속도가 더 빠르다.

4.2 다중 코어 프로그래밍 (Multicore-programming)

  • core가 여러 CPU chip 형태를 띠거나, 칩 안에 여러 개가 존재하게 될 때, 이러한 시스템을 다중 코어(multi core)또는 다중 처리기(multiprocessor)시스템이라고 부른다.

  • single computing core 상에서 concurrency는 단순히 Thread의 실행이 시간에 따라 교대로 실행된다는 것을 의미한다.

  • multiple core system 상에서는 시스템이 개별 thread를 각 core에 배정할 수 있기 때문에 concurrency는 thread들이 parallel하게 실행될 수 있다는 것을 의미한다.

  • 하나 이상의 task를 동시에 수행할 수 있는 시스템에 대해 병렬적(parallel)이라고 말한다.

  • 병행 실행 시스템은 모든 task가 진행하게끔 함으로써 하나 이상의 task를 지원한다.

  • 따라서 병렬 실행 없이 병행 실행하는 것이 가능하다.

  • CPU 스케줄러는 시스템의 프로세스 사이를 빠르게 오고 가며 모든 프로세스를 진행시켜 마치 병렬 실행하는 듯한 착각을 주게 한다. (실제는 병행 실행을 하는 것)

(1) 프로그래밍 도전 과제 Programming Challenges

a. 태스크 인식 Identifying Tasks

  • application을 분석하여 separate, concurrent task로 나눌 수 있는 영역을 찾는 작업이필요

b. 균형 Balance

  • 찾아진 부분들이 전체 작업에 균등한 기여도를 가지도록 task를 나누는 것도 중요

c. 데이터 분리 Data spliting

  • application이 여러 task로 나뉘는 것처럼, task가 접근하는 data 또한 각 core에서 사용할 수 있도록 나누어져야 한다.

d. 데이터 종속성 Data Dependency

  • task가 접근하는 데이터는 둘 이상의 Task 사이에 dependency가 없는지 검토되어야 한다.

e. 시험 및 디버깅 Testing and Debugging

(2) 병렬 실행의 유형 Type of Parallelism

  1. 데이터 병렬 실행은 동일한 데이터의 부분집합을 다수의 계산 코어에 분배한 뒤, 각 코어에서 동일한 연산을 수행하는 데 초점을 둔다. (하나의 일을 여러 코어가 함께 수행함)
  2. 태스크 병렬 실행은 데이터가 아니라 테스크를 다수의 코어에 분배한다. 각 스레드는 고유의 연산을 수행하므로, 동일한 데이터에 대해 연산을 수행할 수도 있다.

profile
steadily, off the wall

0개의 댓글