[CS] 가상 메모리

말하는 감자·2025년 1월 9일

CS

목록 보기
7/33
post-thumbnail

배경지식

논리 주소

  • 논리주소는 CPU가 프로그램을 실행하는 과정에서 생성하는 주소로, 논리 주소는 운영체제의 관리 하에 CPU가 직접적으로 사용하는 주소
  • 사용자에게 제공되는 주소이므로, 실제 하드웨어 메모리와는 관련이 없고, 메모리 요구사항을 처리하기 위해 사용된다.
  • CPU 내부에 있는 MMU는 논리 주소를 물리 주소로 변환하는 역할을 하는데, MMU는 페이지 테이블을 참고하여 해당 논리주소가 어떤 물리주소에 매핑되는지를 결정한다.

물리주소

  • 메모리(RAM)에 데이터가 저장되는 실제 주소로, 컴퓨터 하드웨어가 인식하는 주소이다.
  • CPU는 논리주소를 메모리 관리 기능(MMU)에 의해 변환하여 물리주소에 접근할 수 있다.
  • 물리주소는 하드웨어에 직접 연결되므로, 각 프로세스의 논리주소와 1:1 대응하지 않는다.

가상메모리에서

  • 가상 메모리 시스템에서는 프로세스가 사용하는 논리 주소를 물리 주소로 변환해야하는데, 이 과정을 주소 변환이라고 하며, 페이지 테이블과 같은 데이터를 이용해 이루어진다.

가상메모리

  • 물리 메모리의 하드웨어적인 특성 상 필연적인 크기의 한계를 극복하기 위한 기술
    -> 유한한 메모리의 크기를 효율적으로 관리하여, 무한(?)하게 사용하기 위한 기술. 즉, 물리 메모리보다 큰 프로세스를 사용하는것이 가능하다.

부분 적재

  • 프로세스를 실행할 때, 실행에 필요한 부분만 메모리에 올린다.
  • 적재 여부를 페이지테이블에 표시
  • 실행될 가능성이 낮은 코드는 굳이 메모리에 적재될 필요가 없기 때문에, 현재 필요한 페이지만 메모리에 올리는 것을 요구페이징이라고 한다.
  • 페이지 테이블을 통해 물리 메모리에 매핑을 하는데, 필요한 페이지만을 스와핑을 통해 메모리에 올리고 나머지는 하드디스크에 두는 방식
    ex. A에 접근하고 싶다면: 0(논리주소) -> 4(물리주소) 로 변환하여 접근 가능
  • Valid-invalid-bit: 현재 메모리에 페이가 있는지 없는지를 나타내는 비트(있으면 1, 없으면 0)
  • modify-bit: 페이지 적재 후 변경 유무를 표시(1이면 변경되었으므로 다시 적재할 필요o)

요구페이징(Demand Paging)

컴퓨터가 메인 메모리에서 사용하기 위해 보조기억장치(2차 기억장치)로부터 데이터를 저장하고 검색하는 메모리 관리 기법 -> 자주 쓰던거는 앞으로도 자주 쓸거같다...

페이지 부재 처리 과정

  1. 특정 페이지 실행을 위해 페이지 테이블을 참조하여 메모리에 페이지가 올라와있는지 여부를 확인(valid-invalid-bit 확인)
  2. 유효비트가 0인 경우 -> 페이지 부재 발생
  3. 운영체제는 해당 프로세스를 wait 상태로 만들고 요구된 페이지를 하드디스크에서 찾아 메모리의 빈 공간에 적재(Swap-in)
  4. 페이지 테이블 갱신
  5. 다시 실행

만약에 메모리에 빈 공간이 없을 경우

메모리에 Swap-in 할 여유 공간이 없을 경우 페이지 교체 알고리즘에 따라 메모리에 있는 페이지를 다시 하드디스크로 내보내야 한다.(Swap-Out)

  • 페이지교체알고리즘

    1. FIFO : 가장 먼저 들어온거 제거
    2. LRU: 사용된지 가장 오래된거 제거
    3. LFU: 가장 적게 사용된거 제거
  • Swapping = (Swap-in)+(Swap-Out)

정리

  • 가상메모리는 메모리 크기보다 더 큰 프로세스를 실행하기 위해 효율적으로 메모리를 관리하는 기술이다.
  • 자주 사용한, 혹은 사용할거 같은 일부 프로세스만 RAM에 적재하고 나머지는 하드디스크의 스왑영역에 저장하여 RAM의 물리적 크기보다 더 큰 공간을 사용 가능하다.
profile
주니어개발자(?)

0개의 댓글