가상 메모리( Virtual Memory )란?
- 가상 메모리는 메인 메모리의 물리적인 주소 체계를 사용하지 않고 가상의 주소 체계를 사용하여 프로세스의 독립적인 가상 메모리 주소 공간을 확보하는 기술을 말합니다. 그렇기 때문에 메모리에 접근할 때마다 MMU를 통해 가상 메모리 주소에 맵핑된 물리 메모리 주소로 변환하여 접근합니다.
가상 메모리 장점
- 보조 기억 장치의 페이징 파일을 통해 사용할 수 있는 메모리를 확장하여 보다 더 많은 메모리를 사용할 수 있습니다.
- 가상 메모리 주소 체계를 사용함으로써 프로세스간의 직접적인 메모리 접근을 방지하여 시스템 안정성을 확보할 수 있습니다.
- 프로세스 실행에 필요한 메모리 공간을 점진적으로 확보해가기 때문에 프로세스의 실행 속도를 높이고 메모리 사용량을 절약하고 단편화를 줄일 수 있습니다.
- 동일한 프로세스를 여러개 실행 했을 때 Copy On Write 기법을 이용해서 서로 동일한 가상 주소를 사용하다가 메모리가 수정될 때 새로운 페이지를 확보하고 복사 후 수정하는 방식으로 메모리 사용량 및 프로세스 실행에 필요한 메모리 업로드 오버헤드를 절약할 수 있습니다.
가상 메모리 단점
- MMU를 통해서 가상 메모리 주소를 물리 메모리 주소로 변환하는 작업이 필요합니다.
- Fage Fault가 발생되었다면 보조 기억 장치에 있는 페이징 파일을 참조해서 페이징 스왑을 하는 작업이 필요합니다.
페이징( Paging )이란?
- 페이징( Paging )이란 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임( Frame )이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법을 말합니다.
페이지 테이블( Page Table )이란?
- 페이지 테이블( Page Table )에는 페이지 번호와 프레임 번호가 맵핑되어 있는 테이블로서 MMU( Memory Management Unit )가 가상 메모리 주소를 물리 메모리 주소로 변환할 때 참조하는 테이블입니다. 가상 메모리 주소와 페이지 테이블 덕분에 불연속적으로 프레임에 맵핑되어 있는 페이지를 연속적인 메모리처럼 사용할 수 있습니다.
페이지 테이블 베이스 레지스터( PTBR : Page Table Base Register )
- 페이지 테이블 베이스 레지스터란 프로세스마다 가지고 있는 페이지 테이블 주소 값을 저장하는 레지스터입니다. 페이지 테이블 베이스 레지스터 데이터는 PCB에 저장되며, 프로세스 컨택스트 스위칭 때 다른 레지스터 데이터와 같이 CPU 레지스터 셋트에 업로드됩니다.
TLB( Translation Lookaside Buffer )란?
- 메모리에 접근할 때마다 페이지 테이블을 참조하여 가상 메모리 주소를 물리 메모리 주소로 변환할 경우 메인 메모리 접근으로 인한 오버헤드가 발생됩니다. 이러한 오버헤드를 줄이기 위해 페이지 테이블에 대한 캐시 데이터를 TLB( Translation Lookaside Buffer )에 저장합니다. MMU가 가상 메모리 주소를 물리 메모리 주소로 변환할 때 가장 먼저 TLB를 참조하고 TLB에 원하는 물리 주소가 있는 경우를 TLB hit라 하고 없을 경우를 TLB miss 라고 합니다.
페이지 인( Page In )/페이지 아웃( Page Out )
- 페이지 교체 알고리즘에 의해서 필요하지 않은 페이지들을 보조 기정 장치의 페이징 파일에 저장할 수 있습니다. 이것을 페이지 아웃( Page Out ) 이라고 하며, 지금 쓰레드 실행에 있어서 필요한 메모리가 페이징 파일에 있을 때 페이지 테이블에 맵핑시키는 것을 페이지 인( Page In )이라고 합니다.
메모리 주소에서 페이지 번호를 확인하는 방법
- 접근하고자 하는 주소가 몇 번째 페이지인지 확인하기 위해서는 페이지 크기가 4KB라고 했을 때 위 코드에서 처럼 상위 bit를 페이지 번호로 사용하고 하위 bit를 페이지의 offset으로 사용할 수 있습니다.
페이지 테이블 엔트리( PTE : Page Table Entry )
- 페이지 테이블 각 행마다 페이지 번호와 프레임 번호 정보만 있는것이 아니라 유효 비트, 보호 비트, 참조 비트, 수정 비트 등의 페이지 상태 데이터 정보 또한 관리하고 있습니다. 페이지 테이블의 행을 페이지 테이블 엔트리( PTE : Page Table Entry )라고 부릅니다.
유효 비트
- 유효 비트는 해당하는 페이지가 물리 메모리에 맵핑되어 있는지를 확인할 수 있는 비트입니다. 만약 물리 메모리에 맵핑되어 있지 않다면은 Page Fault 예외가 발생됩니다.
보호 비트
- 보호 비트는 해당하는 페이지의 읽기, 쓰기, 실행 권한에 대한 정보가 담겨져 있습니다. 읽기, 쓰기, 실행이 가능한지를 확인할 수 있습니다.
수정 비트 or 더티 비트
- 수정 비트는 한 번이라도 페이지가 수정된적이 있는지에 대한 정보가 담겨져 있습니다. 만약, 한 번도 수정되지 않은채 페이지 아웃되었다면 페이징 파일을 수정할 필요 없이 새로운 페이지로 덮어 씌우면 되기 때문에 복사 오버헤드를 줄일 수 있습니다.
페이지 교체 알고리즘
- 페이지 교체 알고리즘은 페이지를 맵핑할 수 있는 물리 메모리가 부족할 경우 페이지 교체 알고리즘을 통해서 아웃할 페이지를 선정하고 신규 페이지를 맵핑합니다.(OS 마다 사용하는 페이지 교체 알고리즘이 다릅니다.) 페이지 교체 알고리즘으로는 FIFO( First In First Out), LRU( Least Resently Used )등이 있으며 대부분의 OS들은 복합적으로 응용해서 발전시킨 페이지 교체 알고리즘을 사용합니다.
쓰레슁( Thrashing ) 현상이란?
- 페이지 교체 알고리즘이 좋지 못하거나 물리 메모리가 부족하여 새로운 페이지를 맵핑할 수 있는 공간이 없을 경우 CPU 자원을 페이지 교체에 과소비하는 현상을 말합니다. 대부분의 경우는 물리 메모리 용량을 증가시킴으로써 해당 현상을 해결할 수 있습니다.
'운영체제 > Common' 카테고리의 다른 글
유저모드( User Mode )와 커널모드( Kernel Mode )란? (0) | 2022.11.10 |
---|---|
외부 단편화( External Fragmentation )와 내부 단편화( Internal Fragmentation )란? (0) | 2022.11.08 |
CPU 스케줄링( CPU Scheduling )이란? (0) | 2022.11.07 |
명령어 사이클( Instruction Cycle ) 과 인터럽트( Interrupt )란? (0) | 2022.10.27 |
프로세스 ( Process ) 와 쓰레드 ( Thread ) 란? (0) | 2022.10.03 |