프로세스(Process)
프로세스는 실행 중인 프로그램을 말합니다. 프로그램이 실행되면, 운영체제는 프로그램을 실행하기 위한 메모리 공간과 자원을 할당하여 프로세스를 만듭니다. 프로세스는 독립적인 실행 단위로, 각각의 프로세스는 고유한 메모리 공간과 자원을 가지며, 운영체제의 관리하에 CPU 시간을 할당받아 실행됩니다.
프로세스 스케쥴링
프로세스 스케줄링은 CPU를 여러 프로세스에 할당하는 방법을 결정하는 운영체제의 기능입니다. 여러 프로세스가 동시에 실행되기를 원할 때, 어떤 프로세스를 언제 실행할지 정하는 규칙을 의미합니다.
배치 처리 시스템, 시분할 시스템, 멀티 태스킹, 멀티프로그래밍 등 여러 가지 스케쥴링 기법이 있습니다.
상황에 맞게 다양한 스케쥴링 기법을 이용해서 어떤 프로세스를 어느 시점에 실행시킬지를 결정합니다!
프로세스 메모리 구조
일반적으로 프로세스의 메모리 구조는 아래의 4가지 영역으로 나눠집니다.
스택(stack), 힙(heap), 데이터(data), 코드(text) 영역
stack과 heap 영역은 런타임 단계에서 메모리를 할당받는 동적 영역
data와 code 영역은 컴파일 단계에서 메모리를 할당받는 정적 영역
- Stack: 함수 실행을 위한 임시 데이터 저장.
- Heap: 동적으로 할당된 데이터 저장.
- Data: 전역 변수, 초기화된 데이터 저장.
- Code: 프로그램 코드 저장.
컨텍스트 스위칭(Context Switching)
CPU에서 실행할 프로세스를 변경하는 작업. 현재 프로세스의 상태를 PCB에 저장하고, 다음 프로세스의 상태를 PCB에서 불러와 실행합니다.
한 마디로 컨텍스트 스위칭은 CPU가 현재 실행 중인 프로세스를 다른 프로세스로 전환하는 과정입니다.
PCB (Process Control Block)
- 역할: 프로세스의 상태를 저장
- 작업: 현재 프로세스의 모든 상태 정보를 PCB에 저장, 다음 프로세스의 PCB에서 상태 정보를 불러옵니다.
PC (Program Counter)
- 역할: 다음 실행 명령어의 주소
- 작업: 현재 프로세스의 PC 값을 PCB에 저장, 다음 프로세스의 PC 값을 PCB에서 불러와 CPU에 설정
SP (Stack Pointer)
- 역할: 현재 스택의 최상단 주소
- 작업: 현재 프로세스의 SP 값을 PCB에 저장, 다음 프로세스의 SP 값을 PCB에서 불러와 CPU에 설정
과정 요약
- 현재 프로세스 상태 저장: PC와 SP 값을 포함한 현재 프로세스 정보를 PCB에 저장.
- 다음 프로세스 상태 복원: 다음 프로세스의 PC와 SP 값을 PCB에서 불러와 CPU에 설정.
- 프로세스 전환 완료: 새로운 프로세스 실행 시작
IPC(Inter Process Communication) : 프로세스 간 커뮤니케이션
서로 다른 프로세스 간에 데이터를 주고받거나 정보를 교환하는 기술입니다. 프로세스는 각기 독립된 메모리 공간을 가지고 있기 때문에 직접적으로 데이터를 공유할 수 없습니다. 따라서 IPC를 통해 안전하고 효율적으로 통신해야 합니다.
다양한 IPC 기법
- file
- Message Queue
- Shared Memory
- Pipe
- Signal
- Semaphore
- Socket
파란색으로 칠한 3가지가 가장 많이 사용되는 방법입니다!
IPC가 필요한 이유
- 동시 실행: 여러 프로세스가 동시에 실행될 때 정보를 교환
- 성능 향상: 서로 다른 프로세스가 협력하여 작업을 분담함으로써 시스템 성능을 향상
- 복잡한 시스템: 복잡한 애플리케이션에서 여러 프로세스가 상호작용할 때 데이터 전송 필요
스레드(Thread)
하나의 프로세스 내에서 작업이 실행되는 단위이다.
Thread의 특징
- 하나의 프로세스는 무조건 하나 이상의 스레드를 가진다.
- 하나의 프로세스 내에서 여러 개의 스레드를 생성할 수 있다.
- 스레드는 동시에 실행할 수 있다.
- 프로세스의 모든 데이터에 접근 가능하다.
💡Process와 Thread 간 통신의 차이
- 스레드 간 통신:
- 주소 공간: 같은 프로세스 내에서 Code, Data, Heap 영역을 공유
- 통신 방법: 직접 메모리 접근으로 데이터 공유
- 특징: 빠르고 간단하지만 동기화가 필요하다.
- 프로세스 간 통신 (IPC):
- 주소 공간: 서로 다른 프로세스는 독립적인 주소 공간을 가진다.
- 통신 방법: IPC 기법(파일, 메시지 큐, 공유 메모리 등) 사용
- 특징: 안전하게 통신할 수 있지만 상대적으로 복잡하고 성능 오버헤드가 발생할 수 있다.
요약하자면 둘의 차이점은 프로세스는 자원을 할당받는 작업의 단위이며, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위. 스레드는 자원을 공유한다는 점이 있습니다.
멀티 스레드
멀티 스레드는 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 방식입니다. 이를 통해 프로세스는 병렬 처리와 자원 공유의 이점을 누릴 수 있습니다.
멀티 스레드의 장단점
장점
- 성능 향상 : 작업을 여러 개의 스레드에서 나눠서 실행하면 사용자에 대한 응답성이 향상된다.
- 자원 공유 효율 : IPC와 같은 별도의 자원 공유를 위한 작업이 필요하지 않다.
- 빠른 전환: 스레드 간 전환이 프로세스 간 전환보다 빠릅니다.
- 응답성 개선: UI와 백그라운드 작업을 분리하여 사용자 응답성을 높일 수 있습니다.
단점
- 스레드 중 하나의 스레드에만 문제가 발생해도, 전체 프로세스가 영향을 받을 수 있다.
- 스레드를 너무 많이 생성하면 Context Switching이 많이 발생해서 성능이 저하될 수 있다.
- 동기화 문제로 여러 스레드가 동시에 자원에 접근하여 데이터 충돌이 발생할 수 있습니다
멀티 프로세싱 vs 멀티 스레딩
멀티 프로세싱
- 정의: 여러 개의 독립된 프로세스를 생성하여 각각의 CPU 코어에서 동시에 실행하도록 하는 기술입니다.
- 통신: 프로세스 간에는 직접 메모리 접근이 불가능하므로, IPC (Inter-Process Communication) 기술을 사용하여 데이터를 교환합니다. 예: 메시지 큐, 공유 메모리, 파이프 등
- 장점: 프로세스 간 독립성이 높아 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 미치지 않습니다.
- 단점: IPC 기술을 사용해야 하며, 오버헤드가 발생할 수 있습니다.
멀티 스레딩
- 정의: 하나의 프로세스 내에서 여러 개의 스레드를 생성하여 동시에 실행하도록 하는 기술입니다.
- 통신: 스레드들은 같은 프로세스 내에서 메모리 영역(코드, 데이터, 힙)을 공유하므로 별도의 통신 기술이 필요 없습니다. 하지만 동기화가 필요하며, 이를 통해 데이터 충돌을 방지합니다.
- 장점: 스레드 간 메모리 공유로 인해 데이터 교환이 빠르고 효율적입니다.
- 단점: 동기화 문제로 인해 데이터 일관성 유지가 어렵고, 동기화가 잘못될 경우 데드락과 같은 문제가 발생
적용 방안
- 스레드가 데이터를 읽기만 할 경우: 멀티 스레딩 - 데이터 동기화 문제는 상대적으로 덜 발생
- 데이터를 빈번히 읽고 쓸 경우: 멀티 프로세싱 - 동기화와 관련된 복잡성을 줄일 수 있으며, 각 프로세스가 독립적으로 동작하기 때문에 동기화 문제가 발생하지 않습니다.
요약
- 멀티 프로세싱은 독립된 프로세스 간에 IPC를 통해 통신하며, 높은 독립성을 유지
- 멀티 스레딩은 같은 프로세스 내에서 스레드들이 메모리를 공유하며, 동기화 기술이 필요
Reference
https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
'CS' 카테고리의 다른 글
HTTP와 HTTPS의 차이 (0) | 2024.08.26 |
---|---|
동시성과 병렬성의 개념과 차이 (2) | 2024.07.24 |
HTTP 상태 코드 (0) | 2024.07.19 |
Web Server와 WAS의 차이점 (0) | 2024.07.19 |
Web Storage, Session, Cookie(웹 스토리지, 세션, 쿠키) (2) | 2024.07.06 |