운영체제
프로세스 & 스레드
탁재민
2024. 3. 12. 17:48
프로세스(Process)
실행되어 작업중인 컴퓨터 프로그램, 운영체제로부터 자원을 할당받은 작업의 단위
- 각각의 메모리 공간(Code, Data, Stack, Heap)과 CPU 시간을 할당 받음
- Stack
- 함수 호출 시 생성되는 지역 변수와 매개변수 저장
- 함수 호출 종료 시 해당 영역 데이터 소멸
- 너무 많은 함수 호출 또는 지역변수 사용 시 stack overflow 발생.
- Heap
- 런타임에 크기가 결정되며, 동적으로 할당 및 해제
- 참조형 데이터(객체, 배열 등) 저장.
- Data 영역
- 전역 변수와 Static 변수 저장
- 프로그램 시작과 동시에 할당, 종료 시 소멸
- Code
- 프로세스가 실행할 프로그램의 바이너리 코드 저장.
- ReadOnly
- Stack
- 최소 1개의 스레드 가짐
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC)을 사용
스레드(Thread)
프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
- 각각 Stack만 따로 할당받고 프로세스의 Code, Data, Heap 영역은 공유
멀티프로세스
- 하나의 프로그램을 여러개의 프로세스로 병렬적으로 작업 수행
- 부모 프로세스가 자식 프로세스 제어
- 예시: 크롬 브라우저의 각 탭은 별개의 프로세스임
- 장점
- 안정성: 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 미치지 않음
- 단점
- Context Switching Overhead: CPU가 하나의 프로세스 에서 다른 프로세스로 작업을 전환하는 과정에서 오버헤드 발생
- 비효율적 자원 관리: 각각의 프로세스가 메모리 영역을 가지므로 더 많은 공간을 차지하고, 자원 공유도 어려움
멀티스레드
- 단일 프로세스 내에서 여러 개의 스레드가 동시에 실행
- 예시: 브롬 브라우저의 각 탭 내에서 브라우저 이벤트 루프, 네트워크 처리, I/O 등을 별개의 스레드로 관리
- 장점
- 효율적 자원 관리: 각각의 스레드가 Code, Data, Heap 영역을 공유, 자원 공유가 쉽고 가벼움
- Context Switching Overhead 감소: stack, register만 교체하므로 오버헤드 감소
- 단점
- 안정성: 하나의 스레드에 문제가 생기면 프로세스 전체에 영향
- 동기화, 데드락 문제: 여러 스레드가 동시에 자원에 접근하므로 이를 통제해야 함