본문 바로가기
개발일지

pintos - Virtual Memory(1)

by Peter.JH 2023. 12. 14.
728x90

 

Virtual Memory

 

위키백과 설명:

가상 메모리 또는 가상 기억 장치(문화어: 가상기억기, virtual memory, virtual storage)는 메모리 관리 기법의 하나로, 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 (주)메모리로 보이게 만드는 것을 말한다. 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다.

이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다.

가상적으로 주어진 주소를 가상 주소(virtual address) 또는 논리 주소(logical address)라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical address) 또는 실 주소(real address)라고 한다. 가상 주소의 범위를 가상 주소 공간, 물리 주소의 범위를 물리 주소 공간이라고 한다.

https://ko.wikipedia.org/wiki/%EA%B0%80%EC%83%81_%EB%A9%94%EB%AA%A8%EB%A6%AC


추가설명....


가상 주소 공간은 메모리 관리 장치(MMU)에 의해서 물리 주소로 변환된다. 이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리상에 어떻게 존재하는지를 의식할 필요가 없어진다. 대부분의 현대적 아키텍처와 운영 체제는 가상 메모리 기능을 제공하며, 각 응용 프로그램에 더 적합한 메모리 관리를 위해 어도비 포토샵과 같은 일부 응용 프로그램은 스스로 가상 메모리를 관리하기도 한다.

사용자 프로그램이 생성하는 모든 주소는 가상주소입니다. 운영체제는 각 프로세스가 자신만의 커다란 전용 메모리를 가진다는 환상을 제공합니다. 그리고 운영체제는 하드웨어로부터 약간의 도움을 얻어 가장된 가상주소를 실제 물리 주소로 변환하고 원하는 정보의 위치를 찾을 수 있습니다. 

 

왜 운영체제는 이런 환상을 제공하는 걸까요?

 

바로 사용하기 쉬운 시스템을 제공하기 위함입니다. 운영체제는 각 프로세스에게 코드와 데이터를 저장할 수 있는 대용량의 연속된 주소 공간을 가지고 있다는 시각을 제공하고, 프로그래머는 변수를 어디에 저장해야 할지에 대한 걱정을 안 해도 되게 됩니다. 프로그램의 가상 주소 공간이 크고 변수 등을 위한 많은 공간을 갖고 있기 때문입니다. 또한 잘못된 프로그램이 다른 프로그램의 메모리를 읽고, 수정할 수 없게, 고립(isolation)과 보호(protection)도 가능하게 됩니다. 

 

 

 

 

Page Table

 

https://en.wikipedia.org/wiki/Page_table

 

운영체제는 거의 모든 공간 관리 문제를 해결할 때 두 가지 중 하나를 사용합니다.

첫번째 방법은 세그멘테이션, 가변 크기의 조각들로 분할하는 방법입니다. 이 해결방법은 공간을 다양한 크기의 청크로 분할할 때 공간자체가 단편화될 수 있고, 할당은 점점 더 어려워집니다. 

두 번째 방법인 페이징은 프로세스의 주소 공간을 몇 개의 가변 크기의 논리 세그먼트(코드, 힙, 스택...)로 나누는 것이 아니라 고정 크기의 단위로 나눕니다. 이 단위를 페이지라고 부릅니다. 

 

페이징을 사용하게 되면 프로세스의 주소 공간 사용 방식과는 상관없이 효율적으로 주소 공간 개념을 지원할 수 있습니다.(유연성) 예를 들어, 힙과 스택이 어느 방향으로 커지는가, 어떻게 사용되는가에 대한 가정을 하지 않아도 됩니다. 또 다른 장점은 페이징이 제공하는 빈 공간 관리의 단순함입니다. 

 

주소공간의 각 가상 페이지에 대한 물리 메모리 위치 기록을 위하여 운영체제는 프로세스 마다 페이지테이블이라는 자료구조를 유지합니다. 페이지테이블의 주요 역할은 주소 공간의 가상 페이지 주소 변환정보를 저장하는 것입니다. 각 페이지에 저장된 물리 메모리의 위치가 어디인지 알려줍니다. 

 

페이지 테이블은 어디 저장될까요? 페이지 테이블은 매우 커질 수 있습니다. 페이지 테이블은 운영체제가 관리하는 물리 메모리에 있습니다. 페이지 테이블은 운영체제 가상 메모리에 저장할 수 있고, 디스크에 스왑 될 수 있습니다. 

 

Translartion Lookaside Buffer (TLB)

https://www.geeksforgeeks.org/translation-lookaside-buffer-tlb-in-paging/

 

페이징에서는 페이지 테이블 접근으로 인한 시스템 성능 저하와 페이지 테이블을 위한 메모리 공간 할당으로 인한 메모리 낭비의 가능성이 존재합니다. 효율적인 페이징 시스템 개발을 위한 방법에 대해 소개하겠습니다. 

 

운영체제는 주소 변환을 빠르게 하기 위해 TLB의 도움을 받습니다. TLB는 칩의 MMU(memory-management unit)의 일부입니다. 자주 참조되는 가상 주소-실 주소 변환 정보를 저장하는 하드웨어 캐시입니다. 

 

 TLB에는 가장 최근에 사용된 페이지 테이블 항목이 포함되어 있습니다. 가상 주소가 주어지면 프로세서는 TLB를 검사하여 페이지 테이블 항목이 있는지 확인하고(TLB 히트), 프레임 번호를 검색하여 실제 주소를 형성합니다. TLB에 페이지 테이블 항목이 없는 경우(TLB 미스), 페이지 테이블을 처리하는 동안 페이지 번호가 인덱스로 사용됩니다. TLB는 먼저 페이지가 메인 메모리에 이미 있는지 확인하고, 메인 메모리에 없으면 페이지 오류가 발생하면 새 페이지 항목을 포함하도록 TLB를 업데이트합니다.

 

TLB 히트

  1. CPU가 가상(논리적) 주소를 생성합니다.
  2. 이 주소는 TLB(현재)에서 확인됩니다.
  3. 해당 프레임 번호가 검색되어 이제 메인 메모리 페이지가 어디에 있는지 알려줍니다.

TLB 미스

  1. CPU가 가상(논리적) 주소를 생성합니다.
  2. 이 주소는 TLB에서 확인됩니다(존재하지 않음).
  3. 이제 페이지 번호가 메인 메모리에 있는 페이지 테이블과 일치합니다(페이지 테이블에 모든 PTE가 포함되어 있다고 가정).
  4. 해당 프레임 번호가 검색되어 이제 메인 메모리 페이지가 있는 위치를 알려줍니다.
  5. TLB는 새로운 PTE로 업데이트됩니다(공간이 없는 경우 대체 기술 중 하나, 즉 FIFO, LRU 또는 MFU 등이 사용됨).

TLB의 교환정책

TLB는 일반적으로 가장 최근에 사용된 항목(LRU) 또는 선입선출(FIFO) 교체 정책을 사용합니다. LRU는 가장 오랫동안 사용되지 않은 TLB 항목이 교체되는 것을 의미하고, FIFO는 가장 먼저 삽입된 TLB 항목이 교체되는 것을 의미합니다. 다른 가능한 정책으로는 가장 최근 사용(MRU), 가장 자주 사용(MFU), 무작위 등이 있습니다.

 

 

하지만, TLB가 모든 프로그램에서 항상 제대로 작동하는 것은 아닙니다. 특히, 프로그램이 짧은 시간 동안 접근하는 페이지수들의 수가 TLB에 들어갈 수 있는 수보다 많다면 그 프로그램은 많은 수의 TLB 미스를 발생할 것이고 느리게 동작하게 될 것입니다. 이러한 현상은 TLB 범위를 벗어난다고 하며 특정 프로그램들에서는 중요한 문제가 될 수도 있습니다. 

728x90

'개발일지' 카테고리의 다른 글

pintos - virtual memory(4)  (0) 2023.12.20
pintos - virtual memory(3)  (0) 2023.12.19
pintos (부끄러운)실수 기록  (0) 2023.12.14
Git - Divergent branches  (0) 2023.12.09
pintos - USER PROGRAMS (1)  (0) 2023.12.05