경희대학교 김정욱 교수님의 컴퓨터 구조 수업을 기반으로 정리한 글입니다.
Program vs. Process vs. Thread
1. Program
실행 가능한 파일들의 집합으로, 정적인 개념이다.
Program은 disk에 일반적으로 저장되어 있어, 수명에는 제한이 없다.
▶ Program
2. Process
실행중인 Program으로, 동적인 개념이다.
Process는 main memory에 일반적으로 저장되어 있어, 수명에는 제한이 있다. (Process 종료 or 컴퓨터 off)
▶ Process
3. Thread
Process의 가장 작은 실행 가능한 unit으로,
Process 안에서 할당받은 자원을 이용하고, 실제로 작업을 수행하는 주체이다. (일꾼)
Process는 일반적으로, mutiple threads를 가진다.
▶ Thread
Thread는 각각 Stack이 다른데, stack 외에, code, data, heap은 서로 공유한다.
Process vs. Thread
▶ Process vs. Thread
Flow
▶ Flow
Multitasking vs. Multiprocessing vs. Multithreading
1. Multitasking
▶ Multitasking
하나의 CPU가 여러 task(job)을 동시에(concurrently) 수행하는 것을 말한다.
- concurrently: 동시에 하는 것처럼 수행 (실제론 동시에 하는 게 아니고, 그만큼 잠깐씩 빠르게 반복)
- parallel (병렬): 시간도 share하며 동시에 수행
하나의 CPU에서 동작하기에 자원들을 share하고, 각각의 task는 memory space를 하나씩 갖는다.
context switch: 각각의 task를 바꾼다. (바꿀 땐 메모리에 올림)
장점
- 하나의 CPU가 여러 task들을 concurrently하게, 굉장히 빠르게 수행 가능하다.
단점
- 여러 program을 동시에 띄우면 컴퓨터가 느려진다.
2. Multiprocessing
▶ Multiprocessing
여러 CPU에서 여러 process를 동시에(parallel) 수행하는 것을 말한다.
장점
- 안정성: 한 processs가 비정상적으로 종료되어도 다른 프로세스에 영향을 주지 않음 (각 process가 독립적인 메모리 공간을 가지기 때문)
- 병렬성: 각 process를 병렬적으로 실행하여 성능향상 (Parallel)
- 확장성: 새로운 기능이나 모듈을 추가하거나 수정할 때 다른 process에 영향을 주지 않음
단점
- Context switching overhead: Context switching 과정에서 성능 저하 가능성
Context switching 과정에서 성능 저하 가능성이 있는 이유는 CPU는 다음 process 정보를 불러오기 위해 (1) 메모리 검색, (2) CPU 캐시 메모리 초기화, (3) process 상태 저장, (4) 불러올 데이터를 준비해야 하기 때문이다. (메모리에 올림)
3. Multithreading
▶ Multithreading
하나의 Process에 대해 여러 thread가 concurrently(빠르게 switching)하게 수행하는 것을 말한다.
단, 여러 process가 존재할 때 CPU 각각에 대해서는 서로 각자의 일을 수행하는 것이기에 parallel하게 동작할 수 있다.
장점
- 응답성: 프로그램의 일부 thread가 긴 작업을 수행하더라도 프로그램이 계속 수행됨 (ex: Word에서 한 thread가 그림을 load하는 동안 다른 thread는 grammar check 가능)
- 경제성: 프로세스 내 자원들과 메모리를 공유하기 때문에, 자원 소모 감소
단점
- 동기화 문제: 여러 개의 thread가 공유 자원에 동시에 접근할 수 있기 때문에 동기화가 필수적인데, 병목현상이 일어나 성능이 저하될 수 있음
- 안정성 문제: 하나의 thread가 문제가 발생하면 다른 thread도 영향을 받아 프로그램이 종료될 수 있음
- 디버깅 문제: 각 스레드의 동작을 추적하기 어려움
▶ 동기화 문제
Multitasking & Multiprocessing
▶ Multitasking & Multiprocessing
Multiprocessing vs. Multithreading
▶ Multiprocessing & Multithreading
(Additional) Amdahl's Law
전체 프로그램이 실행되는 시간
- Unaffected: Sequential
- Affected: Parallel
▶ 실행 시간 improvement by multiple CPU
▶ Speed - up 1
※ K: sequential
▶ Speed - up 2
100개의 process를 가지고 90배를 빠르게 만들 때,
몇 %가 sequential이 될까?
▶ Example 1
Speed - up = (K + A) / (K + B) 공식을 이용해서,
90 = (K + A) / (K + B), B = A / 100 이렇게 풀 수도 있다. (공식 훨씬 간단)
이렇게 풀면 K = A / 890가 나오는데, K = 1(sequential)로 두면 A = 890으로,
K / (K + A) = 1 / 891, unaffected 부분은 A / (K + A) = 890 / 891 이다.
(Additional) Bigger Problem
10 by 10 matrix 연산 (parallel), 스칼라 값 10개 연산,
10 processors vs 40 processors speed - up?
▶ Example 2
기존의 single processor일 때는 110t인데, 10개를 사용하면 20t로 줄어든다.
20 by 20 matrix 연산 (parallel), 스칼라 값 10개 연산,
10 processors vs 40 processors speed - up?
▶ Example 3
10 by 10 보다 20 by 20은 영향을 받는 부분이 더 늘어난 경우이다.
※ log scale에 근접하다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
Lecture 19: Memory Hierarchy - 3 (0) | 2024.12.15 |
---|---|
Lecture 18: Memory Hierarchy - 2 (1) | 2024.12.15 |
Lecture 17: Memory Hierarchy - 1 (0) | 2024.12.07 |
Lecture 16: The Processor - 5 (2) | 2024.12.06 |
Lecture 15: The Processor - 4 (0) | 2024.12.03 |