Physical Memory, Virtual Memory
1960년대 까지는 모든 컴퓨터가 physical memory를 사용하였다.
그러나 여러 문제가 발생하며 virtual memory가 개발되었다.
현재의 모든 범용 컴퓨터는 user process address space로 virtual address space를 사용한다.
그리고 속도를 높이기 위해서 2번의 caching을 한다.(disk(virtual memory) → main memory → cache memory)
Virtual Memory의 등장 배경
- size of main memory의 해결
- single program이 main memory의 크기보다 더 크다면 프로그램 하나가 통채로 들어올 수 없다.
- 여러개로 나눠서 차례로 메모리에 올려야 한다.
- 때문에 프로그래머는 메모리 크기를 고려해서 프로그래밍을 해야 한다.
- 이는 프로그래머들에게 짐이 된다.
- process address space의 분리
- main memory와 프로그램의 compile과 실행을 main memory와 무관하도록 하기 위함
- main memory 보호
- 여러 user program들이 main memory를 공유한다.
- 다른 프로그램들로부터 자신의 영역을 보호해야 한다.
- 실행을 위한 program의 load를 간단하게 하기 위함
Physical Memory Model
CPU가 주는 address는 main memory의 주소로 physical memory의 address이다.
Embedded System
Assembly programming에서는 메모리를 어떻게 사용할지를 프로그래머가 결정한다.
주로 아래처럼 code와 data로 나누는 비교적 단순한 구조이다.
반면에, C programming에서는 컴파일러가 메모리를 어떻게 사용할지 결정한다.
문제점
- memory management
- size of main memory
- single program이 main memory의 크기보다 더 크다면 프로그램 하나가 통채로 들어올 수 없다.
- 여러개로 나눠서 차례로 메모리에 올려야 한다.
- 때문에 프로그래머는 메모리 크기를 고려해서 프로그래밍을 해야 한다.
- 이는 프로그래머들에게 짐이 된다.
Management Issue
새로운 프로그램을 돌리기 위해서는 메모리를 할당해 줘야 한다.
그러나 프로그램들을 실행하다보면 메모리가 정렬되지 않는 문제가 발생한다.
아래와 같은 상태에서는 실행 중이던 프로그램을 옮겨서(memory compact) 메모리 공간을 확보해야 한다.
Virtual Memory
CPU가 사용하는 address는 virtual address이다.
CPU는 OS에게 virtual adress를 주고, OS는 virtual address가 main memory에 caching 되어있는지 찾아서 반환해준다.
Virtual address space의 어느 영역을 어떤 용도로 사용할 것인가는 computer system design의 issue이다.
때문에 compiler, OS, CPU desiner들이 함께 고려해서 결정한다.
- compiler : compile and link
- OS : create and manage processes
- CPU : designed ISA (instruction의 구조)
메모리 공간의 분리
Main memory와 user process address space를 분리하기 위해 user process는 virtual address space를 사용한다.
Virtual address space는 disk에 존재한다.
그런데 disk는 매우 느리기 때문에 disk의 내용을 main memory에 copy(caching)한다.
때문에 CPU가 실제 사용하는 공간은 main memory이다.
그럼에도 느리기 때문에 main memory의 내용을 cache memory에 다시 caching을 한다.
Access speed를 높이기 위해서 disk보다 더 가까운 곳에 쓸 내용을 copy를 하는 것이다.
Caching
Memory access의 속도를 높이기 위해서 caching을 한다.
2번의 caching이 일어난다.
두 caching은 독립적이라서 원리적으로는 둘 중 하나만 구현해도 문제가 발생하지 않는다.
- disk → main memory
- SW로 구현
- OS가 담당
- main memory → cache memory
- HW로 구현
- CPU와의 속도를 맞춰야하기 때문에 굉장히 빨라야 한다.
- 때문에 HW로 구현하고, chip 안에 구현이 되어있다.
- instruction cache와 data cache memory가 존재한다.
Memory management
계층 구조를 갖는 메모리에서 CPU가 필요로 하는 것은 메모리에 올려주고, 더 이상 사용하지 않는 것은 빼줘야 한다.
이를 memory management라고 한다.
disk → main memory 로의 caching은 OS가 주체가 되어 management를 수행한다.
main memory → cache memory로의 caching은 architecture(HW)가 주체가 되어 수행한다.
Cache Memory
Cache memory는 processor 안에 존재하는 메모리(on-chip cache)이다.
Main memory에 비해 작고, 접근 속도가 빠르다.
Main Memory vs. Cache Memory
unified vs. split
Main memory는 instruction과 data가 하나의 메모리로 unified 되어있다.
반면, cache memory에서는 instruction cache memory와 data cache memory로 split 되어있다.
Cache memory에서는 structural hazard를 회피하기 위해서 2개를 split 한 것이다.
Main memory에서는 instruction과 data를 같이 저장한다.
CPU 사용 패턴에 따라 더 많이 사용되는 것을 더 많이 caching하기 위함이다.
만약 cache memory처럼 main memory가 split 되어 있다면 한 곳은 부족하고 한 곳은 널럴한, 낭비되는 상황이 발생한다.
이를 방지함으로써 성능을 높인다.
Memory Hierarchy
Ideal memory란 capacity는 크고, cost는 낮으며, speed는 빠른 메모리이다.
그러나 우리가 가지는 메모리는 ideal 하지 않는다.
대안
Ideal memory를 흉내내기 위해서 memory hierarchy를 형성한다.
그리고 memory hierarchy는 principle of locality를 이용하기 때문에 효율적이다.
Magnetic disk → main memory → cache memory 순으로 점점 processor에 가까워진다.
그에 따라 access speed 또한 빨라진다.
이를 이용해서 각 구간에 caching을 한다.
Principle of Locality
주어진 시간에 CPU는 주로 access 하는 instruction/data 영역들이 결정되어있다.
이 영역들을 working set이라 한다.
Locality는 이 working set에 대해 말해준다.
이를 이용함으로써 memory hierarchy는 더 효율적이 된다.
- Temporal locality
- 시간에 대한 locality
- 한번 access 한 것을 다시 access 하는 경향이 있다.
- 예 : loop 안에 있는 instructions, induction variable
- Spatial locality
- 공간에 대한 locality
- 한번 access 한 것의 주변 것을 access 하는 경향이 있다.
- 예 : instruction을 seqential하게 수행, array data
Memory management
서로 다른 layer 사이에서 instruction이나 data를 올리거나 내리는 것이다.
메모리에 공간이 없을 경우 잘 사용되지 않는 것을 내리고 필요한 것을 올려야 한다.
Moving 시기
- 올릴 때
- on-demand : CPU가 필요한 것을 찾고, 없으면 그 때 올린다.
- prediction
- streaming data(mulitmedia 등)은 순차적으로 내용이 저장되어 있다.
- 때문에 다음에 올 data를 예측 할 수 있다.
- 이를 이용해서 필요하기 전에 미리 올린다.
- 내릴 때
- 새로운 것을 가지고 올라올 때 공간 확보를 위해서 자리를 만든다.
Moving의 단위
Layer 사이에 instruction이나 data를 옮길 때의 단위는 다음과 같다.
주로 page의 크기가 block의 크기보다 크다.
- disk → main memory : page 단위
- main memory → cache memory : block 단위 (또는 line 단위)
Locality 활용
Temporal locality와 spatial locality를 활용해야 효율적이다.
- temporal locality
- 새로 가져온 것을 사용 후 바로 제거하는 것이 아니라 한동안 유지한다.
- spatial locality
- CPU가 필요하는 것의 주변 내용들도 같이 가져온다.
- single word 단위로 가져오는 것이 아니라 block 단위로 가져온다.
Inclusion Property
Cache memory의 내용은 다 main memory에 존재한다.
Main memory의 내용은 다 disk에 존재한다.
Cache vs. Virtual Memory Management
두 memory management 모두 caching, locality, management 등의 같은 principle을 적용한다.
다만 독립적으로 작용한다.
즉 이론적으로는 둘 중 하나가 없어도 영향을 받지 않는다.
- Cache memory management
- main memory의 내용을 cache memory로 가져온다.
- CPU의 속도에 맞추기 위해서 hardware에 의해 수행된다.
- 빠르고 간단한 구조로 구현된다.
- on-chip cache => processor의 부분이다.
- hardware accelerator : hardware가 memory access를 빠르게 해준다.
- 소프트웨어는 cache memory의 존재를 모른다.
- Virtual memory management
- main memory를 disk의 cache로 사용한다.
- software에 의해 구현된다.
- HW로 구현하면 빨라지지만, 그로 인해 얻는 것에 비해 비용이 너무 많이 든다.
- 그리고 disk는 이미 느리기 때문이다.
Cache Memory Management
- Cache hit
- CPU가 원하는 block이 실제로 cache memory에 있는 경우
- 우리가 원하는 ideal 한 상황이다.
- Cache miss
- CPU가 원하는 block이 cache memory에 없는 경우
- miss penalty가 소요된다.
- main memory에 가서 block을 가져오는데 필요한 시간
- Cache hit/miss rate
- Cache hit rate
- = cache hit이 발생한 수 / access 한 수
- 오늘날의 범용 컴퓨터는 95% 이상이 되도록 설계
- Cache miss rate
- cache miss가 발생한 수 / access 한 수
- cache hit rate는 숫자가 너무 크기 때문에 주로 miss rate를 사용한다.
- => cache hit rate + cache miss rate = 1
- Cache hit rate
Main Memory Management
Cache miss가 발생했을 때 main memory를 찾아야 한다.
- Page hit
- cache miss가 발생해서 main memory에 갔을 때 CPU가 원하는 block이 실제로 main memory에 있을 경우
- Page miss
- cache miss가 발생해서 main memory를 갔지만, main memory에서 원하는 block이 없을 경우
- OS가 management를 해서 disk로 부터 필요한 page를 가져온다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
5. Memory Design (0) | 2021.06.11 |
---|---|
5. Cache Memory (0) | 2021.06.06 |
4. Control Hazard (Branch Hazard) (1) | 2021.05.30 |
4. Data Hazard (0) | 2021.05.30 |
4. Structural Hazard (0) | 2021.05.30 |
댓글