hyelie
hyelie
Hyeil Jeong
       
글쓰기    관리    수식입력
  • 전체보기 (495)
    • PS (283)
      • Algorithm (28)
      • PS Log (244)
      • Contest (6)
      • Tips (5)
    • Development (52)
      • Java (14)
      • Spring (23)
      • SQL (2)
      • Node.js (2)
      • Socket.io (3)
      • Study (4)
      • Utils (4)
    • DevOps (36)
      • Git (5)
      • Docker (4)
      • Kubernetes (2)
      • GCP (3)
      • Environment Set Up (8)
      • Tutorial (12)
      • Figma (2)
    • CS (74)
      • OOP (7)
      • OS (24)
      • DB (2)
      • Network (24)
      • Architecture (0)
      • Security (2)
      • Software Design (0)
      • Parallel Computing (15)
    • Project (15)
      • Project N2T (5)
      • Project ASG (0)
      • Project Meerkat (1)
      • Model Checking (7)
      • Ideas (2)
    • 내가 하고싶은 것! (34)
      • Plan (16)
      • Software Maestro (10)
      • 취준 (8)
hELLO · Designed By 정상우.
hyelie

hyelie

[컴퓨터 SW] Storage - RAM & Disk
CS/OS

[컴퓨터 SW] Storage - RAM & Disk

이 글은 포스텍 김종 교수님의 컴퓨터SW시스템개론(CSED211) 강의를 기반으로 재구성한 것입니다.

 이 글에서는 Storage저장매체 중 RAM과 disk에 대해 간단히 살핀다.

 

Random-Access Memory, RAM

 RAM은 자유롭게 내용을 읽고 쓸 수 있는 저장장치이다. 최소단위는 cell이며 하나의 cell에 하나의 bit가 저장된다. 이 cell들이 모여 chip을 이루고, chip들이 모여 memory가 된다.

 크게 SRAM과 DRAM으로 나뉜다. 특징으로는 전원이 꺼지면 정보를 잃어버리는 volatile휘발성 메모리이다. 

 

 

Static RAM

 각 cell이 4개 또는 6개의 트랜지스터를 가지고 있으며 내부 루프를 통해 값을 계속 유지시키기 때문에 전원이 유지되는 한 값이 유지되며, cell의 내용을 독립적으로 가지고 있는다. 회로가 계속 돌기 때문에 노이즈나 방사선 등에 둔감한 편이며 DRAM보다 더 빠르고 더 비싸기 때문에 주로 cache에 사용된다.

 

 

Dynamic RAM

 각 cell에 축전기를 가지고 있으며 축전기를 이용해 bit를 보관하며, 한 cell에 1개의 트랜지스터가 있다. 축전기는 시간이 지나면 방전되기 때문에 지속적으로 재충전해주어야 한다. 축전기를 사용하기 때문에 SRAM보다 노이즈나 방사선 등에 더 민감하고, SRAM보다 느리고 싸다기 때문에 주로 메인 메모리에 사용된다.

 

Synchronous DRAM

 기존 DRAM은 변화가 생기면 빠르게 연산한 후 값을 돌려주는 방식(ascynchronous)이었다면, SDRAM은 CPU의 clock signal과 동시에(scynchronous) 반응하기 때문에 더 빠르다.

 

Double Data-Rate Synchronous DRAM

 메모리 대역폭을 2배로 늘려서 각 핀당, 각 cycle에 2개의 bit를 전송할 수 있다.

 

 

 

Disk Drive

Disk Drive의 구조

디스크의 구조

 디스크의 구조는 위와 같다. 여러 장이 겹쳐 있는 CD를 생각하면 편하다. 얇은 원판을 platter, platter의 한 면을 surface라 하고 회전시키는 축을 spindle이라 한다. 한 장의 platter에 2개의 surface가 있다.

 

platter의 구조

 platter는 위 그림과 같이 생겼다. 한 surface에 수많은 track이 동심원을 이루고 있고, 각 track에는 gap으로 구분되는 sector가 있다. 각 track과 sector에는 고유 번호가 있으며 이를 통해 어디를 읽을지 결정한다.

 

 

Disk Capacity

 disk capacity는 disk에 저장할 수 있는 bit의 개수이다. 몇 가지 개념들의 곱으로 이를 표현한다.

  • Capacity =  (# of bytes/sector) × (avg. # of sectors/track) × (# of tracks/surface) × (# of surfaces/platter) × (# of platters/disk)
    • sector당 byte 개수 * track당 sector 개수 * surface당 track 개수 * platter당 surface 개수 * disk당 platter 개수 = disk capacity.

 

 

Disk 탐색 시간

disk의 정보를 읽는 방법

 platter와 별개로 disk drive에는 arm이라는 것이 존재한다. spindle과 arm이 이동하면서 arm의 위치에 해당하는 sector의 값을 읽어낸다.

 이러한 구조 때문에 어떤 위치를 읽을 때 걸리는 시간은 [해당 정보가 어떤 sector에 위치해 있는지 찾는 시간] + [disk가 회전할 때 걸리는 시간] + [해당 sector를 읽는 시간]으로 표현된다.

  • T$_{access}$ : 어떠한 sector를 읽는데 걸리는 시간 = T$_{avg seek}$ + T$_{avg rotation}$ + T$_{avg transfer}$
  • T$_{avg seek}$ : 원하는 정보가 어떤 sector에 위치해 있는지 찾는 시간, 평균 3-9ms.
  • T$_{avg rotation}$ : 현재 위치부터 해당 sector까지 disk가 회전할 때 걸리는 시간 = $\frac{1}{2} \times \frac{1}{RPM} \times \frac{60s}{1min}$
  • T$_{avg transfer}$ : 해당 sector를 읽는 시간 =  $\frac{1}{RPM} \times \frac{1}{\text{average number of sectors per track}} \times \frac{60s }{1min}$
  • 여기서 RPM은 분당 회전수이다.

 

 

Solid State Drive, SSD

 disk drive가 원판에 있는 자기 정보를 읽는 방식이었다면, SSD는 반도체에 직접 전기 정보를 저장한다. 소재의 한계로 인해 쓸 수 있는 횟수가 정해져 있다.

 최소 단위는 4KB에서 512KB정도 되는 page이며, 약 32개에서 128개의 page로 이루어진 block들의 집합으로 flash memory가 구성된다. 단, 읽고 쓰는 데 최소 단위가 page이기 때문에 작은 데이터를 읽을 때 불필요한 데이터를 읽어온다.

 

 Disk Drive에 비해 장단점은 다음과 같다.

  • 장점 : disk drive는 flatter가 회전하기 때문에 소음이 있고 느리다. 반면 SSD는 그런 부분이 없기 때문에 더 빠르고 조용하다.
  • 단점 : 쓸 수 있는 회수를 모두 써 버리면 더 이상 데이터를 저장할 수 없다. 또한 Disk Drive에 비해 훨씬 비싸다.

 

 

 

CPU와 Memory/Disk 사이에 일어나는 일

Bus

 address, data, control signal들이 움직이는 통로인 bus를 통해 CPU와 RAM이 이어져 있다. CPU의 bus interface - I/O bridge - memory 이렇게 bus가 구성되어 있으며 이를 통해 메모리에 값을 읽거나 쓴다.

 값을 쓸 때는 CPU가 bus에 [메모리의 어떤 주소에 값을 쓸지]를 bus에 보내면 메모리는 bus에 올라온 신호를 받고 기다린다는 신호를 보낸다. 그러면 CPU는 [메모리에 쓸 값]을 bus에 보내고, 메모리는 bus에 올라온 값을 저장한다.

 값을 읽을 때는 CPU가 bus에 [메모리의 어떤 주소에 어떤 값이 있는지]를 bus에 보내면 메모리는 그 신호를 받고 해당 주소에 있는 값을 bus로 보낸다. 그러면 CPU는 bus에 올라온 값을 읽어 register에 저장한다.

 

 

 

 

저작자표시 (새창열림)

'CS > OS' 카테고리의 다른 글

[컴퓨터 SW] Static Linking  (0) 2023.06.17
[컴퓨터 SW] Cache와 Locality  (0) 2023.06.15
[컴퓨터 SW] Buffer Overflow  (0) 2023.06.11
[컴퓨터 SW] Array/Structure/Union의 할당과 접근  (0) 2023.06.11
[컴퓨터 SW] Calling Convention  (0) 2023.06.10
    hyelie
    hyelie

    티스토리툴바