✏️ 3주차 진도 Chapter 06 ~ 08
- 기본 숙제(필수): p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기
- 추가 숙제(선택): Ch.07(07-2) RAID의 정의와 종류를 간단히 정리해 보기
휘발성 저장 장치이기 때문에 전원을 끄면 저장된 내용이 사라진다. 비휘발성 저장 장치인 보조기억장치가 있지만, CPU는 보조기억장치에 직접 접근하지 못한다. 이러한 이유로 보조기억장치에는 보관할 프로그램을 저장하고, RAM에는 실행할 프로그램을 보조기억장치로부터 복사하여 저장한다.
RAM 용량이 크면 클 수록 실행할 프로그램을 보조기억장치로부터 한꺼번에 많이 가져올 수 있어서 보조기억장치에 접근하는 시간을 줄일 수 있다. 하지만, RAM의 용량이 무조건 크다고 해서 프로그램 실행 속도가 항상 비례하여 증가하는 것은 아니다. RAM 용량이 동시에 실행시킬 수 있는 프로그램의 크기보다 훨씬 클 경우, 프로그램 실행 속도는 그다지 빨라지지 않는다. (CPU가 동시에 처리할 수 있는 프로그램의 개수에는 한계가 있으므로 무조건 미리 많이 가져온다고 좋은 게 아니다!)
DRAM(Dynamin RAM)
시간이 지나면 저장된 데이터가 점차 사라지는 RAM
데이터의 소멸을 막기 위해 일정 주기로 데이터를 다시 저장해야 한다. 주기적으로 재활성화를 해야 한다는 단점이 있지만, 소비 전력이 비교적 낮고, 저렴하고, 집적도가 높기 때문에 대용량으로 설계하기에 좋아서 주로 사용된다.
SRAM(Static RAM)
저장된 데이터가 변하지 않는 RAM
주기적으로 재활성화 해 줄 필요가 없기 때문에 일반적으로 DRAM보다 속도가 더 빠르다. 하지만 DRAM보다 더 비싸기 때문에 보통 주 메모리로 사용하지는 않고, 속도가 중요한 캐시 메모리에서 사용된다.
SDRAM(Synchronous Dynamic RAM)
클럭에 맞춰 동작하며 클럭마다 CPU와 정보를 주고 받을 수 있는 DRAM
SDR SDRAM(Single Data Rate SDRAM): 한 클럭에 한 번씩 정보를 주고 받을 수 있다.
DDR SDRAM(Double Data Rate SDRAM)
대역폭(데이터를 주고 받는 길의 너비)을 넓혀 속도를 빠르게 만든 SDRAM.
한 클럭 당 두 번씩 정보를 주고 받을 수 있다.
DDR 뒤에 붙은 숫자가 하나씩 늘어날 수록 대역폭은 두 배가 된다.
DDR4 SDRAM: 최근 가장 흔히 사용되는 RAM.(1 클럭 당 정보 주고 받기 16번)
물리 주소와 논리 주소가 각각 존재해야 하는 이유는?
메모리에 저장된 정보는 매번 바뀌기 때문!!
✅ 새로운 프로그램이 언제든 적재될 수 있고, 사용하지 않는 프로그램은 언제든 사라질 수 있다
메모리 하드웨어가 사용하는 주소. 정보가 실제로 저장된 하드웨어상의 주소.
CPU와 실행 중인 프로그램이 사용하는 주소. 실행 중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소
CPU가 메모리와 상호작용하기 위해서는 논리 주소와 물리 주소 간의 변환이 필요하다.
이러한 변환은 CPU와 주소 버스 사이에 위치한 메모리 관리 장치(MMU, Memory Management Unit)라는 하드웨어에 의해 수행된다.
⭐MMU가 주소 변환을 하는 방법
CPU가 발생시킨 논리 주소 + 베이스 레지스터 = 물리 주소
베이스 레지스터는 프로그램의 첫 물리 주소(메모리에 적재된 프로그램의 시작점)을 저장하는 것이라고 이해하면 된다.
다른 프로그램의 영역을 침범할 수 있는 명령어를 막기 위해 한계 레지스터를 사용한다. 한계 레지스터에 논리 주소의 최대 크기를 저장하고, 만약 CPU가 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 인터랩트(트랩)을 발생시켜 명령어의 실행을 중단한다.
베이스 레지스터 값 <= 프로그램의 물리 주소 <= 베이스 레지스터 값 + 한계 레지스터 값
논리 주소 <= 한계 레지스터 값
CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치
CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해서 만들어졌다. 캐시 메모리(SRAM)는 메모리(DRAM) 보다 속도가 빠르므로, 사용할 데이터를 미리 캐시 메모리에 저장해 놓으면 데이터 접근 시간을 줄일 수 있다!
CPU(코어)와 가까운 순서대로, L1 캐시, L2 캐시, L3 캐시 라고 부른다. L1, L2 캐시는 코어 내무에 있고 L3 캐시는 코어 외부에 있다.
접근 속도를 더 빠르게 하기 위해서 명령어만 저장하는 L1I 캐시와 데이터만 저장하는 L1D 캐시로 나누는 경우를 말한다.
자주 사용될 것으로 예측하여 캐시 메모리에 저장한 데이터가 실제로 CPU에서 활용될 경우를 캐시 히트라고 한다.
반대로, 자주 사용될 것으로 예측하여 캐시 메모리에 저장하였지만 실제로는 다른 데이터를 사용하게 되어 메모리에서 필요한 데이터를 직접 가져오게 되는 경우를 캐시 미스라고 한다.
캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
캐시 메모리는 참조 지역성의 원리(localitiy of reference)에 따라 메모리로부터 가져올 데이터를 결정한다.
- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.(시간 지역성)
- 프로그램에서 변수에 지정된 값은 보통 여러 번 사용하기 때문
- CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.(공간 지역성)
- 프로그램에서 관련있는 데이터들은 한 데 모여서 저장되기 때문
자기적인 방식으로 데이터를 저장하는 보조기억장치
platter: 하드 디스크에서 데이터가 저장되는 곳. 동그란 원판처럼 생겼다. 0과 1의 역할을 하는 수많은 N극과 S극을 저장한다. platter는 양면을 모두 사용할 수 있고, track, sector, cylinder 단위로 나눌 수 있다. 연속된 정보는 보통 한 cylinder에 저장된다.
spindle: platter를 회전시키는 구성 요소. spindle이 platter를 돌리는 속도는 RPM(분당 회전수)이라는 단위로 표현된다.
head: platter를 대상으로 데이터를 읽고 쓰는 구성 요소. 바늘같이 생겼다.
disk arm: head를 원하는 위치로 이동시킨다.
하드 디스크가 저장된 데이터에 접근하는 시간 =
seek time(접근하려는 데이터가 저장된 track까지 head를 이동시키는 시간) +
rotational latency(head가 있는 곳으로 platter를 회전시키는 시간) +
transfer time(하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간)
전기적으로 데이터를 읽고 쓸 수 있ㄴ느 반도체 기반의 저장 장치
플래시 메모리 기반의 보조기억장치에는 USB 메모리, SD카드, SSD가 있다.
플래시 메모리에서 데이터를 저장하는 가장 작은 단위
셀이 모여 페이지가 되고, 페이지가 모여 블록이 되고, 블록이 모여 플레인이 되고, 플레인이 모여 다이가 된다.
하나의 셀에 몇 bit를 저장할 수 있느냐에 따라 플래시 메모리 종류가 나뉜다.
SLC(Single Level Cell)
한 셀에 1bit 저장 가능한 플래시 메모리
수명이 가장 길지만 용량 대비 가격이 높아서 데이터를 읽고 쓰는 작업이 매우 많이 반복되며 고성능의 빠른 저장 장치가 필요한 경우에 SLC를 사용한다.
MLC(Multiple Level Cell)
한 셀에 2bit 저장 가능한 플래시 메모리
SLC보다 일반적으로 속도와 수명은 떨어지지만, 용량 대비 가격이 저렴하다.
TLC(Triple-Level Cell)
한 셀에 3bit 저장 가능한 플래시 메모리
한 셀로 여러 개의 bit를 저장할 수록 속도와 수명은 떨어지지만, 용량 대비 가격이 저렴해진다.
플래시 메모리에서 읽기와 쓰기는 페이지 단위로 이루어지고, 삭제는 블록 단위로 이루어진다. (삭제 단위가 더 크다!)
페이지가 가질 수 있는 상태
Free 상태 : 어떠한 데이터도 저장하고 있지 않은 상태
Valid 상태 : 이미 유효한 데이터를 저장하고 있는 상태
Invalid 상태 : 유효하지 않은 데이터를 저장하고 있는 상태
garbage collection
1. Valid 페이지들만 새로운 블록으로 옮긴다.
2. 기존의 블록을 삭제한다.
데이터의 안전성 또는 높은 성능을 위해 여러 개의 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술
1TB짜리 장치 5개를 마치 하나의 5TB 장치처럼 사용!
RAID 구성 방법을 RAID 레벨이라고 한다.
대표적인 RAID 레벨에 대해 알아 보자.
RAID 0
여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식
RAID 1
복사본을 만드는 방식, 미러링.
원복과 복사본 두 군데에 쓰기 때문에 쓰기 속도는 RAID 0보다 느리고, 같은 하드 디스크 개수를 사용할 때 사용 가능환 용량도 절반으로 줄어든다. 하지만 복사본이 있기에 복구가 매우 간단하다.
RAID 4
패리티 비트를 저장하는 하드 디스크를 따로 두는 방식
RAID 1보다 적은 하드 디스크로 데이터를 안전하게 보관할 수 있지만, 패리티를 저장하는 하드 디스크에 병목 현상이 발생할 수도 있다.
RAID 5
패리티 비트를 분산하여 저장하는 방식
RAID 6
서로 다른 두 개의 패리티를 두는 방식
RAID 5보다 안전한 구성이나, 쓰기 속도는 느리다.
입출력장치의 종류는 너무 많고, 각 입출력장치마다 정보를 주고 받는 방식은 매우 다양하다. 또, 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다. 예외적으로 입출력장치의 전송률이 더 높은 경우도 있기는 하지만 이 경우에도 CPU나 메모리와 전송률이 비슷하지 않기 때문에 서로간의 통신이 어렵다.
이러한 이유로 입출력장치는 컴퓨터에 직접 연결되지 않고 장치 컨트롤러(입출력 제어기, 입출력 모듈)라는 하드웨어를 통해 연결된다.
장치 컨트롤러의 역할
- CPU와 입출력장치 간의 통신 중개 - 일종의 번역가 역할
- 오류 검출 - 통신 중개 과정에서 오류를 잡아내기도 한다
- 데이터 버퍼링 - 버퍼에 데이터를 조금씩 모았다가 한꺼번에 내보내거나, 데이터를 한 번에 많이 받아 조금씩 내보내는 방법 (일종의 데이터 댐)
장치 컨트롤러의 내부 구조
- 데이터 레지스터: CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터. 버퍼 역할을 한다. 주고 받는 데이터가 많은 입출력장치에서는 RAM을 사용하기도 한다.
- 상태 레지스터: 입출력장치에 대한 상태 정보를 저장
- 제어 레지스터: 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장
장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고 받을 수 있게 하는 프로그램. 입출력장치를 연결하기 위한 소프트웨어적인 통로. (입출력장치를 동작시키는 방법을 제공)
프로그램 속 명령어로 입출력장치를 제어하는 방법
CPU가 장치 컨트롤러의 레지스터 값을 읽고 쓴다.
CPU가 장치 컨트롤러의 레지스터를 읽고 쓰는 방법
- 메모리 맵 입출력
메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간에서 나누어 쓰는 방법(ex. 1024개의 주소를 표현할 수 있을 때, 512개는 메모리 주소를, 나머지 512개는 장치 컨트롤러의 레지스터를 표현)- 고립형 입출력
메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 아예 분리하는 방법
제어 버스를 메모리 읽기/쓰기 선과 입출력장치 읽기/쓰기 선 두 개로 나눈다. 입출력장치에 접근할 때, 메모리에 접근하는 명령어와는 다른 입출력 명령어를 사용해야 입출력장치 읽기/쓰기 선이 활성화된다.
CPU가 장치 컨트롤러에 입출력 작업을 명령하면 장치 컨트롤러는 입출력장치를 제어하면서 입출력을 수행. 그동안 CPU는 다른 일을 한다.
장치 컨트롤러가 입출력 작업을 끝내고 CPU에게 인터럽트 요청 신호를 보내면 CPU는 하던 일을 백업하고 인터럽트 서비스 루틴을 실행한다.
인터럽트가 동시에 발생한 경우에는 어떻게 하나?
- 인터럽트 비트를 비활성화 한 경우
순차적으로 인터럽트를 처리- 인터럽트 비트가 활성화 되어 있거나 NMI(Non-Maskable Interrupt)가 발생한 경우
우선순위가 높은 인터럽트부터처리
최우선은 NMI, 나머지는 PIC(Programmable Interrupt Controller)를 이용해서 우선순위 판별
CPU를 거치지 않고 직접 메모리에 접근할 수 있는 입출력
DMA 입출력을 하기 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다.
다음 설명을 읽고 SRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰세요
- 주로 캐시 메모리로 활용됩니다. SRAM
- 주로 주기억장치로 활용됩니다. DRAM
- 대용량화하기 유리합니다. DRAM
- 집적도가 상대적으로 낮습니다. SRAM
다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우세요.
위쪽부터, 레지스터 - 캐시 메모리 - 메모리 - 보조기억장치