6.1 Storage Technologies(저장장치 기술)
- 시간이 지남에 따라 저장장치의 크기는 매년 2배씩 증가하고 있고 속도도 빨라지고 있다
6.1.1 Random Access Memory(랜덤 엑세스 메모리) [RAM]
- RAM은 두 종류가 있다.
- 정적인 SRAM: 동적램 DRAM 보다 빠르고 훨씬 비싸다. 캐쉬메모리로 사용된다.
- 동적인 DRAM: 메인메모리와 그래픽 시스템의 프레임 버퍼로도 사용된다.
Static RAM [SRAM]
- SRAM은 각 비트를 bistable(이중안정) 메모리 셀에 저장한다.
- 각 셀은 6개의 트랜지스터 회로로 구성된다.
- 이 회로는 두 개의 서로 다른 전압 구성 또는 상태 중 하나(on/off)에서 무한정 유지(정적인 이유)될 수 있는 특성을 가지고 있다.
- 이러한 메모리 셀은 아래 그림 6.1 처럼 진자가 왼쪽이나 오른쪽으로 완전히 기울어지면 안정적인 상태를 가진다. 작은 교란이 생기면 진자는 한쪽으로 기울어지고 한번 기울어지면 다시 수직 위치로 돌아가지 않는다.
- left right 기울여지는 측면이 두 가지 존재하기 때문에 bistable 특징을 가진다.
- 이러한 이중안정성 덕분에 SRAM 메모리 셀은 전원이 공급되는 한 그 값을 무한정 유지한다.
- DRAM 보다 트랜지스터를 더 많이 사용하여 밀도가 낮으며 비싸고 전력을 많이 사용한다.
- 빛이나 전압 장애 등에 강하다.
Dynamic RAM [DRAM]
- DRAM은 각 비트를 capacitor에 전하로 저장한다.
- capacitor(캐패시터)는 매우 작다.
- 광선에 노출되면 캐패시터 전압은 변경된다.
- DRAM은 밀도가 매우 높고 어떤 장애에도 매우 민감하게 반응한다.
- 캐패시터 전압이 교란되면 절대로 복구되지 않는다.
- DRAM 셀의 충전량이 약 10~100 밀리초 이내에 손실된다. 그러나 나노초 단위로 clock이 작동되는 컴퓨터의 경우 충분한 시간이다.
- 메모리 시스템은 주기적으로 메모리의 모든 비트를 읽고 다시 작성한다.
Conventional DRAMs(기본적인 DRAM)
- 위 그림은 DRAM의 칩 구조이다.
- DRAM 칩 내의 셀들은 d supercells로 나누어지고 각 슈퍼셀은 w DRAM 셀들로 이루어진다.
- d(supercell) x w DRAM은 dw bits개의 정보를 저장한다.
- supercell은 r row c col들로 직사각형 배열을 이루고 있다.
- supercell의 주소는 row i와 col j로 이루어진 (i, j)이다.
- 정보는 핀(pin)이라고 불리는 외부 커넥터를 통해 칩을 드나든다.
- 각 핀(pin)은 1비트 신호를 전달한다.
- 위 그림에서 칩에서 1바이트 신호를 전달할 수 있는 data 핀
- 2비트(행과 열) 슈퍼셀 주소를 전송하는 2개 addr 핀이 있다.
- DRAM 칩은 메모리 컨트롤러(memory controller)라는 회로에 연결되어 있다.
- 슈퍼셀(i, j)의 내용을 읽기 위해 메모리 컨트롤러는 행 주소 i를 DRAM에 보낸 다음에 열 주소 j를 보낸다.
- DRAM은 슈퍼셀(i, j)의 내용물을 컨트롤러에 다시 전송하여 응답한다.
- 행 주소 i를 RAS(row access strobe) 요청, 열 주소 j를 CAS (column access strobe)요청이라 한다.
- RAS와 CAS 요청은 동일한 DRAM 주소 핀을 공유한다.
- 다음은 메모리를 읽는 과정의 그림이다.
- 16 x 8 DRAM에서 (2.1) supercell를 읽는 과정이다.
- row 2를 RAS 요청하면 (a) row 2행의 내용을 internal row buffer에 복사한다.
- 그 다음에 메모리 컨트롤러는 col 1 CAS 요청하게 된다.(b)
- DRAM은 row buffer로 부터 (2.1) 슈퍼셀 안의 8개의 비트를 복사하고 메모리 컨트롤러로 전송한다.
- DRAM이 일차원 배열이 아니라 이차원 배열로 이루어진 이유는 칩 위의 addr 핀의 개수를 줄이기 위해서이다.
- 예를 들어 128 bit DRAM이 16개의 슈퍼셀(0~15까지 주소) 일차원 배열로 구성되어 있다면, 칩은 2개가 아니라 4개의 addr 핀이 필요할 것이다. (핀은 1개당 1비트를 저장하므로 4개의 비트가 있어야 2^4이므로 0 ~ 15까지 표현 가능하다.
- 그러나 이차원 배열의 단점은 두 개의 분리된 스텝으로 주소가 전송되어야 하는 것이다. (위 그림처럼) 따라서 접근 시간이 증가한다.
Memory Modules(메모리 모듈)
- DRAM 칩은 메인 시스템(motherboard)의 확장슬롯에 꽂을 수 있는 메모리 모듈 형태로 구성되어 있다.
- 위 그림은 메모리 모듈의 기본적인 구성을 보여준다.
- 메모리 모듈은 8개의 8M x 8 DRAM 칩을 이용하여 64MB를 저장한다.
- 각각의 슈퍼셀들은 1바이트의 메인 메모리를 저장한다.
- 메인 메모리의 바이트 주소 A에 있는 64비트에 8개의 슈퍼셀이 대응된다.
- 메모리 주소 A에서의 Word를 얻어내기 위해 메모리 컨트롤러는 A를 슈퍼셀 주소(i,j)로 변환하여 메모리 모듈로 전송한다.
- 메모리 모듈은 i와 j를 각 DRAM으로 전파한다.
- 이에 대응하여 각 DRAM은 (i,j) 주소의 슈퍼셀의 8비트 콘텐츠를 출력한다.
- 모듈의 회로는 이러한 출력을 모아서 64비트 Word를 구성하고 이를 메모리 컨트롤러로 반환한다.
Enhanced DRAMs(향상된 DRAMs)
- 기본적인 DRAM 구조에 기반하여 DRAM Cell에 접근하는 속도를 최적화시킨 향상된 DRAM들이 시장에 존재한다.
- Fast Page Mode DRAM (FPM DRAM): 기존 DRAM은 슈퍼셀의 전체 행을 Internal row buffer에 복사한 후 하나를 사용하고 나머지는 버린다. 반면 FPM DRAM은 동일한 행에 대한 연속적인 접근을 row buffer에서 직접 처리할 수 있도록 개선했다. 예를 들어, 기존 DRAM은 행 i에서 4개의 슈퍼셀을 읽으려면 행 주소 i가 동일하더라도 메모리 컨트롤러가 4개의 RAS/CAS 요청을 전송해야 한다. 반면, FPM DRAM은 동일한 행에서 슈퍼셀을 읽기 위해 메모리 컨트롤러는 초기 RAS/CAS 요청을 보낸 다음 세 개의 CAS 요청을 보내는 방식이다. 초기 RAS/CAS 요청은 행 i를 row buffer에 복사하고 CAS에서 주소를 지정한 슈퍼셀을 반환한다. 그 다음 세 개의 슈퍼셀은 row buffer에서 직접 제공되므로 초기 슈퍼셀보다 훨씬 빨리 반환된다. (즉 기존에는 4번의 RAS 요청을 통한 4번의 행 복사가 필요했다면 FPM DRAM에서는 1번의 RAS 요청으로 1번의 행 복사로 CAS는 row buffer에서 꺼내 쓰는 방식)
- Extended data out DRAM (EDO DRAM): FPM DRAM의 향상된 버전.
- Synchronous DRAM (SDRAM): 기존 FPM 및 EDO DRAM은 일련의 명시적 제어 신호를 사용하여 메모리 컨트롤러와 통싱한다는 점에서 비동기식이다. 반면, SDRAM은 이러한 많은 제어 신호를 메모리 컨트롤러를 구동하는 는 동일한 외부 클럭 신호로 대체한다. 그러므로 동기식 SDRAM 비동기식 DRAM 보다 더 빠른 속도로 슈퍼셀의 내용을 출력할 수 있다.
- Double Data-Rate Synchronous DRAM (DDR SDRAM): DDR SDRAM은 두 개의 클럭 엣지를 제어 신호로 사용하여 DRAM의 속도를 두 배 증가시켰다.
- Video RAM (VRAM): 그래픽 시스템의 프레임 버퍼에 사용된다. VRAM은 FPM DRAM과 유사하다. 두 가지 주요 차이점이 있다.
- 1. 내부 버퍼의 전체 내용을 순차적으로 이동하여 VRAM 출력을 생성한다.
- 2. VRAM이 메모리에 동시에 읽기 및 쓰기를 허용한다. 따라서 시스템은 업데이트(쓰기)를 위해 새 값을 쓰고 있는 동안에 프레임 버퍼(읽기)의 픽셀로 화면을 출력할 수 있다.
- Video RAM (VRAM): 그래픽 시스템의 프레임 버퍼에 사용된다. VRAM은 FPM DRAM과 유사하다. 두 가지 주요 차이점이 있다.
Nonvolatile Memory(비휘발성 메모리)
- SRAM과 DRAM은 전원이 꺼지면 정보도 잃어버리기 때문에 휘발성이다.
- 비휘발성 메모리는 전원이 꺼져도 정보를 유지할 수 있는 특징이 있다.
- ROM(Read-Only-Memory)라고 부른다. (과거에는 읽기만 가능했기 때문에 이렇게 부르고 있지만, 요즘에는 쓰기도 가능하고 쓰기를 할 수 있는 횟수와 쓰기(재프로그래밍) 매커니즘에 의해 구분된다)
- 프로그래밍 가능한 PROM은 정확히 한번 프로그래밍 할 수 있다.
- EPROM은 자외선을 비추면 0으로 지워지고 특수 장치를 통해 쓸 수 있다. 약 1000회 정도 재프로그래밍 될 수 있다.
- EEPROM(Electrically Erasable PROM)은 EPROM과 유사하지만 물리적으로 별도의 프로그래밍 장치가 필요하지 않아 회로 카드 내에서 재프로그래밍 할 수 있다. 약 105회 정도 재프로그래밍 가능.
- 플래시 메모리는 EEPROM을 기반으로 하는 비휘발성 메모리의 일종이자 중요한 스토리지 기술이다.
- 플래시 메모리로는 SSD카드 USB 메모리 등이 있다.
- ROM 장치에 저장된 프로그램을 펌웨어(Firmware)라고 한다.
- 컴퓨터 전원이 켜지면 ROM에 저장되어 있는 펌웨어가 실행된다.
- 펌웨어란 하드웨어의 기본적인 구동 및 제어를 담당하는 특수 용도의 소프트웨어. 소프트웨어라고는 하지만 보통 하드웨어 엔지니어가 도맡아 지원한다.
- 펌웨어에서는 기본 입출력 기능(BIOS)을 제공한다. (보통 전원 기동하자마자 [F2]를 빠르게 여러번 누르면 진입된다. 즉, 부팅 과정에서만 들어갈 수 있다)
- 펌웨어 역할: 서버는 서로 다른 역할이 있는 여러 장치들로 구성된다. 펌웨어는 이 장치들이 각자 기능을 수행하기 위해 필요한 최소한의 프로그램이다. 새로운 소프트웨어나 버전이 나오면 하드웨어도 그 기능에 맞춘 논리회로가 필요한데, 매번 물리적으로 제조하려면 시간 낭비가 크기 때문에 논리적으로 기능을 보강하거나 대신해주는 프로그램이 펌웨어다. 즉 펌웨어는 하드웨어의 일부분이며, 없으면 장치가 정상 동작하지 못하게 된다. 이처럼 역할은 하드웨어와 가깝고, 형태는 소프트웨어와 가까워서 둘의 중간 개념으로 불린다.
- BIOS 기능: 1.하드웨어 진단, 2. 날짜 및 시간 설정 3. Boot 모드 전환, 4. Boot 순서 설정, 5. 장치 기능 on/off
Accessing Main Memory(메모리에 접근하기)
- 데이터는 버스(bus)라고 불리는 공유 전기 통로를 통해 프로세서와 DRAM 메인 메모리 사이를 왔다 갔다 한다.
- 버스는 주소, 데이터 및 제어 신호를 전달하는 병렬 와이어의 모음이다.
- 버스 설계에 따라 데이터 및 주소 신호가 동일한 와이어 세트를 공유하거나 다른 세트를 사용할 수 있다.
- 두 대 이상의 장치가 동일한 버스를 공유할 수도 있다.
- 제어 와이어는 transaction을 동기화하고 현재 수행 중인 transaction 종류를 식별하는 신호를 전달한다. (버스의 정보가 주소인지, 데이터 항목인지 . transaction이 메인 메모리 또는 다른 IO 장치의 것인지 등)
- CPU와 메모리 간의 각 데이터 전송은 버스 transaction이라는 일련의 단계를 통해 수행된다.
- 읽기 transaction은 메인 메모리에서 CPU로 데이터를 전송한다.
- 쓰기 transaction은 CPU에서 메인 메모리로 데이터를 전송한다.
- 위 그림은 CPU와 메인 메모리에 연결되어 있는 bus의 구조를 보여준다.
- 구성 요소는 CPU 칩, I/O브리지(메모리 컨트롤러 포함). 메인 메모리를 구성하는 DRAM 메모리 모듈이다.
- I/O브리지는 시스템 버스(CPU와 연결)의 전기 신호를 메모리 버스의 전기 신호로 변환한다.
- 실제로는 I/O브리지는 I/O 버스와도 연결하지만 여기서는 메모리 버스에 집중하겠다.
- CPU가 주소 A(메인 메모리)의 내용이 %rax 레지스터에 로드되는 movq A, %rax와 같은 로드 작업을 수행할 때를 예시로 들어보자.
- 버스 인터페이스(Bus interface)라는 CPU 칩의 회로가 버스에서 읽기 transaction을 시작한다.
- 읽기 transaction은 세 단계로 구성된다.
- 1. CPU는 시스템 버스에 주소 A를 배치한다. I/O 브리지는 신호를 메모리 버스에 전달한다.그림 (a)
- 2. 메인 메모리는 메모리 버스에서 주소 신호를 감지하고 메모리 버스에서 주소를 읽고 DRAM에서 데이터를 가져오고 메모리 버스에 데이터를 쓴다. I/O 브리지는 메모리 버스 신호를 시스템 버스 신호로 변환하여 시스템 버스에 전달한다. 그림 (b)
- 3. CPU는 시스템 버스의 데이터를 감지하고 버스에서 데이터를 읽고 %rax를 등록하기 위해 데이터를 복사한다. 그림 (c).
- CPU가 movq %rax, A와 같은 저장 작업을 수행할 때 레지스터 %rax의 내용이 주소 A(메인 메모리)에 기록되면 CPU는 쓰기 transaction을 시작한다.
- 쓰기 transaction은 세 단계로 구성된다
- 1. CPU는 시스템 버스에 주소를 배치한다. 메모리는 메모리 버스에서 주소를 읽고 데이터가 도착할 때까지 기다린다. 위 그림 (a)
- 2. CPU는 %rax의 데이터를 시스템 버스에 복사한다. 위 그림 (b)
- 3. 메인 메모리는 메모리 버스에서 데이터를 읽고 DRMA에 비트를 저장한다. (c)
- 쓰기 transaction은 세 단계로 구성된다
6.1.2 Disk Storage(디스크 저장장치)
- 디스크는 RAM 메모리의 수천 메가바이트 단위에 비해 수백에서 수천 기가바이트 단위의 훨씬 많은 양의 데이터를 저장하는 대표적인 저장장치이다.
- 그러나 디스크에서 정보를 읽는 시간은 수 밀리초로 DRAM 보다 10만배, SRAM 보다 100만배 더 오래 걸린다.
Disk Geometry(디스크 구조)
- 디스크는 플래터(platter)로 구성된다.
- 각 플래터는 자기(magnetic) 기록 물질로 코팅된 두 개의 면 또는 표면으로 구성된다.
- 플래터 중앙의 회전 스핀들은 플래터를 고정 회전 속도(일반적으로 분당 5,400~15,000회전(RPM))로 회전시킨다.
- 디스크는 일반적으로 이러한 플래터 중 하나 이상을 밀폐된 용기에 포함시킨다.
- 위 그림 (a)는 일반적인 디스크 표면의 기하학적 구조를 보여준다.
- 각 표면은 트랙이라고 불리는 동심원 고리의 집합으로 구성되어 있다.
- 각 트랙은 섹터 모음으로 분할된다.
- 각 섹터에는 섹터의 마그네틱 물질로 인코딩된 동일한 수의 데이터 비트(일반적으로 512비트)가 포함되어 있다.
- 섹터는 데이터 비트가 저장되어 있지 않은 'Gap'들에 의해 구분된다.
- Gaps은 섹터를 식별하는 포맷 비트를 저장한다.
- 위 그림 (b)는 디스크가 하나 이상의 플래터가 겹쳐져 밀봉된 패키지에 들어있는 것을 보여준다.
- 디스크를 디스크 드라이브, 회전 디스크라고도 부른다. 따라서 움직이는 부품이 없는 SSD(Solid State Disk)와 구별할 수 있다.
- 디스크 제조업체는 다중 플래터 드라이브의 기하학적 구조를 실린더의 관점에서 설명한다.
- 실린더는 스핀들의 중심에서 동일한 거리에 있는 모든 표면의 트랙 모음이다.
- 예를 들어, 드라이브에 3개의 플래터와 6개의 표면이 있고 각 표면의 트랙에 일관되게 번호가 매겨진 경우 실린더 k는 트랙 k 6개의 인스턴스의 집합이다.
- 실린더는 스핀들의 중심에서 동일한 거리에 있는 모든 표면의 트랙 모음이다.
Disk Capacity(디스크의 용량)
- 디스크에 비트를 저장할 수 있는 최대 용량은 maximum capacity, or simply capacity라 불린다.
- 디스크의 용량은 다음 기술 요소들에 의해 결정된다.
- 기록 밀도(Recording density (bits/in)): 1인치의 트랙에 집어넣을 수 있는 비트의 수
- 트랙 밀도(Track density (tracks/in)): 플래터의 중심에서 반지름의 1인치 길이에 넣을 수 있는 트랙의 수
- 면적 밀도(Areal density (bits/in2)): 기록 밀도와 트랙 밀도의 곱
- 디스크 용량 구하는 공식은 다음과 같다.
Disk Operation(디스크의 동작)
- 디스크의 읽기 쓰기는 마그네틱 표면을 actuator arm 끝에 달린 읽기/쓰기 헤드를 통해 이루어진다. [그림 (a) 참고]
- arm이 radial axis를 따라 앞 뒤로 움직이면서 디스크의 표면의 모든 트랙 위에 헤드를 위치시킬 수 있다.
- 이러한 기계적인 움직임을 탐색(seek)이라한다.
- 헤드가 원하는 트랙 위에 배치되면 트랙의 각 비트에 아래를 통과할 때 헤드가 비트 값을 감지하거나(비트 읽기) 비트 값을 변경할 수 있다.(비트 쓰기)
- 여러 플래터가 있는 디스크에는 그림(b) 처럼 각 표면에 대해 별도의 읽기/쓰기 헤드가 존재한다.
- 헤드들은 수직으로 일렬로 늘어서 있고 일제히 움직인다.
- 어느 시점에서는 모든 헤드는 동일한 실린더에 위치한다.
- 암 끝에 달린 헤드는 표면과 매우 작은 간격의 높이로 약 80km/h 속도로 움직인다.
- 표면의 작은 먼지는 거대한 바위와 같기 때문에 항상 밀폐된 패키지로 밀봉된다.
- 디스크는 섹터 크기의 블록으로 데이터를 읽고 쓴다.
- 섹터의 엑세스 시간은 탐색 시간(seek time), 회전 대기 시간(rotational latency), 전송 시간(transfer time)으로 구성된다.
- 탐색 시간(seek time): 섹터의 내용을 읽기위해 헤드를 타겟 섹터를 보유한 트랙 위로 위치시키는 시간.
- 회전 대기 시간(Rotational latency): 헤드가 트랙 위에 위치하면 타겟 섹터의 첫번째 비트가 헤드 아래로 지나가는 것을 기다리는 시(헤드위 위치와 디스크의 회전 속도에 따라 달라짐)
- 전송 시간(transfer time): 하나의 섹터를 전송하는 시간(회전속도와 트랙당 섹터 수에 따라 달라짐)
- 평균 탐색 시간, 평균 회전 지연 시간 및 평균 전송 시간의 합계로 디스크 섹터의 콘텐츠에 액세스하는 평균 시간을 추정할 수 있다.
- 디스크 섹터의 512바이트에 액세스하는 시간은 탐색 시간과 회전 대기 시간에 의해 좌우된다.
- 섹터의 첫번째 바이트를 엑세스할 때 시간이 많이 걸리고 그 뒤로는 오래 걸리지 않는다.
- 탐색 시간과 회전 대기 시간은 거의 동일하다.
- 따라서 디스크 엑세스 시간을 추정하는 간단한 방법은 탐색 시간을 두 배한 것이다. (약 10ms)
- SRAM에 저장된 64비트 워드의 액세스 시간은 약 4ns이고 DRAM의 경우 60ns이다.
- 따라서 메모리에서 512바이트 섹터 크기의 블록을 읽는 시간은 SRAM의 경우 약 256ns, DRAM의 경우 약 4,000ns이다.
- 디스크 액세스 시간(약 10ms)은 SRAM보다 약 40,000배, DRAM보다 약 2,500배 더 크다.
Logical Disk Blocks(지역적 디스크 블록)
- 최신 디스크는 여러 개의 표면과 여러 개의 기록 영역이 있는 복잡한 기하학적 구조를 지녔다.
- 운영체제에서는 이러한 복잡성을 숨기기 위해 최신 디스크는 0 , 1, ... , B - 1이라는 번호의 B 섹터 크기 논리 블록 sequence로 간단한 보기를 제시한다.
- 디스크 컨트롤러라고 하는 디스크 패키지의 작은 하드웨어/펌웨어 장치는 논리 블록 번호와 실제 (물리적) 디스크 섹터 간의 매핑을 유지한다.
- 운영체제가 디스크 섹터를 메인 메모리로 읽는 것과 같은 I/O 작업을 수행하려는 경우, 특정 논리 블록 번호를 읽도록 요청하는 명령을 디스크 컨트롤러에 보낸다.
- 컨트롤러의 펌웨어는 논리 블록 번호를 해당 물리적 섹터를 고유하게 식별하는 (표면, 트랙, 섹터) 트리플로 변환하는 빠른 테이블 조회를 수행한다.
- 컨트롤러의 하드웨어는 이 트리플을 해석하여 헤드를 적절한 실린더로 이동하고 섹터가 헤드 아래를 통과할 때까지 기다렸다가 헤드에서 감지된 비트를 컨트롤러의 작은 메모리 버퍼에 모아 메인 메모리에 복사한다.
Connecting I/O Devices(I/O 장치 연결)
- I/O Devices(그래픽카드, 모니터, 키보드,디스크)는 CPU와 메인 메모리에 I/O bus를 통해 연결되어 있다.
- 시스템 버스와 메모리 버스와 달리 I/O 버스는 CPU와 독립적으로 설계되었다.
- 위 그림은 I/O 버스 구조를 보여준다.
- I/O 버스는 시스템 및 메모리 버스보다 느리지만 다양한 타사 I/O 장치를 수용할 수 있다.
- 예를 들어 위 그림에서는 세 가지 다른 유형의 장치가 연결되어 있다.
- 1. USB 컨트롤러는 USB 버스에 연결된 장치를 위한 배선으로 키보드, 마우스, 모뎀, 카메라 등 다양한 주변 장치 I/O를 연결하는데 널리 사용되는 표준이다. USB 3.0 버스의 최대 대역폭은 625MB/s이다.
- 2. 그래픽 카드에는 CPU 대신 디스플레이 모니터에 픽셀을 그리는 하드웨어 및 소프트웨어 로직이 포함되어 있다.
- 3. 호스트 버스 어댑터는 특정 호스트 버스 인터페이스에서 정의한 통신 프로토콜을 사용하여 하나 이상의 디스크를 I/O 버스에 연결한다. 디스크에 가장 많이 사용되는 두 가지 언터페이스는 SCSI와 SATA가 있다.
- SCSI 디스크는 일반적으로 SATA 디스크 보다 빠르고 비싸다.SCSI 호스트 버스 어댑터(SCSI 컨트롤러)는 드라이브 하나만 지원하는 SATA 어댑터와 달리 여러 개의 디스크 드라이브를 지원할 수 있다.
- 예를 들어 위 그림에서는 세 가지 다른 유형의 장치가 연결되어 있다.
- 마더보드의 빈 확장 슬롯에 어댑터를 연결하여 네트워크 어댑터와 같은 추가 장치를 I/O 버스에 연결할 수 있다.
Accessing Disks(디스크 저장장치)
- CPU가 디스크에서 데이터를 읽을 때 수행되는 단계를 요약해서 살펴보겠다.
- CPU는 메모리 맵핑 I/O(memory mapped I/O)라는 기술을 이용하여 I/O 장치에 명령을 실행한다. 위 그림 (a)
- 메모리 맵핑 I/O가 있는 시스템에서 주소 공간의 주소 블록은 I/O 장치와 통신하기 위해 예약된다.
- 이러한 각 주소를 I/O 포트라고 한다.
- 각 장치는 버스에 연결될 때 하나 이상의 포트와 연결(맵핑) 된다.
- 예를 들어 디스크 컨트롤러가 0xa0 포트에 맵핑되었다고 가정하자.
- CPU는 주소 0xa0을 처리하기 위해 세 개의 저장 instruction을 실행하여 디스크 읽기를 시작할 수 있다.
- 첫 번째 instruction: 읽기가 완료될 때 CPU를 중단할 지 여부와 같은 다른 매개 변수와 함께 디스크에 읽기를 시작하도록 지시하는 명령어를 보낸다.(향후 섹션 8.1에서 설명할 것)
- 두 번째 instruction: 읽어야 할 논리 블록 번호.
- 세 번째 instruction: 디스크 섹터의 내용이 저장되어야 하는 메인 메모리 주소
- 해당 요청을 실행한 후 CPU는 일반적으로 디스크가 읽기를 수행하는 동안 다른 작업을 수행한다.
- 클럭 주기가 1ns인 1GHz 프로세서는 디스크를 읽는 데 걸리는 16ms 동안 1,600만 개의 명령을 실행할 수 있다.
- 디스크 컨트롤러는 CPU로 부터 읽기 명령을 수신한 후 논리 블럭 번호를 섹터 주소로 변환하고 섹터의 내용을 읽고 CPU의 개입 없이 메인 메모리로 직접 내용을 전송한다. 그림 (b)
- CPU 개입 없이 장치가 자체적으로 읽기 또는 쓰기 transaction을 수행하는 이 과정을 DMA(Direct Memory Access)라고 한다. 데이터 전송을 DMA 전송이라 한다.
- DMA 전송이 완료되고 디스크 섹터의 내용이 메인 메모리 안전하게 저장되면, 메모리 컨트롤러는 CPU에 인터럽트 신호를 전송하여 CPU에 알린다. 그림 (c)
- 인터럽트가 CPU 칩의 외부 핀에 신호를 보낸다.
- 이로 인해 CPU가 현재 작업 중인 작업을 중지하고 운영체제 루틴으로 이동한다.
- 이 루틴은 I/O가 완료되었다는 사실을 기록한 다음 CPU가 중단한 지점으로 제어를 되돌린다.
- CPU는 주소 0xa0을 처리하기 위해 세 개의 저장 instruction을 실행하여 디스크 읽기를 시작할 수 있다.
- 예를 들어 디스크 컨트롤러가 0xa0 포트에 맵핑되었다고 가정하자.
6.1.3 Solid State Disks(SSD)
- SSD는 플래시 메모리(섹션 6.1.1)를 기반으로 하는 스토리지 기술이다.
- 경우에 따라 기존 회전식 디스크의 매력적인 대안이 될 수 있다.
- 위 그림은 기본적인 SSD 구성을 보여준다.
- SSD 패키지는 I/O 버스(일반적으로 USB 또는 SATA)의 표준 디스크 슬롯에 연결되며 다른 디스크와 마찬가지로 작동하여 논리적 디스크 블록을 읽고 쓰기 위한 CPU의 요청을 처리한다.
- SSD 패키지는 기존 회전 디스크의 기계적 드라이브를 대체하는 하나 이상의 플래시 메모리 칩과 논리적 블록에 대한 요청을 기본 물리적 장치의 액세스로 변환하는 디스크 컨트롤러와 동일한 역할을 하는 하드웨어/펌웨어 장치인 플래시 변환 계층(flash translation layer)으로 구성된다.
- 위 그림은 일반적인 SSD의 성능 특성을 보여준다.
- SSD에서는 읽는 것이 쓰기 보다 빠르다.
- 랜덤 읽기와 쓰기 성능의 차이는 기본 플래시 메모리의 기본 속성에 의해 발생한다.
- 그림 6.13과 같이 플래시 메모리는 일련의 B 블록으로 구성되며, 각 블록은 P 페이지로 구성된다.
- 일반적으로 페이지 크기는 512바이트에서 4KB이며 블록으 32~128페이지로 구성되며 총 블록 크기는 16KB~512KB이다.
- 데이터는 페이지 단위로 읽고 쓴다.
- 페이지는 해당 페이지가 속한 전체 블록을 지운 후에만 작성할 수 있다.
- 그러나 블록이 지워지면 더 이상 지워지지 않고 블록의 각 페이지를 한 번 쓸 수 있다.
- 블록은 약 100,000회 반복 쓰기 후에 마모 된다. (블록이 마모되면 더 이상 사용 불가)
- 랜덤 쓰기는 두 가지 이유로 읽기 보다 느리다.
- 1. 블록을 지우는데 1ms 정도의 비교적 긴 시간이 소요되며, 이는 페이지에 엑세스 하는 데 걸리는 시간 보다 몇 배 이상 길다.
- 2. 쓰기 작업이 기존 데이터를 포함하는 페이지 p를 수정하려고 할 경우, 해당 데이터가 있는 동일한 블록의 페이지를 새 블록에 복사해야 페이지 p에 쓰기가 가능하다.
- 제조업체는 플래시 변환 계층(flash translation layer)에서 높은 블록 삭제 비용을 상각하고 쓰기 시 내부 복사본 수를 최소화하는 방법을 개발했지만 읽기만큼 쓰기가 성능을 발휘할 가능성은 낮다.
- SSD는 회전 디스크에 비해 여러 장점이 있다.
- 이동 부품이 없는 반도체 메모리 구성되어 있으므로 회전 디스크보다 랜덤 엑세스 시간이 훨씬 빠르고 전력 소모가 낮고 내구성이 뛰어나다.
- 하지만 몇 가지 단점도 있다.
- 1. 플래시 블록은 쓰기를 반복하면 마모되기 때문에 SSD도 마모될 가능성이 있다.
- 그러나 Wear-leveling logic in the flash translation layer은 마로를 모든 블록에 고르게 분산시켜 각 블록의 수명을 최대화시키려 시도한다.
- 실제로 Wear-leveling logic은 우수하여 SSD가 마모되는데 수 년이 걸린다.
- 그러나 Wear-leveling logic in the flash translation layer은 마로를 모든 블록에 고르게 분산시켜 각 블록의 수명을 최대화시키려 시도한다.
- 2. SSD는 회전 디스크보다 바이트당 약 30배 비싸므로 일반적인 스토리지 용량은 회전 디스크 보다 작은 편이다.
- 그러나 SSD가 인기를 끌면서 가격이 빠르게 하락하고 있고 이에 따라 용량도 커지고 있어 둘 사이의 격차는 줄고 있다.
- 1. 플래시 블록은 쓰기를 반복하면 마모되기 때문에 SSD도 마모될 가능성이 있다.
6.1.4 Storage Technology Trends(저장 기술의 추세)
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[CSAPP] 6.3 The Memory Hierarchy(메모리 계층구조) (0) | 2023.02.10 |
---|---|
[CSAPP] 6.2 Locality(지역성) (0) | 2023.02.09 |
[CSAPP] Chapter 06. The Memory Hierarchy(메모리 계층구조) (0) | 2023.02.09 |
[CSAPP] 5.13 Life in the Real World: Performance Improvement Techniques(실제상황: 성능개선 기술) (0) | 2023.02.08 |
[CSAPP] 5.12 Understanding Memory Performance(메모리 성능의 이해) (0) | 2023.02.08 |