Memory Hierarchy

msung99·2022년 9월 19일
0
post-thumbnail

Memory Hierarchy (메모리 계층)

  • 운영채제(OS) 는 유저에게 CPU(register) 와 캐쉬(cache) 와 등의 메모리 공간에 대한 그 어떠한 접근권한을 주지 않는다.

  • cache (캐쉬) 는 main memory 나 storage 에 저장된 데이터 중에 자주 쓰이는 데이터를 미리 들고 있다가 필요할 때마다 리턴

  • main memory, stoarge : 이 둘한테는 유저에게 접근권한을 부여함 (유저들이 접근 가능한 메모리공간)


Main memory (메인 메모리)

  • RAM(Random Access Memory)
    • 옛날의 메모리 장치들은 RAM 을 지원하지 않았음
    • RAM 은 빠르게 랜덤한 접근을 지원 및 저장하게 함
    • DRAM(Dynamic RAM) : RAM 의 종류중 하나로, 핫한 RAM

SRAM vs DRAM

요약

  • DRAM
    • 전압을 계속 공급해주는 refresh 작업 필요
    • 1bit 를 표현하는데 트랜지스터 1개면 충분
    • 빠르지만 비쌈 (but 최근들어서 엄청 싸짐)
    • main memory 에서 사용

  • SRAM
    • 전압이 계속 유지
    • 1bit 를 표현하는데 트랜지스터 6개나 필요
    • 느리지만 싸다 (but 최근들어서 엄청 비싸짐)
    • 가격이 싸서 특정 디바이스들에서 cache(캐쉬) 로 사용

cf) 공통점 : 휘발성 (전압이 빠지면 메모리에 저장된 데이터가 사라짐)

RAM의 특징 : 1bit 를 가지고 하드웨어를 구현해 놓았는데, 전압이 특정 이상이 올라가면 1이라 인식하고, 이하로 내려가면 0이라 인식한다. (전압은 트랜지스터로 공급)

  • SRAM (Static RAM) 이 왜 느린가? : SRAM 을 만든 소자의 특성이 한번 올라가면 유지가 된다. (즉, 전압이 다시 내려오지 않는다)

    • 그래서 이를 해결하기 위해 트랜지스터(transistors) 라는 것을 1bit 를 표현하는데 6개나 사용하고, 그렇게 해도 전압이 안내려오기 때문에 상태가 계속 유지된다는 단점이 있다.
  • DRAM 은 반면, 트랜지스터에 다른 소자를 사용해서, 1bit 를 표현하는데 트랜지스터를 하나만 쓰면 된다.

    • 트랜지스터로 전압을 올려놓으면 전압이 점차 계속 내려오는 특징이 있어서, refresh 작업(= 전압을 다시 공급해서 전압을 올려주는 작업)을 해야한다.

cf) SRAM 은 main memory 로 사용하지 않고, 특정 디바이스 들에서 캐쉬로 사용한다.


Traditional Bus Structure

CPU Chip 구성요소

1) ALU 모듈 : 계산 담당
2) register file : 레지스터들의 주소들이 담겨있는 특정 공간
3) Bus interface : System bus 를 control 메모리

  • System bus : 칩에있는 데이터가 나가고 들어오는 통로

  • memory bus : main memory 에서 데이터가 나가고 들어오는 통로

  • I/O bridge : System bus 와 memory bus 두 사이를 연결

    • System, Memory bus 외에도 많은 bus 가 있는데, 다른 bus 말고 안에서 어디로 갈지 길잡아 주는 길잡이 역할을 함

데이터를 메모리에서 읽어오는 과정 (Memory Read)

  • CPU 가 A 라는 주소에 있는 메모리의 데이터를 읽고싶은 경우
    => 어샘블리어 명령 : movq A, %rax (해석:옮겨라, A라는 주소에 있는 데이터를 rax 라는 주소로 옮겨라)

(rax : 레지스터 이름)

1) CPU 에서 Bus interface 를 통해서 read command(읽어오는 명령) 을 A 라는 주소와 함께 실어서 보낸다.

2) 그러면 I/O bridge 가 A라는 주소에 있는 메모리에 가야함을 인지하게 되고, 두 메모리 사이를 연결해줌

3) 메모리가 요청을 받고, A라는 주소의 메모리에 가서 원하는 데이터 x를 꺼내옴

4) Bus interface 는 자기가 요청했던 데이터가 도착했음을 확인하고, 레지스터 파일에 있는 rax 라는 레지스터에다 바로 연결해줌


(반대과정) 메모리에 있는 데이터를 전송해주는 과정(Memory Write)

어샘블리어 명령 : movq %rax, A

  • Register file 의 어느한 공간에 담긴 데이터 y를 주소 A를 가지는 메모리에 쓰고 싶은 경우

1) 아까는 main 메모리한테(정확히는 메모리안의 Bus interface 한테) read command 를 줬다면, 이번에는 write command 를 A 라는 주소와 함께 준다.

2) main 메모리는 컨트롤러로 통로 만들어 놓고 기다림

3) Bus interface 에다 데이터 y 를 싣고 I/O bridge 를 통해 이동

4) main 메모리가 memory bus 로 데이터 y를 받아오고 주소 A의 공간에 저장


Volatile(휘발성) VS Non-Volatile(비휘발성)

  • Volatile memory 종류 : SRAM, DRAM

    • 전원 공급이 없다면 데이터가 없어짐
  • Non-Volatile memory 종류 : ROM, EEPROM, HDD, SSD

    • HDD : Hard Disk Drive
    • SSD : Solid-State Disk
    • ROM(Read Only Memory)

Disk Storage (Secondary Memory)

  • 속도가 느림
  • 가장 싸고, 가장 큰 메모리

아래 그림처럼 팔의 장소를 옮길떄마다 다른 메모리 공간의 데이터를 읽게된다.

  • 팔을 가지고 디스크의 track 한 줄을 읽는다. 이때 track 한 줄은 여러개의 sector 로 구성된다.

  • 대부분의 디스크는 512 bytes 를 sector 로 해서 데이터를 읽어온다. 즉, 디스크는 한 track 인 512 bytes 짜리의 sector 를 읽는다.

Logical Disk Blocks

  • sector 특정 부분이 고장나서 접근이 안되면, 평소에 쓰지 않던 logical block 이라는 것으로 대체해서 사용

  • 하드디스트 안에 들어있는 예비용 칩 (sector 가 고장날때를 대비)

  • 디스크의 Formmatted capacity 와 maximum capacity 가 다를 수 있다.

    • => 디스크를 컴퓨터가게에서 팔떄 디스크 용량이 1TB 라고 하는 것은 거짓말이 섞여있다. 이 용량은 logical bloacks 를 제외한 공간으로, 1.1TB 와 같은 것이 logical blocks 도 포함한 디스크의 maximum 공간이다.

디스크의 Data Read 과정

  • I/O bridge 에 I/O bus 라는 다른 버스도 연결되어있다.

=> 이름은 I/O bus 인데, storage 만 들어가있는 것이 아니라,
USB, 모니터, Disk controller(ex. Disk blocks) 칩 등이 모두 들어있다.

disk controller 칩 뒤에는 storage 가 담겨있다.


read 과정

1) CPU 에게 logical block(Disk Controller) 의 특정 주소의 데이터를 읽고싶다는 read command 와, logcial block 의 특정주소를 던져줌

2) Disk Controller 에 접근후 그의 Storage 로 부터 읽어와하나 속도가 굉장히 느림(성능 Bad). 그래서 CPU 는 기다리지 않고 read command 를 disk controller 에 던져놓고 다른 일을 잠시 하러 다녀옴

3) DMA(Direct Memory Access) disk controller 는 리턴값을 CPU 한테 직접 주는것이 아닌, 데이터를 리턴해줘야 하는 곳은 CPU 이지만 엉뚱하게도(?) memory(정확히는 memory controller) 한테 준다.

4) Disk Controller 가 CPU 한테 너가 요청한 데이터를 main memory 에 넣어놨어! 라고 주소를 알려줌. 그러면 CPU 는 Storage 에서 직접 데이터를 뽑아올 떄까지 기다리는 시간없이, main memory 에 접근해서 데이터를 가져옴


SSD (Solid-State Disk)

  • Flash 라는 메모리(flash memory) 에 저장

  • 단위 : hardware page < block < flash memory

  • FTL(Flash Translation Layer) : 위에서 보듯 Data Read 과정에서 주소하고 read command 를 줬는데, 이를 FTL 이 받고 그 주소를 flash memory 에다 해당 주소 데이터값을 저장함

  • Read 와 Write 의 연산 속도가 거의 동일
    (<=> 디스크에서는 Read 가 Write 보다 훨씬빠름.)

  • Random Access 연산이 Sequential 접근 연산보다 더 느리다 (중요!)

  • 장점 : 빠르다 + 낮은 전력소모

  • 단점 : 수명이 있다 (Flash Memory 라는 물질의 특성상, 오래쓰면 물질의 특성이 변해버려서 사용 불가능) + 비쌈


Memory Hierarchy 의 특징 정리

  • 빠를수록 크기가 작고 비싸며, 느릴수록 크기가 크고 싸다.
  • CPU 와 main memory 의 속도차이가 커지고 있다. (CPU만 속도 빨라지는중)

profile
블로그 이전했습니다 🙂 : https://haon.blog

0개의 댓글