[OS] Ch5_Threads

윰지·2020년 4월 22일
0

OS_운영체제

목록 보기
5/13

Thread란


프로세스에 포함된 명령어를 실제로 실행하는 흐름의 단위이다. 스레드는 프로세스 내에서 stack만 따로 할당받고 code, data, heap 영역을 공유한다. 프로세스를 쪼개 하나의 프로세스 안에서 동시에 여러 작업을 처리할 수 있다.
각각의 프로세스 안에는 여러 개의 thread들이 있을 수 있고, 그 thread들은 자신만의 execution state를 가질 수 있다. 스레드는 프로세스로부터 execution state만 분리하여 만들어 낸 것이다. 프로그램에서 instruction을 하나 하나 실행시키는 sequence를 만든다.(실로 프로그램을 꿰어 가는 것처럼 코드를 실행) 프로세스를 여러개 돌려도 되지만 스레드로 나누는 이유는 다음과 같다.

  1. 프로세스가 데이터를 공유하려면 message passing이나 shared memory 혹은 pipe를 사용해야하는데 효율이 좋지 않고 구현하기 번거롭다.
  2. 프로세스 사이에서 context switch가 계속 일어나면 성능이 저하된다. Thread 전환 시에도 context switch가 일어나지만 더 빠르다.

Single-threaded process
하나의 프로세스가 한 번에 하나의 작업만 수행한다.

Multi-threaded process
하나의 프로세스가 동시에 여러개의 프로그램을 독립적으로 병렬적으로 실행해 나간다. 하나의 프로그램이 여러개의 thread로 구성되서 독립적으로 실행한다. 예를 들어 강의 동영상 하나를 올려놓고 여러명이 각자 본다. 강의 동영상 자체는 공유되고 있다. 이런 것이 process안에 있는 code나 data, heap같은 것이고 우리가 각자 보고 있는 서로의 excution state는 다를 수 있다.(돌려감거나 빨리보거나 누구는 슬라이드 10, 누구는 슬라이드 20페이지 보는 중)

Processes vs Threads


  • 하나의 프로세스 안에는 1개 이상의 여러 개의 thread가 있을 수 있다.
  • 어떤 thread가 어떤 process에 있으면 이 thread는 그 process에 bound된다.
  • 프로세스는 thread가 돌아가는 그릇, 정적인 내용들만 적혀있는 컨테이너다. Thread들이 PID, address space, user and group ID, open file descriptors, current working directory 등을 공유한다. -> 어떤 thread가 어떤 변수를 고치면 다른 thread들도 그 고친 값을 볼 수 있다.
  • 하나의 프로세스지만 여러개의 프로세서로 mapping가능하다.

Benefits of Multi-threading


독립적인 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어든다. 스레드 간 통신이 필요한 경우에는 전역 변수 혹은 동적으로 할당된 Heap 영역을 이용하여 데이터를 주고받는다. 따라서 프로세스 간 통신보다 간단하다. 스레드의 context switch는 프로세스 context switch와 달리 캐시 메모리를 비울 필요가 없어 더 빠르다. 때문에 throughput을 향상시킬 수 있다.

Concurrency vs Parallelism


Concurrency
어떤 상황에서 한개 이상의 여러 개가 상태가 전진해서 진행하고 있는 것, 시간은 상관 없다.

ex) 오전엔 컴구과제 오후엔 운체과제

Parallelism
동시에 시간상으로 처리되는것

  1. Data parallelism
    처리해야 하는 데이터가 있으면 나눈다음에 각 core가 같은 operation을 parallel하게 처리하는 것

    ex) 성적 점수가 있다면 성적을 쪼개서 부분으로 나누고 동시에 합을 구한다.
  2. Task parallelism
    하나의 데이터가 있는데, 서로 다른 core가 다른 operation을 같은 데이터에 대고 처리하는 것

    ex) 성적 점수가 있다면 어떤 프로세스는 sum을 계산하고 어떤 것은 표준편차를 계산한다.

Amdahl's Law

어떤 task가 parallel한 파트와 serial한 파트를 가질 때 성능이 parallel한 파트가 바뀔때 어떻게 성능이 바뀌는지를 알아낼 수 있다.

Review

A multiprogramming environment of degree 4 for two single-threaded processes and two multi-threaded processes
A multiprocessor system with three 4-multicore processoors and one single-core processor
=> thread 단위로 core로 mapping되어 스케쥴링 한다.

User Threads & Kernel Threads


  1. Kernel threads
    • 운영체제가 보는 thread의 모습
    • 운영체제가 관리하고 지원
    • 운영체제가 scheduling
  2. User thread
    • 응용프로그램이 보는 thread의 모습
    • user-level threads libraries에서 자신의 뷰를 새로 만들어서 본다.
      ex) 10개의 user threads가 1개의 kernel thread로 구현해서 돌릴 수 있다.

Multithreading Models


One-to-One
처리해야 할 user thread 한 개당 kernel thread를 대응시켜 작업 진행한다. 하지만 kernel thread의 과도한 생성으로 성능 저하가 일어날 수 있다.

Many-to-One
Kernel thread가 다수의 user thread를 처리하는 구조이다. User thread를 처리하던 중 system call에 의해 blocking 되면 전체 프로세스가 막히는 병목현상이 일어난다.

Two-level Model/Many-to-Many model
중요한 작업은 one-to-one 구조를 통해 처리하거나 나머지는 Many-to-Many 구조를 통해 처리한다. 멀티프로세서 시스템에서는 싱글프로세서보다 더 많은 커널 스레드가 만들어진다.

Implicit Threading


스레드 생성 및 관리는 run-time 라이브러리에서 해준다.

Thread Pools
여러 개의 thread를 pool에 넣어놓고 필요할 때 꺼내 쓴다.

0개의 댓글