CH06 메모리와 캐시메모리

06-1 RAM의 특징과 종류

RAM의 특징

휘발성 저장장치: 전류가 차단되면 안에 있는 정보는 전부 사라짐.

RAM의 용량과 성능

램의 용량이 많을 수록 많은 프로그램을 메모리에 올릴 수 있음. 하지만 필요 이상은 더 이상 성능 향상 기대가 어려움.

RAM의 종류

DRAM

Dynamic RAM

동적램인데, 뭐가 동적이냐? -> 주기적으로 내부 축전기의 전류를 흘러주어 충전해야되서 동적램이란다.

->??? 램자체가 계속해서 전류를 공급해줘야 되는 거 아니야???

-> 전류 공급은 그냥 기본이고, 축전기 리프레시도 추가로 해줘야 된다는 것.



이렇게 불편해보여도 단점만 있는게 아니라, 오히려 장점이다.

일단 기본 소비 전류자체가 낮다. 리프레시와 별개로 소비전력자체는 SRAM대비 거의 없는 편

설계 최소 단위가 단순하여 집적도를 높이기 쉽다 == 대용량 늘리기가 용이하다

다만 SRAM 대비 속도는 느리다.

주기억장치로 사용된다

SRAM

Static RAM

전류만 공급하면 동적으로 뭔가 리프레시 같은걸 해줄 필요는 없는 램이라서 정적램이다.

속도는 빠르지만, 복잡성이 커서 집적도를 높이기 어려우니 용량을 늘리기 쉽지 않다.

캐시메모리에 사용된다

SDRAM

Synchronous DRAM

DRAM의 일종이다. 그런데 동기화 DRAM이다. 무엇과 동기화 된다는 것인가? CPU 클럭 신호와 동기화 된다는 의미이다. 비로소 현대 CPU와 작업하기 딱인 DRAM이 등장한 것.

DDR SDRAM

Double Data Rate SDRAM

2배 대역폭 SDRAM이다. SDRAM을 다른 말로 DDR SDRAM과 구별하여 Single Data Rate SDRAM 즉 SDR SDRAM 이라고도 한다.

DDR SDRAM's data rate == 2 * SDR SDRAM's data rate

DDR2 SDRAM's data rate == 2 * DDR SDRAM's data rate == 4 * SDR SDRAM's data rate

DDR3 SDRAM's data rate == 2 * DDR2 SDRAM's data rate == 8 * SDR SDRAM's data rate

DDR4 SDRAM's data rate == 2 * DDR3 SDRAM's data rate == 16 * SDR SDRAM's data rate

확인문제(과제)

1. 3번
2. DDR SDRAM, SRAM, DRAM, SDRAM
3. SRAM, DRAM, DRAM, SRAM
4. 2, 2



06-2 메모리의 주소 공간

물리 주소와 논리 주소

물리주소는 진짜 하드웨어 메모리에 실제로 프로그램이 실려 있는 주소이다. 명령어나 데이터들의 실제 주소이다.



논리주소는 프로그램과 CPU가 알고 있는 주소이다. 논리적으로 시작주소는 항상 0이고, 0을 기준으로 얼만큼 떨어져 있는지로 프로그램과 CPU는 불러오고 저장하려 한다



왜냐하면 프로그램 실행할때마다 다를건데 대체 프로그램이 무슨 수로 알고서 자기 자신 주소를 일일히 알고 있어야하는가. 그리고 그렇게 자기 자신의 주소가 굉장히 복잡한 주소라면 그게 가독성이 좋을까?



이미 앞서 공부했던 것 처럼, 베이스 레지스터라는 곳에 해당 프로그램의 물리적인 시작 주소를 저장하고 이걸 Offset으로 사용하며 변위주소지정방식 처럼 offset에 논리 주소를 더해가며 실제 메모리와 CPU는 소통하게 된다.



이를 담당하는 기관은 MMU(memory management unit)이다. 주소 버스를 반드시 거치게 되어 있는데 메모리에 접근하기 위해 주소버스를 거치기 직전에, 혹은 메모리로 부터 가져올때 주소버스로 부터 온 주소값은 전부 MMU를 통하여 offset이 더해지고 빼진다.

메모리 보호 기법

프로그램에는 일정 길이라는게 있다. 그 정해진 일정길이를 넘어가는 명령어를 한 프로그램에서 작동시키려고 하면, 해당 명령은 일단 인터럽트 트랩에 걸리게 되며, 오차가 있다면 다시 계산하여 정상 작동 시키고, 만약 아니고 치명적이라면, 프로그램은 뻗을것이다.

그 정해진 일정길이값은 한계레지스터에 저장된다.

확인 문제

1. 3번
2. 3번
3. 1번
4. 한계 레지스터, 베이스 레지스터



06-3 캐시 메모리

저장 장치 계층 구조

CPU에 가까울 수록 빠르고, 비싸고, 용량이 작다.

CPU에 멀 수록 느리고, 싸고, 용량이 크다

캐시 메모리

레지스터 다음으로 가장 CPU와 가까운 녀석이다. 실제 역할도 메모리 역할을 한다.

CPU는 바로 항상 메모리에 접근하지 않고, 캐시 메모리에 자기가 찾는 데이터가 있는지를 항상 먼저 조회하고 있다면 캐시메모리를 사용한다



일반적으로 L1, L2, L3 로 구분하며, 해당 녀석들은 빠른 순서이자 CPU에 가까운 순서이다. L1, L2는 코어 내부에 있고, L3는 코어 외부에서 멀티 코어들이 전부 사용가능한 공토 공간으로 사용되는 형태를 일반적으로 취한다.

참조 지역성 원리

첫째, CPU는 최근에 접근했던 메모리 공간에 다시 접근한다.
둘째, CPU는 접근한 메모리 공간 근처 주소인 이전 혹은 이후 주소에 접근한다.

위 두가지 원리에 입각하여 캐시 메모리에 올라올 데이터들이 정해진다. 현대 CPU의 캐시 적중률은 85프로 이상이다.

확인 문제(과제)

1. 레지스터, 캐시 메모리, 메모리, 보조기억장치
2. 4번


CH07 보조기억장치

07-1 다양한 보조기억장치

하드 디스크 구조

HDD: Hard Disk Drive

자기 디스크: magnetic disk



플래터: platter. 내부의 원판. 양면에 데이터가 기록되고 보통은 플래터가 여러장이 들어있음.

스핀들: spindle. 플래터를 회전시키는 장치

헤드: 플래터 한 면당 하나씩 위치하여 해당 면의 데이터를 기록하고 읽어들일 수 있음

디스크암: 헤드의 깊이를 컨트롤하기 위한 장치

트랙: 센터부터 가장자리까지 일정 두께의 원들이 모여 플래터 원판을 만드는데 이런 원 하나가 트랙

섹터: 최소 데이터 저장 단위 공간. 트랙의 일부분을 담당. 섹터가 여러개가 모여 트랙을 이룸

실린더: 플래터 양면, 그리고 다른 플래터들 전부 같은 xy변위의 트랙들이 존재할것. 그런 트랙들을 묶어서 실린더라고 함. 연속된 데이터를 저장할때는 일단 실린더 단위로 묶여서 연달아 저장됨. 그래야 디스크암의 탐색 운동을 줄일 수 있음.

탐색시간: seek time. 디스크암이 헤더를 움직이는 시간. 찾고자 하는 트랙에 맞게 헤더를 위치시킴

회전지연: rotational latency. 플래터를 회전시켜 찾고자하는 섹터에 헤더를 위치시키는 시간

전송시간: transfer time. 실제 읽어들여서 cpu까지 도달하는 시간



다중 헤드 디스크: multiple head disk. 트랙별로 헤드가 위치한다. 예를들어 플래터 하나당 트랙이 3개라면 한 면당 3개. 플래터가 8장이면, 3*8*2 = 48 양면이니까. 이렇게 되면 seek time이 없어지게되고 회전지연만 남게 된다. 고정 헤드 디스크(fixed head disk)라고도 함.

단일 헤드 디스크: single head disk. 디스크암이 움직이며 트랙별로 헤드를 이동시킴. 이동 헤드 디스크라고도함(movable head disk)


플래시 메모리

usb, sd카드, ssd, rom 등 다양한 구간에서 사용 중

셀: cell. 플래시 메모리에서 데이터를 저장하는 가장 작은 단위. SLC(single level cell) MLC(multiple level cell) TLC(triple level cell) 등을 나눌때 cell을 어떻게 설계하냐에 따라서 설계가 달라진다

SLC는 한 cell이 1bit를 표현, 0과 1 총 2가지 212^1 MLC는 2bit. TLC는 3bit이다. SLC가 가장 용량을 늘리기 어렵고, TLC가 용량을 늘리기 쉽다.



cell들이 모여 페이지page를 이루고, 페이지가 모여 블록block을 이루고, 블록이 모여 플레인plane을 이루고, 플레인이 모여 다이die를 이룬다.

읽기 쓰기의 최소 단위가 페이지이다.

삭제의 최소 단위는 블록이다.

페이지는 총 3가지 상태를 가진다. free, valid, invalid

free: 자유롭게 읽고 쓰고 할 수 있는 상태이다. 비점유 상태.

valid: 유효한 데이터가 페이지를 차지하고 있는 상태.

invalid: 데이터가 있긴한데, 쓰레기 데이터가 차지하고 있는 상태.


데이터 교체 방법

총 4개의 페이지를 담을 수 있는 블록이 있다고 했을때 A B C 가 순서대로 들어가 있는 상황. 이때 A를 변경하여 A'로 만드는 방법은 A를 invalid 상태로 만들어 버리고 남은 페이지에 A'를 추가하여 A' B C를 저장하는 블록으로 만드는 방법을 취한다.

A페이지를 직접 지울 수 없다. 왜냐하면 삭제의 단위는 블록이기 때문

하지만 이렇게 되면 용량을 실제 사용도 안하는 데이터들이 너무 많이 차지하게 됨.

그래서 가비지 컬렉터라는 기능을 이용하여. 블록을 검사하여 Valid 페이지만 살려서 따로 복사한뒤에 이전 블록을 비로소 삭제해버리는 기능을 자동으로 제공하도록 발전됨.


확인 문제

1. 플래터,스핀들,헤드
2. 2번



07-2 RAID

RAID의 정의

Rebundent Array of Independent Disks: 복수 배열 독립 디스크

여러개의 디스크로 커다란 하나의 디스크를 구성하는 방법

가격이 저렴할 뿐만 아니라, 읽고 쓰기 행위 자체를 여러개가 분산해서 담당하게 되기때문에 성능향상 효과도 있음

RAID의 종류

RAID0

진짜 연속된 데이터가 있으면 분산된 만큼 하나씩 분산해서 쓰고 읽는 방법. 가장 단순하고, 가장 군더더기 없이 읽고 씀. 하지만 디스크 하나라도 고장나면 데이터가 손실되게됨.

RAID1

RAID0를 2개로 복제하여 복사본을 항상 쓰는 방법. 디스크 중 하나가 고장 나도 복제본 디스크가 있기 때문에 안정성 확보. 그런데 그만큼 용량은 비효율적.

RAID4

연속된 데이터들을 RAID0처럼 분산 저장하는건 맞는데 이때 패리티 정보를 담는 전용 디스크를 두는 방법. 이 패리티 데이터로 인해 다른 디스크에 저장된 데이터에 오류는 없는지 체크가능하고, 복구도 가능함.

하지만, 패리티 정보를 누적하여 만들기 위해서 다른 디스크에 데이터 쓰기가 이뤄질때 마다 한번씩 페리티 정보도 써야하기 때문에 패리티 디스크에 과부하가 걸리는 구조.

RAID5

패리티 디스크에 과부하가 걸리는 구조를 깨기 위해. 모든 디스크가 데이터를 저장하는 역할 뿐만아니라 분산해서 패리티 정보를 저장하는 방식.

RAID6

패리티 데이터 자체에대한 복구까지 고려된 방식. 각기 다른 디스크에 같은 패리티 데이터를 복제하여 저장하도록 담당시킨다. 당연히 쓰기에 더 많은 자원이 든다.

확인 문제

1. 2번
2. 3번
3. RAID6



CH08 입출력장치

08-1 장치 컨트롤러와 장치 드라이버

장치 컨트롤러

다양한 여러 장치들은 각자의 속도, 처리량, 요구 데이터 등이 전부 다르기 때문에 이걸 CPU가 각 장치마다 맞춤형으로 맞춰 줄 수가 없다. 그래서 중간 다리 역할을 하는 녀석이 장치 컨트롤러이다.

장치 컨트롤러를 그러기 위해 기본적으로 저장 장치가 필요하다. CPU에 보낼 데이터, 지금 장치의 상태 등을 저장해야 되기 때문임. 장치 컨트롤러 내부에는 데이터 레지스터, 상태 레지스터, 제어 레지스터가 있음

데이터 레지스터: 입출력 장치가 CPU에 보내고 싶은 데이터를 모아 놓는 공간. 출력의 경우에는 그 반대

상태 레지스터: 입출력 장치가 대기 상태인지, 아직 막 작업 중인 상태인지 등을 저장

제어 레지스터: CPU가 입출력 장치에 보낸 명령을 저장하는 공간

장치 드라이버

장치 컨트롤러가 CPU와 다양한 입출력 장치들이 서로 소통하기 위한 하드웨어적 장치였다면, 장치 드라이버는 중개 소프트웨어이다.

OS가 기본적으로 장치 드라이버를 인식하여 설치해야하며, 설치가 안되었다면, 그 어떤 입출력 장치도 소통할 수 없다.

확인 문제

1. 1번, 3번
2. 2번
3. 장치 컨트롤러, 프로그램
4. 2번



08-2 다양한 입출력 방법

프로그램 입출력

프로그램이 입출력 장치를 컨트롤 하는 경우에 프로그램 입출력 방식이라고 함.

장치 컨트롤러 내부에는 CPU와 소통하기 위한 레지스터들이 있는데, 제어 레지스터에 명령어를 쓰고, 그 명령어로 입출력 장치가 인식하여 상태 레지스터가 바뀌고, 상태 레지스터가 바뀌면 CPU가 입출력 장치에 보내고 싶은 데이터가 써지거나 혹은 데이터 레지스터에 있는 데이터를 CPU가 읽는 방식으로 동작하게됨.

그런데 여기서 결국 CPU는 메인보드에 부착된 어떤 입출력 장치의 장치 컨트롤러의 레지스터에 접근하고자 할때는 고유한 주소값으로 접근해야 될텐데. 그 방법이 두 가지가 있음.

첫째, CPU는 메모리와 소통한다. 이런 메모리와 소통하는 기존 방식과 다르지 않은 명령어와 주소로 입출력 장치와 소통하는 memory mapped I/O 방식이다. 메모리 일부 공간에 입출력 장치 레지스터의 주소랑 메핑된 공간을 할당하여, 마치 그 공간이 장치 컨트롤러의 공간인냥 사용하는 방법

둘째, 메모리에 접근하는 방법은 시스템 버스의 데이터 버스, 제어버스, 주소버스 를 이용하여 필요할때 메모리에 접근하는 방식이다. 이것처럼 입출력 장치들을 묶어서 소통할 수 있는 버스를 입출력장치 버스를 둠으로 써 모든 입출력 장치에 접근하는 방법을 뚫는 방법. 이는 메모리와 소통할때 쓰이는 일반적인 명령어 집합이 아닌 다른 명령어 특히 다른 오퍼랜드를 사용 할 수 밖에 없는 방식이다. 이를 isolated I/O 고립형 입출력 방식이라고 한다.

인터럽트 기반 입출력

프로그램이 인터럽트를 발생시킬 수도 있고, 하드웨어가 인터럽트를 발생시킬 수도 있다. 하여간 인터럽트를 통해 CPU가 클럭 신호마다 체크하여 입출력 장치와 적절한 소통을 하는 방식이다.

그런데 입출력 장치가 한두개도 아니고, 동시 다발적으로 특히 같은 타이밍에 CPU에 마구 인터럽트를 던져 놓는 상황은 충분히 발생한다. 이를 컨트롤하기 위해 PIC Programmable Interrupt Controller 라는 하드웨어가 메인보드에 있어서 CPU에게 전달될 인터럽트들을 제어하는 중개 역할을 한다.

항상 과장되게 극단적으로 생각해야한다. 입출력장치 하드웨어는 수백개가 존재할 수 있다. 이를 PIC하나가 감당하게 하는 설계를 하지 않는다. PIC는 상위 PIC와 연결되어 어떤 하위 입출력 장치 그룹들의 인터럽트들을 우선 처리할지 등을 또 컨트롤하는 구조를 취한다.

DMA 입출력

Direct Memory Access Controller라는 하드웨어를 통하여 입출력장치가 메모리에 접근해야할때 CPU가 두번 세번 일하는걸 방지한다.

CPU의 부담을 덜어서 간단한 단순 동작을 대신 처리하게 하는 장치이다.

CPU는 DMA 컨트롤러에 처리해야할 명령들을 전달하고, 해당 명령을 이용하여 입출력장치와 소통, 제어 레지스터, 상태 레지스터, 데이터 레지스터를 모두 사용한 결과가 완료되면, 그제서야 CPU에 일처리 다했어요 인터럽트만을 CPU에게 쏜다. CPU는 다른 복잡한 작업을 하는 동안 입출력 장치 동작 정도는 DMA 컨트롤러가 대신해주는 것

입출력 버스

DMA 뿐만 아니라, 입출력 장치가 무언가를 하여 transfer 즉 통신을 할때는 반드시 메인보드의 버스를 이용해야 한다. 그런데 버스는 고속도로가 아닌 기차 선로여서 한번에 한 장치만 점유할 수 있는 구조이다.

만약 입출력 버스라는게 없다면, 시스템 버스를 사용해야되어 CPU가 제대로 일을 할 수가 없게 된다.

그래서 등장한게 입출력버스이고, 대표적인건 PCI 버스가 있다. Peripheral Component Interconnect 그 발전형인 PCI Express PCIe 버스가 현재 주류이다.

확인 문제

1. 2번
2. A 다음 B
3. 3번
4. 메모리 맵 입출력 방식
5. 고립형 입출력 방식



profile
난민

0개의 댓글

관련 채용 정보