티스토리 뷰

컴퓨터 구조론/Memory

Virtual Memory

로또_ 2019. 10. 4. 23:49

virtual memory

모든 프로세스는 자신만의 가상 주소 공간을 가지고 있습니다. 32비트/64비트 프로세스는 각 비트수에 맞게 최대 4GB/16GB의 주소 공간을 가집니다(4GB : 0x00000000 ~0xFFFFFFFF, 16GB : 0x000000000000000 ~ 0xFFFFFFFFFFFFFFFF)  모든 프로세스들을 자신만의 주소 공간을 가지기 때문에, 특정 프로세스 내에서 쓰레드가 수행될 때 해당 쓰레드는 프로세스가 소유하고 있는 메모리에 대해서만 접근이 가능합니다. 다른 프로세스에 의해 소유된 메모리는 숨겨져 있으며, 접근이 불가능 합니다. 즉, 가상메모리는 프로세스의 logical memoryphysical memory를 분리하기 위해 생겼습니다.

 

또한, 프로세스가 실제 필요로 하는 부분만 메모리로 올리는 Demand-Paging 기법을 사용합니다. 이미 메모리가 소진된 상태에서 위에서 띄운 프로그램의 작업 내용을 기억하기 위해 디스크 공간을 메모리처럼 활용할 수 있는 기능을 가지고 있습니다. 디스크 상에 존재하는 이러한 파일을 paging file(또는 swap file)이라고 하며, 모든 프로세스가 사용할 수 있는 가상 메모리로 사용됩니다.

 

가상 메모리란 한정된 물리 메모리의 한계를 극복하고자 디스크와 같은 속도가 상대적으로 느린 저정장치를 활용해, 애플리케이션들이 더 많은 메모리를 활용할 수 있게 해주는 것이 가상메모리입니다.

 


Page

page란, 가상메모리를 사용하는 최소 크기의 단위입니다. 만약, 페이징 파일에서 물리 메모리로 데이터를 로드할 때, 아무 위치에나 필요한 크기 만큼(무작위) 로드한다고 가정합니다. 이런경우, 로드하고 언로드 하는 데이터의 크기가 모두 제각각이므로, 이를 반복하다 보면 메모리 공간에 fragmentation이 발생하게 됩니다. 결국 메모리는 남아있지만, 정작 원하는 크기의 데이터를 물리 메모리로 로드하지 못하게 되는 상황이 생길 수 있는 것입니다. 이를 막기위해, 운영체제가 만든 것이 page라는 최소 크기 단위입니다.

 


페이지의 크기

페이지의 크기는 하드웨어에 의해 정의된다. 대개 컴퓨터 구조에 따라 512 Byte에서 16MB 사이이며 2의 제곱으로 증가한다. 만약 논리 주소 공간의 크기가 2의 m승이고, 페이지가 2의 n승이라면 논리주소(logical address)의 상위 m-n Bit는 페이지 번호를 하위 n비트는 페이지 변위(offset)을 나타낸다. 하나의 페이지는 x86과 amd64에서는 4KB, ia64에서는 8KB의 크기를 가진다.

 


paging

페이징 기법(paging)은 컴퓨터가 메인 메모리에서 사용하기 위해 2차 기억장치로부터 데이터를 저장하고 검색하는 메모리 관리 기법입니다. 즉, 가상기억장치를 모두 같은 크기의 블록으로 편성하여 운용하는 기법입니다. 이때의 일정한 크기를 가진 블록을 페이지(page)라고 합니다. 주소공간을 페이지 단위로 나누고 실제기억공간은 페이지 크기와 같은 프레임으로 나누어 사용합니다.

 

잠깐 프레임과 페이지의 차이를 알아보고 가겠습니다

프레임과 페이지는 메모리를 일정한 크기의 공간으로 나누어 관리하는 단위이며, 프레임과 페이지의 크기는 같습니다.

 

-프레임(Frame) : 물리 메모리를 일정된 한 크기로 나눈 블록입니다.

-페이지(Page) : 가상 메모리를 일정된 한 크기로 나눈 블록입니다.

 

페이지가 하나의 프레임을 할당 받으면, 물리 메모리에 위치하게 됩니다. 프레임을 할당 받지 못한 페이지들은 외부 저장장치에 저장되며, 이때도 프레임과 같은 크기 단위로 관리됩니다.


page table

페이지 테이블은 페이징 기법에서 사용되는 자료구조로서, 프로세스의 페이지 정보를 저장하고 있는 테이블입니다. 가상 메모리를 사용하는 운영 체제에서 개별 프로세스는 고유의 가상 주소 공간을 가지고 있습니다. 또한, physical memory에 들어가 있습니다. 테이블은 다음과 같이 색인과 내용으로 구성되어 있습니다. 

 

-색인 : 페이지 번호

-내용 : 해당 페이지에 할당된 물리 메모리(프레임)의 시작주소. 이 시작 주소와 페이지 주소를 결합하여 물리 메모리 주소를 알 수 있습니다.

 


 

page table entry(PTE)

페이지 테이블 엔트리는 페이지 테이블의 레코드입니다. PTE의 필드에는 일반적으로 다음 내용이 기록됩니다.

- 페이지 기본주소(Page base address)

- 플래그 비트

    - 접근 비트(Accessed bit) : 페이지에 대한 접근이 있었는지를 나타냅니다.

    - 변경 비트(Dirty bit) : 페이지 내용의 변경이 있었는지를 나타냅니다.

    - 현재 비트(Present bit) : 현재 페이지에 할당된 프레임이 있는지를 나타냅니다.

    - 읽기/쓰기 비트(Read/Write bit) : 읽기/쓰기에 대한 권한을 표시합니다.

 

 


Demanding page

 

Demanding-page는 실제로 필요한 page만 물리 메모리로 가져오는 방식입니다. 필요 page에 접근하려 하면, 결국 가상 메모리 주소에 대응하는 물리 메모리 주소를 찾아내어, 물리 메모리 주소를 얻어와야 하는데, 이때 필요한 것이 페이지 테이블(page table)입니다. 페이지 테이블에 valid bit이라는 것을 두고, 해당 page가 물리 메모리에 있으면 set, 그렇지 않으면 invalid로 설정합니다.

 

Page접근 요청을 하였는데, physical memory에 없는 상태, 즉 valid bit가 clear 되어있는 상황을 Page fault라고 하며 아래와 같은 처리 과정을 거칩니다.

 

1. 페이징 하드웨어는 page table entry를 보고 invalid인 것을 확인한 후 OS에게 trap으로 알립니다.

2. OS는 정말로 메모리에 없는 것인지 아니면 잘못된 접근인지 확인한 후 잘못된 접근이었으면 종료시킵니다.

3. Empty frame (free page)을 얻습니다

4. Page를 frame으로 swap합니다.

5. 프로세스의 page table과 TLB를 page-in/page-out 된 것을 토대로 재설정 합니다.

6. Page fault를 야기했던 인스트럭션부터 다시 수행합니다.

 

3번 과정에서 empty frame을 얻어와야 하는 상황에서 물리 메모리가 이미 모두 사용중이라면, 그 사용중인 frame 중하나를 선택해서 page-out(페이징 파일로 이동) 시키고, 그 frame을 사용해야 합니다. 이와 같이 victim frame을 선태하는 과정에서 Page Replacement Algorithm을 사용합니다.

 

 

반응형