프로세스(process)란?
기계어로 이루어진 .exe파일을 우리는 프로그램이라 하고 실행을 위해 메모리위에서 재구성 하는 것을 프로세스라 한다.
운영체제가 제공하는 메모리 공간은 크게 4가지로 나뉜다.
1. Text(code)영역
2. Data영역(BSS,GVAR)
3. Stack영역
4. Heap영역
- Stack영역
* 프로그램이 자동으로 사용하는 메모리 영역으로 함수 호출과 관계되는 지역변수와 매개변수가 저장된다.
* 함수 호출 시 생성되며 함수가 종료되면 메모리 영역이 사라집니다.
* 명령 실행 시 자동으로 증가 또는 감소하기 때문에 보통 메모리의 마지막 번지를 지정한다.(후입선출, LIFO방식)
* 스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
* 커널 영역을 가장 최상위 메모리 주소에 할당하고 그 밑에 스택영역을 할당하는 방법으로 커널 영역에 대한 침범을 방지
- Heap영역
* 필요에 의해 메모리를 동적으로 할당할 때 사용하는 메모리 영역으로 동적 메모리 영역이라 부른다.
* 메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역이다.
(스위프트를 통해 ARC기법으로 관리해줌)
* 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
* 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.
** 위의 스택과 힙은 같은 공간을 공유합니다. heap이 메모리의 낮은 주소부터 할당되면 stack은 높은 주소부터 할당됩니다. 그래서 각 영역이 상대 공간을 침범하는 일이 발생할 수 있는데 이를 각각 stack overflow, heap overflow라 합니다.
- Data영역
* 프로그램이 실행될 때 생성 및 종료 시 반환되며, 전역변수, 정적변수, 배열, 구조체 등이 저장된다.
* Data영역은 다시 BSS영역과 DATA(GVAR)영역으로 나눠지는데, 초기화된 데이터는 DATA(GVAR) 영역
초기화되지 않은 데이터는 BSS영역에 저장됩니다.
** BSS영역, DATA(GVAR)영역을 구분하는 이유?
초기화된 데이터는 초기 값을 저장해야 하므로 DATA 영역에 저장되어 ROM에 저장된다. 하지만 초기화되지 않은
데이터까지 ROM에 저장되면 큰 사이즈의 ROM이 필요하므로 분리함(초기화되지 않은 데이터는 RAM에 저장됨)
- Text영역
* 텍스트 영역은 실행 명령을 포함하는 코드들이 들어가는 부분이다.
* 프로그램을 시작할 때 컴파일한 프로그램(기계어 모음)이 저장되어 있고, 읽기 전용 영역이기에 프로세스가
함부러 변경할 수 없으며 변경 시 오류를 발생시킨다.
* 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 Bin파일 메모리이다.
* 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리영역이다.
'IT지식 > Computer Science' 카테고리의 다른 글
페이지폴트의 과정과 스와핑 (0) | 2025.01.30 |
---|---|
가상메모리의 정의와 페이지 테이블 (0) | 2025.01.30 |
메모리 계층 구조(Memory Hiearachy)란? (1) | 2025.01.26 |
운영체제에서 인터럽트(Interrupt)란? (0) | 2025.01.26 |
컴퓨터 시스템의 구조(CPU, 메모리, 보조기억장치, 입출력 장치 등) (0) | 2025.01.26 |