프로세스, 쓰레드

개념
프로세스의 정의 레지스터(register), 스택(stack), 포인트(point), 프로그램, 데이터 등의 집합체로 실행 중인 프로그램 비 동기적 행위, 프로시저(procedure)가 활동 중인 것, 실행 중인 프로시저의 제어 경로 등을 의미하는 것으로 디스패치(dispatch)된 작업 단위 쓰레드의 정의 하나의 프로세스에 포함되어 프로세스의 특성 중 일부 기능만을 수행하도록 된 Light Weight 프로세스

I. 실행되고 있는 프로그램의 인스턴스, 프로세스의 개요
    가. Process의 정의

  • 레지스터(register), 스택(stack), 포인트(point), 프로그램, 데이터 등의 집합체로 실행 중인 프로그램
  • 비 동기적 행위, 프로시저(procedure)가 활동 중인 것, 실행 중인 프로시저의 제어 경로 등을 의미하는 것으로 디스패치(dispatch)된 작업 단위

 

    나. Process의 상태전이
 

  • 프로세스는 상황과 조건에 따라 실행(running), 준비(ready), 대기(wait, blocked) 상태에 있다가 다른 상태로 변화되는 전이를 반복

 

상태

설명

준비 상태

  • 프로세스가 실행을 준비하고 있는 상태
  • 디스패치를 통해 통해 실행 상태로 전이

* 디스패치: 준비상태의 프로세스가 CPU를 배정받아 실행상태로 바뀌는 것

실행 상태

  • 프로세스가 CPU를 차지하고 실행 중인 상태
  • Time run out: 시간 주기 내에 작업이 끝나지 않으면 인터럽트를 발생시켜 제어권을 운영체계로 넘기고 준비상태로 전이
  • Block: 실행 상태의 프로세스가 입출력이나 다른 작업을 수행하는 경우, 제어권을 운영체제에 넘기고 작업이 끝날 때까지 대기 상태로 전이

대기 상태

  • 프로세스가 어떤 Event를 기다리는 상태
  • Wake up: 입출력이나 다른 작업이 끝났을 때, 프로세스가 준비 상태로 전이하는 것

 

 

Ⅱ. 프로세스 제어 블록 (PCB: Process Control Block)
    가. PCB(Process Control Block)의 정의

  • 프로세스에 대한 중요 정보를 저장해 놓은 저장소
  • 프로세스를 생성할 때 만들어지고, 메인메모리에 유지되며, 운영체제에서 한 프로세스의 전체를 정의함.

 

    나. PCB(Process Control Block)의 구조도
 
    다. PCB(Process Control Block)의 정보

 

III. 프로세스의 상호작용

구분

내용

설명

경쟁

임계영역

정확한 연산을 위해 공유자원을 접근하는 병행 수행이 불가능한 코드 세그먼트 구간

상호 배제

어느 시점에도  한 프로세스만 임계영역에 존재

상호 블록

자신의 임계영역 밖에서  수행되는 프로세스는 다른 프로세스가 임계영역에 들어가는 것을 막아서는 않됨

  • 기아상태(starvation): 한 프로세스의 임계영역 독점 지속으로 다른 프로세스가 장기간 임계영역에 들어가지 못하는 상태
  • 교착상태(deadlock): 임계영역에 들어가고자 두 프로세스가 무한정 기다리는 상태
  • 라이브 록(live lock): 두 프로세스가 계속 양보하거나 결정을 무한정 연기하는 상태

협동

동기화

프로세스들 간의 우선순위를 부여하거나, 다른 프로세스 종료시 프로세스를 활성화하는 등 프로세스간 처리 순서를 정하는 것

공유 메모리

공유메모리를 통해 정보를 공유

메시지 전송

요청 및 응답 메시지 송수신을 통해 임계영역을 공유

세마포어

P, V, initialize 연산을 통해 동기화 문제 해결

 

 

Ⅵ. 쓰레드 개요
     가. 쓰레드 정의

  • 하나의 프로세스에 포함되어 프로세스의 특성 중 일부 기능만을 수행하도록 된 Light Weight 프로세스

     나. 쓰레드 필요성

  • 프로세스 스케줄링에 따른 Context Switching 부담을 줄여 성능을 향상 시키고자 함
  • CPU를 다른 프로세스로 전환시키는 Context Switching을 할 때 이전 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 로딩하는 작업을 요하므로 잦은 프로세스 전환은 부하가 됨

 

Ⅴ. 쓰레드 특징 및 종류
    가.  Thread의 특징

특징

설명

자원공유

Parent Process의 데이터 영역을 공유함

동기화

한 프로세스내의 다른 Thread들과 Sync(예: pThread_join()

병렬성

각 스레드들은 상호 간섭없이 독립 수행이 가능한 병렬 처리가능

독립적 스케줄링

독립적 스케줄링의 최소단위로 프로세스의 기능과 역할을 담당

분할과 정복

프로세스에서 실행의 개념만을 분리

(제어는 프로세스가 관리, 실행은 쓰레드가 관리)

다중 쓰레드 지원

한 개의 프로세스에 여러 개의 쓰레드가 존재 가능, 자원공유, 응답성/경제성 향상

CPU Overhead 감소

서비스 요청에 프로세 생성이 필요 없어 Overhead 감소

구성요소

TID(Thread ID), 프로그램 카운터, 레지스터 집합, 스택

 

 

      나. 쓰레드 종류

종류

설명

커널 Thread

- 모든 Thread는 커널이 관리하여 프로세스와 Thread에 대한 Context Switching 정보를 커널이 유지

- Thread간 전환을 위해 커널 스케쥴링 정책이 필요

- 주로 Windows NT 계열, OS/2

사용자 Thread

- 커널이 Thread의 존재를 알지 못함

- 모든 Thread 관리는 응용프로그램이 Thread Libarary를 사용하여 수행

- 스케쥴링은 응용프로그램마다 다름

 

 

    다. 쓰레드 장점

  • 순차적으로 수행될 필요가 없는 부분들로 구성된 응용에 매우 유리
  • 각 부분은 쓰레드로 구현함으로써 개발이 용이
  • 하나의 쓰레드가 입출력 등으로 대기할 때마다 동일한 응용이 다른 쓰레드로 실행 전환 용이

 

    라. Thread와 Process의 비교

구분

Thread

Process

상호통신

-Library Call

-요청 Thread만 Blocking

-System Call

-Call 종료시까지 전체 자원 Blocking

처리방식

-CPU를 이용하는 기본 작업 단위로 구분

-주로 자원 할당을 위한 기본 구분 단위

장점

-CPU성능향상, 시스템자원활용 극대화

-순차적 실행, 실행 순서를 알수 있음

단점

-실행순서를 모름

-Context Switching으로 인한 부하

 

 

 

 

 

 

 

 

 

Ⅵ. 멀티 쓰레드
     가. 멀티 쓰레드 개념

  • 멀티 쓰레드는 여러 개의 쓰레드를 사용해 하나의 수행 업무를 동시에 처리하자는 개념
  • 쓰레드는 실행에 필요한 최소한의 정보만을 갖고 있으며 프로세스의 실행 환경을 다른 쓰레드와 공유

 

      나. 멀티 쓰레드 개념도
 
    다. 멀티 쓰레드 특징

  • 각각의 쓰레드가 Heap과 정적 자료, 코드 부분을 공유하는 반면 자기 자신만의 레지스터와 스택을 갖고 있음
  • 각 쓰레드는 서로 독립적인 수행이 가능해 멀티 프로세스 시스템에서는 물론 단일 프로세스 시스템에서도 실질적인 다중 처리가 가능함

 

     라. 멀티 쓰레드 사용 이유

  • 단일 프로세서 시스템의 효율성 증대
  • 시스템 자원의 활용 극대화 및 처리량 증대

 

     마. 문제점

  • 쓰레드에 대한 동기화와 상호 작용을 정의할 필요가 있는 경우 복잡함
  • 프로그램 오류의 한 형태로 동기화가 확실하지 않음
  • 교착 상태 및 우선 순위 역전 현상 발생 가능

 

    바. Multi-Thread의 이용 분야 및 장단점

  • Multi-Thread의 이용분야

구분

주요내용

프로그램 성능향상

- 복잡한 사용자 인터페이스를 가진 시스템에서 여러작업을 수행하며, 사례로 JAVA Thread가 있음

분산시스템

- 하나의 서버가 많은 클라이언트 요청을 처리해야 할 때 사용

웹서버

- 웹 서버에 몰리는 클라이언트의 요청을 처리하기 위해 Multi-Thread로 동시적으로 처리

미들웨어

- 비즈니스 프로세싱을 위해 사용

  • Multi-Thread의 장단점

장점

단점

여러 개의 Process fork()가 필요없음

Deadlock, 우선순위 역전 가능성이 존재함

적은 System 자원으로 활용가능

사용자는 Thread를 예측 못함

Overhead 감소

Response Time을 예측하기 어려움

 

 

Ⅶ. Hyper Threading
    가. 하이퍼 스레딩의 개념

  • 소프트웨어 애플리케이션의 많은 스레드가 하나의 프로세서 상에서 동시에 실행될 수 있는 동시 멀티스레딩 기술(SMT)의 일종
  • 멀티 스레드 서버 소프트웨어 애플리케이션이 하나의 서버 플랫폼 내 각 프로세서 안에서 스레드를 병렬처리할 수 있도록 해 주는 혁신적 기술


    나. 하이퍼 스레딩의 개념도
 
 

  • 하이퍼 스레딩 기술을 채택한 멀티프로세서 시스템은 1개의 물리적 프로세서 상의 아키텍처 구조를 복제함으로써 하나의 물리적 프로세서 당 2개의 “논리적” 프로세서를 제공한다.

     다. 하이퍼스레딩의 실행매커니즘

A. 2개의 수퍼스칼라 프로세서 탑재한 멀티프로세싱 시스템(기존방식)

B. 하이퍼 스레딩 기술을 사용한

멀티프로세싱

 

 

- 2개의 물리적 프로세서를 탑재한 멀티프로세싱 시스템

- 하나의 프로세서는 진한 청색 스레드를 실행하고 있고, 다른 프로세서는 연한 청색 스레드를 실행하고 있음

- 이 시스템의 최대 실행 대역폭은 주기 당 명령어 6개이며, 각 프로세서당 명령어 3개

- 시스템은 최대 대역폭 이하로 작동할 수 있으며, 이러한 상태는 유휴 (흰색)실행 유닛의 많고, 적음에 따라 알 수 있음

- 하이퍼 스레딩 기술을 채택하고 2개의 물리적 프로세서를 탑재한 멀티프로세싱 시스템

- 하나의 프로세서가 진한 청색스레드와 연한 청색 스레드를 동시에 실행하고 있으며, 다른 프로세서는 2개의 무늬있는 스레드를 실행하고 있음

- 시스템이 최대 대역폭에 가깝게 실행되고 있다는 사실을 알 수 있음

  • 기존의 멀티 프로세서 시스템 상에서 유휴(흰색) 실행 유닛은 실행 리소스가 최적의 상태로 이용되고 있지 않다는 사실을 나타냄
  • 반면, 하이퍼 스레딩 기술은 다수의 스레드가 동시에 실행될 수 있도록 해 줄 뿐 아니라 유휴 실행 유닛의 숫자를 줄여 줌, 이 표는 하이퍼 스레딩 기술의 개념을 보여 주기 위한 것이며 기존의 프로세서나 소프트웨어 애플리케이션의 리소스 사용패턴을 보여주기 위한 것이 아님

 

Ⅷ. Thread의 병렬성과 병렬성 유지의 이유
    가. Thread의 병렬성

  • Thread는 운영체제 내에서 프로세스의 pid와 같이 고유의 tid(thread id)를 받아서 독립적인 thread table내의 한 item으로 관리됨
  • Thread는 Thread간의 시작과 종료시의 sync를 위하여 thread join을 수행함
  • 상호 간섭되지 않고 독립 수행이 가능한 Thread는 병렬로 처리됨

 

    나. 스레드를 병렬로 실행해도 스레드 고유의 계산 값이 유지 되는 이유

  • Thread는 Thread table에서 독립적인 tid를 받아서 존재하고 실행됨.
  • Thread 단위별로 CPU를 할당 받아서 사용됨
  • Thread의 실행과 대기, sleep으로 전환시의 context switching은 프로세스와 동일하게 처리됨

 

Ⅸ. 프로세스의 병렬성과 스레드의 구성 시 고려사항
    가. 프로세스의 병렬성과 스레드

  • fork나 vfork를 통하여 프로세스도 여러 개의 child process를 만들어서 사용할 수 있지만, 한 프로세스 내에서 동시에 병렬로 여러 루틴의 실행이 가능한 스레드 방식이 유리함.
  • 멀티스레드를 통하여, 각각의 스레드가 독립적으로 CPU에 할당되어 수행됨

 

    나. 스레드 구성시의 고려사항

  • 2000년 이후에 DEC thread 방식에서 POSIC thread방식으로 일원화 되면서 M*N방식의 Multi-Thread를 지원함
  • 동시 수행성이 필요한 경우에만 Multi-Thread 방식의 프로그래밍이 필요함
     

댓글