Abstraction: Address Space

Jin Hur·2021년 9월 28일
0
post-thumbnail

Early System(single programming system)

물리 메모리를 직접 사용.

  • OS and current program -> single programming system, 메모리에는 단일 프로그램만 로드된다.
  • No (limited) protection: 멀티 프로그래밍이 아니기에 OS와 단일 프로그램 사이의 보호 정도만 필요.
  • Larger program than physical memory -> Overlay 기법 사용, 프로그램을 몇 개의 부분으로 나누고 필요한 부분만 로드한다.

Multiprogramming and Time-sharing

  • multiple processes are ready to run, 여러 프로그램이 메모리에 로드될 수 있다.
  • Time sharing: switch CPUs among ready processes (여러 프로그램들이 동시에 수행되는 듯한 illusion 제공, by 스케줄러)
  • Issuses
    • protection becomes a critical issue

      한 프로세스가 다른 프로세스의 주소 공간을 접근하거나, 자신의 합법적인 주소 공간을 넘어설 때 segmentation fault가 발생한다.

      시스템 콜(OS가 제공하는 합법적인 방법)이 아닌 단순히 포인터 등을 사용해 커널 영역에 접근하면 protection fault 발생한다.

      다수의 프로그램이 로드될 수 있는 멀티 프로그래밍 상황에서 각 프로세스가 자신의 주소공간 이외의 영역으로 접근하는 것을 막아야한다.

    • How to find suitable free space
      free space를 잘 관리해야 한다.


Abstraction(메모리 추상화)

여러 개의 프로세스에 의해 메모리를 공유할 지라도 하나의 프로세스는 모든 메모리를 배타적으로 사용한다는 illusion을 갖는다. => Virtual memory / 프로세스 10개 == 가상 메모리 10개

이는 '주소 공간(address space)라는 잘 정리된 레이아웃이 있기에 가능하다.

주소 공간의 레이아웃은 다음과 같다.

  • Code 영역: instructions
  • Data 영역: 정적, 전역 변수 데이터(로드 시 할당되는 공간, staic)
  • Stack 영역: function call chain, 지역변수/매개변수/리턴 주소 (dynamic)
  • Heap 영역: 유저 레벨 상의 요청을 통해 동적으로 할당될 수 있는 영역 (dynamic)

Code 부분부터 0번(0x0) 주소에 위치되어 있지만 이는 가상 주소이고, 물리적으론 그렇지 않다.


메모리 추상화의 장점, 목표

  • Transparency: easy-to-use, 프로그래머는 메모리 사이즈나 가용 공간에 대해 몰라도 된다. 물리 메모리의 복잡함에서 벗어날 수 있다.

  • Efficiency: 메모리 추상화를 거치며 직접적으로 물리 메모리를 사용하는 것보다 느리고, 추가적인 오버헤드가 요구될 수 있다. 다양한 HW 지원(ex, TLB)을 통해 이를 극복해야 한다.

  • Protection(isolation): Protect precesses from one another

(아래 보이는 주소는 가상 주소이다.)

0개의 댓글