전자전기공학/컴퓨터구조

[컴퓨터구조][virtual memory]

Sim 2024. 10. 27. 18:14
반응형

 

 

 

 

 

 

 

 

 

지난 시간에 이어서 virtual memory에 대해서 알아보도록 하겠습니다.

 

 

 

 

그렇다면 굳이 virtual memory에 사용되는 복잡한 개념을 이용해 가면서 사용하는 것 일까요?

 

virtual memory는 물리 메모리의 한계를 극복하고 효율적인 메모리 관리를 위해서 사용됩니다.

 

물리 메모리는 제한된 자원으로 크기가 정해져 있습니다. 하지만 저희가 게임을 하더라도 많은 용량을 필요하게 됨으로

물리 메모리의 제한된 자원을 다 사용하더라도 부족할 수 있습니다.

 

이처럼 프로그램을 사용할 때 부족한 메모리의 제한을 없애고 큰 프로그램을 사용하기 위해서 virtual memory를 사용합니다.

 

또한 여러가지 이유가 있지만 그 중에서 메모리 단편화를 해결하기도 합니다.

물리 메모리에 연속적으로 공간을 할당하다보면 메모리 단편화를 초래합니다.

 

"메모리를 연속적으로 공간을 할당하는데 단편화가 일어난다고?" 라고 하실 수 있지만

메모리를 연속적으로 할당하는데 단편화가 일어나는 이유는 다음과 같습니다.

 

외부 단편화는 메모리의 빈 공간이 비연속적으로 분산되어 있는 상태를 의미하게 되는데

충분한 메모리 공간이 있음에도 새로운 프로세스가 연속적으로 할당할 공간을 찾지 못하기 때문입니다.

 

program1(5MB) free(3MB) program2(8MB) free(4MB) program3(6MB) free(2MB)

 

위의 표와 같이 메모리가 할당되어 있을 때, 6MB의 프로그램을 실행시킬 수 없게 됩니다.

 

각각의 프로그램들은 연속적으로 할당되어있을 수 있지만 전체적인 메모리 관점에서는 비연속적으로 흩어져 있기 때문입니다.

 

 

내부 단편화는 간단하게 설명해서 시스템이 메모리를 4KB단위로 할당하나고 했을 때 2KB 크기의 데이터를

처리하기 위해서 4KB를 할당했다면 나머지 2KB는 사용되지 않기 때문에 남는 공간이 내부 단편화로 이어지는 것 입니다.

 

 

여기서 해당하는 개념들은 아래에서 살펴볼 paging을 이용해서 외부 단편화 문제를 해결하고

메모리를 효율적으로 사용할 수 있게 됩니다.

 

 

 

 

 

virtual memory의 기본

 

 

 

 

 

 

Program은 main memory를 공유하게 되는데, 각 프로그램은 고유의 virtual address space가지고 있습니다.

 

 

각 virtual address space를 가지고 있다는 것은 제 블로그의 운영체제에서 Process 또는 Thread를

보시면 그림으로 virtual address space가 어떻게 구성되어 있는지 자세히 알 수 있습니다.

 

 

CPU와 OS는 virtual address를 physical address로 번역하게 됩니다.

여기서 이전에 cache에서 배웠던 block은 virtual memory에서는 page라고 하며,

cache에서 배웠던 cache miss는 page fault라고 부르고 있습니다.  

 

 

 

 

 

위의 그림을 보게 되면, virtual address를 통해서 physical address를 찾고,

만약에 page fault로 찾는 주소와 매칭되는 physical address가 없다면 disk에 접근하여 fetch해야 하기 때문에

page fault가 났을 때 100만 clock정도가 소요되기 때문에 page fault를 막기 위한 노력을 해야 합니다.

 

 

page fault를 막기 위해서 제일 좋은 cache의 구조는 fully associative구조이기 때문에 해당 구조를 사용하고,

최적화된 알고리즘을 사용해서 page fault를 막아야 합니다.

 

 

 

 

 

 

 

PT(page table)

 

 

 

 

 

 

 

page table은 virtual page number(VPN)을 physical page number으로 매핑해주는 표가 page table입니다.

 

또한 이렇게 virtual address와 physical address를 이용해서 매핑해주는 것을 paging이라고 부릅니다.

 

 

위의 그림을 보면 page table register가 있는데, page table register는 CPU내에 있으며,

physical memory에 있는 page table을 point하는 register입니다. 한 마디로 page table register는 PT의 entry를 가르킵니다.

 

여기서 entry는 page table의 항목들 각각을 지칭하는 말로, page table에 있는 표의 행 하나를 의미합니다.

 

 

만약에 page가 memory에 존재한다면 PTE(page table entry)는 physical page number를 저장하고

reference, dirty, valid bit을 상황에 맞게 조정하게 됩니다.

 

 

 만약에 page가 memory에 존재하지 않는다면 disk의 공간을 참조하게 됩니다. 

 

 

여기서 dirty bit은 LRU(Least Recently Used)에 사용되는 bit이고,

reference bit을 이용하여 최근에 사용된 것인지 아닌지를 알 수 있게 됩니다.

 

 dirty bit은 cache할 때 배운 것과 똑같은 bit입니다.

 

 

 

그렇다면 page table을 이용하는 이유가 뭘까요?

 

 

 

1. 가상 주소와 물리적 주소 변환

    가상 메모리의 주소를 물리 메모리로 변환하는데 사용됩니다.

 

2. 메모리 보호:

    프로세스 간 메모리 접근을 제한하여 보호 기능을 제공합니다.

 

3. 효율적인 메모리 사용

    실제 필요한 페이지만 물리 메모리에 할당하여 메모리 낭비를 줄입니다.

 

4. page fault 처리

    page table을 통해 page fault를 처리하고 메모리를 관리합니다.

 

 

위의 역할에서 말하는 것과 같이 가상 주소와 물리적 주소를 매핑하는 핵심 역할을 하며

가상 메모리 시스템에서 효율적이고 안전한 메모리 관리를 가능하게 합니다.

 

 

여기서 한가지 드는 의문이 있습니다.

 

 

지금까지 배운것에 의하면 cache를 사용하는 이유가 cache miss로 인해서 main memory에 데이터를 가지러 가는 것은 많은 clock수가 걸리기 때문에 만든 것이라고 하는데 page table은 오래 안걸리니까 사용하는것인가?

 

이에 대한 질문에 대한 답으로 TLB(Table Look-aside Buffer)라는 것을 사용하게 됩니다.

 

 

page table은 locality를 가지고 있기 때문에, CPU 내에 PTE를 가지고 있을 수 있는 cache를 사용하는데,

이것이 바로 TLB입니다. TLB를 이용해서 page table에 들르지 않고, 이전에 가지고 왔던 것들을 빠르게 사용할 수 있는 것 입니다.

 

 

 

 

 

지금까지 PT와 TLB에 대해서 살펴봤지만 전체적인 구조를 연결하기 너무 어려운 것 같아서

아래와 같이 전체적인 연결을 그림으로 그려서 표현하는 것이 이해하시기 더 쉬울 것 같아서 가져와봤습니다.

 

 

 

 

 

 

위에서 이야기 했던 Page table register는 MMU 내부에 포함되어 있습니다.

 

 

TLB에도 cache와 같이 hit와 miss가 존재하게 됩니다. 만약 TLB에 해당 주소가 없다면

해당 주소를 가지고 오기 위해서 Page table에 가서 page의 사이즈에 맞게 주변 데이터(spatial Locality)를 가져옵니다.

 

page table에서 page의 사이즈에 맞게 TLB로 데이터를 가지고 오면,

그 이후에 다시 MMU와 TLB가 상호작용하며 작업을 이어가게 됩니다.

 

여기서 만약에 page table에도 그 정보가 없다면 page fault가 일어나며 disk에 가서 가져오게 됩니다.

 

 

 


 

 

지금까지 글 읽어주셔서 감사합니다.

 

 

 

반응형

'전자전기공학 > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터 구조][Out of order]  (2) 2024.11.15
[컴퓨터 구조][Parallel]  (0) 2024.11.13
[컴퓨터구조][cache#2]  (0) 2024.10.25
[컴퓨터구조][Cache]  (0) 2024.10.16
[컴퓨터구조][Hazards #2 Control Hazard]  (0) 2024.10.13