개발일지

[OS]프로세스의 메모리 구조 본문

운영체제OS

[OS]프로세스의 메모리 구조

강강강 2022. 11. 29. 10:45

운영체제는 프로세스에 적절한 메모리를 할당하는데 다음 구조를 기반으로 할당한다. 

프로세스의 메모리 구조

 

스택 Stack 은 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 "동적"인 특징을 갖는다. 

스택영역은 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있는데 이때 힙과 스택의 메모리 영역이 겹치면 안되기 때문에 힙과 스택의 공간을 비워놓는 것이다!!!

 

힙 Heap 은 동적 할당할 때 사용되며 런타임 시 크기가 결정된다. 

벡터같은 동적 배열은 당연히 힙에 동적 할당된다.

 

데이터 Data 영역은 전역변수, 정적변수(static으로 선언한)가 저장되고 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어있는 영역이다.

데이터 영역은 BSS 영역과 Data 영역으로 나뉘고 BSS 영역은 초기화가 되지 않은 변수가 0으로 초기화되어 저장되고 Data영역은 초기값을 설정한 전역변수와 정적변수를 위한 영역이다.

 

코드 Text 영역은 프로그램에 내장되어 있는 소스코드가 들어가는 영역이다. 이 영역은 수정 불가능한 기계어로 저장되어 있으며 정적인 특징을 갖는다. 

 

 

정리하자면, 프로세스의 주요 메모리는 위의 그림과 같이 구분할 수 있는데 프로그램 코드는 Text 영역에 잡히고 전역변수는 Data 영역에 잡힌다. 이 두개의 메모리 크기는 컴파일 시점에 결정하기 때문에 프로세스 동작중에는 크기가 변하지 않는다!!

그런디,, 함수 호출에 의한 지역변수나 호출 처리에 필요한 메모리는 런타임에 잡힌다. 

피 호출 함수가 끝나면 호출한 함수로 복귀하고 자신의 메모리를 해제하기 위해 stack 에 잡힌다. 또 동적메모리 할당함수가 호출되면은 Heap 영역에 잡히겠지..

'운영체제OS' 카테고리의 다른 글

[OS]CPU 스케줄링 알고리즘  (0) 2022.12.01
[OS]PCB; Process Control Block  (0) 2022.11.30
프로세스 상태  (0) 2022.11.26
캐시란? cache  (0) 2022.11.24
메모리란? memory  (0) 2022.11.21