[OS]프로세스의 주소 공간

Legday_Dev·2024년 3월 4일

CS

목록 보기
9/13
post-thumbnail

프로그램이 CPU에 의해 실행된다는 것은 프로세스가 생성되고 메모리에 프로세스 주소 공간이 할당됨을 의미한다.

프로세스의 메모리 배치


프로세스의 메모리는 Stack , Heap , Data, Code(Text) 로 나뉜다.
프로세스 내에서 구역이 나뉜 이유는 최대한 데이터를 공유하여 메모리 사용양을 줄이기 위해서다.

Stack 영역

  • 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
  • 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
  • LIFO(Last Input First Output) 형식의 자료구조이다.
  • 아래와 같은 코드면 main() 이 가장먼저 스텍에 들어가고 func1() -> func2() -> func3() 순으로 스텍에 쌓인다.(정확히는 func1() 은 들어갓다 실행 후 빠져나온다.)
  #include <stdio.h>
  int main(void){
    printf("\n I");
    func1();
    print("C");
    func2();
    return 0;
  }

  void func1(void){ print("like"); }
  void func2(void){
    printf("program");
    func3();
  }
  void func3(void){ printf("!!!"); }

Heap 형역

  • 런타임시 크기가 결정되는 동적인 공간이다.
  • 자바 기준으로 new 키워드를 통해 Heap 영역에 할당이 된다.
  • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
  • 주로 레퍼런스 타입(참조형)등이 할당된다.

Data 영역

  • 전역 변수나 Static 변수 등 프로그램이 시작될 때 할당되고, 프로그램 종료시 소멸된다.
    • Java 에서는 JVM 이 실행될 떄 static 키워드가 붙은 것을 가장 먼저 찾아서 할당한다.
  • 초기화 된 데이터는 Data 영역에 저장되고, 초기화되지 않은 데이터는 BSS 영역에 저장된다.
  • 함수 내부에 선언된 Static 변수는 프로그램이 실행 될 때 공간만 할당되고, 그 함수가 실행 될 때 초기화 된다.
  • 전역변수, static 값을 참조한 코드는 컴파일 후 Data 영역의 주소값을 가르키도록 변경된다.

Code(Text) 영역

  • 실행할 프로그램의 코드를 저장하는 영역이다.
  • CPU 는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하는데 이 코드는 Hex파일이나 Bin 파일로 이루어져 있다.
  • 프로그램이 수정되면 안 되므로 ReadOnly 상태로 저장 되어있다.

출처
[운영체제] 프로세스 주소 공간
Tech Interview
프로세스 주소 공간(Process Address Space)

profile
백엔드개발자

0개의 댓글