Computer Architecture

Computer Architecture - Memory (3)

tangerine0302 2024. 12. 30. 16:24

※ 해당 내용은 Computer Architecture보다 OS에 가까운 내용 ※

 

우리가 사용하는 프로그램들은 가상 주소(Virtual Address)를 사용한다.

하지만 실제 Memory는 물리 주소(Physical address)를 사용한다.

 

이런 Virtual Address를 사용하는 이유로는

- 프로그램이 Memory의 어디든 배치될 수 있다.

- 여러 개의 프로그램이 동시에 수행될 수 있다.

라는 장점이 있다.

 

 

Virtual Address를 왜 사용하는지 예를 들어 설명하면

 

1. 만약 Virtual Address가 아닌 Physical Address를 사용했다면 각각의 프로그램이 각자의 Address Space를 보호하면서 Memory를 공유하는 것이 힘들어진다

(e.g. 1번 프로그램이 0~10번 주소를 사용 중이라면, 2번 프로그램은 11~20번 주소를 사용해야 함, 이를 고려하면서 프로그래밍하는 것이 힘듦)

 

2. 따라서 모든 프로그램이 Virtual Address로 모두 예를 들어 0~10번 주소를 사용하게 하고 나중에 address transration 과정을 거쳐 Physical address로 mapping해주는 과정을 거치는 것이다.

 


Address Transration, fragmentation


MMU(Memory Management Unit)

앞서 설명한 것처럼 프로그램은 VA를 사용하고 Memory는 PA를 사용하기 때문에 VA → PA 변환은 메모리 접근을 할 때마다 매번 발생한다.

 

따라서 이러한 Transration을 담당하는 unit이 필요하고 해당 역할을 담당하는 것이 MMU(Memory Management Unit)인 것이다.

 

Segmentation과 Page에 대해 설명하기 전에 단편화(Fragmentation)에 대해 알아두는 것이 더 좋을 것 같다.

 

프로그램을 실행시키기 위해서는 필요한 코드, 변수, data들을 memory에 저장해야하는 공간이 필요하고, 이를 OS에서 메모리에 할당해 준다.

OS에서 어느 빈 공간에 메모리를 할당시켜 줄 지 결정하는 과정에서 크게 2가지 Fragmentation이 발생한다.

 

 

1. 외부 단편화(External Fragmentation)

 

해당 그림처럼 메모리 공간이 충분함에도 연속적인 공간이 아니기 때문에 할당하지 못하는 경우를 외부 단편화(External Fragmentation)이라고 한다.

 

 

2. 내부 단편화(Internal Fragmentation)

 

사진은 buddy system이라는 할당 알고리즘의 예시인데, 반씩 나누어 가장 작은 공간에 Process 사용 가능 공간을 할당시켜준다.

 

만약, Memory Request 100KB Index 들어올 경우, 128KB 할당되어 28KB 공간이 낭비되게 되는 것이다. 

 

이런 경우를 내부 단편화(Internal Fragmentation)이라고 한다.

 


Segmentation, Page


앞서 설명한 외부, 내부 단편화를 해결하기 위한 방법으로 크게 Segmentation, Page 기법이 있다.

 

1. Segmentation

- 프로세스를 여러 개의 논리 단위인 Segment로 나누는 방법을 의미한다.

 

- Segment는 다양한 유형의 데이터를 포함하고 있다(e.g. Stack, heap, program code)

 

- 세그먼트는 연속적인 공간에 저장되며, 세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 공간을 찾아 할당하는 기법이다.

 

- Segment table 존재하여, 해당 세그먼트의 주소와 범위를 결정해준다.

 

 

- Segmentation의 장점

1. Segmentation 사용하면 Segment table bound 값을 조절하여 Stack이나 heap 쉽게 늘릴 있으며  code datashare 또한 쉽게 있다.

2. Access permission 조절하여 security 측면에서도 이점이 있다.

 

 

- Segmentation의 단점

1. Segment의 크기가 다 다르기 때문에 관리가 어렵다.

2. 크기가 다르기 때문에 Internal Fragmentation은 발생하지 않지만 External Fragmentation은 발생한다.

3. Segment size 동적으로 변화 할 있기에 다른 segment 가로막혀 relocation 해야하는 상황이 벌어질 있다.

 

 

 

 

2. Page

- Page 기법의 핵심은 프로그램의 Data를 Pages라는 작은 고정된 사이즈로 쪼개서 관리하는 것이다.

- DRAM에 저장되어 있는 Page Table을 통해 각 Process의 Page들에 대한 Physical Address를 제공한다.

 

 

- Page Table의 경우 각 Process별로 하나의 Table을 보유하고 있다.

- 위 그림의 경우에는 Valid bit만 존재하지만 Access 권한에 대한 정보(e.g. R, W, X)도 추가될 수 있다.

 

 

- Paging including TLB

- Valid Page: access 권한을 확인하고, 권한이 있는 경우에만 Physical Address를 return 한다.

- Invalid Page: Page가 현재 Page Table에 없으므로, Page Fault로 처리함

- Page Fault: 새로운 Page를 Storage에서 불러오고, Page Table에 새로운 Entry를 추가하고, 명령어 실행을 다시 시작

 

 

※ 하지만 Cache에 접근할 때도 VA → PA Translation이 필요한데 Transaltion을 위해 매번 DRAM에 존재하는 Page Table을 확인하는 것이 매우 비 효율적임 ※

 

 

따라서 Locality를 활용하기 위해 Page Table 또한 Caching 한다.

 

 

- TLB(Translation Lookaside Buffer): Page Table 용 특수목적 Cache라고 이해하면 좋다.

  • TLB의 경우 일반적으로 Cache보다 용량이 적다.
  • Associativity를 높게 하는 것이 일반적이다.
  • 용량이 적어 cache access 만큼 속도가 빠르다.
  • cache와 똑같이 write-back / write - through 방식을 사용한다.
  • 모든 메모리 접근은 TLB를 확인한다.(VA → PA 변환은 필수적이기 때문)

 


VA → PA Translation process

 

 

1. TLB를 확인한다.

2. TLB Miss일 경우 DRAM에 있는 Page Table을 확인한다.

3. Page Table에서도 miss일 경우 Page Fault 발생

4. SSD에서 해당 data가 physical memory로 load

5. 새롭게 load 된 page 정보를 page table, TLB에 업데이트 (VA → PA mapping 정보 저장)