-
가상 메모리(Virtual Memory) 2CS/OS(운영체제) 2022. 6. 12. 19:49728x90
가상 메모리(Virtual Memory)
- 가상 메모리는 사용자로 하여금 매우 큰 크기의 main memory를 제공받는다는 느낌을 갖도록 하는 메모리 관리 기법임.
가상 메모리의 장점
- 메인 메모리 안에서 더 많은 프로세스들이 유지될 수 있음. 각 프로그램들이 실행하는 동안 더 적은 메모리를 소모하고, 더 많은 프로그램이 동시적으로 실행될 수 있음.
- 물리적 메모리보다 프로세스가 더 큰 메모리를 가지고 있어 수행 능력이 좋음.
- Protection과 Isolation을 가능하게 함.
- 효율적으로 메모리를 공유할 수 있음.
- 부분적재가 가능하기 때문에 I/O loading이 더 적음.
VM의 하드웨어와 제어 구조
Page Table Base Register
- 레지스터에 적재하는 것은 cost가 많이 발생하기 때문에 페이지 테이블을 가르키는 주소는 main memory 안에서 관리된다.
Page Table Entry
- Present (Valid) bit (P) - 디스크에 있는지 메인 메모리에 있는지 상태를 나타내는 Bit.
- Modified (Dirty) bit (M) - 페이지의 내용이 수정되었는지를 나타내는 Bit.
modified bit가 중요한 이유는 만약 수정되었다면 저장할 때 다시 wirte를 해주어야 하지만 수정이 되지 않았을 경우에는 그럴 필요가 없으므로 memory management technique 측면에서 더 효율적인 관리가 가능하기 때문이다.
TLB(Translation Lookaside Buffer)
- Page Table의 메모리 접근을 빠르게 하기 위한 고속 하드웨어 캐시.
- 현대 인텔 프로세서는 TLB 안에 128 or 256 entry가 있다.
Check TLB
input : page# , Output: Frame#
TLB Hit일 경우 -> Fetch translation, return Frame#
TLB Miss일 경우 -> Check page Table ( in memory) ->
Present bit 1일 경우 -> Load page table entry into TLB, return Frame#
Present bit 0일 경우 -> Page Fault Exception
MMU는 page fault exception을 호출할 수 있음.
CPU가 I/O request를 시작함 -> 페이지를 디스크부터 메모리까지 전송함 -> page table entry를 동시에 업데이트함 -> TLB로 entry를 load함
Virtual Memory Issue
1. Page Size Issue
페이지 사이즈가 크면 페이지 entry(테이블)이 더 작아짐.
단점은 각 페이지들이 내부적으로 낭비되기 때문에 internal fragmentation (내부단편화)가 발생하고, 메모리가 큰 페이지들로 빠르게 채워짐.
2. Faster Translation
페이지 테이블에 추가적인 메모리 접근이 필요하기 때문에 Performance 감소가 이뤄짐. ( 이 문제를 TLB를 이용하여 해결 ) 그러나, TLB에서 Contect Switch 이슈가 발생함.
각 프로세스는 다른 페이지 테이블을 가짐. context-switching이 발생할 때, TLB 안에 있는 지난 프로세스가 의미 없을 수 있음. (같은 VPN을 가지고 Valid P가 1임에도 불구하고, PFN이 100과 110으로 다른 경우)
첫번째 해결책은 Flush이다. 가장 간단하게 모든 valid P bit를 0으로 설정하는 것. (miss ratio가 높아지기 때문에 cost가 높음)
두번째 해결책은 ASID(Address Space Identifer) 이다.
주소 공간 식별자를 같이 적는다. 즉 PID를 추가하여 넣어주면 PID와 VPN이 일치해야 hit이 가능하게 하는 것이다. 이 경우 다른 프로세스에서도 TLB는 translation이 가능하게 된다.
3. Smaller Tables
메모리 낭비적인 측면에서 가장 중요한 이슈이다. 4KB page size를 가진 32bit computer의 경우 2^20entry를 가지고 있다. 만약 PTE가 4B라면, page table size는 2^(20*4) 즉 4MB가 되어버린다. 주목해야 할 점은 이 페이지 테이블은 프로세스 마다 존재하기 때문에 프로세스가 100개가 되어버리면 400MB를 차지하게 되는 것이다. 64bit computer일 경우 문제점이 더 심각해진다.
해결책은 뒤에 후술할 Combined paging and segmentation 기법이 있고, 페이지 계층화 , 역페이지 테이블 등이 있다.
Combined Paging and Segmentation
각각의 유저 주소공간을 segments 단위로 쪼개는 것.
각 segment는 고정된 크기의 pages로 다시 쪼개짐.
Segment Table의 변화는
Base : segment의 페이지 테이블의 위치가 삽입
Bound : # 페이지 테이블 엔트리의 숫자가 삽입
다른 컨트롤 비트는 sharing과 protection의 목적으로 사용됨.
페이지 테이블 엔트리는 필수적으로 pure paging system으로 같게 사용됨.
장점 : 페이지 테이블의 메모리 오버헤드 감소 , 메모리 할당의 간단화 , 외부 Fragmentation은 없고 내부 Fragmentation만 존재할 수 있음.
단점 : MMU에서 지원해야 하기 때문에 complexity level이 일반적인 paging과 비교하여 훨씬 더 높아짐.
페이지 계층화(Hierachical Paging)
page table을 더 작은 같은 크기의 multiple page로 나누는 것 ( 만약 전체 페이지의 PTEs가 invalid 하다면, 나누지 않음 )
two level page table임. (64bit CPU는 4-level) , 페이지 테이블 스스로 paged.
장점 : 낭비가 적음(할당된 공간 크기가 실제 사용되는 공간의 양에 부분적으로 있기 때문) , 페이지 테이블이 물리적 메모리 안에 연속적으로 존재할 필요가 없음.
단점 : 메모리로부터 추가적인 load가 요구됨.
역 페이지 테이블(Inverted Page Tables)
# of PTE == # of PFN , 인덱스로써 Frame #(번호)를 사용하고 시스템 안에서 한 페이지 테이블만 사용하는 기법.
각 엔트리는 page #을 포함하고, pid는 그 페이지의 자신.
장점 : 각 페이지 테이블을 저장하는 데 필요한 메모리의 감소
단점 : 페이지 참조가 발생할 때 테이블을 찾는데 필요한 시간이 더 오래걸림 , Hash Table을 사용함.728x90'CS > OS(운영체제)' 카테고리의 다른 글
가상 메모리(Virtual Memory) (0) 2022.06.12 메모리 관리(Memory Management) (0) 2022.06.12 교착 상태(DeadLock) (0) 2022.06.12 동기화(Synchronization) 2 (0) 2022.06.12 동기화(Synchronization) (0) 2022.06.01