프로세스와 스레드

| 프로세스 (Process) | 스레드 (Thread) |
| 운영체제로부터 자원을 할당받은 작업의 단위 |
프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 |
| 각각 별도의 주소공간 할당(독립적) 자신만의 고유 공간과 자원을 할당받아 사용 |
Stack만 할당 받고 나머지 영역은 서로 공유 다른 스레드와 공간, 자원을 공유하면서 사용 |
- Code : 코드 자체를 구성하는 메모리 영역
- Data : 전역변수, 정적변수, 배열 등
- 초기화된 데이터는 data 영역에 저장
- 초기화되지 않은 데이터는 bss 영역에 저장
- Heap : 동적 할당 시 사용 (new(), molloc() 등)
- Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
멀티 프로세스 & 멀티 스레드
| 멀티 프로세스 | 멀티 스레드 | |
| 장점 | - 안전성 (메모리 침범 문제를 OS 차원에서 해결) | - 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소 - 전역 변수와 정적 변수에 대한 자료 공유 가능 |
| 단점 | - 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을수록 오버헤드 발생 - Context Switching으로 인한 성능 저하 |
- 안전성 문제 (하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태) → Critical Section 기법을 통해 대비 |
Context Switching
작업들을 아주 잘게 나누어 조금씩만 작업을 수행하고 다음 작업으로 넘어가는 식으로 반복되며 진행하는 방식
Q. 최종 작업이 걸리는 시간은 얼마 차이가 없을 텐데, 작업들을 스위칭하며 처리하는 이유
- 하드웨어적 한계
- CPU의 발열 때문에 클럭으로 성능을 올리기에는 한계이다. 대신 코어를 여러개 탑재하여 쿼드 코어, 옥타 코어 CPU들을 출시하고 있다. 하지만 아무리 코어를 많이 넣어도 결국 프로세스만큼 넣을 순 없으니 하드웨어적 한계가 있다. - 논리적인 효율
- 두 개의 작업이 있을 때 한 개의 작업은 오래 걸리는 작업이고, 다른 하나는 짧은 시간을 필요로 하는 작업이라고 가정하면, 최악의 경우 오래 걸리는 작업이 먼저 처리되었을 때, 다른 가벼운 작업은 짧은 시간이 걸리는 데에도 불구하고 먼저 시작한 작업이 다 끝날 때까지 기다려야한다. 이러한 비효율적인 면을 극복하기 위해 작업을 아주 잘게 나누어 번갈아가면서 처리한다.
Critial Section
하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
(상호배제, 진행, 한정된 대기를 충족해야한다.)
[참고자료]
- 글 : 프로세스 & 스레드 (https://github.com/gyoogle/tech-interview-for-developer)
- 글 : 완전히 정복하는 프로세스 vs 스레드 개념
'Computer Science > Operating System' 카테고리의 다른 글
| PCB와 Context Switching (0) | 2023.08.18 |
|---|---|
| 페이징과 세그먼테이션 (0) | 2023.08.12 |
| 페이지 교체 알고리즘 (0) | 2023.08.06 |
| 인터럽트 (Interrupt) (0) | 2023.07.23 |
| 운영체제 (Operating System) (0) | 2023.07.22 |