[OS] 5-1. 프로세스 주소공간

KYJ의 Tech Velog·2023년 4월 12일
0

OS

목록 보기
7/23
post-thumbnail

프로세스가 메모리를 할당받으면 자신만의 방법으로 메모리를 관리하기 위해 이 공간을 어떤 구조로 관리합니다. 이 구조를 프로세스 주소 공간이라고 합니다.

프로세스 주소 공간

  • Stack 영역
    • 함수의 호출과 관계되는 지역 변수와 매개변수가 저장
    • 함수의 호출과 함께 값이 할당되고 함수의 호출이 완료되면 소멸
    • 메모리의 높은 주소에서 낮은 주소 방향으로 할당
    • 컴파일 시 크기가 결정
    • 재귀 함수가 너무 깊게 호출되거나 함수가 지역변수를 너무 많이 가지고 있어 stack 영역을 초과하면 stack overflow 오류가 발생
  • Heap 영역
    • 런타임에 크기가 결정되는 영역
    • 사용자에 의해 공간이 동적으로 할당 및 해제
    • 주로 참조형 데이터(클래스 등)가 할당
    • 메모리의 낮은 주소에서 높은 주소 방향으로 할당
  • Data 영역
    • 전역 변수나 Static 변수 등 프로그램이 사용할 수 있는 데이터를 저장
    • 어떤 프로그램에 전역/Static 변수를 참조하는 코드가 존재한다면 컴파일 후에 이 영역 참조
    • 프로그램의 시작과 함께 할당, 종료와 함께 소멸
    • 단, 초기화되지 않은 변수가 존재한다면 BSS 영역에 저장
  • Text(Code) 영역
    • 프로그램이 실행될 수 있도록 CPU가 해석 가능한 기계어 코드가 저장
    • 프로그램이 수정되면 안 되므로 ReadOnly 상태

영역이 나눠진 이유

Stack 영역과 Data 영역

두 영역이 나눠진 이유는 역할의 분배때문입니다. Stack 영역을 통해 함수의 흐름을 관리하고 Data 영역을 통해 전역 변수, static 변수를 관리합니다.

Data 영역의 공유

한 프로세스에서 여러 개의 스레드를 갖는다면 그 스레드들은 Data 영역을 공유하게 됩니다. 같은 공간을 공유함으로써 메모리를 절약할 수 있습니다.

0개의 댓글