프로그램을 실행하는 동안 때때로 프로그램 전체를 사용하지 않는다. 때문에 프로그램 일부만 메모리에 있어도 실행 가능하다. 가상 메모리를 쓰면 소요되는 물리 저장공간을 절약하고, 시스템 처리 속도 빨라질 수 있다. 또한 유저는 저장공간에 대한 걱정을 덜 수 있다. 가상 메모리를 관리하기 위해서는 가상의 메모리 주소를 실제 physical 하드웨어 저장 공간으로 mapping해 주어야 한다.
컴퓨터는 가상 저장공간에 대한 주소를 실제 저장공간으로 매핑하는 것 외에도, 가상 메모리를 구현하거나 또는 램과 하드디스크 또는 다른 대규모 저장장치간에 이루어지는 데이터 스와핑을 관리한다.
overhead 때문에 Real-time(embedded)에는 부적합하다.
virtual address를 고정된 page 단위로 분할 관리하는 기법. 그 크기는 보통 1 KB에서 수 MB 까지 여러 가지가 있다.
logical memory를 동일한 크기로 나눈 것, virtual address는 프로세스가 사용한다.
physical memory를 동일한 크기로 나눈 것, physical address는 하드웨어(ram subsystem)가 사용한다.
page table은 가장 주소와 physical 주소를 매핑시켜주는 자료구조이다. 외부 메모리(느린 외부 memory, 혹은 MCU 내부에 TCM memory)에 존재한다.
supplementary page table을 보완하기 위한 정보를 담고 있다. 예를 들면, 하나의 프로세스가 어떤 physical 주소를 참고하는지(중복접근을 막기 위해), physical 메모리에 어떤 데이터가 있어야 하는 지에 대한 정보 등이다.
핀토스에서의 supplementary page table
가상주소를 physical 주소로 변환해주는 장치, 참고로 TTB(Translation Table Base Address)는 page table의 위치를 담는 레지스터로 MMU에 저장되어 있다.
page table에 대한 일종의 캐시. 최근에 사용된 주소 변환 정보를 저장한다. cache miss 일 경우에, TLB를 먼저 확인한다. TLB hit이라면 page table 접근 없이 바로 physical address를 알 수 있다. TLB miss라면 비로소 page table 확인한다.
사용되지 않은(초기화되지 않은) 페이지
지연 초기화, 필드의 초기화 시점을 필요할 때까지 늦추는 기법
지연초기화
file 에 memory mapping 이 이루어지지 않은, 어디에서 읽어져 온 지 불명확한 page. 즉 file 과 관련이 없는 page.
장점 : fragmentation 이 없다/ 할당후 크기 조절이 가능하다/heap 을 거칠 필요가 없다
단점 : 새로운 공간을 할당받는 overhead 가 heap 에서 가져오는 것보다 크고, kernel 의 page 사이즈 크기 배수로 할당 받는다.
stack은 높은 주소에서 낮은 주소로 자라는 대표적인 anonymouse pages.
디스크로부터 file의 내용이 변화없이 읽어져 와서 따로 변화를 백업해 둘 swap file을 만들지 않아도 되는 page. 즉, code 영역이 executable file 형태로 backed 되는 page.
fd로 지정된 디바이스 파일의 내용을 offset에 해당하는 물리 주소에서 시작하여 length 바이크 만큼을 start 주소로 copy해준다
주기억장치에 적재한 하나의 프로세스와 보조기억장치에 적재한 다른 프로세스의 메모리를 교체하는 기법.
swap-out : page 를 swap 영역에 쓰는 것.
swap- in : swap 영역에서 읽어 들이는 것.
필요한 페이지가 있으나 물리 메모리가 가득 차있어 메모리 일부를 디스크로 보내 교체하는 정책. 이때 목표는 지역성(locality)를 고려하여 가장 효율적으로 대체하는 것이다.
page replacement policy
swap, physical memory 부족할 때, memory를 확보하기 위하여 disk에 page를 저장 시키는 곳
평소에는 resource를 공유하다가 resource를 수정할 경우가 발생하면 이전 resource의 복사본을 쓰게끔 한다. 그 후에 각각의 프로세서의 포인터를 변경만 시켜 이전과 같이 원활하게 동작하도록 보장하는 방안
COW
잘 보고갑니다 ㅎㅎ