눈송이의 개발생활

[운영체제]프로세스 메모리 구조 본문

Computer Science/Operating System

[운영체제]프로세스 메모리 구조

꾸지새미언니

프로그램과 프로세스

  • 프로그램이 실행되면 프로세스는 각 메모리 공간을 시스템으로부터 할당 받음
  • 프로그램의 실행
    = 파일 시스템에 존재하던 실행 파일이 메모리에 적재
    = 프로그램이 CPU를 할당받고 명령 수행하고 있는 상태

프로세스 메모리 영역 (= 가상 메모리)

1️⃣ Code

  • 프로그램에 내장된 코드 영역
  • 수정 불가능한 기계어로 저장 (Read Only)
  • 정적 영역

2️⃣ Data

  • 전역변수, static 변수 등(프로그램이 사용하는 데이터) 저장됨
  • 정적인 특징 갖는 프로그램 종료되면 사라지는 변수다 저장된 영역
  • 전역변수나 static 변수 참조한 코드는 컴파일 완료되면 data 영역의 주소값 가르킴
  • 전역변수 변경 가능 (Read-Write)
  • 정적 영역
    1. BSS 영역
      • 초기화되지 않은 변수 0으로 초기화되어 저장됨
      • RAM에 저장
    2. Data 영역
      • 0이 아닌 다른 값으로 할당된 변수들 저장됨
      • ROM(비휘발성 메모리)에 저장

3️⃣ Stack

  • 지역변수, 매개변수, 함수 저장됨
  • 컴파일 시 크기 결정됨
  • 함수를 재귀호출하면서 크기가 늘어날 수 있는데 Heap 영역과 겹치지 않기 위해 사이 공간을 비워놓음
  • 재귀함수 반복적으로 호출되서나 변수가 메모리를 초과할 정도로 많이 가지면 stack overflow 발생
  • 동적 영역

4️⃣ Heap

  • 동적 할당할 때 사용
  • 프로그래머가 필요할 때마다 사용하는 메모리 영역
  • 런타임 시 크기 결정됨
  • 동적 영역
  • JAVA
    • 객체가 heap 영역에 생성되고 GC에 의해 정리됨



 

참고
https://zangzangs.tistory.com/107

Comments