프로세스(Process)
- 레지스터(register), 스택(stack), 포인트(point), 프로그램, 데이터 등의 집합체로 실행 중인 프로그램 비 동기적 행위, 프로시저(procedure)가 활동 중인 것, 실행 중인 프로시저의 제어 경로 등을 의미하는 것으로 디스패치(dispatch)된 작업 단위
쓰레드(Thread)
- 하나의 프로세스에 포함되어 프로세스의 특성 중 일부 기능만을 수행하도록 된 Light Weight 프로세스
I. 실행되고 있는 프로그램의 인스턴스, 프로세스의 개요
가. Process의 정의
- 레지스터(register), 스택(stack), 포인트(point), 프로그램, 데이터 등의 집합체로 실행 중인 프로그램
- 비 동기적 행위, 프로시저(procedure)가 활동 중인 것, 실행 중인 프로시저의 제어 경로 등을 의미하는 것으로 디스패치(dispatch)된 작업 단위
나. Process의 상태전이
- 프로세스는 상황과 조건에 따라 실행(running), 준비(ready), 대기(wait, blocked) 상태에 있다가 다른 상태로 변화되는 전이를 반복
상태 | 설명 |
준비 상태 |
|
실행 상태 |
|
대기 상태 |
|
Ⅱ. 프로세스 제어 블록 (PCB: Process Control Block)
가. PCB(Process Control Block)의 정의
- 프로세스에 대한 중요 정보를 저장해 놓은 저장소
- 프로세스를 생성할 때 만들어지고, 메인메모리에 유지되며, 운영체제에서 한 프로세스의 전체를 정의함.
나. PCB(Process Control Block)의 구조도
다. PCB(Process Control Block)의 정보
III. 프로세스의 상호작용
구분 | 내용 | 설명 |
경쟁 | 임계영역 | 정확한 연산을 위해 공유자원을 접근하는 병행 수행이 불가능한 코드 세그먼트 구간 |
상호 배제 | 어느 시점에도 한 프로세스만 임계영역에 존재 | |
상호 블록 | 자신의 임계영역 밖에서 수행되는 프로세스는 다른 프로세스가 임계영역에 들어가는 것을 막아서는 않됨
|
|
협동 | 동기화 | 프로세스들 간의 우선순위를 부여하거나, 다른 프로세스 종료시 프로세스를 활성화하는 등 프로세스간 처리 순서를 정하는 것 |
공유 메모리 | 공유메모리를 통해 정보를 공유 | |
메시지 전송 | 요청 및 응답 메시지 송수신을 통해 임계영역을 공유 | |
세마포어 | 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 방식의 프로그래밍이 필요함
[용어/개념] BCP(Business Continuity Planning) - 업무 연속성 계획
[Algorithm] 버블 정렬 (Bubble Sort)
[용어/개념] IAM (Identity and Access Management) - 계정과 권한의 관리를 위한 통합관리 솔루션