[OS] 주소 공간과 가상 메모리 (address space, virtual memory)

jh Seo·2026년 3월 5일

운영체제

목록 보기
5/16

초기 시스템

  • 초기 컴퓨터는 하나의 메모리에 단 하나의 프로세스만 올릴 수 있다.

  • 물리 메모리에 하나의 실행 중인 프로세스가 존재했으며, OS를 제외한 나머지 메모리를 사용했다.
    -> 하나의 메모리가 메모리 공간을 다 차지하기 때문에 매우 좋지 않은 활용성과 효율성을 보여준다.

  • 멀티 프로그래밍 개념이 대두되면서 사람들은 컴퓨터를 더 효율적으로 사용

멀티 프로그래밍과 시분할

  • 초기 시스템의 문제를 해결하기 위해 시분할(Time Sharing) 기법이 제안되었다.
    -> 이를 통해 여러 개의 프로그램을 하나의 메모리에서 실행할 수 있도록 메모리 구성이 바뀌었다.

  • 하나의 메모리에 여러 프로세스를 올려 실행하게 되면서 메모리 활용성과 효용성이 증가한다.

  • 하지만 여러 프로세스들이 한 메모리안에 존재하므로 프로세스 간에 데이터를 침범할 수 있는 문제가 발생했다.
    • 위 그림과 같이 메모리에 프로세스가 올려져 있을 때, 여러 프로세스들이 한 번에 메모리에 접근하게 되면 기존에 실행 중인 프로세스에 접근할 수 있게 되면서 보안상 문제가 발생할 수 있다.
  • 이런 문제점을 해결하기 위해 프로세스를 메모리에 그대로 유지하면서 운영 체제가 시분할을 효율적으로 구현할 수 있도록 하는 것이
    가상 메모리의 목표이다.

주소 공간(Address Space)

  • 프로그램이 실행되면 운영체제는 실행 파일의 명령들을 읽어 프로세스를 생성하고 메모리를 할당하게 되는데 이를 프로세스 주소 공간이라고 한다.

  • 운영 체제가 실제 메모리(physical memory)를 추상화해서 만든 것이 곧 주소 공간

  • 주소 공간은 현재 실행중인 프로그램, 즉 프로세스의 모든 정보가 들어있다.

  • 코드, 스택, 힙과 같이 프로그램을 실행시키기 위한 모든 상태를 주소 공간이 가지고 있게 된다.

  • 하나의 프로세스가 전체의 메모리를 차지하지 않는다.

    • OS가 여러 개의 프로세스를 메모리에 적재할 수 있게 한다.

주소 공간의 구성

  1. Stack
  • 함수 호출과 관련된 지역 변수, 매개 변수 등이 저장되는 공간
  • 함수가 호출될 때 할당하고, 함수가 종료되면 해제
  • 메모리의 상위 주소에서 하위 주소로 할당
  1. Heap
  • 프로그램 실행 중에 크기가 결정되는 동적 메모리 영역
  • 사용자가 직접 공간을 할당하고 해제 가능
  • 참조형 데이터(객체)가 저장되는 영역
  • 메모리 하위 주소에서 상위 주소 방향으로 할당
  1. BSS
  • 초기화되지 않은 전역변수와 정적 변수가 저장되는 메모리 영역
  • BSS 영역의 변수들은 프로그램 시작 시 자동으로 0이나 NULL로 초기화
  1. Data
  • 전역 변수나 정적 변수(static) 등 프로그램에서 사용되는 데이터가 저장되는 영역
  • 전역/정적 변수를 참조하는 코드가 있다면 컴파일 후 데이터 영역을 참조하게 됨
  • 프로그램 시작할 때 할당되고 종료되면 해제
  1. Text (Code)
  • CPU가 실행할 수 있는 기계어 코드가 저장된 영역
  • 프로그램 코드는 변경되면 안 되므로 읽기 전용으로 보호

그림을 보면 프로그램 코드가 하위 주소에 배치되는데, 프로그램 코드는 정적이기 때문에
프로그램이 실행되면서 추가적인 메모리를 필요로 하지 않으며, 따라서 메모리에 저장하기 쉽기 때문에 하위 주소에 배치한다
Heap 영역과 Stack 영역은 동적으로 할당되기 때문에 free 공간을 두어서 배치하게 된다

가상 메모리(Virtual Memory)

  • 가상 메모리란, 운영체제가 실제 메모리를 추상화해 현재 실행 중인 프로그램에게 나눠주는 것을 의미

  • 가상 메모리의 핵심은 운영체제가 프로세스에게 특정 주소의 메모리에 올라가고 잠재적으로 매우 큰 주소 공간을 가지고 있다고 착각하게 만든다는 것

    • 예를 들어 어떤 게임 용량이 20gb이고, pc 물리 메모리가 16GB일때
      게임 실행하면 물리 메모리보다 용량이 커서 실행할 수 없을 것 같지만 잘됨.
      -> 더 큰 메모리 활용하는 효과를 낸다는 뜻
  • 가상 메모리에서는 프로세스마다 각자의 메모리를 가지게 됨
    즉, 프로세스의 가상 메모리 주소가 같다고 해서 물리 메모리 상의 주소도 같은 것이 아님

  • 예를 들어, P1,P2,P3 가 가지고 있는 가상 메모리의 주소에서 똑같은 100이라는 물리 메모리를 가리킨다해도 실제 물리 메모리에서는 서로 다른 메모리 주소로 변환

  • 프로세스가 만약 2GB의 메모리를 사용한다 해서 실제 물리 메모리가 2GB 사용되지는 않는다.

    • 이는 메모리에 필요한 부분만 적재되기 때문
    • 프로세스 실행할 때, 실행에 필요한 부분만 메모리에 올리기 때문에 실제 메모리보다 큰 프로그램도 실행할 수 있는 것이 가상 메모리의 특징이다.

가상 메모리의 목표

1. 투명성

  • 프로세스는 마치 자신만의 독립된 메모리 공간을 가진 것처럼 인식하여 실제 물리 메모리의 복잡성은 운영체제에 의해 추상화되어야한다.

2. 효율성

  • 운영 체제는 가상화를 시간과 공간 측면에서 효율적이도록 진행해야 한다.
  • 운영 체제가 가상 주소를 실제 물리 주소로 변환하는 과정에서 발생하는 오버헤드를 최소화해야한다.
  • 효율을 위해 페이지 테이블이나 TLB같은 하드웨어 지원을 받아야한다.

3. 보호

  • 운영체제는 프로세스를 다른 프로세르로부터 보호해야 하고, 운영체제 자신도 다른 프로세스로부터 보호해야 한다.
  • 프로세스는 오직 자신의 가상 주소 공간 내에서만 메모리에 접근할 수 있어야 하며, 다른 프로세스의 메모리 영역에는 절대 접근할 수 없어야 한다.
  • 서로 다른 프로세스들을 서로 격리시켜 특정 프로세스에서 발생한 문제가 다른 프로세스에게 영향이 가지 않도록 해야한다.

레퍼런스

https://hotechstory.tistory.com/158

profile
코딩 창고!

0개의 댓글