프로세스 메모리 구조
프로세스 : 실행중인 프로그램의 작업 단위
Stack 영역
지역변수, 매개변수, 함수가 저장되는 영역. 컴파일시 크기가 결정됨.
동적 할당 : 함수 호출 시 프레임을 할당하고, 함수 호출이 끝나면 해당 프레임을 해제하는 방식
LIFO(Last In, First Out) 방식으로 동작.
스택 오버플로우가 발생하지 않도록 주의!
Heap 영역
런타임에 할당된 객체나 배열 등 동적으로 할당된 메모리가 저장되는 영역.
동적 할당 : malloc, calloc, realloc 등의 함수로 메모리 할당이 이루어지며, free 함수로 메모리 해제
메모리 누수가 발생하지 않도록 주의!
Data 영역
BSS(Block Started By Symbol) 영역과 Data 영역으로 나뉘어져 있다.
BSS(Block Started By Symbol) | Data |
0으로 초기화 or 초기화되지 않은 전역/정적 변수가 저장되는 영역 프로그램 시작 시 이 영역의 변수들은 0 으로 초기화됨 | 초기화된 전역/정적 변수가 저장되는 영역 프로그램 시작 시 초기화된 데이터로 채워짐 |
위의 두 영역 다 읽기/쓰기 모두 가능.
정적 할당 : 프로그램 시작 시 고정된 크기로 할당.
Text 영역
실행할 코드가 저장되는 영역.
다수의 프로세스가 동일한 프로그램을 실행할 경우, 이 영역을 공유할 수 있음.
보통 읽기 전용으로 설정되어 있어 코드가 수정되는 것을 방지함.
정적 할당 : 프로그램 시작 시 고정된 크기로 할당.
프로세스와 스레드
프로세스는 실행중인 프로그램의 작업 단위라고 했다. 스레드는 프로세스 내 작업의 흐름을 이야기한다.
즉, 스레드는 프로세스보다 더 작은 단위이다.
스레드의 탄생
하나의 프로세스는 독립적인 메모리 공간을 할당받기 때문에 동시에 여러 작업을 수행하기에는 다음과 같은 단점이 존재함.
1. 프로세스끼리의 데이터 공유가 까다로움
2. 높은 컨텍스트 스위칭 비용
때문에 단일 프로세스 내에서 여러 작업을 동시에 처리하기 위해 스레드 개념 도입.
싱글스레드 / 멀티스레드
프로세스는 스레드 개수에 따라 싱글스레드 프로세스, 멀티스레드 프로세스로 나뉜다.
프로세스는 각각 독립적인 메모리 공간을 할당받고, 스레드는 해당 프로세스의 메모리 영역을 공유한다.
또한 스레드만의 고유한 영역도 존재한다.(pc, stack)
❗️멀티 스레드 한경에서 한 스레드가 공유 데이터를 손상시키면? 모든 스레드에 영향을 줄 수 있음. 이를 대비해야함
- Critical Section 기법
- 상호배제 : 하나의 스레드가 임계구역에서 실행 중이면, 다른 스레드들은 임계 구역에서 실행 될 수 없음
- 진행 : 임계구역에 실행되고 있는 스레드가 없으면 들어갈 스레드를 적절히 선택
- 한정된 대기 : 한번 임계구역에서 실행된 프로세스는 다음 실행에 대한 제한을 둠. (여러 스레드가 공유 자원을 사용하려고 할 때 일부 스레드가 계속 자원을 얻지 못하는 상황을 방지)
프로세스와 스레드 비교
프로세스 | 스레드 |
코드, 데이터, 스택, 힙 메모리 영역을 기반으로 작업 | 메모리 영역을 프로세스 내의 다른 스레드들과 공유 (메모리적 이점) * 단, 스택 메모리는 독립적 |
다른 프로세스와 격리되어 있어 서로 통신하기 위해서는 IPC가 필요 | 다른 스레드와 격리되어 있지 않아 통신이 프로세스보다 빠름 |
한 프로세스에 문제가 생기면 다른 프로세스에 영향을 끼치지 않음 | 한 스레드에 문제가 생기면 다른 스레드에도 영향을 미쳐 프로세스까지 영향을 줄 수 있음. |
생성과 종료에 비교적 더 많은 시간이 듦 | 생성과 종료에 비교적 더 적은 시간이 듦 |
'Computer Science > Operating System' 카테고리의 다른 글
컨텍스트 스위칭(Context Switching) (0) | 2024.10.23 |
---|---|
PCB(Process Control Block) (0) | 2024.10.23 |
프로그램 컴파일 과정 - C, C++/Java ( Interpreter / JIT ) (0) | 2024.10.18 |
페이지 교체 알고리즘 - FIFO, LRU, LFU, MFU, NUR, OPT(오프라인 알고리즘) (0) | 2024.10.17 |
가상메모리(2) - 페이지폴트와 스와핑, 스레싱 (1) | 2024.10.16 |