ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] 프로세스의 메모리 영역, 정적 할당 영역과 동적 할당 영역
    운영체제 2023. 3. 12. 13:49
    728x90
    반응형


    오늘은 프로세스의 메모리 영역에 대해서 배워볼 겁니당.🤨

    프로세스는 현재 실행 중인 프로그램을 뜻했죠. 프로세스가 생성되면 커널 영역에는 해당 프로세스의 PCB가 생성됩니다. 그렇다면 사용자 영역에는 프로세스가 어떻게 배치될까요?
    하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장됩니다. 이 내용은 프로그래밍에 있어서도 매우 중요한 내용입니다.





    프로세스가 배치되는 영역들

    ⛱️ 코드 영역

    코드 영역(code segment)은 텍스트 영역(text segment)이라고도 부릅니다. 코드 영역에는 데이터가 아닌 CPU가 실행할 명령어가 담겨 있기 때문에 쓰기(write)가 금지되어 있습니다. 다시 말해 코드 영역은 읽기 전용(read-only) 공간입니다.


    ⛱️ 데이터 영역

    데이터 영역(data segment)은 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간입니다. 이런 데이터로는 전역 변수(global variable)가 대표적입니다.


    ⛱️ 힙 영역

    힙 영역(heap segment)은 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장 공간입니다. 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 합니다. 메모리 공간을 반환한다는 의미는 ‘더 이상 해당 메모리 공간을 사용하지 않겠다’라고 운영체제에 말해주는 것과 같습니다.

    메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래합니다. 이런 문제를 메모리 누수(memory leak)라고 합니다. 많은 개발자가 자주 마주치는 문제 중 하나이지요.

    ⛱️ 스택 영역

    스택 영역(stack segment)는 데이터를 일시적으로 저장하는 공간입니다. 데이터 영역에 담기는 값과는 달리 잠깐 쓰이는 값들입니다. 이런 데이터로는 함수의 실행이 끝나면 사라지는 매개 변수, 지역 변수가 대표적입니다.




    🧐 정적 할당 영역과 동적 할당 영역?

    정적 할당 영역

    위에서 알아본 영역 중에 코드 영역데이터 영역은 그 크기가 변하지 않습니다. 프로그램을 구성하는 명령어들이 갑자기 바뀔 일이 없으니 코드 영역의 크기가 변할 리가 없고, 데이터 영역에 저장될 내용은 프로그램이 실행되는 동안에만 유지될 데이터니까요. 그래서 코드 영역과 데이터 영역은 ‘크기가 고정된 영역’이라는 점에서 정적 할당 영역이라고도 부릅니다.

    동적 할당 영역

    반면 힙 영역과 스택 영역은 프로세스 실행 과정에서 그 크기가 변할 수 있는 영역입니다. 그래서 이 두 영역을 동적 할당 영역이라고도 부릅니다. 일반적으로 힙 영역은 메모리의 낮은 주소에서 높은 주소로 할당되고, 스택 영역은 높은 주소에서 낮은 주소로 할당됩니다. 그래야만 힙 영역과 스택 영역에 데이터가 쌓여도 새롭게 할당되는 주소가 겹칠 일이 없겠죠.

    LIST
Designed by Tistory.