컴퓨터의 네 가지 핵심 부품 중 메모리, 보조기억장치, 입출력장치에 대해 알아가는 시간이다.
우리가 흔히 "메모리"라고 부르는 것은 주기억장치 RAM과 ROM 중 RAM을 의미한다.
RAM은 Random Access Memory의 약자로, 이곳에는 실행할 프로그램의 명령어와 데이터가 저장된다.
실행하고자 하는 프로그램이 보조기억장치에 있다면 이를 RAM으로 복사하여 저장한 뒤 실행.
RAM 용량이 충분히 크다면 보조기억장치에서 더 많은 데이터를 가져와 저장해둘 수 있다.
따라서 RAM 용량이 클수록 데이터를 가져오는 통신 횟수를 줄일 수 있다.
다만, 필요 이상으로 커졌을 경우에는 더 늘려도 크게 달라지지 않는다.
RAM은 크게 네 가지 종류가 있다.
더 알아보기
프로그램이 새로 적재되고 또 삭제되는 과정에서 프로그램은 매번 다른 위치에 적재되며
메모리에 저장된 정보는 시시각각 변화한다.
이런 상황에서 CPU와 실행중인 프로그램은 무엇이 어디에 저장되어 있는지 알기 어려워
실제 메모리가 저장된 물리 주소 외에도 논리 주소라는 개념을 사용한다.
논리 주소와 물리 주소 간의 변환이 이루어져야 CPU와 메모리가 소통할 수 있다.
이에 필요한 것이 메모리 관리 장치(MMU) Memory Management Unit.
MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환.
그런데 만약 논리 주소가 프로그램이 차지하는 메모리 공간의 범위를 벗어난다면
다른 프로그램의 데이터를 훼손하는 결과가 발생할 것이다.
이를 방지하기 위해 한계 레지스터를 통해 논리 주소의 범위를 제한한다.
CPU는 메모리에 접근하기 전에 접근하고자 하는 논리 주소가 한계 레지스터 값보다 작은지 항상 검사.
만약 한계 레지스터 값보다 큰 값에 접근하려고 한다면 인터럽트(트랩) 발생.
더 알아보기
빠른 속도와 큰 용량은 양립하기 어렵다.
따라서 컴퓨터는 속도와 비용이 다른 다양한 저장 장치를 이용한다.
컴퓨터의 저장장치를 CPU에 얼마나 가까운가를 기준으로 나타낸 것을
저장 장치 계층 구조 memory hierarchy 라고 하며, 다음과 같이 나타낼 수 있다.
CPU는 프로그램 실행 과정에서 메모리에 빈번하게 접근해야 하는데 메모리에 접근하는 속도가 느리다.
CPU 연산 속도보다 느린 메모리 접근 속도를 보완하기 위해 캐시 메모리 cache memory 를 사용할 수 있다.
때로는 L1 캐시를 명령어만 저장하는 L1I 캐시와 데이터만 저장하는 L1D 캐시로 분리하기도 하는데
이와 같은 캐시를 분리형 캐시 split cache 라고 한다.
캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다.
캐시 메모리는 참조 지역성의 원리 locality of reference, principle of locality 에 따라
가져올 메모리를 결정한다.
더 알아보기
하드 디스크 HDD; Hard Disk Drive 는 자기적인 방식으로 데이터를 저장하는 보조기억장치이다.
자기 디스크 magnetic disk 의 일종으로, 플래터, 스핀들, 헤드, 디스크 암으로 구성된다.
하드 디스크가 저장된 데이터에 접근하는 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉜다.
참조 지역성을 높이면 탐색 시간 및 회전 지연을 개선할 수 있다.
하드 디스크 외에도 플래시 메모리 flash memory 도 보조기억장치에 많이 사용된다.
플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반 저장 장치이다.
보조기억장치 외에도 다양한 곳에 널리 사용되며,
USB 메모리, SD 카드, SSD 등이 플래시 메모리에 포함된다.
기반 회로에 따라 NAND 플래시 메모리 또는 NOR 플래시 메모리로 구분되며,
보조기억장치로 사용되는 플래시 메모리는 NAND 플래시 메모리다.
플래시 메모리에 데이터를 저장하는 가장 작은 단위는 셀 cell 이며
하나의 세에 몇 비트를 저장할 수 있느냐에 따라 플래시 메모리의 종류가 나뉜다.
셀들이 모이면 페이지 page,
페이지들이 모이면 블록 block,
블록들이 모이면 플레인 plane,
플레인들이 모이면 다이 die 가 된다.
플래시 메모리의 읽기/쓰기는 페이지 단위로 이루어지지만
삭제는 블록 단위로 이루어진다.
페이지는 세 가지 상태를 가질 수 있다.
데이터를 수정하고자 할 땐 해당 데이터를 Invalid 상태로 만들고 수정된 데이터를 새로 저장한다.
이 때, Invalid 상태인 페이지는 쓸데없이 공간을 차지하고 있는데
가비지 컬렉션 garbage collection 기능을 통해
유효한 페이지만 새로운 블록으로 복사한 뒤 기존 블록을 삭제함으로써 공간을 정리할 수 있다.
더 알아보기
정보량이 많고 민감한 정보도 많아 안전하게 관리할 필요가 있을 때
RAID Redundant Array of Independent Disks 를 사용할 수 있다.
RAID는 데이터의 안전성 혹은 높은 성능을 위해
여러 개의 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술이다.
주로 하드 디스크와 SSD를 사용하여 구현한다.
RAID를 구성하는 방법을 RAID 레벨이라고 하며
대표적으로 RAID 0, 1, 4, 5, 6이 있고, 그로부터 파생된 RAID 10, RAID 50 등이 있다.
가장 대중적인 RAID 레벨 몇 가지를 알아보도록 하겠다.
각 RAID 레벨마다 장단점이 있으므로 상황에 따라 최적의 RAID 레벨을 선택하여 사용한다.
더 알아보기
입출력장치는 크게 두 가지 이유에서 CPU, 메모리보다 다루기 까다롭다.
따라서 입출력장치는 컴퓨터에 직접 연결되지 않고
장치 컨트롤러 device controller 라는 하드웨어를 통해 연결된다.
이것은 입출력 제어기 I/O controller, 입출력 모듈 I/O module 등으로도 불리며
다음과 같은 역할을 수행한다.
장치 컨트롤러 내부를 간략하게 도식화하면 다음과 같다.
경우에 따라서는 상태 레지스터와 제어 레지스터의 역할은 하나의 레지스터가 수행하기도 한다.
새로운 장치를 컴퓨터에 연결하면 장치 드라이버 device driver 를 설치해야 하는데,
이는 장치 컨트롤러의 동작을 감지하고 제어함으로써
장치 컨트롤러가 컴퓨터 내부와 정보를 주고 받을 수 있게 하는 프로그램이다.
더 알아보기
장치 컨트롤러는 CPU와 정보ㄹ 주고 받기 위해
프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력 등의 방법을 이용한다.
프로그램 입출력 programmed I/O 은 기본적으로 프로그램 속 명령어로 입출력장치를 제어하는 방법이다.
프로그램 속 명령어를 실행하다 입출력 명령어를 만나면 장치 컨트롤러와 상호작용하며 입출력 작업 수행.
CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.
장치 컨트롤러 속 레지스터를 사용하기 위해 사용하는 방식은 크게 두 가지가 있다.
인터럽트 기반 입출력 interrupt-driven I/O 은 인터럽트를 기반으로 입출력을 수행하는 방법이다.
서로 다른 입출력장치로부터 인터럽트가 전달된다면 우선순위에 따라 처리한다.
우선순위를 반영하여 다중 인터럽트를 처리하기 위해 많은 컴퓨터는
프로그래머블 인터럽트 컨트롤러(PIC) Programmable Interrupt Controller 를 사용하는데,
이것은 여러 장치 컨트롤러에 연결되어 하드웨어 인터럽트 요청들의 우선순위를 판별한 뒤
CPU에 지금 처리해야 할 하드웨어 인터럽트는 무엇인지 알려준다.
무시할 수 없는 인터럽트(NMI) Non-Maskable Interrupt 의 경우 우선순위가 가장 높아
우선순위 판별이 불필요하기 때문에 PIC를 거치지 않고 처리된다.
DMA Direct Memory Access 는 CPU 부담을 줄이기 위해
입출력장치와 메모리가 CPU를 거치지 않고 상호작용 할 수 있도록 하는 방법이다.
이를 위해 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다.
그런데 시스템 버스는 공용이기에 CPU와 DMA 컨트롤러가 시스템 버스를 동시에 사용할 수 없다.
따라서 DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을 때 조금씩 이용하거나
일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 집중적으로 이용한다.
DMA에 의해 CPU가 시스템 버스를 이용하지 못하는 문제를 완화하기 위해
DMA 컨트롤러와 장치 컨트롤러를 입출력 버스 I/O bus 라는 별도의 버스에 연결하기도 한다.
현대 대부분 컴퓨터에는 입출력 버스가 있으며,
입출력 버스에는 PCI Peripheral Component Inteconnect 버스, PCI Explress 버스 등이 있다.
더 알아보기
이번 주 미션
- 기본 미션 | p. 185의 확인 문제 3번, p. 205의 확인 문제 1번 풀고 인증하기
- 선택 미션 | Ch.07(07-1) RAID의 정의와 종류를 간단히 정리해 보기
미션은 P.185의 3번 문제와 P.205의 1번 문제뿐이지만, 이왕 학습하고 확인 문제를 푸는 거 다 풀어보자.
P.184~185 [06-1 | RAM의 특징과 종류] 확인 문제
- RAM에 대한 설명 중 옳지 않은 것을 고르세요.
① RAM은 휘발성 저장 장치입니다.
② DRAM은 시간이 지나면 점차 데이터가 사라지는 RAM입니다.
③ SRAM은 흔히 주기억장치, 즉 메모리로 사용됩니다. → 메모리로 사용되는 건 DRAM, SRAM은 주로 캐시 메모리.
④ RAM이 크면 많은 프로그램을 동시에 빠르게 실행하는 데 유리합니다.
- 다음 보기에 있는 RAM의 종류를 옳게 짝지어 써 보세요.
[보기| DRAM, SRAM, SDRAM, DDR SDRAM]
- 대역폭을 두 배 넓힌 SDRAM [① DDR SDRAM ]
- 시간이 지나도 저장된 데이터가 사라지지 않는 RAM [② SRAM ]
- 데이터의 소멸을 막기 위해 일정 주기로 데이터를 재활성화해야 하는 RAM [③ DRAM ]
- 클럭과 동기화된 DRAM [④ SDRAM ]
- 다음 설명을 읽고 SRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰세요.
[보기| SRAM, DRAM]
- 주로 캐시 메모리로 활용됩니다. [① SRAM ]
- 주로 주기억장치로 활용됩니다. [② DRAM ]
- 대용량화하기 유리합니다. [③ DRAM ]
- 집적도가 상대적으로 낮습니다. [④ SRAM ]
(요것이 이번주 기본 미션!!)
(초판의 경우 문제가 조금 이상한데 저자 깃허브에서 수정된 문제를 확인할 수 있다.)
- 빈칸에 알맞은 말을 차례대로 써넣으세요.
"DDR3 SDRAM은 DDR2 SDRAM에 비해 대역폭이 [① 2 ] 배 넓은 RAM입니다.
DDR2 SDRAM은 DDR SDRAM에 비해 대역폭이 [① 2 ] 배 넓은 RAM입니다."
P.194~195 [06-2 | 메모리의 주소 공간] 확인 문제
- 주소와 관련된 설명으로 옳은 것을 고르세요.
① 실행되는 프로그램은 항상 같은 메모리 주소에 적재됩니다. → 적재할 때마다 달라진다.
② 논리 주소와 물리 주소의 구분은 의미가 없습니다. → 그 구분이 프로그램들을 독립적인 메모리를 가진 것처럼 사용하게 한다.
③ 프로그램이 실행될 때마다 다른 주소에 적재될 수 있습니다.
④ CPU가 이해하는 주소는 물리주소 입니다. → CPU가 이해하는 건 논리 주소.
- 논리 주소와 물리 주소에 대한 설명 중 옳지 않은 것을 고르세요.
① 실행되는 프로그램과 CPU는 메모리의 물리 주소를 알지 못합니다.
② MMU는 논리 주소를 물리 주소로 변환합니다.
③ 물리 주소는 모든 프로그램의 시작 주소를 0번지로 간주합니다. → 그건 논리 주소.
④ 명령어 속 주소는 논리 주소입니다.
- MMU에 대한 설명으로 옳은 것을 고르세요.
① MMU는 논리 주소를 물리 주소로 변환해 줍니다.
② MMU는 대용량 저장 장치 중 하나입니다. → 여기엔 아무것도 저장할 수 없다.
③ MMU 없이도 물리 주소와 논리 주소 간의 변환이 가능합니다. → 그랬다면 이 장치는 왜 있을까.
④ MMU는 컴퓨터가 부팅이 될 때 한 번만 사용됩니다. → 그 뒤로는 어떻게 변환하려고.
- 다음 그림은 논리 주소가 물리 주소로 변환되는 과정을 나타냅니다. 다음 빈칸에 알맞은 단어ㄹ 쓰세요.
[보기| 한계 레지스터, 베이스 레지스터, 플래그 레지스터, 명령어 레지스터]
① 한계 레지스터
② 베이스 레지스터
P.205 [06-3 | 캐시 메모리] 확인 문제
- 다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우세요.
[보기| 메모리, 보조기억장치, 캐시 메모리, 레지스터]
① 레지스터
② 캐시 메모리
③ 메모리
④ 보조기억장치(요것이 이번주 기본 미션!!)
- 캐시 메모리와 관련된 설명 중 옳지 않은 것을 고르세요.
① 캐시 메모리는 CPU가 사용할 법한 데이터를 저장합니다.
② 캐시 메모리는 참조 지역성의 원리에 입각해 데이터를 가져와 저장합니다.
③ 캐시 메모리는 메모리와 CPU 사이에 위치합니다.
④ 캐시 적중률이 높으면 캐시 메모리의 성능이 떨어집니다. → 성능이 올라간다.
P.219 [07-1 | 다양한 보조기억장치] 확인 문제
- 보기는 하드 디스크의 구성 요소입니다. 다음 물음에 알맞은 답을 보기에서 골라 써 보세요.
[보기| 플래터, 스핀들, 헤드, 디스크 암]
- 하드 디스크에서 데이터는 어디에 저장되나요? [① 플래터 ]
- 하드 디스크의 플래터를 돌리는 구성 요소는 무엇인가요? [② 스핀들 ]
- 하드 디스크에 저장된 데이터를 읽고 쓰는 구성 요소는 무엇인가요? [③ 헤드 ]
- SLC, MLC, TLC 타입에 대해 옳지 않은 것을 고르세요.
① SLC 타입은 MLC 타입보다 읽고 쓰는 속도가 빠릅니다.
② TLC 타입은 MLC 타입보다 읽고 쓰는 속도가 빠릅니다. → 그 반대.
③ MLC 타입은 SLC 타입보다 가격이 저렴합니다.
④ TLC 타입은 MLC 타입보다 가격이 저렴합니다.
P.228~229 [07-2 | RAID의 정의와 종류] 확인 문제
- RAID에 대한 설명으로 옳지 않은 것을 고르세요.
① RAID는 여러 보조기억장치들을 마치 하나의 장치처럼 사용하는 기술입니다.
② RAID를 구성하지 않아도 보조기억장치는 영구히 사용할 수 있습니다. → 반대로 RAID를 구성해도 영구히 사용 불가.
③ RAID를 통해 보조기억장치들의 성능을 높일 수 있습니다.
④ RAID를 통해 데이터를 안전하게 보관할 수 있습니다.
- RAID 0과 관련한 설명으로 옳은 것을 고르세요.
① RAID 0은 하나의 물리적인 보조기억장치만을 사용하는 방식입니다.. → 그건 RAID가 아님.
② RAID 0은 안전한 백업이 가능한 RAID 구성 방식입니다. → 백업은 1부터 가능.
③ RAID 0은 데이터를 단순히 병렬적으로 분산하여 저장하는 방식입니다.
④ RAID 0은 CPU 구성 방식입니다. → 보조기억장치 구성 방식.
- 다음 그림과 같이 구성되는 RAID 레벨을 보기에서 고르세요.
[보기| RAID 0, RAID 1, RAID 4, RAID 5, RAID 6]
RAID 6
P.238~239 [08-1 | 장치 컨트롤러와 장치 드라이버] 확인 문제
- 컴퓨터 내부와 정보를 주고받기 위해 입출력장치가 장치 컨트롤러를 이용하는 이유로 옳은 것을 두 가지 고르세요.
① 입출력장치는 종류가 많아 주고 받는 정보의 규격화가 어렵기 때문입니다.
② CPU는 모든 입출력장치가 사용하는 데이터 형식들을 알고 있기 때문입니다. → 다 알지 못한다.
③ 일반적으로 입출력장치와 CPU 간에 전송률의 차이가 크기 때문입니다.
④ CPU와 입출력장치 사이에는 중개자가 필요하지 않기 때문입니다. → 그럼 왜 쓰냐.
- 장치 컨트롤러의 기능으로 옳지 않은 것을 고르세요.
① CPU 또는 입출력장치 간의 통신을 중개합니다.
② 전원이 꺼져도 대용량의 데이터를 저장합니다. → 그건 보조기억장치.
③ 입출력장치의 오류를 검출합니다.
④ 데이터 버퍼링을 통해 전송률 차이를 완화해 줍니다.
- 장치 드라이버와 관련한 설명으로 빈칸에 알맞은 말을 보기에서 찾아 써 보세요.
[보기| 메모리, 장치 컨트롤러, 프로그램, 하드웨어]
"장치 드라이버는 [① 장치 컨트롤러 ]가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 [② 프로그램 ]입니다."
- 장치 드라이버와 관련한 설명 중 옳은 것을 고르세요.
① 운영체제가 기본적으로 제공하는 장치 드라이버는 없습니다. → 그런 것도 있다.
② 컴퓨터가 장치 드라이버를 인식하고 실행할 수 있다면 해당 입출력장치의 사용이 가능합니다.
③ 컴퓨터가 장치 드라이버를 인식하고 실행할 수 없어도 해당 입출력장치의 사용이 가능합니다. → 그럼 장치 드라이버가 왜 필요하냐.
④ 장치 드라이버는 하드웨어입니다. → 소프트웨어. 하드웨어는 장치 컨트롤러.
P.255~256 [08-2 | 다양한 입출력 방법] 확인 문제
- 메모리 맵 입출력과 고립형 입출력에 관한 설명 중 옳지 않은 것을 고르세요.
① 메모리 맵 입출력은 메모리를 위한 주소 공간과 입출력장치 접근하기 위한 주소 공간을 하나의 주소공간으로 간주하는 입출력 방식입니다.
② 고립형 입출력 방식은 메모리의 주소 공간을 축소시키는 방법입니다. → 그건 매모 맵 입출력. 고립형의 경우 축소하지 않는다.
③ 매모리 맵 입출력 방식은 메모리와 입출력장치에 동일한 명령어로써 접근합니다.
④ 고립형 입출력은 분리된 주소 공간으로 메모리와 입출력장치를 관리하는 방식입니다.
- 다음 문장에서 A와 B 중 올바른 것을 선택하세요.
"인터럽트 A의 인터럽트 서비스 루틴을 실행하던 도중 우선순위가 더 높은 인터럽트 B가 발생했을 때 CPU는 인터럽트 [ A, B ]의 인터럽트 서비스 루틴을 잠시 멈추고, 인터럽트 [ A, B ]의 인터럽트 서비스 루틴을 실행합니다."
- DMA와 관련한 설명 중 옳지 않은 것을 고르세요.
① DMA 작업이 완료되면 DMA 컨트롤러는 CPU에게 인터럽트 요청을 보냅니다.
② DMA 컨트롤러와 CPU는 시스템 버스를 동시에 사용할 수 없습니다.
③ DMA 컨트롤러는 CPU를 거치고 메모리와 입출력장치 간의 데이터를 주고 받습니다. → 그럴 거면 DMA가 아니지.
④ DMA는 프로그램 입출력보다 CPU의 입출력 부담이 적습니다.
- 다음과 같이 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 입출력 방식을 무엇이라고 하나요?
메모리 맵 입출력
- 다음과 같이 메모리에 접근하기 위한 주소 공간과 입출력 장치에 접근하기 위한 주소 공간을 별도의 주소 공간으로 분리하는 입출력 방식을 무엇이라고 하나요?
고립형 입출력
RAID는 데이터의 안전성 혹은 높은 성능을 목적으로 사용하는,
여러 개의 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술이다.
구성 방법에 따라 레벨을 나누며, 다음은 가장 대중적인 RAID 레벨과 그 특징이다.
RAID 레벨 | 특징 |
---|---|
RAID 0 | 여러 개의 보조기억장치에 데이터를 단순히 나누어 저장; 오류 발생에 취약 |
RAID 1 | 문제 발생 시 복구를 위해 완전한 복사본을 만드는 미러링 사용; 데이터 대비 많은 공간 필요 |
RAID 4 | 오류 검출 및 복구를 위한 패리티로 보다 적은 공간으로 안전하게 보관; 패리티 저장하는 디스크 쓰기 빈번 |
RAID 5 | 패리티 디스크의 병목 현상을 완화하기 위해 패리티 정보 분산 저장 |
RAID 6 | 서로 다른 두 개의 패리티를 분산 저장하여 안전성 향상; 안전성을 더 높여야 할 때 사용 |
확인 문제에서 "보기를" 언급할 때
어디에서는 아무것도 안붙이고 "보기"라고 하고
어디에서는 "〈보기〉"라고 한다는 것을 인지해버렸다.
일관성을 가지면 좋을텐데...라는 생각이 들지만 GitHub에 제보할 정도의 무언가는 아닌 것 같기도 하고.
교정/교열 외주에 대한 직업병으로서의 부작용인가...ㅋㅋ;;
이 글을 읽는 출판사 관계자 분들 중 교정/교열 의뢰를 맡기실 의향이 있으신 분은 제 메일ㄹ.....
해당 사항은 오탈자 제보하는 김에 같이 언급해두었다.