운영채제(OS) 는 유저에게 CPU(register) 와 캐쉬(cache) 와 등의 메모리 공간에 대한 그 어떠한 접근권한을 주지 않는다.
cache (캐쉬) 는 main memory 나 storage 에 저장된 데이터 중에 자주 쓰이는 데이터를 미리 들고 있다가 필요할 때마다 리턴
main memory, stoarge : 이 둘한테는 유저에게 접근권한을 부여함 (유저들이 접근 가능한 메모리공간)
요약
- DRAM
- 전압을 계속 공급해주는 refresh 작업 필요
- 1bit 를 표현하는데 트랜지스터 1개면 충분
- 빠르지만 비쌈 (but 최근들어서 엄청 싸짐)
- main memory 에서 사용
- SRAM
- 전압이 계속 유지
- 1bit 를 표현하는데 트랜지스터 6개나 필요
- 느리지만 싸다 (but 최근들어서 엄청 비싸짐)
- 가격이 싸서 특정 디바이스들에서 cache(캐쉬) 로 사용
cf) 공통점 : 휘발성 (전압이 빠지면 메모리에 저장된 데이터가 사라짐)
RAM의 특징 : 1bit 를 가지고 하드웨어를 구현해 놓았는데, 전압이 특정 이상이 올라가면 1이라 인식하고, 이하로 내려가면 0이라 인식한다. (전압은 트랜지스터로 공급)
SRAM (Static RAM) 이 왜 느린가? : SRAM 을 만든 소자의 특성이 한번 올라가면 유지가 된다. (즉, 전압이 다시 내려오지 않는다)
DRAM 은 반면, 트랜지스터에 다른 소자를 사용해서, 1bit 를 표현하는데 트랜지스터를 하나만 쓰면 된다.
cf) SRAM 은 main memory 로 사용하지 않고, 특정 디바이스 들에서 캐쉬로 사용한다.
1) ALU 모듈 : 계산 담당
2) register file : 레지스터들의 주소들이 담겨있는 특정 공간
3) Bus interface : System bus 를 control 메모리
System bus : 칩에있는 데이터가 나가고 들어오는 통로
memory bus : main memory 에서 데이터가 나가고 들어오는 통로
I/O bridge : System bus 와 memory bus 두 사이를 연결
(rax : 레지스터 이름)
1) CPU 에서 Bus interface 를 통해서 read command(읽어오는 명령) 을 A 라는 주소와 함께 실어서 보낸다.
2) 그러면 I/O bridge 가 A라는 주소에 있는 메모리에 가야함을 인지하게 되고, 두 메모리 사이를 연결해줌
3) 메모리가 요청을 받고, A라는 주소의 메모리에 가서 원하는 데이터 x를 꺼내옴
4) Bus interface 는 자기가 요청했던 데이터가 도착했음을 확인하고, 레지스터 파일에 있는 rax 라는 레지스터에다 바로 연결해줌
어샘블리어 명령 : movq %rax, 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 memory 종류 : SRAM, DRAM
Non-Volatile memory 종류 : ROM, EEPROM, HDD, SSD
아래 그림처럼 팔의 장소를 옮길떄마다 다른 메모리 공간의 데이터를 읽게된다.
팔을 가지고 디스크의 track 한 줄을 읽는다. 이때 track 한 줄은 여러개의 sector 로 구성된다.
대부분의 디스크는 512 bytes 를 sector 로 해서 데이터를 읽어온다. 즉, 디스크는 한 track 인 512 bytes 짜리의 sector 를 읽는다.
sector 특정 부분이 고장나서 접근이 안되면, 평소에 쓰지 않던 logical block 이라는 것으로 대체해서 사용
하드디스트 안에 들어있는 예비용 칩 (sector 가 고장날때를 대비)
디스크의 Formmatted capacity 와 maximum capacity 가 다를 수 있다.
=> 이름은 I/O bus 인데, storage 만 들어가있는 것이 아니라,
USB, 모니터, Disk controller(ex. Disk blocks) 칩 등이 모두 들어있다.
disk controller 칩 뒤에는 storage 가 담겨있다.
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 에 접근해서 데이터를 가져옴
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 라는 물질의 특성상, 오래쓰면 물질의 특성이 변해버려서 사용 불가능) + 비쌈