[운영체제] 프로세스 주소공간

Judy·2022년 10월 17일
0

운영체제

목록 보기
3/14

프로세스 주소공간

프로세스

실행 중인 프로그램

  • 프로세스는 메모리에 저장되어 CPU에 의해 실행된다
  • 시스템에서 구현될 기본 작업 단위를 나타내는 엔티티로 정의됨

프로그램(프로세스)이 메모리에 로드되면 Stack, Heap, Text, Data 부분으로 구분할 수 있다.

1. 프로세스의 메모리 공간

Stack

  • 메서드/함수의 매개변수, 반환 주소, 지역변수와 같은 임시 데이터 저장
  • 호출이 완료되면 반환됨
  • 컴파일 시 크기가 결정
  • 메모리의 높은 주소 -> 낮은 주소로 할당

Heap

  • 런타임 동안 프로세스에 동적으로 할당된 메모리
  • 주로 잠초형 데이터가 할당됨 (⭐️Swift에서는 ARC를 통해 힙에 할당된 메모리를 관리)
  • 런타임 시 크기가 결정
  • 메모리의 낮은 주소 -> 높은 주소로 할당

Data

  • 전역 및 정적(static) 변수
  • 프로그램 시작 때 할당되어 프로그램이 종료되면 소멸
  • GVAR -> 초기화한 전역 변수 / BSS -> 초기화하지 않은 전역 변수
    - 초기화 된 데이터는 ROM에도 저장하기 위해 구분한다

Text(Code)

  • Program Counter 값과 프로세서 레지스터가 가리키는 현재 활동
  • 실행할 기계어 코드
  • 읽기 전용(= 수정 불가)

2. 스레드의 주소공간

  • 스레드도 자신만의 자원을 가지기 때문에 주소공간을 가짐
  • 스레드는 Stack만 가짐
  • 나머지 영역은 프로세스와 함께 사용

왜 메모리 구역을 나누는걸까?

  • 메모리는 한정된 자원 -> 어떻게든 절약하려고 함
  • 코드는 변하지 않기 때문에 Text 영역으로 분리
  • 전역 변수는 어떤 함수에서도 접근할 수 있으므로 Data로 관리(Stack은 후입선출이라는 구조적 특성 때문에)

➡️ 추가적으로 생각할 부분

  • 서로의 영역을 침범하면 스택 오버플로우, 힙 오버플로우가 발생할 수 있음
  • 커널영역에 침범하는 일이 없도록 스택은 높은 주소부터 아래로 할당




참조 링크

운영체제 스터디 - 프로세스 주소공간
tutorialspoint - Processes
프로세스(Process)의 주소 공간(Address Space)

profile
iOS Developer

0개의 댓글