멀티 프로세스와 멀티 스레드
💡 요약
- 멀티 프로세스
- 정의 : 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
- 장점 : 메모리 침범 문제를 OS 차원에서 해결하여 안전성 유리
- 단점 : 작업량 많을 수록 오버헤드 발생. Context Switching으로 인한 성능 저하
- 멀티 스레드
- 정의 : 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
- 장점 : 공유 메모리만큼의 시간, 자원 손실 감소. 전역 변수와 정적 변수에 대한 자원 공유
- 단점 : 공유 메모리로 인한 안전성 문제 (-> Critical Section 기법으로 대비)
1. 멀티 프로세스와 멀티 스레드란?
프로그래밍에서 함께 처리하기 위해 사용하는 기술 프로그램의 둘 이상의 부분을 동시에 실행하여 CPU를 최대한 활용
멀티 프로세스, 멀티 스레드를 왜 사용할까?
-
컴퓨터 환경의 발전 과정
단계 설명 단일 프로세스 시스템 - 한 번에 하나의 프로그램만 실행
- 단점 : CPU 사용률이 좋지 않음↓ 멀티 프로그래밍 - 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시킴
- 단점 : 하나의 프로세스의 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기↓ 멀티 태스킹 - 멀티 프로그래밍 + 시간을 아주 짧은 시간으로 쪼개서 프로세스들을 번갈아 가면서 실행 (→ 동시에 여러 프로그램이 실행되는 것처럼 느낌)
- 한계
- 하나의 프로세스가 동시에 여러 작업 수행 X → 여러 프로세스 만들어야 함
- 프로세스의 컨텍스트 스위칭은 무거운 작업
- 프로세스까지 데이터 공유 까다로움
- 듀얼 코어 등장↓ 멀티 프로세스, 멀티 스레딩
멀티 프로세스
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
- fork를 통해 프로세스를 다수 개로 늘려 여러 개의 프로그램들을 병렬로 처리
- 다수의 프로세스가 서로 협력적으로 일을 처리
-
둘 이상의 코어가 프로세스를 병렬로 분담해서 병행하여 실행
💡 병렬 처리 vs. 병행 처리
- 병렬 처리(Parallel) : 여러 작업을 동시에 실행
- 병행 처리(Concurrent) : 하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리
- 장점
- 안전성 : 메모리 침범 문제를 OS 차원에서 해결
- 단점
- 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생
-
Context Switching으로 인한 성능 저하
💡 Context Switching (문맥교환)
- CPU가 프로세스가 여러개일 때, CPU 스케줄링을 통해 관리하는 것
- 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
- CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에 읽어 레지스터에 적재하는 과정
- 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정
- 보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 발생
- 즉, 프로세스가
Ready
->Running
,Running
->Ready
,Running
->Waiting
처럼 상태 변경 시 발생
→ 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재
💡 PCB (Process Control Block)
- 프로세스 메타데이터들을 저장해 놓는 곳
- Process Metadata : Process ID, Process State, Process Priority, CPU Registers, Owner, CPU Usage, Memeory Usage
멀티 스레드
- 하나의 프로세스 안에서 작업을 여러 스레드를 사용하여 동시에 처리
- 각 스레드가 하나의 작업을 처리
- 하나의 프로그램 안에서 병렬 처리
- 스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
ex. 채팅 앱 : 사용자가 메시지 입력하는 도중에도 상대방이 새로운 메시지를 보냈는지 확인
- 장점
- 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소
- 전역 변수와 정적 변수 공유 가능
- 단점
- 안전성 : 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)
-
Critical Section 기법을 통해 대비
💡 Critical Section(임계 구역) 기법
- 병렬프로그래밍에서 둘 이상의 스레드 (멀티스레드)가 동시에 접근해서는 안되는 공유 자원(파일, 입출력, 공유 데이터 등)에 접근하는 명령문 또는 코드의 일부 영역
- 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
- Critical Section 문제 해결을 위한 3가지 조건
- 상호 배제(mutual exclusion) : 하나의 프로세스가 임계 구역에서 실행되고 있다면, 다른 프로세스들은 임계 구역에서 실행될 수 없음
- 진행(progress) : 임계 구역에 실행되고 있는 프로세스가 없을 경우, 들어갈 프로세스를 적절히 선택해줘야함
- 한정된 대기(bounded waiting) : 프로세스의 기아를 방지하기 위해, 한번 임계 구역에서 실행된 프로세스는 다음 실행에 대한 제한을 둠
-
- 안전성 : 하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)
2. 멀티 프로세스, 멀티 스레드의 활용
멀티 프로세스 | 멀티 스레드 | |
---|---|---|
장점 | 하나의 프로세스에 문제가 생겨도 다른 프로세스에 문제가 생기지 않음 | 컨텍스트 스위칭할 때 공유하고 있는 메모리 만큼의 메모리 자원을 아낌 자원의 효율성 증가, 응답 속도 빨라짐 |
단점 | 컨텍스트 스위칭이 무거움 | 자원을 공유 → 스레드 하나가 프로세스 내 자원을 망치면 모든 프로세스가 종료됨, 동기화 문제 |
예시 | 크롬 : 하나의 프로세스에 멀티 스레드를 사용하는 인터넷 익스플로러와 달리 여러 개의 프로세스를 사용 | 워드 프로세서 : 문서를 편집하면서 틀린 글자를 찾는 작업을 독립적인 스레드로 구현 |
다음에는 CPU 스케줄링에 대해서 알아보자.
참고 자료
- 멀티 프로세스, 멀티 스레딩의 등장 : https://www.youtube.com/watch?v=QmtYKZC0lMU
- 푸드트럭 비유 : https://hongong.hanbit.co.kr/cpu가-멀티태스킹을-하는-방법-프로세스-vs-스레드/
- Critical Section이란 무엇일까?
Leave a comment