프로세스의 주소 공간

김민성·2023년 3월 4일
0

Operating System

목록 보기
3/7

: 프로그램이 CPU에 의해 실행
→ 프로세스 생성, 메모리에 프로세스 주소 공간이 할당됨

프로세스 주소 공간은 코드, 데이터, 스택으로 구성

  • 코드 Segment : 프로그램 소스 코드 저장
  • 데이터 Segment : 전역 변수 저장
  • 스택 Segment : 함수, 지역 변수 저장

구역을 나눈 이유?

: 최대한 데이터를 공유하여 메모리 사용량을 줄여야 함

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

Data - Stack 나눈 이유

: Stack 영역을 통해 함수의 흐름을 관리, Data 영역을 통해 전역 변수, static 변수를 관리
한 프로세스가 여러 개의 스레드
-> 각각 스레드는 자신만의 Stack영역 가짐(스레드 내의 함수 흐름 각각 관리)
-> But Data영역은 공유
-> 동일한 내용을 공유함으로써, 똑같은 공간을 여러 개 만들지 않고 메모리 절약

프로그램의 함수와 지역 변수는, LIFO(후입선출)특성을 가진 스택에서 실행

따라서 이 함수들 안에서 공통으로 사용하는 '전역 변수'는 따로 지정해주면 메모리를 아낄 수 있다.

0개의 댓글