3주차에도 일요일에 쫓겨가며 작성했습니다…. 저는 왜 이럴까요? 그래도 탈주 안 했다는 점에서 스스로 대견합니다.

활동 내용

Chapter 6 ~ 8, 메모리부터 보조기억장치, 입출력장치까지

  • 기본 미션: p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기
  • 선택 미션: Ch.07(07-1) 의 RAID의 정의와 종류를 간단히 정리하기

정리

RAM

RAM에는 실행할 프로그램의 명령어와 데이터가 저장된다. 그러나 RAM은 휘발성 저장 장치(volatile memory)이기에 전원을 끄면 저장된 명령어와 데이터가 사라진다. 반면에 전원을 꺼도 저장된 내용이 유지되는 비휘발성 저장 장치(non-volatile memory)는 주로 보조기억장치인데, CPU는 보조기억장치에 직접 접근할 수 없다. 그렇기에 보조기억장치에는 '보관할 대상'을 저장하고 RAM에는 '실행할 대상'을 저장한다. 즉, CPU가 실행하고 싶은 프로그램을 보조기억장치에서 RAM으로 복사하여 저장한 뒤 실행한다.

RAM의 종류

  • DRAM(Dynamic RAM): 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이다. 데이터의 소멸을 막기 위해 일정 주기로 재활성화를 실행한다. 이런 단점에도 불구하고 DRAM은 소비 전력이 낮고, 저렴하며, 집적도가 높기에 대용량으로 설계하기가 용이하다.
  • SRAM(Static RAM): 저장된 데이터가 변하지 않으며, DRAM보다 빠른 RAM이다. 그러나 DRAM의 장점과 정반대의 단점이 있기에 메모리보단 캐시 메모리에서 주로 사용된다.
  • SDRAM(Synchronous Dynamic RAM): 클럭 신호와 동기화된 DRAM이다. 클럭 타이밍에 맞춰 CPU와 정보를 주고 받을 수 있다.
  • DDR SDRAM(Double Data Rate SDRAM): 대역폭을 넓혀 속도를 빠르게 만든 SDRAM이다. 여기서 대역폭(data rate)란 '데이터를 주고받는 길의 너비'를 의미한다. 또한, DDR2 SDRAM은 DDR SDRAM보다 대역폭이 두 배 넓으며, SDRAM보다 네 배 넓다. 최근에 흔히 사용하는 메모리는 DDR4 SDRAM으로 SDRAM보다 열여섯 배 넓은 대역폭을 가진다.

주소

주소는 메모리 하드웨어가 사용하는 물리 주소(physical address)와 CPU와 실행중인 프로그램이 사용하는 논리 주소(logical address)가 있다.
논리 주소와 물리 주소 간의 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치(이하 MMU, Memory Management Unit)라는 하드웨어에 의해 수행된다. MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다. 즉, 베이스 레지스터는 프로그램의 첫 물리 주소를 저장하고, 논리 주소는 프로그램의 시작점으로부터 떨어진 거리인 셈이다.

또한 MMU는 논리 주소 범위를 벗어난 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호하기 위해 한계 레지스터(limit register)를 사용한다. 베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리 주소의 최대 크기를 저장한다. 따라서 CPU가 메모리에 접근하기 전에 논리 주소가 한계 레지스터보다 작은 지 검사하며, 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 인터럽트를 발생시켜 실행을 중단한다.

저장 장치 계층 구조

저장 장치는 일반적으로 아래와 같은 명제를 따른다.

  • CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
  • 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.

따라서 컴퓨터가 사용하는 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수있다. 이를 저장 장치 계층 구조(memory hierarchy)라고 한다.

캐시 메모리

캐시 메모리(cache memory)는 CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치이다. CPU가 메모리에 접근하는 속도가 연산 속도에 비해 느리기에 속도의 차이를 조금이나마 줄이기 위해 탄생했다. 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와서 활용한다.
캐시 메모리는 CPU(코어)와 가까운 순서대로 계층을 구성하는데 코어와 가장 가까운 캐시 메모리를 L1(level 1) 캐시, 그 다음은 순서대로 L2 캐시, L3 캐시라고 부른다. 일반적으로 L1 캐시와 L2 캐시는 각 코어 내부에 고유한 캐시 메모리로 할당되며, L3 캐시는 코어 외부에 여러 코어가 공유하는 형태로 위치해 있다.

참조 지역성 원리

캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다. 이때 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우를 캐시 히트(cache hit)라고 한다. 반대로 예측이 틀려 메모리에서 데이터를 직접 가져와야 하는 경우를 캐시 미스(cache miss)라고 한다. 캐시가 히트되는 비율은 캐시 적중률(cache hit ratio)이라고 하는데, 우리가 사용하는 컴퓨터의 캐시 적중률은 대략 85~95% 이상이다.

캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)

여기서 캐시 메모리가 CPU가 사용할 법한 데이터를 예측하는 원칙이 참조 지역성의 원리(locality of reference, principle of locality)이다. 참조 지역성의 원리란 CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리이며, 아래와 같다.

  • CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
  • 공간 지역성(spatial locality): CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.

하드 디스크

하드 디스크(HDD, Hard Disk Drive)는 자기적인 방식으로 데이터를 저장하는 보조기억장치이다. 하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉜다.

  • 탐색 시간(seek time): 접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간
  • 회전 지연(rotational latency): 헤드가 있는 곳으로 플래터를 회전시키는 시간
  • 전송 시간(transfer time): 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간

플래시 메모리

플래시 메모리(flash memory)는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치이다. ROM, USB 메모리, SSD 등 다양한 곳에서 널리 사용한다. 또한 플래시 메모리는 (cell)이라는 단위가 있다. 셀이란 플래시 메모리에서 데이터를 저장하는 가장 작은 단위이다. 이때 하나의 셀에 몇 비트를 저장할 수 있느냐에 따라 플래시 메모리 종류가 나뉜다.

  • SLC(Single Level Cell) 타입: 한 셀에 1비트를 저장할 수 있다. 다른 타입에 비해 비트의 빠른 입출력이 가능하다.
  • MLC(Multiple Level Cell) 타입: 한 셀에 2비트를 저장할 수 있다. SLC 타입보다 속도와 수명은 떨어지지만, 용량 대비 가격이 저렴하다.
  • TLC(Triple-Level Cell) 타입: 한 셀에 3비트를 저장할 수 있다.

셀 외에도 셀들이 모여 만들어진 단위인 페이지(page), 그리고 페이지가 모여 만들어진 단위를 블록(block)이라고 한다. 블록이 모여 플레인(plane), 플레인이 모여 다이(die)가 된다. 플래시 메모리에서 읽기와 쓰기는 페이지 단위, 삭제는 블록 단위로 실행한다.
그리고 페이지는 세 개의 상태를 가질 수 있다. 먼저 Free 상태는 어떠한 데이터도 저장하고 있지 않기에 새로운 데이터를 저장할 수 있는 상태이다. Vaild 상태는 이미 유효한 데이터를 저장하고 있는 상태를 의미한다. Invalid 상태는 쓰레기값이라 부르는 유효하지 않은 데이터를 저장하고 있는 상태를 의미한다. 플래시 메모리는 하드 디스크와 달리 덮어쓰기가 불가능하여 Valid 상태인 페이지에는 새 데이터를 저장할 수 없다.

RAID

RAID(Redundant Array of Independent Disks)는 주로 하드 디스크와 SSD를 사용하는 기술로, 데이터의 안전성 혹은 높은 성능을 위해 여러 개의 물리적 보조기억장치를 하나의 논리적 보조기억장치처럼 사용하는 기술이다. 그리고 RAID 구성 방법을 RAID 레벨이라고 한다. RAID 레벨에는 대표적으로 RAID 0, RAID 1, RAID 2, RAID 3, RAID 4, RAID 5, RAID 6이 있고, 그로부터 파생된 RAID 10, RAID 50 등이 있다.

  • RAID 0: 여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 방식이다. 마치 줄무늬처럼 분산되어 저장되기에 저장되는 데이터를 스트라입(stripe), 분산하여 저장하는 것을 스트라이핑(striping)이라고 한다.
  • RAID 1: 데이터의 복사본을 만드는 미러링(mirroring) 기법을 사용한다. 어떠한 데이터를 쓸 때 원본과 복사본 두 군데에 쓰기에 쓰기 속도는 RAID 0보다 느리다.
  • RAID 4: 복사본을 만드는 대신 오류 검출 및 복구를 위한 정보를 저장한 장치를 두는 방식이다. 이때 '오류를 검출하고 복구하기 위한 정보'를 패리티 비트(parity bit)라고 한다.
  • RAID 5: 패리티 비트를 분산하여 보조기억장치에 저장하는 방식이다.
  • RAID 6: RAID 5와 구성이 같으나, 서로 다른 두 개의 패리티를 두는 방식이다.

장치 컨트롤러

입출력장치는 종류가 많고 CPU와 메모리와의 데이터 전송률이 달라 다루기 어렵다. 이때 전송률(transfer rate)이란 데이터를 얼마나 빨리 교환할 수 있는지 나타내는 지표이다.
그렇기에 입출력장치는 컴퓨터에 직접 연결하지 않고 장치 컨트롤러(device controller)라는 하드웨어기를 통해 연결한다. 장치 컨트롤러는 입출력 제어기(I/O controller), 입출력 모듈(I/O module)등으로 다양하게 불린다. 장치 컨트롤러의 역할은 아래와 같다.

  • CPU와 입출력장치 간의 통신 중개
  • 오류 검출
  • 데이터 버퍼링

이 중 데이터 버퍼링은 버퍼링(buffering)이란 전송률이 높은 장치와 낮은 장치 사이에 주고 받는 데이터를 버퍼(buffer)라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법이다.

장치 컨트롤러의 내부에는 데이터 레지스터(data register), 상태 레지스터(status register), 제어 레지스터(control register)이 있다. 데이터 레지스터는 CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터이다. 상태 레지스터는 입출력장치의 작업 준비 상태, 작업 완료 상태, 오류 체크 등의 상태 정보가 저장된다. 제어 레지스터는 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장한다.

장치 드라이버

장치 드라이버(device driver)란 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램이다.장치 컨트롤러가 입출력장치를 연결하기 위한 하드웨어적인 통로라면, 장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로이다.

프로그램 입출력

프로그램 입출력(programmed I/O)은 프로그램 속 명령어로 입출력장치를 제어하는 방법이다. CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다. 이때, CPU가 여러 장치 컨트롤러 속 레지스터들을 알 수 있는 방법에는 메모리 맵 입출력고립형 입출력 방식이 있다.

  • 메모리 맵 입출력(memory-mapped I/O): 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법이다. 만약 CPU가 '516번지를 읽어라'라는 명령어를 실행했을 때 516번지가 메모리상의 주소를 가리킨다면 CPU는 메모리 516번지에 저장된 정보를 읽어 들일 것이고, 516번지가 장치 컨트롤러의 상태 레지스터를 가리킨다면 CPU는 해당 입출력장치의 상태를 확인할 수 있을 것이다.
  • 고립형 입출력(isolated I/O): 메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 방법이다. 따라서 CPU가 메모리 읽기/쓰기를 활성화하는 명령어를 실행할 때는 메모리에 접근하고, 입출력장치 읽기/쓰기를 활성화하는 명령어를 실행할 때는 장치 컨트롤러에 접근한다. 메모리 맵 입출력과는 대조적이다.

인터럽트 기반 입출력

인터럽트를 기반으로 하는 입출력을 인터럽트 기반 입출력(Interrupt-Driven I/O)이라고 한다. 인터럽트 기반 입출력은 동시 발생 인터럽트에 대해선 프로그래머블 인터럽트 컨트롤러(이하 PIC, Programmable Interrupt Controller)라는 하드웨어를 사용한다. PIC는 여러 장치 컨트롤러에 연결되어 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선 순위를 판별한 뒤 CPU에 지금 처리해야 할 하드웨어 인터럽트는 무엇인지를 알려주는 장치이다. 이때, 인터럽트 비트를 비활성화해도 무시할 수 없는 인터럽트인 NMI(Non-Maskable Interrupt)는 판별하지 않는다. NMI는 우선 순위가 가장 높기에 판별이 불필요하기 때문이다.

DMA 입출력

입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하기에 이동하는 데이터도 반드시 CPU를 거쳐간다. 그러나 하드 디스크 백업과 같이 대용량 데이터를 옮길 때는 CPU의 부담이 커진다. 그래서 입출력장치와 메모리가 CPU를 거치지 않고 상호작용할 수 있는 방법이 DMA(Direct Memory Access)이다. DMA 입출력을 하기 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다. DMA 입출력 과정은 아래와 같다.

  • CPU는 DMA 컨트롤러에 입출력장치의 주소, 수행할 연산, 읽거나 쓸 메모리의 주소 등과 같은 정보로 입출력 작업을 명령한다.
  • DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행한다. 이때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근하여 정보를 읽거나 쓴다.
  • 입출력 작업이 끝나면 DMA 컨트롤러는 CPU에 인터럽트를 걸어 작업이 끝났음을 알린다.

기본 미션

p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기


3. 다음 설명을 읽고 SRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰시오.

- 주로 캐시 메모리로 활용됩니다. (SRAM)
- 주로 주기억장치로 활용됩니다. (DRAM)
- 대용량화하기 유리합니다. (DRAM)
- 집적도가 상대적으로 낮습니다. (SRAM)

4. 다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우세요.


선택 미션

RAID의 정의와 종류를 간단히 정리하기


우측 목차에서 RAID를 참조하시길 바랍니다.
profile
안녕하세요.

1개의 댓글

comment-user-thumbnail
2023년 2월 5일

포악해진 혼공족 구경왔습니다~ 농담곰 너무귀여워요
너무 열심히 하시니까 포악해지시죠 ㅋㅋㅋㅋ
이번주도 화이팅입니다

답글 달기