[CS] 프로세스 주소 공간

프로세스 주소

  • 정의
    • 프로세스가 메모리를 할당 받으면, 자신만의 방법으로 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리함. → 이를 프로세스 주소 공간이라고 부름

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

⁉️ 구역을 나눈 이유?

→ 최대한 데이터를 공유하여 메모리 사용량을 줄여야 하기 때문

  • Code 부분 존재 이유
    • 코드는 프로그램이 만들어지고 나서는 바뀌지 않기 때문에 ReadOnly임
    • 같은 프로그램이라면 여러 프로세스가 실행되더라도 코드 부분은 모두 같음
    • 따라서 같은 프로그램의 프로세스인 경우 코드 부분을 공유하여 메모리 사용량을 줄일 수 있음
  • Stack과 Data 부분

  • 스택 구조의 특성과 전역 변수의 활용성을 위한 것
  • Stack의 구조는 LIFO
  • 프로그램의 함수와 지역변수는 스택에서 실행되므로, 이 함수들 안에서 공통으로 사용하는 ‘전역변수’는 따로 지정해주면 메모리를 아낄 수 있음

'CS > OS' 카테고리의 다른 글

[CS] PCB & Context Switching  (0) 2024.02.01
[CS] 시스템 콜(System Call)  (0) 2024.02.01
[CS] 인터럽트 (Interrupt)  (0) 2023.11.29
[CS] 프로세스와 스레드  (1) 2023.10.28
[CS] 운영체제  (0) 2023.10.28