목차
- Thread Safe
- 쓰레드와 메모리구조
- 쓰레드
- 프로세스 동기화
- 프로세스 스케줄링 알고리즘
- 프로세스 상태와 스케줄러
- Inter Process Communication(프로세스간의 통신)
- 프로세스 메모리 영역
- Process (프로세스)
프로세스의 Address Space(주소공간)
프로그램이 실행되면 Process Address Space가 할당된다. Process Address Space는 Text(Code), Data, Stack, Head 4가지 영역으로 구분된다.
프로세스가 생행되면 각 프로세스는 운영체제로부터 독립된 메모리영역을 할당 받습니다. 때문에 한 프로세스 메모리 영역에 다른 프로세스가 접근할 수 없습니다.
프로세스 메모리 영역은 Code
, Data
, Heap
, Stack
4가지 영역으로 구분됩니다.
Text(Code)
- 프로그램 코드가 저장되는 메모리 영역
- 프로그램이 실행될 때 할당 됐다가 프로그램이 종료하면 해제된다. (고정된 영역)
- Read Only
Data
- 프로그램의 전역변수, 정적변수가 저장되는 메모리 영역
- 프로그램이 실행될 때 할당 됐다가 프로그램이 종료하면 해제된다. (고정된 영역)
- Read/Write
Stack
함수 호출시 할당됐다가 종료시 해제되는 메모리영역
- 지역변수와 매게변수를 저장하기 위한 메모리 영역
- 함수 호출과 함께 할당 됐다가 함수 호출이 끝나면 해제된다.
Thread
별로 생성되는 영역이다.- 메모리가 높은 주소에서 낮은 주소로 할당된다
- Read/Write
Heap
- 동적 할당을 위한 메모리 영역
- Run Time(런타임)에 크기가 결정되는 메모리 영역
- Stack과는 반대로 메모리가 낮은 주소에서 높은 주소로 할당된다.
Stack 과 Heap 의 메모리 할당 방식
스택 영영과 힙 영역은 메모리를 효율적으로 사용하기 위해 서로 반대로 메모리를 항당합니다. 만약, 스택이나 힙에서 주어진 영역을 벗어나 상대방 메모리 영역을 침벌하게 되면 Overflow(오버 플로우) 라 합니다.
힙이 스택을 침범하는 경우를 Heap Overflow(힙 오버 플로우) 라 하고, 스택이 힙을 침범하는 경우를 Stack Overflow(스택 오버 플로우) 라 한다.