Virtual Memory #1

charrrming·2022년 6월 2일

Computer Architecture

목록 보기
17/17
- virtual memory는 OS가 지원하는 기술

- proceesor는 physical address로 메인 메모리에 접근
- processor 내부에 virutal memory space가 가상으로 존재
	-> virtyal memory에 접근하기 위해 virutal address 이용
    -> 프로그래머가 개발 시 사용하는 주소가 virtual address   
- 메인 메모리는 virtual memory와 secondary storage 사이에 위치하며 캐시처럼 역할
* virtual memory 사용하는 이유

1) 프로세스 간의 메모리 공유를 위하여 (OS에게 권한 부여하고, 프로그래머는 신경 X)
	프로그램을 동작시키기 위해서는 메인 메모리에 load 시켜야함
    근데 메인 메모리 크기가 제한적이라 load, unload를 반복함
    이렇게 다시 load되는 과정에서 이전 메인 메모리 위치에 그대로 load된다는 보장 없음
    -> 메인 메모리의 위치가 변하더라도 프로그램 실행에 영향을 미치지 않기 위해
    	가상의 주소 개념 필요
        
        
2) 메인 메모리보다 큰 크기의 프로세스를 실행하기 위해
	구시대의 비효율적인 overlay 기법을 사용하지 않아도 됨
가상 메모리는 OS에서 제공하는 기술임
가상 메모리는 메인 메모리를 secondary storage와의 캐시로 여김

실제 메인 메모리의 데이터들을 virtual memory에 mapping 하기 위해 고정 크기의 단위인 pages를 사용함 (보통 4KB)
-> virtual space는 pages 단위로 쪼개져있음

page fault: 프로세스가 원하는 page가 메인 메모리에 로드되어 있지않아서 발생 (기능적으로는 문제 없지만, 성능이 낭비됨)

실행을 위해 필요한 pages만 physical memory에 요구함

OS는 page table을 만들고 그 안에 virtual page를 physical page로 mapping 하는 정보를 갖고 있음

Address Translation

각각의 page는 4KB -> 2^12 바이트 -> 12bit를 page offset으로 사용
page offset은 하나의 page 내에 2^12개의 공간을 구분하는 데 사용

나머지 20비트는 virtual page number로 사용
2^20개의 서로 다른 page를 구분할 수 있다는 뜻

하나의 virtual page가 하나의 physical page로 1:1 맵핑되므로 offset은 그대로 사용
physical page number의 bit 수는 더 적어질 수도 있음

Page Tables

- OS는 각각의 프로세스당 하나의 page table을 만든다 (메인메모리에 위치)
- page table은 virtual address를 실제 physical address로 변환하기 위한 정보를 저장
- page table은 pte(page table entry)로 구성됨
	-> pte는 virtual page number로 indexing 되어있음 (offset 역할)
- page table register in CPU는 메인 메모리에 저장된 page table의 시작 주소를 가리킴

* 필요로 하는 page가 메인 메모리에 있는 경우
	pte는 physical page number와 다른 상태 비트들을 pte에 저장하고 있음
* 필요로 하는 page가 메인 메모리에 없는 경우
	pte는 secondary storage의 swap space를 검색하여 찾아냄
    swap space는 하나의 프로세스에 대한 전체 virtual memory space 내용들을 전부 저장하고 있는 공간

Address Translation Mechanism

- 프로그래머가 프로그래밍 시에 사용하는 주소는 virtual address
- OS는 메인 메모리에 page table을 저장하고, 테이블의 시작 주소를 page table register에 저장
- virtual page #를 이용하여 page table 내부를 indexing
- page table register + offset 해서 원하는 데이터가 위치한 실제 메인 메모리 주소 알아낼 수 있음
- physical page #는 실제 메인 메모리 주소값을 의미

0개의 댓글